diff --git a/postman_collection.json b/postman_collection.json new file mode 100644 index 0000000..cf31dd4 --- /dev/null +++ b/postman_collection.json @@ -0,0 +1,165 @@ +{ + "info": { + "_postman_id": "809992e0-63cb-4d98-ae6b-30e259a35348", + "name": "Reactive Timesheet App", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "Get user by id", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"username\" : \"John Test\",\r\n \"password\" : \"223eded3\",\r\n \"passwordConfirmation\" : \"223eded3\",\r\n \"role\" : \"LEAD\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/users/id/62378d381507b40858b58695", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "users", + "id", + "62378d381507b40858b58695" + ] + } + }, + "response": [] + }, + { + "name": "Get user by name", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"username\" : \"John Test\",\r\n \"password\" : \"223eded3\",\r\n \"passwordConfirmation\" : \"223eded3\",\r\n \"role\" : \"LEAD\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/users/id/62378d381507b40858b58695", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "users", + "id", + "62378d381507b40858b58695" + ] + } + }, + "response": [] + }, + { + "name": "Create user", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"username\" : \"John Test\",\r\n \"password\" : \"223eded3\",\r\n \"passwordConfirmation\" : \"223eded3\",\r\n \"role\" : \"LEAD\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/users/", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "users", + "" + ] + } + }, + "response": [] + }, + { + "name": "Create team", + "request": { + "method": "GET", + "header": [] + }, + "response": [] + }, + { + "name": "delete team", + "request": { + "method": "GET", + "header": [] + }, + "response": [] + }, + { + "name": "delete user", + "request": { + "method": "GET", + "header": [] + }, + "response": [] + }, + { + "name": "creating of the new time entry", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"date\" : \"1999-12-12\",\r\n \"timeFrom\" : \" \",\r\n \"timeTo\" : \" \",\r\n \"user\" : {\r\n \"username\": \"Arnold Test\",\r\n \"password\": \"223eded3\",\r\n \"role\": \"DEVELOPER\"\r\n },\r\n \"category\": \"DEVELOPMENT\" \r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/team-entries/", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "team-entries", + "" + ] + } + }, + "response": [] + }, + { + "name": "get team by id", + "request": { + "method": "GET", + "header": [] + }, + "response": [] + } + ] +} \ No newline at end of file diff --git a/src/main/java/net/szymonsawicki/reactivetimesheetapp/application/service/TeamService.java b/src/main/java/net/szymonsawicki/reactivetimesheetapp/application/service/TeamService.java index 50c0c1e..c222ff7 100644 --- a/src/main/java/net/szymonsawicki/reactivetimesheetapp/application/service/TeamService.java +++ b/src/main/java/net/szymonsawicki/reactivetimesheetapp/application/service/TeamService.java @@ -46,12 +46,10 @@ public class TeamService { private Mono createTeamWithMembers(CreateTeamDto createTeamDto) { - var teamToInsert = createTeamDto.toTeam(); - // at first team is inserted into db and all its member are updated with the new teamId return teamRepository - .save(teamToInsert) + .save(createTeamDto.toTeam()) .flatMap(insertedTeam -> { var membersToInsert = createTeamDto .members() @@ -64,12 +62,9 @@ public class TeamService { return userRepository .saveAll(membersToInsert) .collectList() - .flatMap(insertedUsers -> { - var teamToInsertWithMembers = insertedTeam.withMembers(insertedUsers); - return teamRepository - .save(teamToInsertWithMembers) - .map(Team::toGetTeamDto); - }); + .flatMap(insertedUsers -> teamRepository + .save(insertedTeam.withMembers(insertedUsers)) + .map(Team::toGetTeamDto)); }); } @@ -94,5 +89,4 @@ public class TeamService { }) .switchIfEmpty(Mono.error(new TeamServiceException("cannot find team to delete"))); } - } diff --git a/src/main/java/net/szymonsawicki/reactivetimesheetapp/application/service/TimeEntryService.java b/src/main/java/net/szymonsawicki/reactivetimesheetapp/application/service/TimeEntryService.java index 296de57..117f63f 100644 --- a/src/main/java/net/szymonsawicki/reactivetimesheetapp/application/service/TimeEntryService.java +++ b/src/main/java/net/szymonsawicki/reactivetimesheetapp/application/service/TimeEntryService.java @@ -33,7 +33,7 @@ public class TimeEntryService { return userRepository .findById(timeEntryToCheck.user().id()) .hasElement() - .flatMap(isUserPresent -> Boolean.TRUE.equals(isUserPresent) + .flatMap(isUserPresent -> isUserPresent ? findCollisions(timeEntryToCheck) : @@ -41,6 +41,9 @@ public class TimeEntryService { } private Mono findCollisions(CreateTimeEntryDto timeEntryToCheck) { + + // TODO proper implementation of collision check (doesn't work at the moment). Create isAvailable() method in TimeEntry domain class + return timeEntryRepository.findAllByUser(timeEntryToCheck.user().toUser()) .filter(entry -> !TimeEntryUtils.toTimeFrom.apply(entry).isAfter(timeEntryToCheck.timeTo()) && !TimeEntryUtils.toTimeTo.apply(entry).isBefore(timeEntryToCheck.timeFrom())) diff --git a/src/main/java/net/szymonsawicki/reactivetimesheetapp/application/service/UserService.java b/src/main/java/net/szymonsawicki/reactivetimesheetapp/application/service/UserService.java index 2ccc36f..1fb7686 100644 --- a/src/main/java/net/szymonsawicki/reactivetimesheetapp/application/service/UserService.java +++ b/src/main/java/net/szymonsawicki/reactivetimesheetapp/application/service/UserService.java @@ -38,7 +38,7 @@ public class UserService { .flatMap(createUserDto -> userRepository .findByUsername(createUserDto.username()) .hasElement() - .flatMap(isUserPresent -> Boolean.TRUE.equals(isUserPresent) + .flatMap(isUserPresent -> isUserPresent ? Mono.error(new UserServiceException("user with username " + createUserDto.username() + " already exists")) :