From 2c5d3ec88efea17ea3d1ef9f78ca3504216eb676 Mon Sep 17 00:00:00 2001 From: Georgios Andrinopoulos Date: Sun, 17 Apr 2022 17:11:46 +0300 Subject: [PATCH 1/2] Use only id for teams in developers service --- .../developers/consumer/TeamConsumer.java | 18 ++------ .../org/geoandri/developers/dao/TeamDao.java | 26 ----------- .../geoandri/developers/dto/DeveloperDto.java | 13 +++--- .../org/geoandri/developers/dto/TeamDto.java | 44 ++++++------------- .../org/geoandri/developers/entity/Team.java | 23 ---------- .../geoandri/developers/event/EventType.java | 2 +- .../geoandri/developers/event/TeamEvent.java | 20 ++++----- .../exception/DeveloperNotFoundException.java | 14 ++++++ .../exception/TeamNotFoundException.java | 14 ++++++ .../DeveloperNotFoundExceptionHandler.java | 22 ++++++++++ ...=> EntityPersistenceExceptionHandler.java} | 2 +- .../handler/TeamNotFoundExceptionHandler.java | 22 ++++++++++ .../developers/mapper/DeveloperMapper.java | 6 +-- .../developers/service/DeveloperService.java | 10 ++--- .../developers/service/TeamService.java | 4 -- .../migration/dev-prod/V1__create_schema.sql | 2 - .../db/migration/test/V1__create_schema.sql | 2 - .../migration/test/V2__import_test_data.sql | 11 +++-- .../developers/consumer/TeamConsumerTest.java | 6 +-- .../mapper/DeveloperMapperTest.java | 5 +-- .../resource/DeveloperResourceTest.java | 15 ++++--- .../org/geoandri/teams/event/TeamEvent.java | 24 +++++----- .../geoandri/teams/resource/TeamResource.java | 10 ++--- .../teams/resource/TeamResourceTest.java | 7 +-- 24 files changed, 152 insertions(+), 170 deletions(-) create mode 100644 developers-service/src/main/java/org/geoandri/developers/exception/DeveloperNotFoundException.java create mode 100644 developers-service/src/main/java/org/geoandri/developers/exception/TeamNotFoundException.java create mode 100644 developers-service/src/main/java/org/geoandri/developers/exception/handler/DeveloperNotFoundExceptionHandler.java rename developers-service/src/main/java/org/geoandri/developers/exception/handler/{TeamPersistenceExceptionHandler.java => EntityPersistenceExceptionHandler.java} (82%) create mode 100644 developers-service/src/main/java/org/geoandri/developers/exception/handler/TeamNotFoundExceptionHandler.java diff --git a/developers-service/src/main/java/org/geoandri/developers/consumer/TeamConsumer.java b/developers-service/src/main/java/org/geoandri/developers/consumer/TeamConsumer.java index 314d68c..ddaa38d 100644 --- a/developers-service/src/main/java/org/geoandri/developers/consumer/TeamConsumer.java +++ b/developers-service/src/main/java/org/geoandri/developers/consumer/TeamConsumer.java @@ -3,6 +3,7 @@ import io.smallrye.reactive.messaging.annotations.Blocking; import org.eclipse.microprofile.opentracing.Traced; import org.eclipse.microprofile.reactive.messaging.Incoming; +import org.geoandri.developers.dto.TeamDto; import org.geoandri.developers.entity.Team; import org.geoandri.developers.event.TeamEvent; import org.geoandri.developers.exception.EntityNotFoundException; @@ -33,14 +34,14 @@ public void consumeEvents(TeamEvent event) { switch (event.getEventType()) { case TEAM_CREATED: { try { - teamService.save(teamMapper.toTeam(event.getTeamDto())); + teamService.save(teamMapper.toTeam(new TeamDto(event.getTeamId()))); } catch (EntityPersistenceException e) { - LOGGER.warn("Error while persisting team {}. The error was: {}", event.getTeamDto(), e.getMessage()); + LOGGER.warn("Error while persisting team {}. The error was: {}", event.getTeamId(), e.getMessage()); } break; } case TEAM_DELETED: { - Team team = teamMapper.toTeam(event.getTeamDto()); + Team team = teamMapper.toTeam(new TeamDto(event.getTeamId())); try { teamService.delete(team.getId()); } catch (EntityNotFoundException e) { @@ -48,17 +49,6 @@ public void consumeEvents(TeamEvent event) { } break; } - case TEAM_UPDATED: { - Team team = teamMapper.toTeam(event.getTeamDto()); - try { - teamService.update(team); - } catch (EntityNotFoundException e) { - LOGGER.warn("Team {} could not be found.", team); - } catch (EntityPersistenceException e) { - LOGGER.error(e.getMessage()); - } - break; - } } } } diff --git a/developers-service/src/main/java/org/geoandri/developers/dao/TeamDao.java b/developers-service/src/main/java/org/geoandri/developers/dao/TeamDao.java index caa7b8d..0fd10ff 100644 --- a/developers-service/src/main/java/org/geoandri/developers/dao/TeamDao.java +++ b/developers-service/src/main/java/org/geoandri/developers/dao/TeamDao.java @@ -8,8 +8,6 @@ import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.PersistenceException; -import javax.persistence.Query; -import java.util.Optional; @ApplicationScoped public class TeamDao { @@ -38,32 +36,8 @@ public Team getTeam(long id) { throw new EntityNotFoundException(String.format("Team with id %s could not be found.", id)); } - public Team updateTeam(Team team) { - Team persistedTeam = getTeam(team.getId()); - persistedTeam.setName(team.getName()); - persistedTeam.setDescription(team.getDescription()); - try { - entityManager.merge(persistedTeam); - entityManager.flush(); - - return persistedTeam; - } - catch (PersistenceException e) { - throw new EntityPersistenceException(e.getMessage()); - } - } - public void deleteTeam(long id) { Team team = getTeam(id); entityManager.remove(team); } - - public Team findByName(String name) { - Query query = entityManager.createQuery("select t from Team t where t.name = :name"); - query.setParameter("name", name); - Optional team = query.getResultList().stream().findFirst(); - - return team.orElseThrow( - () -> new EntityNotFoundException(String.format("Team with name %s could not be found.", name))); - } } diff --git a/developers-service/src/main/java/org/geoandri/developers/dto/DeveloperDto.java b/developers-service/src/main/java/org/geoandri/developers/dto/DeveloperDto.java index 39613d0..29cf090 100644 --- a/developers-service/src/main/java/org/geoandri/developers/dto/DeveloperDto.java +++ b/developers-service/src/main/java/org/geoandri/developers/dto/DeveloperDto.java @@ -1,6 +1,7 @@ package org.geoandri.developers.dto; import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; public class DeveloperDto { @@ -9,8 +10,8 @@ public class DeveloperDto { @NotEmpty(message = "Developer's name is required.") private String name; - @NotEmpty(message = "Developer's team is required.") - private String team; + @NotNull(message = "Developer's teamId is required.") + private Long teamId; public long getId() { return id; @@ -28,11 +29,11 @@ public void setName(String name) { this.name = name; } - public String getTeam() { - return team; + public long getTeamId() { + return teamId; } - public void setTeam(String team) { - this.team = team; + public void setTeamId(long teamId) { + this.teamId = teamId; } } diff --git a/developers-service/src/main/java/org/geoandri/developers/dto/TeamDto.java b/developers-service/src/main/java/org/geoandri/developers/dto/TeamDto.java index aa7deb9..26db1a9 100644 --- a/developers-service/src/main/java/org/geoandri/developers/dto/TeamDto.java +++ b/developers-service/src/main/java/org/geoandri/developers/dto/TeamDto.java @@ -4,12 +4,12 @@ import java.util.Objects; public class TeamDto { - private long id; - @NotEmpty(message = "Team's name is required.") - private String name; + public TeamDto(long id) { + this.id = id; + } - private String description; + private long id; public long getId() { return id; @@ -19,41 +19,23 @@ public void setId(long id) { this.id = id; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - @Override - public String toString() { - return "TeamDto{" + - "id=" + id + - ", name='" + name + '\'' + - ", description='" + description + '\'' + - '}'; - } - @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; TeamDto teamDto = (TeamDto) o; - return id == teamDto.id && name.equals(teamDto.name) && Objects.equals(description, teamDto.description); + return id == teamDto.id; } @Override public int hashCode() { - return Objects.hash(id, name, description); + return Objects.hash(id); + } + + @Override + public String toString() { + return "TeamDto{" + + "id=" + id + + '}'; } } diff --git a/developers-service/src/main/java/org/geoandri/developers/entity/Team.java b/developers-service/src/main/java/org/geoandri/developers/entity/Team.java index ce6b243..fad1d73 100644 --- a/developers-service/src/main/java/org/geoandri/developers/entity/Team.java +++ b/developers-service/src/main/java/org/geoandri/developers/entity/Team.java @@ -9,11 +9,6 @@ public class Team { @Id private long id; - @NotEmpty - private String name; - - private String description; - public long getId() { return id; } @@ -22,28 +17,10 @@ public void setId(long id) { this.id = id; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - @Override public String toString() { return "Team{" + "id=" + id + - ", name='" + name + '\'' + - ", description='" + description + '\'' + '}'; } } diff --git a/developers-service/src/main/java/org/geoandri/developers/event/EventType.java b/developers-service/src/main/java/org/geoandri/developers/event/EventType.java index 6c1ea26..2384314 100644 --- a/developers-service/src/main/java/org/geoandri/developers/event/EventType.java +++ b/developers-service/src/main/java/org/geoandri/developers/event/EventType.java @@ -1,5 +1,5 @@ package org.geoandri.developers.event; public enum EventType { - TEAM_CREATED, TEAM_UPDATED, TEAM_DELETED + TEAM_CREATED, TEAM_DELETED } diff --git a/developers-service/src/main/java/org/geoandri/developers/event/TeamEvent.java b/developers-service/src/main/java/org/geoandri/developers/event/TeamEvent.java index e08808e..a041d5f 100644 --- a/developers-service/src/main/java/org/geoandri/developers/event/TeamEvent.java +++ b/developers-service/src/main/java/org/geoandri/developers/event/TeamEvent.java @@ -6,14 +6,14 @@ public class TeamEvent { private EventType eventType; - private TeamDto teamDto; + private long teamId; public TeamEvent() { } - public TeamEvent(EventType eventType, TeamDto teamDto) { + public TeamEvent(EventType eventType, long teamId) { this.eventType = eventType; - this.teamDto = teamDto; + this.teamId = teamId; } public EventType getEventType() { @@ -24,19 +24,19 @@ public void setEventType(EventType eventType) { this.eventType = eventType; } - public TeamDto getTeamDto() { - return teamDto; + public long getTeamId() { + return teamId; } - public void setTeamDto(TeamDto teamDto) { - this.teamDto = teamDto; + public void setTeamId(long teamId) { + this.teamId = teamId; } @Override public String toString() { return "TeamEvent{" + "eventType=" + eventType + - ", teamDto=" + teamDto + + ", teamId=" + teamId + '}'; } @@ -45,11 +45,11 @@ public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; TeamEvent teamEvent = (TeamEvent) o; - return eventType == teamEvent.eventType && teamDto.equals(teamEvent.teamDto); + return teamId == teamEvent.teamId && eventType == teamEvent.eventType; } @Override public int hashCode() { - return Objects.hash(eventType, teamDto); + return Objects.hash(eventType, teamId); } } diff --git a/developers-service/src/main/java/org/geoandri/developers/exception/DeveloperNotFoundException.java b/developers-service/src/main/java/org/geoandri/developers/exception/DeveloperNotFoundException.java new file mode 100644 index 0000000..7517f78 --- /dev/null +++ b/developers-service/src/main/java/org/geoandri/developers/exception/DeveloperNotFoundException.java @@ -0,0 +1,14 @@ +package org.geoandri.developers.exception; + +public class DeveloperNotFoundException extends RuntimeException { + public DeveloperNotFoundException() { + } + + public DeveloperNotFoundException(String message) { + super(message); + } + + public DeveloperNotFoundException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/developers-service/src/main/java/org/geoandri/developers/exception/TeamNotFoundException.java b/developers-service/src/main/java/org/geoandri/developers/exception/TeamNotFoundException.java new file mode 100644 index 0000000..5456dd9 --- /dev/null +++ b/developers-service/src/main/java/org/geoandri/developers/exception/TeamNotFoundException.java @@ -0,0 +1,14 @@ +package org.geoandri.developers.exception; + +public class TeamNotFoundException extends RuntimeException { + public TeamNotFoundException() { + } + + public TeamNotFoundException(String message) { + super(message); + } + + public TeamNotFoundException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/developers-service/src/main/java/org/geoandri/developers/exception/handler/DeveloperNotFoundExceptionHandler.java b/developers-service/src/main/java/org/geoandri/developers/exception/handler/DeveloperNotFoundExceptionHandler.java new file mode 100644 index 0000000..5469376 --- /dev/null +++ b/developers-service/src/main/java/org/geoandri/developers/exception/handler/DeveloperNotFoundExceptionHandler.java @@ -0,0 +1,22 @@ +package org.geoandri.developers.exception.handler; + +import org.geoandri.developers.exception.DeveloperNotFoundException; +import org.geoandri.developers.exception.error.ErrorMessage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +@Provider +public class DeveloperNotFoundExceptionHandler implements ExceptionMapper { + private static final Logger LOGGER = LoggerFactory.getLogger(DeveloperNotFoundExceptionHandler.class); + + @Override + public Response toResponse(DeveloperNotFoundException e) { + LOGGER.warn(e.getMessage()); + + return Response.status(Response.Status.NOT_FOUND).entity(new ErrorMessage(e.getMessage())).build(); + } +} diff --git a/developers-service/src/main/java/org/geoandri/developers/exception/handler/TeamPersistenceExceptionHandler.java b/developers-service/src/main/java/org/geoandri/developers/exception/handler/EntityPersistenceExceptionHandler.java similarity index 82% rename from developers-service/src/main/java/org/geoandri/developers/exception/handler/TeamPersistenceExceptionHandler.java rename to developers-service/src/main/java/org/geoandri/developers/exception/handler/EntityPersistenceExceptionHandler.java index 2118067..3bf860a 100644 --- a/developers-service/src/main/java/org/geoandri/developers/exception/handler/TeamPersistenceExceptionHandler.java +++ b/developers-service/src/main/java/org/geoandri/developers/exception/handler/EntityPersistenceExceptionHandler.java @@ -8,7 +8,7 @@ import javax.ws.rs.ext.Provider; @Provider -public class TeamPersistenceExceptionHandler implements ExceptionMapper { +public class EntityPersistenceExceptionHandler implements ExceptionMapper { @Override public Response toResponse(EntityPersistenceException e) { return Response.status(Response.Status.BAD_REQUEST).entity(new ErrorMessage(e.getMessage())).build(); diff --git a/developers-service/src/main/java/org/geoandri/developers/exception/handler/TeamNotFoundExceptionHandler.java b/developers-service/src/main/java/org/geoandri/developers/exception/handler/TeamNotFoundExceptionHandler.java new file mode 100644 index 0000000..bd7d799 --- /dev/null +++ b/developers-service/src/main/java/org/geoandri/developers/exception/handler/TeamNotFoundExceptionHandler.java @@ -0,0 +1,22 @@ +package org.geoandri.developers.exception.handler; + +import org.geoandri.developers.exception.TeamNotFoundException; +import org.geoandri.developers.exception.error.ErrorMessage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +@Provider +public class TeamNotFoundExceptionHandler implements ExceptionMapper { + private static final Logger LOGGER = LoggerFactory.getLogger(TeamNotFoundExceptionHandler.class); + + @Override + public Response toResponse(TeamNotFoundException e) { + LOGGER.warn(e.getMessage()); + + return Response.status(Response.Status.BAD_REQUEST).entity(new ErrorMessage(e.getMessage())).build(); + } +} diff --git a/developers-service/src/main/java/org/geoandri/developers/mapper/DeveloperMapper.java b/developers-service/src/main/java/org/geoandri/developers/mapper/DeveloperMapper.java index 8cd3fcb..911b6a5 100644 --- a/developers-service/src/main/java/org/geoandri/developers/mapper/DeveloperMapper.java +++ b/developers-service/src/main/java/org/geoandri/developers/mapper/DeveloperMapper.java @@ -10,12 +10,12 @@ @Mapper(componentModel = "cdi", uses = { TeamMapper.class }) public interface DeveloperMapper { - @Mapping(target = "team", source = "team.name") + @Mapping(target = "teamId", source = "team.id") List map(List teams); - @Mapping(target = "team", source = "team.name") + @Mapping(target = "teamId", source = "team.id") DeveloperDto toDeveloperDto(Developer team); - @Mapping(target = "team.name", source = "team") + @Mapping(target = "team.id", source = "teamId") Developer toDeveloper(DeveloperDto teamDto); } diff --git a/developers-service/src/main/java/org/geoandri/developers/service/DeveloperService.java b/developers-service/src/main/java/org/geoandri/developers/service/DeveloperService.java index 15fcf57..08e7ed6 100644 --- a/developers-service/src/main/java/org/geoandri/developers/service/DeveloperService.java +++ b/developers-service/src/main/java/org/geoandri/developers/service/DeveloperService.java @@ -23,14 +23,14 @@ public class DeveloperService { TeamDao teamDao; public Developer save(Developer developer) { - Team team = teamDao.findByName(developer.getTeam().getName()); - developer.setTeam(team); + Team team = teamDao.getTeam(developer.getTeam().getId()); + developer.setTeam(team); - return developerDao.saveDeveloper(developer); + return developerDao.saveDeveloper(developer); } public List getAll(int pageNum, int pageSize, long teamId) { - return developerDao.getDevelopers(pageNum,pageSize, teamId); + return developerDao.getDevelopers(pageNum, pageSize, teamId); } public Developer get(long id) { @@ -38,7 +38,7 @@ public Developer get(long id) { } public Developer update(Developer developer) { - Team team = teamDao.findByName(developer.getTeam().getName()); + Team team = teamDao.getTeam(developer.getTeam().getId()); developer.setTeam(team); return developerDao.updateDeveloper(developer); diff --git a/developers-service/src/main/java/org/geoandri/developers/service/TeamService.java b/developers-service/src/main/java/org/geoandri/developers/service/TeamService.java index 05b1085..820e19b 100644 --- a/developers-service/src/main/java/org/geoandri/developers/service/TeamService.java +++ b/developers-service/src/main/java/org/geoandri/developers/service/TeamService.java @@ -24,10 +24,6 @@ public Team save(Team team) { return teamDao.saveTeam(team); } - public Team update(Team team) { - return teamDao.updateTeam(team); - } - public void delete(long id) { developerDao.deleteDevelopersByTeamId(id); teamDao.deleteTeam(id); diff --git a/developers-service/src/main/resources/db/migration/dev-prod/V1__create_schema.sql b/developers-service/src/main/resources/db/migration/dev-prod/V1__create_schema.sql index 24d12aa..42f20b6 100644 --- a/developers-service/src/main/resources/db/migration/dev-prod/V1__create_schema.sql +++ b/developers-service/src/main/resources/db/migration/dev-prod/V1__create_schema.sql @@ -7,8 +7,6 @@ create table developers ( create table teams ( id int8 generated by default as identity, - description text, - name text not null unique, primary key (id) ); diff --git a/developers-service/src/main/resources/db/migration/test/V1__create_schema.sql b/developers-service/src/main/resources/db/migration/test/V1__create_schema.sql index 5ca2f18..ad66578 100644 --- a/developers-service/src/main/resources/db/migration/test/V1__create_schema.sql +++ b/developers-service/src/main/resources/db/migration/test/V1__create_schema.sql @@ -7,8 +7,6 @@ create table developers ( create table teams ( id int8 generated by default as identity, - description varchar, - name varchar not null unique, primary key (id) ); diff --git a/developers-service/src/main/resources/db/migration/test/V2__import_test_data.sql b/developers-service/src/main/resources/db/migration/test/V2__import_test_data.sql index a4855d5..e0af280 100644 --- a/developers-service/src/main/resources/db/migration/test/V2__import_test_data.sql +++ b/developers-service/src/main/resources/db/migration/test/V2__import_test_data.sql @@ -1,9 +1,8 @@ -INSERT INTO teams( - id, name, description ) - VALUES (1, 'Team A', 'Team A description'), - (2, 'Team B', 'Team B description'), - (3, 'Team C', 'Team C description'), - (4, 'Team Empty', 'Team empty description'); +INSERT INTO teams(id) + VALUES (1), + (2), + (3), + (4); INSERT INTO developers( id, name, team_id ) diff --git a/developers-service/src/test/java/org/geoandri/developers/consumer/TeamConsumerTest.java b/developers-service/src/test/java/org/geoandri/developers/consumer/TeamConsumerTest.java index 592fdc6..9a9e3a5 100644 --- a/developers-service/src/test/java/org/geoandri/developers/consumer/TeamConsumerTest.java +++ b/developers-service/src/test/java/org/geoandri/developers/consumer/TeamConsumerTest.java @@ -27,12 +27,8 @@ public class TeamConsumerTest { @Test @Ignore public void testTeamConsumer() { - TeamDto teamDto = new TeamDto(); - teamDto.setId(50); - teamDto.setName("Another new Team"); - teamDto.setDescription("Another description"); - TeamEvent teamEvent = new TeamEvent(EventType.TEAM_CREATED, teamDto); + TeamEvent teamEvent = new TeamEvent(EventType.TEAM_CREATED, 50); companion.registerSerde(TeamEvent.class, new TeamEventSerializer(), new TeamEventDeserializer()); diff --git a/developers-service/src/test/java/org/geoandri/developers/mapper/DeveloperMapperTest.java b/developers-service/src/test/java/org/geoandri/developers/mapper/DeveloperMapperTest.java index 0eb1a6a..192164f 100644 --- a/developers-service/src/test/java/org/geoandri/developers/mapper/DeveloperMapperTest.java +++ b/developers-service/src/test/java/org/geoandri/developers/mapper/DeveloperMapperTest.java @@ -26,7 +26,6 @@ public class DeveloperMapperTest { private static void setup() { team = new Team(); team.setId(1L); - team.setName("My awesome team"); developer = new Developer(); developer.setId(1L); @@ -36,7 +35,7 @@ private static void setup() { developerDto = new DeveloperDto(); developerDto.setId(1L); developerDto.setName("Developer1"); - developerDto.setTeam("My awesome team"); + developerDto.setTeamId(team.getId()); } @Test @@ -45,6 +44,6 @@ public void testDeveloperToDeveloperDto() { assertEquals(developerDto.getId(), mappedDeveloperDto.getId()); assertEquals(developerDto.getName(), mappedDeveloperDto.getName()); - assertEquals(developerDto.getTeam(), mappedDeveloperDto.getTeam()); + assertEquals(developerDto.getTeamId(), mappedDeveloperDto.getTeamId()); } } diff --git a/developers-service/src/test/java/org/geoandri/developers/resource/DeveloperResourceTest.java b/developers-service/src/test/java/org/geoandri/developers/resource/DeveloperResourceTest.java index 9095354..c1f9473 100644 --- a/developers-service/src/test/java/org/geoandri/developers/resource/DeveloperResourceTest.java +++ b/developers-service/src/test/java/org/geoandri/developers/resource/DeveloperResourceTest.java @@ -64,7 +64,7 @@ public void testGetDeveloperEndpoint() { .then() .statusCode(200) .body("name", equalTo("Developer 1A")) - .body("team", equalTo("Team A")); + .body("teamId", equalTo(1)); } @Test @@ -72,7 +72,7 @@ public void testGetDeveloperEndpoint() { public void testPostDeveloperEndpoint() { DeveloperDto developerDto = new DeveloperDto(); developerDto.setName("A new developer"); - developerDto.setTeam("Team A"); + developerDto.setTeamId(1L); given() .contentType(ContentType.JSON) @@ -82,7 +82,7 @@ public void testPostDeveloperEndpoint() { .contentType(ContentType.JSON) .statusCode(201) .body("name", equalTo("A new developer")) - .body("team", equalTo("Team A")); + .body("teamId", equalTo(1)); } @Test @@ -90,7 +90,7 @@ public void testPostDeveloperEndpoint() { public void testPutDeveloperEndpoint() { DeveloperDto developerDto = new DeveloperDto(); developerDto.setName("An updated developer"); - developerDto.setTeam("Team B"); + developerDto.setTeamId(2L); given() .contentType(ContentType.JSON) @@ -100,7 +100,7 @@ public void testPutDeveloperEndpoint() { .contentType(ContentType.JSON) .statusCode(200) .body("name", equalTo("An updated developer")) - .body("team", equalTo("Team B")); + .body("teamId", equalTo(2)); } @@ -118,7 +118,7 @@ public void testDeleteDeveloperEndpoint() { @Order(8) public void testPostDeveloperEndpointWhenValidationFails() { DeveloperDto developerDto = new DeveloperDto(); - developerDto.setTeam("Team A"); + developerDto.setTeamId(1L); ErrorMessage response = given() .contentType(ContentType.JSON) @@ -137,7 +137,8 @@ public void testPostDeveloperEndpointWhenValidationFails() { @Order(9) public void testPostDeveloperEndpointWithExistingName() { DeveloperDto developerDto = new DeveloperDto(); - developerDto.setName("Developer 1A"); + developerDto.setName("Developer 1B"); + developerDto.setTeamId(1L); given() .contentType(ContentType.JSON) diff --git a/teams-service/src/main/java/org/geoandri/teams/event/TeamEvent.java b/teams-service/src/main/java/org/geoandri/teams/event/TeamEvent.java index df211de..06682b8 100644 --- a/teams-service/src/main/java/org/geoandri/teams/event/TeamEvent.java +++ b/teams-service/src/main/java/org/geoandri/teams/event/TeamEvent.java @@ -7,11 +7,14 @@ public class TeamEvent { private EventType eventType; - private TeamDto teamDto; + private long teamId; - public TeamEvent(EventType eventType, TeamDto teamDto) { + public TeamEvent() { + } + + public TeamEvent(EventType eventType, long teamId) { this.eventType = eventType; - this.teamDto = teamDto; + this.teamId = teamId; } public EventType getEventType() { @@ -22,19 +25,19 @@ public void setEventType(EventType eventType) { this.eventType = eventType; } - public TeamDto getTeamDto() { - return teamDto; + public long getTeamId() { + return teamId; } - public void setTeamDto(TeamDto teamDto) { - this.teamDto = teamDto; + public void setTeamId(long teamId) { + this.teamId = teamId; } @Override public String toString() { return "TeamEvent{" + "eventType=" + eventType + - ", teamDto=" + teamDto + + ", teamId=" + teamId + '}'; } @@ -43,12 +46,11 @@ public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; TeamEvent teamEvent = (TeamEvent) o; - return eventType == teamEvent.eventType && - teamDto.equals(teamEvent.teamDto); + return teamId == teamEvent.teamId && eventType == teamEvent.eventType; } @Override public int hashCode() { - return Objects.hash(eventType, teamDto); + return Objects.hash(eventType, teamId); } } diff --git a/teams-service/src/main/java/org/geoandri/teams/resource/TeamResource.java b/teams-service/src/main/java/org/geoandri/teams/resource/TeamResource.java index 16c4030..456604e 100644 --- a/teams-service/src/main/java/org/geoandri/teams/resource/TeamResource.java +++ b/teams-service/src/main/java/org/geoandri/teams/resource/TeamResource.java @@ -98,7 +98,7 @@ public Response getTeam(@PathParam("id") long id) { public Response saveTeam(@Valid TeamDto teamDto) { LOGGER.debug("Received request to save team {}", teamDto); TeamDto persistedTeamDto = teamMapper.toTeamDto(teamService.save(teamMapper.toTeam(teamDto))); - teamProducer.publishEvent(new TeamEvent(EventType.TEAM_CREATED, persistedTeamDto)); + teamProducer.publishEvent(new TeamEvent(EventType.TEAM_CREATED, persistedTeamDto.getId())); return Response .status(Response.Status.CREATED) @@ -129,7 +129,6 @@ public Response saveTeam(@Valid TeamDto teamDto) { public Response updateTeam(@PathParam("id") long id, TeamDto teamDto) { LOGGER.debug("Receive request to update developer with id: {} and updated data: {}", id, teamDto); TeamDto updatedTeamDto = teamMapper.toTeamDto(teamService.update(id, teamMapper.toTeam(teamDto))); - teamProducer.publishEvent(new TeamEvent(EventType.TEAM_UPDATED, updatedTeamDto)); return Response .status(Response.Status.OK) @@ -153,11 +152,12 @@ public Response updateTeam(@PathParam("id") long id, TeamDto teamDto) { content = @Content(mediaType = MediaType.APPLICATION_JSON) ) public Response deleteTeam(@PathParam("id") long id) { - LOGGER.debug("Receive request to delete developer with id: {}", id); + LOGGER.debug("Received request to delete developer with id: {}", id); teamService.delete(id); - teamProducer.publishEvent(new TeamEvent(EventType.TEAM_DELETED, new TeamDto(id, "FOR DELETION"))); + teamProducer.publishEvent(new TeamEvent(EventType.TEAM_DELETED, id)); return Response - .status(Response.Status.OK).build(); + .status(Response.Status.OK) + .build(); } } diff --git a/teams-service/src/test/java/org/geoandri/teams/resource/TeamResourceTest.java b/teams-service/src/test/java/org/geoandri/teams/resource/TeamResourceTest.java index b63b361..85048ea 100644 --- a/teams-service/src/test/java/org/geoandri/teams/resource/TeamResourceTest.java +++ b/teams-service/src/test/java/org/geoandri/teams/resource/TeamResourceTest.java @@ -80,7 +80,7 @@ public void testPostTeamEndpoint() { assertEquals("A test description", responseTeamDto.getDescription()); Mockito.verify(teamProducer, Mockito.times(1)). - publishEvent(new TeamEvent(EventType.TEAM_CREATED, responseTeamDto)); + publishEvent(new TeamEvent(EventType.TEAM_CREATED, responseTeamDto.getId())); } @Test @@ -122,9 +122,6 @@ public void testPutTeamEndpoint() { assertEquals("An updated team", responseTeamDto.getName()); assertEquals("An updated description", responseTeamDto.getDescription()); - - Mockito.verify(teamProducer, Mockito.times(1)) - .publishEvent(new TeamEvent(EventType.TEAM_UPDATED, responseTeamDto)); } @Test @@ -159,7 +156,7 @@ public void testDeleteTeam() { .statusCode(200); Mockito.verify(teamProducer, Mockito.times(1)) - .publishEvent(new TeamEvent(EventType.TEAM_DELETED, Mockito.any())); + .publishEvent(new TeamEvent(EventType.TEAM_DELETED, 3)); } @Test From e8b43639c9801604c0db4e24fbac67cb736a7f39 Mon Sep 17 00:00:00 2001 From: Georgios Andrinopoulos Date: Sun, 17 Apr 2022 17:18:13 +0300 Subject: [PATCH 2/2] Use separate runtime exceptions for team and developer --- .../developers/consumer/TeamConsumer.java | 4 ++-- .../geoandri/developers/dao/DeveloperDao.java | 4 ++-- .../org/geoandri/developers/dao/TeamDao.java | 4 ++-- .../exception/EntityNotFoundException.java | 14 ------------ .../EntityNotFoundExceptionHandler.java | 22 ------------------- .../resource/DeveloperResource.java | 4 ++-- 6 files changed, 8 insertions(+), 44 deletions(-) delete mode 100644 developers-service/src/main/java/org/geoandri/developers/exception/EntityNotFoundException.java delete mode 100644 developers-service/src/main/java/org/geoandri/developers/exception/handler/EntityNotFoundExceptionHandler.java diff --git a/developers-service/src/main/java/org/geoandri/developers/consumer/TeamConsumer.java b/developers-service/src/main/java/org/geoandri/developers/consumer/TeamConsumer.java index ddaa38d..fb45081 100644 --- a/developers-service/src/main/java/org/geoandri/developers/consumer/TeamConsumer.java +++ b/developers-service/src/main/java/org/geoandri/developers/consumer/TeamConsumer.java @@ -6,8 +6,8 @@ import org.geoandri.developers.dto.TeamDto; import org.geoandri.developers.entity.Team; import org.geoandri.developers.event.TeamEvent; -import org.geoandri.developers.exception.EntityNotFoundException; import org.geoandri.developers.exception.EntityPersistenceException; +import org.geoandri.developers.exception.TeamNotFoundException; import org.geoandri.developers.mapper.TeamMapper; import org.geoandri.developers.service.TeamService; import org.slf4j.Logger; @@ -44,7 +44,7 @@ public void consumeEvents(TeamEvent event) { Team team = teamMapper.toTeam(new TeamDto(event.getTeamId())); try { teamService.delete(team.getId()); - } catch (EntityNotFoundException e) { + } catch (TeamNotFoundException e) { LOGGER.warn("Team {} could not be found.", team); } break; diff --git a/developers-service/src/main/java/org/geoandri/developers/dao/DeveloperDao.java b/developers-service/src/main/java/org/geoandri/developers/dao/DeveloperDao.java index 1e4341e..9c2509e 100644 --- a/developers-service/src/main/java/org/geoandri/developers/dao/DeveloperDao.java +++ b/developers-service/src/main/java/org/geoandri/developers/dao/DeveloperDao.java @@ -1,7 +1,7 @@ package org.geoandri.developers.dao; import org.geoandri.developers.entity.Developer; -import org.geoandri.developers.exception.EntityNotFoundException; +import org.geoandri.developers.exception.DeveloperNotFoundException; import org.geoandri.developers.exception.EntityPersistenceException; import javax.enterprise.context.ApplicationScoped; @@ -54,7 +54,7 @@ public Developer getDeveloper(long id) { return developer; } - throw new EntityNotFoundException(String.format("Developer with id %s could not be found.", id)); + throw new DeveloperNotFoundException(String.format("Developer with id %s could not be found.", id)); } public Developer updateDeveloper(Developer developer) { diff --git a/developers-service/src/main/java/org/geoandri/developers/dao/TeamDao.java b/developers-service/src/main/java/org/geoandri/developers/dao/TeamDao.java index 0fd10ff..2be6d27 100644 --- a/developers-service/src/main/java/org/geoandri/developers/dao/TeamDao.java +++ b/developers-service/src/main/java/org/geoandri/developers/dao/TeamDao.java @@ -1,8 +1,8 @@ package org.geoandri.developers.dao; import org.geoandri.developers.entity.Team; -import org.geoandri.developers.exception.EntityNotFoundException; import org.geoandri.developers.exception.EntityPersistenceException; +import org.geoandri.developers.exception.TeamNotFoundException; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; @@ -33,7 +33,7 @@ public Team getTeam(long id) { return team; } - throw new EntityNotFoundException(String.format("Team with id %s could not be found.", id)); + throw new TeamNotFoundException(String.format("Team with id %s could not be found.", id)); } public void deleteTeam(long id) { diff --git a/developers-service/src/main/java/org/geoandri/developers/exception/EntityNotFoundException.java b/developers-service/src/main/java/org/geoandri/developers/exception/EntityNotFoundException.java deleted file mode 100644 index cbb6dc1..0000000 --- a/developers-service/src/main/java/org/geoandri/developers/exception/EntityNotFoundException.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.geoandri.developers.exception; - -public class EntityNotFoundException extends RuntimeException { - public EntityNotFoundException() { - } - - public EntityNotFoundException(String message) { - super(message); - } - - public EntityNotFoundException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/developers-service/src/main/java/org/geoandri/developers/exception/handler/EntityNotFoundExceptionHandler.java b/developers-service/src/main/java/org/geoandri/developers/exception/handler/EntityNotFoundExceptionHandler.java deleted file mode 100644 index 63c0324..0000000 --- a/developers-service/src/main/java/org/geoandri/developers/exception/handler/EntityNotFoundExceptionHandler.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.geoandri.developers.exception.handler; - -import org.geoandri.developers.exception.EntityNotFoundException; -import org.geoandri.developers.exception.error.ErrorMessage; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - -@Provider -public class EntityNotFoundExceptionHandler implements ExceptionMapper { - private static final Logger LOGGER = LoggerFactory.getLogger(EntityNotFoundExceptionHandler.class); - - @Override - public Response toResponse(EntityNotFoundException e) { - LOGGER.warn(e.getMessage()); - - return Response.status(Response.Status.NOT_FOUND).entity(new ErrorMessage(e.getMessage())).build(); - } -} diff --git a/developers-service/src/main/java/org/geoandri/developers/resource/DeveloperResource.java b/developers-service/src/main/java/org/geoandri/developers/resource/DeveloperResource.java index da7b600..43cbaf0 100644 --- a/developers-service/src/main/java/org/geoandri/developers/resource/DeveloperResource.java +++ b/developers-service/src/main/java/org/geoandri/developers/resource/DeveloperResource.java @@ -93,7 +93,7 @@ public Response getDeveloper(@PathParam("id") long id) { content = @Content(mediaType = MediaType.APPLICATION_JSON) ) @APIResponse( - responseCode = "404", + responseCode = "400", description = "Team provided not found", content = @Content(mediaType = MediaType.APPLICATION_JSON) ) @@ -129,7 +129,7 @@ public Response saveDeveloper(@Valid DeveloperDto developerDto) { content = @Content(mediaType = MediaType.APPLICATION_JSON) ) @APIResponse( - responseCode = "404", + responseCode = "400", description = "Team not found", content = @Content(mediaType = MediaType.APPLICATION_JSON) )