diff --git a/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/Routing.java b/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/Routing.java index f6ceb46..70dd92d 100644 --- a/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/Routing.java +++ b/src/main/java/net/szymonsawicki/reactivetimesheetapp/web/Routing.java @@ -6,21 +6,35 @@ 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; +import static org.springframework.web.reactive.function.server.RequestPredicates.DELETE; +import static org.springframework.web.reactive.function.server.RequestPredicates.GET; +import static org.springframework.web.reactive.function.server.RequestPredicates.POST; +import static org.springframework.web.reactive.function.server.RequestPredicates.accept; +import static org.springframework.web.reactive.function.server.RequestPredicates.path; + @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)); + + // first argument of the router function is a request predicate, second - handler function + + path("/teams"), + RouterFunctions.route(GET("/{name}").and(accept(MediaType.APPLICATION_JSON)), teamHandlers::findByName) + .andRoute(GET("/id/{id}").and(accept(MediaType.APPLICATION_JSON)), teamHandlers::findById) + .andRoute(POST("/").and(accept(MediaType.APPLICATION_JSON)), teamHandlers::addTeam) + .andRoute(DELETE("/{id}").and(accept(MediaType.APPLICATION_JSON)), teamHandlers::deleteTeam)) + .andNest(path("/users"), + RouterFunctions.route(GET("/{id}").and(accept(MediaType.APPLICATION_JSON)), userHandlers::findById) + .andRoute(GET("/{username}").and(accept(MediaType.APPLICATION_JSON)), userHandlers::findByUsername) + .andRoute(POST("/").and(accept(MediaType.APPLICATION_JSON)), userHandlers::createUser) + .andRoute(DELETE("/{id}").and(accept(MediaType.APPLICATION_JSON)), userHandlers::deleteUser)) + .andNest(path("/time_entries"), + RouterFunctions.route(POST("/").and(accept(MediaType.APPLICATION_JSON)), timeEntryHandlers::addTimeEntry)); } }