package org.learning.by.example.reactive.microservices.application; import org.learning.by.example.reactive.microservices.handlers.ApiHandler; import org.learning.by.example.reactive.microservices.handlers.ErrorHandler; import org.learning.by.example.reactive.microservices.routers.MainRouter; import org.learning.by.example.reactive.microservices.services.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.reactive.config.EnableWebFlux; import org.springframework.web.reactive.function.server.RouterFunction; @Configuration @EnableWebFlux public class ApplicationConfig { @Bean ApiHandler apiHandler(final GeoLocationService geoLocationService, final SunriseSunsetService sunriseSunsetService, final ErrorHandler errorHandler) { return new ApiHandler(geoLocationService, sunriseSunsetService, errorHandler); } @Bean GeoLocationService locationService(@Value("${GeoLocationServiceImpl.endPoint}") final String endPoint) { return new GeoLocationServiceImpl(endPoint); } @Bean SunriseSunsetService sunriseSunsetService(@Value("${SunriseSunsetServiceImpl.endPoint}") final String endPoint) { return new SunriseSunsetServiceImpl(endPoint); } @Bean ErrorHandler errorHandler() { return new ErrorHandler(); } @Bean RouterFunction<?> mainRouterFunction(final ApiHandler apiHandler, final ErrorHandler errorHandler) { return MainRouter.doRoute(apiHandler, errorHandler); } }