diff --git a/pom.xml b/pom.xml index 4ed4365..cc32067 100644 --- a/pom.xml +++ b/pom.xml @@ -56,6 +56,10 @@ io.quarkus quarkus-jdbc-postgresql + + io.quarkus + quarkus-smallrye-openapi + io.quarkus quarkus-junit5 diff --git a/src/main/java/org/acme/StudentMapper.java b/src/main/java/org/acme/StudentMapper.java new file mode 100644 index 0000000..8eca353 --- /dev/null +++ b/src/main/java/org/acme/StudentMapper.java @@ -0,0 +1,31 @@ +package org.acme; + +import jakarta.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class StudentMapper { + + public Student toDto(StudentEntity entity) { + if (entity == null) { + return null; + } + + return Student.builder() + .id(entity.getId() != null ? entity.getId().toString() : null) + .firstName(entity.getFirstName()) + .lastName(entity.getLastName()) + .build(); + } + + public StudentEntity toEntity(Student dto) { + if (dto == null) { + return null; + } + + return StudentEntity.builder() + .id(dto.getId() != null ? java.util.UUID.fromString(dto.getId()) : null) + .firstName(dto.getFirstName()) + .lastName(dto.getLastName()) + .build(); + } +} diff --git a/src/main/java/org/acme/StudentRepository.java b/src/main/java/org/acme/StudentRepository.java index 1747510..7b1526d 100644 --- a/src/main/java/org/acme/StudentRepository.java +++ b/src/main/java/org/acme/StudentRepository.java @@ -37,5 +37,17 @@ public class StudentRepository { entityManager.remove(student); } + @Transactional + public void deleteById(final UUID id) { + int count = entityManager.createQuery("delete from StudentEntity s where s.id = :id") + .setParameter("id", id) + .executeUpdate(); + + if(count > 1){ + throw new RuntimeException(); + } + + } + } diff --git a/src/main/java/org/acme/StudentResource.java b/src/main/java/org/acme/StudentResource.java index 1870d11..c6835ce 100644 --- a/src/main/java/org/acme/StudentResource.java +++ b/src/main/java/org/acme/StudentResource.java @@ -35,6 +35,7 @@ public class StudentResource { } @POST + @Consumes(MediaType.APPLICATION_JSON) public Response create(final Student student){ if (student == null) { return Response.status(Response.Status.BAD_REQUEST).entity("Student cannot be null").build(); diff --git a/src/main/java/org/acme/StudentService.java b/src/main/java/org/acme/StudentService.java new file mode 100644 index 0000000..e0967e5 --- /dev/null +++ b/src/main/java/org/acme/StudentService.java @@ -0,0 +1,62 @@ +package org.acme; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +import java.util.*; +import java.util.stream.Collectors; + +@ApplicationScoped +public class StudentService { + + @Inject + StudentRepository studentRepository; + + @Inject + StudentMapper studentMapper; + + public Collection findAll() { + return studentRepository.findAll().stream() + .map(studentMapper::toDto) + .collect(Collectors.toList()); + } + + public Optional findById(final String id) { + if (id == null) { + return Optional.empty(); + } + try { + UUID uuid = UUID.fromString(id); + StudentEntity entity = studentRepository.findById(uuid); + return Optional.ofNullable(studentMapper.toDto(entity)); + } catch (IllegalArgumentException e) { + return Optional.empty(); + } + } + + public String create(final Student student) { + UUID uuid = UUID.randomUUID(); + student.setId(uuid.toString()); + StudentEntity entity = studentMapper.toEntity(student); + studentRepository.create(entity); + return uuid.toString(); + } + + public void update(final Student student) { + StudentEntity entity = studentMapper.toEntity(student); + studentRepository.update(entity); + } + + public void delete(final String id) { + if (id == null) return; + try { + UUID uuid = UUID.fromString(id); + StudentEntity entity = studentRepository.findById(uuid); + if (entity != null) { + studentRepository.delete(entity); + } + } catch (IllegalArgumentException e) { + // Invalid UUID, do nothing + } + } +} diff --git a/src/test/java/org/acme/StudentResourceTest.java b/src/test/java/org/acme/StudentResourceTest.java deleted file mode 100644 index f4834bb..0000000 --- a/src/test/java/org/acme/StudentResourceTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.acme; - - -import io.quarkus.test.junit.QuarkusTest; -import static io.restassured.RestAssured.*; - -import static org.hamcrest.Matchers.*; -import org.junit.jupiter.api.Test; - -@QuarkusTest -public class StudentResourceTest { - private static final String BASE_PATH = "/api/v1/students"; - - @Test - void getAll_shouldReturnOneElement() { - given().when().get(BASE_PATH).then().statusCode(200).body("size()", is(1)).body("[0].firstName", equalTo("John")).body("[0].lastName", equalTo("Doe")); - } -}