diff --git a/pom.xml b/pom.xml
index 24d498f..4ed4365 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,8 +21,8 @@
- ${quarkus.platform.group-id}
- ${quarkus.platform.artifact-id}
+ io.quarkus.platform
+ quarkus-bom
${quarkus.platform.version}
pom
import
@@ -30,6 +30,19 @@
+
+
+ central
+ Maven Central
+ https://repo.maven.apache.org/maven2
+
+
+ quarkus
+ Quarkus
+ https://maven.quarkus.io
+
+
+
io.quarkus
@@ -39,6 +52,10 @@
io.quarkus
quarkus-arc
+
+ io.quarkus
+ quarkus-jdbc-postgresql
+
io.quarkus
quarkus-junit5
@@ -55,12 +72,16 @@
${lombok.version}
provided
+
+ io.quarkus
+ quarkus-hibernate-orm
+
- ${quarkus.platform.group-id}
+ io.quarkus.platform
quarkus-maven-plugin
${quarkus.platform.version}
true
@@ -135,4 +156,4 @@
-
\ No newline at end of file
+
diff --git a/src/main/java/org/acme/StudentEntity.java b/src/main/java/org/acme/StudentEntity.java
new file mode 100644
index 0000000..8d32b54
--- /dev/null
+++ b/src/main/java/org/acme/StudentEntity.java
@@ -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;
+}
diff --git a/src/main/java/org/acme/StudentRepository.java b/src/main/java/org/acme/StudentRepository.java
new file mode 100644
index 0000000..1747510
--- /dev/null
+++ b/src/main/java/org/acme/StudentRepository.java
@@ -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 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);
+ }
+
+
+}
diff --git a/src/main/java/org/acme/StudentResource.java b/src/main/java/org/acme/StudentResource.java
index eed0ebc..1870d11 100644
--- a/src/main/java/org/acme/StudentResource.java
+++ b/src/main/java/org/acme/StudentResource.java
@@ -1,46 +1,68 @@
package org.acme;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.POST;
-import jakarta.ws.rs.Path;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
+import lombok.extern.slf4j.Slf4j;
import java.net.URI;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
+import java.util.Optional;
-@Path("api/v1/students")
+@Path("api/v1/students/")
+@Produces(MediaType.APPLICATION_JSON)
+@Slf4j
public class StudentResource {
-
- private final Map students = new HashMap<>(Map.of(
- "0854bc12-842a-47c1-b3fe-10d08949fcc8", Student.builder().id("0854bc12-842a-47c1-b3fe-10d08949fcc8").firstName("John").lastName("Doe").build()));
+ @Inject
+ StudentService studentService;
@GET
public Response find() {
- return Response.ok(students.values()).build();
+ log.info(studentService.toString());
+ return Response.ok(studentService.findAll()).build();
}
@GET
- @Path("{id}")
- public Response findById(String id) {
- final Student student = students.get(id);
- if (student != null) {
- return Response.ok(student).build();
- } else {
+ @Path("{uuid}")
+ public Response findById(@PathParam("uuid") final String id){
+ final Optional student = studentService.findById(id);
+
+ if (student.isEmpty()) {
return Response.status(Response.Status.NOT_FOUND).build();
}
+
+ return Response.ok(student.get()).build();
}
@POST
- public Response create(final Student student) {
- try {
- student.setId(UUID.randomUUID().toString());
- students.put(student.getId(), student);
- return Response.created(new URI("/api/v1/students/" + student.getId())).build();
+ public Response create(final Student student){
+ if (student == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("Student cannot be null").build();
}
- catch (Exception e) {
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
+ try{
+ 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();
+ }
}
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index e69de29..ac4cbaf 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -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