add Quarkus configuration and implement Student entity with repository and resource

This commit is contained in:
Jonas Hinterdorfer 2025-10-06 11:54:56 +02:00
parent a455575493
commit c54878a3cb
5 changed files with 149 additions and 28 deletions

27
pom.xml
View File

@ -21,8 +21,8 @@
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>${quarkus.platform.group-id}</groupId> <groupId>io.quarkus.platform</groupId>
<artifactId>${quarkus.platform.artifact-id}</artifactId> <artifactId>quarkus-bom</artifactId>
<version>${quarkus.platform.version}</version> <version>${quarkus.platform.version}</version>
<type>pom</type> <type>pom</type>
<scope>import</scope> <scope>import</scope>
@ -30,6 +30,19 @@
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
<repositories>
<repository>
<id>central</id>
<name>Maven Central</name>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
<repository>
<id>quarkus</id>
<name>Quarkus</name>
<url>https://maven.quarkus.io</url>
</repository>
</repositories>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>io.quarkus</groupId> <groupId>io.quarkus</groupId>
@ -39,6 +52,10 @@
<groupId>io.quarkus</groupId> <groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId> <artifactId>quarkus-arc</artifactId>
</dependency> </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-postgresql</artifactId>
</dependency>
<dependency> <dependency>
<groupId>io.quarkus</groupId> <groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId> <artifactId>quarkus-junit5</artifactId>
@ -55,12 +72,16 @@
<version>${lombok.version}</version> <version>${lombok.version}</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-orm</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<groupId>${quarkus.platform.group-id}</groupId> <groupId>io.quarkus.platform</groupId>
<artifactId>quarkus-maven-plugin</artifactId> <artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.platform.version}</version> <version>${quarkus.platform.version}</version>
<extensions>true</extensions> <extensions>true</extensions>

View File

@ -0,0 +1,22 @@
package org.acme;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import lombok.*;
import java.util.UUID;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor
@Getter
@Setter
@ToString
@EqualsAndHashCode
@Builder
@Entity
public class StudentEntity {
@Id
private UUID id;
private String firstName;
private String lastName;
}

View File

@ -0,0 +1,41 @@
package org.acme;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.persistence.EntityManager;
import jakarta.transaction.Transactional;
import java.util.Collection;
import java.util.UUID;
@ApplicationScoped
public class StudentRepository {
@Inject
EntityManager entityManager;
@Transactional
public UUID create (final StudentEntity student){
entityManager.persist(student);
return student.getId();
}
@Transactional
public void update( final StudentEntity student){
entityManager.merge(student);
}
public Collection<StudentEntity> findAll(){
return entityManager.createQuery("from StudentEntity s", StudentEntity.class).getResultList();
}
public StudentEntity findById(final UUID id){
return entityManager.find(StudentEntity.class, id);
}
@Transactional
public void delete (final StudentEntity student){
entityManager.remove(student);
}
}

View File

@ -1,46 +1,68 @@
package org.acme; package org.acme;
import jakarta.ws.rs.GET; import jakarta.inject.Inject;
import jakarta.ws.rs.POST; import jakarta.ws.rs.*;
import jakarta.ws.rs.Path; import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response;
import lombok.extern.slf4j.Slf4j;
import java.net.URI; import java.net.URI;
import java.util.HashMap; import java.util.Optional;
import java.util.Map;
import java.util.UUID;
@Path("api/v1/students") @Path("api/v1/students/")
@Produces(MediaType.APPLICATION_JSON)
@Slf4j
public class StudentResource { public class StudentResource {
@Inject
private final Map<String, Student> students = new HashMap<>(Map.of( StudentService studentService;
"0854bc12-842a-47c1-b3fe-10d08949fcc8", Student.builder().id("0854bc12-842a-47c1-b3fe-10d08949fcc8").firstName("John").lastName("Doe").build()));
@GET @GET
public Response find() { public Response find() {
return Response.ok(students.values()).build(); log.info(studentService.toString());
return Response.ok(studentService.findAll()).build();
} }
@GET @GET
@Path("{id}") @Path("{uuid}")
public Response findById(String id) { public Response findById(@PathParam("uuid") final String id){
final Student student = students.get(id); final Optional<Student> student = studentService.findById(id);
if (student != null) {
return Response.ok(student).build(); if (student.isEmpty()) {
} else {
return Response.status(Response.Status.NOT_FOUND).build(); return Response.status(Response.Status.NOT_FOUND).build();
} }
return Response.ok(student.get()).build();
} }
@POST @POST
public Response create(final Student student) { public Response create(final Student student){
try { if (student == null) {
student.setId(UUID.randomUUID().toString()); return Response.status(Response.Status.BAD_REQUEST).entity("Student cannot be null").build();
students.put(student.getId(), student);
return Response.created(new URI("/api/v1/students/" + student.getId())).build();
} }
catch (Exception e) { try{
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); final String id = studentService.create(student);
return Response.created(new URI("/api/v1/students/" + id)).build();
} catch (final Exception e) {
log.error("Error creating student", e);
return Response.serverError().entity(e.getMessage()).build();
} }
} }
@PUT
@Path("{uuid}")
public Response update(@PathParam("uuid") final String id, final Student student) {
if (student == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("Student cannot be null").build();
}
student.setId(id);
studentService.update(student);
return Response.ok().build();
}
@DELETE
@Path("{uuid}")
public Response delete(@PathParam("uuid") final String id){
studentService.delete(id);
return Response.noContent().build();
}
} }

View File

@ -0,0 +1,15 @@
# Quarkus datasource configuration for PostgreSQL
quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=schul-user-jonas
quarkus.datasource.password=Qsczjm123
quarkus.datasource.jdbc.url=jdbc:postgresql://ionas999.at:9234/schul-user-jonas
quarkus.hibernate-orm.schema-management.strategy=update
quarkus.datasource.jdbc.max-size=8
quarkus.datasource.jdbc.min-size=2
# Optional: show SQL statements in logs
quarkus.hibernate-orm.log.sql=true
# Optional: configure default schema if needed
# quarkus.datasource.schema=public
# Example custom property used in StudentService
service2.apiKey=your-api-key-here