From 9d36de883826165418ed5745504358bee22fc506 Mon Sep 17 00:00:00 2001 From: szsa Date: Sat, 19 Mar 2022 21:01:27 +0100 Subject: [PATCH] Creates all missing handlers, and routes for teams --- .../reactivetimesheetapp/web/Routing.java | 22 +++++++++++ .../web/handler/TeamHandler.java | 11 ------ .../web/handler/TeamHandlers.java | 37 +++++++++++++++++++ .../web/handler/TimeEntryHandler.java | 12 ------ .../web/handler/TimeEntryHandlers.java | 23 ++++++++++++ .../{UserHandler.java => UserHandlers.java} | 6 +-- 6 files changed, 85 insertions(+), 26 deletions(-) delete mode 100644 src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TeamHandler.java create mode 100644 src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TeamHandlers.java delete mode 100644 src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TimeEntryHandler.java create mode 100644 src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TimeEntryHandlers.java rename src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/{UserHandler.java => UserHandlers.java} (91%) diff --git a/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/Routing.java b/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/Routing.java index add305c..f6ceb46 100644 --- a/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/Routing.java +++ b/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/Routing.java @@ -1,4 +1,26 @@ package net.szymonsawicki.reactivetimesheetapp.web; +import net.szymonsawicki.reactivetimesheetapp.web.handler.TeamHandlers; +import net.szymonsawicki.reactivetimesheetapp.web.handler.TimeEntryHandlers; +import net.szymonsawicki.reactivetimesheetapp.web.handler.UserHandlers; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.web.reactive.function.server.RequestPredicates; +import org.springframework.web.reactive.function.server.RouterFunction; +import org.springframework.web.reactive.function.server.RouterFunctions; +import org.springframework.web.reactive.function.server.ServerResponse; + +@Configuration public class Routing { + @Bean + public RouterFunction routingFunction(TeamHandlers teamHandlers, TimeEntryHandlers timeEntryHandlers, UserHandlers userHandlers) { + return RouterFunctions.nest( + RequestPredicates.path("/teams/" + ), RouterFunctions.route(RequestPredicates.GET("/{name}") + .and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), teamHandlers::findByName) + .andRoute(RequestPredicates.GET("/id/{id}").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), teamHandlers::findById) + .andRoute(RequestPredicates.POST("/").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), teamHandlers::addTeam) + .andRoute(RequestPredicates.DELETE("/{id}").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), teamHandlers::deleteTeam)); + } } diff --git a/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TeamHandler.java b/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TeamHandler.java deleted file mode 100644 index 393552d..0000000 --- a/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TeamHandler.java +++ /dev/null @@ -1,11 +0,0 @@ -package net.szymonsawicki.reactivetimesheetapp.web.handler; - -import lombok.RequiredArgsConstructor; -import net.szymonsawicki.reactivetimesheetapp.application.service.TeamService; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class TeamHandler { - private final TeamService teamService; -} diff --git a/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TeamHandlers.java b/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TeamHandlers.java new file mode 100644 index 0000000..c391034 --- /dev/null +++ b/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TeamHandlers.java @@ -0,0 +1,37 @@ +package net.szymonsawicki.reactivetimesheetapp.web.handler; + +import lombok.RequiredArgsConstructor; +import net.szymonsawicki.reactivetimesheetapp.application.service.TeamService; +import net.szymonsawicki.reactivetimesheetapp.domain.team.dto.CreateTeamDto; +import net.szymonsawicki.reactivetimesheetapp.web.config.GlobalRoutingHandler; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; +import org.springframework.web.reactive.function.server.ServerRequest; +import org.springframework.web.reactive.function.server.ServerResponse; +import reactor.core.publisher.Mono; + +@Component +@RequiredArgsConstructor +public class TeamHandlers { + private final TeamService teamService; + + public Mono findById(ServerRequest serverRequest) { + var teamId = serverRequest.pathVariable("id"); + return GlobalRoutingHandler.doRequest(teamService.findById(teamId), HttpStatus.OK); + } + + public Mono findByName(ServerRequest serverRequest) { + var teamName = serverRequest.pathVariable("name"); + return GlobalRoutingHandler.doRequest(teamService.findByName(teamName), HttpStatus.OK); + } + + public Mono addTeam(ServerRequest serverRequest) { + var createTeamDtoMono = serverRequest.bodyToMono(CreateTeamDto.class); + return GlobalRoutingHandler.doRequest(teamService.addTeam(createTeamDtoMono), HttpStatus.CREATED); + } + + public Mono deleteTeam(ServerRequest serverRequest) { + var teamId = serverRequest.pathVariable("id"); + return GlobalRoutingHandler.doRequest(teamService.deleteTeam(teamId), HttpStatus.OK); + } +} diff --git a/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TimeEntryHandler.java b/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TimeEntryHandler.java deleted file mode 100644 index af97153..0000000 --- a/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TimeEntryHandler.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.szymonsawicki.reactivetimesheetapp.web.handler; - - -import lombok.RequiredArgsConstructor; -import net.szymonsawicki.reactivetimesheetapp.application.service.TimeEntryService; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class TimeEntryHandler { - private final TimeEntryService timeEntryService; -} diff --git a/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TimeEntryHandlers.java b/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TimeEntryHandlers.java new file mode 100644 index 0000000..2caac4d --- /dev/null +++ b/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/TimeEntryHandlers.java @@ -0,0 +1,23 @@ +package net.szymonsawicki.reactivetimesheetapp.web.handler; + + +import lombok.RequiredArgsConstructor; +import net.szymonsawicki.reactivetimesheetapp.application.service.TimeEntryService; +import net.szymonsawicki.reactivetimesheetapp.domain.time_entry.dto.CreateTimeEntryDto; +import net.szymonsawicki.reactivetimesheetapp.web.config.GlobalRoutingHandler; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; +import org.springframework.web.reactive.function.server.ServerRequest; +import org.springframework.web.reactive.function.server.ServerResponse; +import reactor.core.publisher.Mono; + +@Component +@RequiredArgsConstructor +public class TimeEntryHandlers { + private final TimeEntryService timeEntryService; + + public Mono addTimeEntry(ServerRequest serverRequest) { + var createTimeEntryDtoMono = serverRequest.bodyToMono(CreateTimeEntryDto.class); + return GlobalRoutingHandler.doRequest(timeEntryService.addTimeEntry(createTimeEntryDtoMono), HttpStatus.CREATED); + } +} diff --git a/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/UserHandler.java b/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/UserHandlers.java similarity index 91% rename from src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/UserHandler.java rename to src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/UserHandlers.java index ba6f73f..5b3d5c5 100644 --- a/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/UserHandler.java +++ b/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/handler/UserHandlers.java @@ -13,7 +13,7 @@ import reactor.core.publisher.Mono; @Component @RequiredArgsConstructor -public class UserHandler { +public class UserHandlers { private final UserService userService; public Mono findById(ServerRequest serverRequest) { @@ -27,8 +27,8 @@ public class UserHandler { } public Mono createUser(ServerRequest serverRequest) { - var createUsertDtoMono = serverRequest.bodyToMono(CreateUserDto.class); - return GlobalRoutingHandler.doRequest(userService.addUser(createUsertDtoMono), HttpStatus.CREATED); + var createUserDtoMono = serverRequest.bodyToMono(CreateUserDto.class); + return GlobalRoutingHandler.doRequest(userService.addUser(createUserDtoMono), HttpStatus.CREATED); } public Mono deleteUser(ServerRequest serverRequest) {