From 0198e23ac213876d5805aa2b5e352ac1b99d02a6 Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Fri, 5 Sep 2025 23:11:03 +0300 Subject: [PATCH 01/15] refactor: restructure modules and update dependencies --- compose.yaml | 8 +++--- .../main-service}/Dockerfile | 0 {main-service => core/main-service}/pom.xml | 3 ++- .../main/MainServiceApplication.java | 0 .../main/aspect/LogStatsHit.java | 0 .../main/aspect/StatsHitAspect.java | 0 .../main/config/JpaAuditingConfig.java | 0 .../admin/AdminCategoryController.java | 0 .../admin/AdminCommentController.java | 0 .../admin/AdminCompilationController.java | 0 .../admin/AdminEventController.java | 0 .../controller/admin/AdminUserController.java | 0 .../priv/PrivateCommentController.java | 0 .../priv/PrivateEventController.java | 0 .../priv/PrivateRequestController.java | 0 .../pub/PublicCategoryController.java | 0 .../pub/PublicCommentController.java | 0 .../pub/PublicCompilationController.java | 0 .../controller/pub/PublicEventController.java | 0 .../explorewithme/main/dto/CategoryDto.java | 0 .../main/dto/CommentAdminDto.java | 0 .../explorewithme/main/dto/CommentDto.java | 0 .../main/dto/CompilationDto.java | 0 .../explorewithme/main/dto/EventFullDto.java | 0 .../EventRequestStatusUpdateRequestDto.java | 0 .../EventRequestStatusUpdateResultDto.java | 0 .../explorewithme/main/dto/EventShortDto.java | 0 .../main/dto/NewCategoryDto.java | 0 .../explorewithme/main/dto/NewCommentDto.java | 0 .../main/dto/NewCompilationDto.java | 0 .../explorewithme/main/dto/NewEventDto.java | 0 .../main/dto/NewUserRequestDto.java | 0 .../main/dto/ParticipationRequestDto.java | 0 .../main/dto/UpdateCommentDto.java | 0 .../main/dto/UpdateCompilationRequestDto.java | 0 .../main/dto/UpdateEventAdminRequestDto.java | 0 .../main/dto/UpdateEventUserRequestDto.java | 0 .../explorewithme/main/dto/UserDto.java | 0 .../explorewithme/main/dto/UserShortDto.java | 0 .../error/BusinessRuleViolationException.java | 0 .../error/EntityAlreadyExistsException.java | 0 .../main/error/EntityDeletedException.java | 0 .../main/error/EntityNotFoundException.java | 0 .../main/error/GlobalExceptionHandler.java | 0 .../main/mapper/CategoryMapper.java | 0 .../main/mapper/CommentMapper.java | 0 .../main/mapper/CompilationMapper.java | 0 .../main/mapper/EventMapper.java | 0 .../main/mapper/RequestMapper.java | 0 .../explorewithme/main/mapper/UserMapper.java | 0 .../explorewithme/main/model/Category.java | 0 .../explorewithme/main/model/Comment.java | 0 .../explorewithme/main/model/Compilation.java | 0 .../explorewithme/main/model/Event.java | 0 .../explorewithme/main/model/EventState.java | 0 .../explorewithme/main/model/Location.java | 0 .../main/model/ParticipationRequest.java | 0 .../main/model/RequestStatus.java | 0 .../explorewithme/main/model/User.java | 0 .../main/repository/CategoryRepository.java | 0 .../main/repository/CommentRepository.java | 0 .../repository/CompilationRepository.java | 0 .../main/repository/EventRepository.java | 0 .../main/repository/RequestRepository.java | 0 .../main/repository/UserRepository.java | 0 .../main/service/CategoryService.java | 0 .../main/service/CategoryServiceImpl.java | 0 .../main/service/CommentService.java | 0 .../main/service/CommentServiceImpl.java | 0 .../main/service/CompilationService.java | 0 .../main/service/CompilationServiceImpl.java | 0 .../main/service/EventService.java | 0 .../main/service/EventServiceImpl.java | 0 .../main/service/RequestService.java | 0 .../main/service/RequestServiceImpl.java | 0 .../main/service/UserService.java | 0 .../main/service/UserServiceImpl.java | 0 .../params/AdminCommentSearchParams.java | 0 .../params/AdminEventSearchParams.java | 0 ...EventRequestStatusUpdateRequestParams.java | 0 .../params/GetListUsersParameters.java | 0 .../params/PublicCommentParameters.java | 0 .../params/PublicEventSearchParams.java | 0 .../src/main/resources/application-local.yaml | 0 .../resources/application-mapper_test.yaml | 0 .../src/main/resources/application-test.yaml | 0 .../src/main/resources/application.yaml | 0 .../src/main/resources/schema.sql | 0 .../main/aspect/StatsHitAspectTest.java | 0 .../admin/AdminCategoryControllerTest.java | 0 .../admin/AdminCommentControllerTest.java | 0 .../admin/AdminEventControllerTest.java | 0 .../admin/AdminUserControllerTest.java | 0 .../priv/PrivateCommentControllerTest.java | 0 .../priv/PrivateEventControllerTest.java | 0 .../pub/PublicCategoryControllerTest.java | 0 .../pub/PublicCommentControllerTest.java | 0 .../pub/PublicEventControllerTest.java | 0 .../main/mapper/CategoryMapperTest.java | 0 .../main/mapper/CommentMapperTest.java | 0 .../main/mapper/EventMapperTest.java | 0 .../main/mapper/UserMapperTest.java | 0 .../main/repository/EventRepositoryTest.java | 0 .../CategoryServiceIntegrationTest.java | 0 .../main/service/CommentServiceImplTest.java | 0 .../CommentServiceIntegrationTest.java | 0 .../main/service/EventServiceImplTest.java | 0 .../service/EventServiceIntegrationTest.java | 0 .../service/UserServiceIntegrationTest.java | 0 core/pom.xml | 26 +++++++++++++++++++ {stats-service => core/stats-service}/pom.xml | 2 +- .../stats-service}/stats-client/pom.xml | 0 .../stats/client/StatsClient.java | 0 .../stats/client/StatsClientImpl.java | 0 .../StatsClientModuleConfiguration.java | 0 .../src/main/resources/application-local.yaml | 0 .../src/main/resources/application.yaml | 0 .../stats/client/StatsClientTest.java | 0 .../stats-service}/stats-dto/pom.xml | 0 .../stats/dto/EndpointHitDto.java | 0 .../explorewithme/stats/dto/ViewStatsDto.java | 0 .../stats/dto/EndpointHitDtoTest.java | 0 .../stats/dto/ViewStatsDtoTest.java | 0 .../stats-service}/stats-server/Dockerfile | 0 .../stats-service}/stats-server/pom.xml | 0 .../stats/server/StatsServerApplication.java | 0 .../server/controller/StatsController.java | 0 .../server/error/GlobalExceptionHandler.java | 0 .../server/mapper/EndpointHitMapper.java | 0 .../server/mapper/EndpointHitMapperImpl.java | 0 .../stats/server/model/EndpointHit.java | 0 .../server/repository/StatsRepository.java | 0 .../stats/server/service/StatsService.java | 0 .../server/service/StatsServiceImpl.java | 0 .../src/main/resources/application-local.yaml | 0 .../src/main/resources/application.yaml | 0 .../src/main/resources/schema.sql | 0 .../controller/StatsControllerTest.java | 0 .../StatsServerIntegrationTest.java | 0 .../repository/StatsRepositoryTest.java | 0 .../server/service/StatsServiceImplTest.java | 0 docker-compose.yml | 14 ---------- infra/pom.xml | 20 ++++++++++++++ pom.xml | 10 +++---- 144 files changed, 58 insertions(+), 25 deletions(-) rename {main-service => core/main-service}/Dockerfile (100%) rename {main-service => core/main-service}/pom.xml (97%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/MainServiceApplication.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/aspect/LogStatsHit.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/aspect/StatsHitAspect.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/config/JpaAuditingConfig.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCategoryController.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCommentController.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCompilationController.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminEventController.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminUserController.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateCommentController.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateEventController.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateRequestController.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCategoryController.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCommentController.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCompilationController.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicEventController.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/CategoryDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/CommentAdminDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/CommentDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/CompilationDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/EventFullDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/EventRequestStatusUpdateRequestDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/EventRequestStatusUpdateResultDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/EventShortDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/NewCategoryDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/NewCommentDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/NewCompilationDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/NewEventDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/NewUserRequestDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/ParticipationRequestDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/UpdateCommentDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/UpdateCompilationRequestDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/UpdateEventAdminRequestDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/UpdateEventUserRequestDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/UserDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/dto/UserShortDto.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/error/BusinessRuleViolationException.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/error/EntityAlreadyExistsException.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/error/EntityDeletedException.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/error/EntityNotFoundException.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/error/GlobalExceptionHandler.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/mapper/CategoryMapper.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/mapper/CommentMapper.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/mapper/CompilationMapper.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/mapper/EventMapper.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/mapper/RequestMapper.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/mapper/UserMapper.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/model/Category.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/model/Comment.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/model/Compilation.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/model/Event.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/model/EventState.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/model/Location.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/model/ParticipationRequest.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/model/RequestStatus.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/model/User.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/repository/CategoryRepository.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/repository/CommentRepository.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/repository/CompilationRepository.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/repository/EventRepository.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/repository/RequestRepository.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/repository/UserRepository.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/CategoryService.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/CategoryServiceImpl.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/CommentService.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/CommentServiceImpl.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/CompilationService.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/CompilationServiceImpl.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/EventService.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/EventServiceImpl.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/RequestService.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/RequestServiceImpl.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/UserService.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/UserServiceImpl.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/params/AdminCommentSearchParams.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/params/AdminEventSearchParams.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/params/EventRequestStatusUpdateRequestParams.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/params/GetListUsersParameters.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/params/PublicCommentParameters.java (100%) rename {main-service => core/main-service}/src/main/java/ru/practicum/explorewithme/main/service/params/PublicEventSearchParams.java (100%) rename {main-service => core/main-service}/src/main/resources/application-local.yaml (100%) rename {main-service => core/main-service}/src/main/resources/application-mapper_test.yaml (100%) rename {main-service => core/main-service}/src/main/resources/application-test.yaml (100%) rename {main-service => core/main-service}/src/main/resources/application.yaml (100%) rename {main-service => core/main-service}/src/main/resources/schema.sql (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/aspect/StatsHitAspectTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminCategoryControllerTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminCommentControllerTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminEventControllerTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminUserControllerTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/controller/priv/PrivateCommentControllerTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/controller/priv/PrivateEventControllerTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicCategoryControllerTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicCommentControllerTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicEventControllerTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/mapper/CategoryMapperTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/mapper/CommentMapperTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/mapper/EventMapperTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/mapper/UserMapperTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/repository/EventRepositoryTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/service/CategoryServiceIntegrationTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/service/CommentServiceImplTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/service/CommentServiceIntegrationTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/service/EventServiceImplTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/service/EventServiceIntegrationTest.java (100%) rename {main-service => core/main-service}/src/test/java/ru/practicum/explorewithme/main/service/UserServiceIntegrationTest.java (100%) create mode 100644 core/pom.xml rename {stats-service => core/stats-service}/pom.xml (92%) rename {stats-service => core/stats-service}/stats-client/pom.xml (100%) rename {stats-service => core/stats-service}/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClient.java (100%) rename {stats-service => core/stats-service}/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClientImpl.java (100%) rename {stats-service => core/stats-service}/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/config/StatsClientModuleConfiguration.java (100%) rename {stats-service => core/stats-service}/stats-client/src/main/resources/application-local.yaml (100%) rename {stats-service => core/stats-service}/stats-client/src/main/resources/application.yaml (100%) rename {stats-service => core/stats-service}/stats-client/src/test/java/ru/practicum/explorewithme/stats/client/StatsClientTest.java (100%) rename {stats-service => core/stats-service}/stats-dto/pom.xml (100%) rename {stats-service => core/stats-service}/stats-dto/src/main/java/ru/practicum/explorewithme/stats/dto/EndpointHitDto.java (100%) rename {stats-service => core/stats-service}/stats-dto/src/main/java/ru/practicum/explorewithme/stats/dto/ViewStatsDto.java (100%) rename {stats-service => core/stats-service}/stats-dto/src/test/java/ru/practicum/explorewithme/stats/dto/EndpointHitDtoTest.java (100%) rename {stats-service => core/stats-service}/stats-dto/src/test/java/ru/practicum/explorewithme/stats/dto/ViewStatsDtoTest.java (100%) rename {stats-service => core/stats-service}/stats-server/Dockerfile (100%) rename {stats-service => core/stats-service}/stats-server/pom.xml (100%) rename {stats-service => core/stats-service}/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/StatsServerApplication.java (100%) rename {stats-service => core/stats-service}/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/controller/StatsController.java (100%) rename {stats-service => core/stats-service}/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/error/GlobalExceptionHandler.java (100%) rename {stats-service => core/stats-service}/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/mapper/EndpointHitMapper.java (100%) rename {stats-service => core/stats-service}/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/mapper/EndpointHitMapperImpl.java (100%) rename {stats-service => core/stats-service}/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/model/EndpointHit.java (100%) rename {stats-service => core/stats-service}/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/repository/StatsRepository.java (100%) rename {stats-service => core/stats-service}/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/service/StatsService.java (100%) rename {stats-service => core/stats-service}/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/service/StatsServiceImpl.java (100%) rename {stats-service => core/stats-service}/stats-server/src/main/resources/application-local.yaml (100%) rename {stats-service => core/stats-service}/stats-server/src/main/resources/application.yaml (100%) rename {stats-service => core/stats-service}/stats-server/src/main/resources/schema.sql (100%) rename {stats-service => core/stats-service}/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/controller/StatsControllerTest.java (100%) rename {stats-service => core/stats-service}/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/controller/StatsServerIntegrationTest.java (100%) rename {stats-service => core/stats-service}/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/repository/StatsRepositoryTest.java (100%) rename {stats-service => core/stats-service}/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/service/StatsServiceImplTest.java (100%) delete mode 100644 docker-compose.yml create mode 100644 infra/pom.xml diff --git a/compose.yaml b/compose.yaml index a5406f4..ef3d9da 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1,6 +1,6 @@ services: stats-server: - build: stats-service/stats-server + build: core/stats-service/stats-server container_name: ewm-stats-server-compose depends_on: stats-db: @@ -24,7 +24,7 @@ services: POSTGRES_DB: ewm_stats_db volumes: - stats_db_data:/var/lib/postgresql/data - - ./stats-service/stats-server/src/main/resources/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql + - ./core/stats-service/stats-server/src/main/resources/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql healthcheck: test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB} -p 5432" ] interval: 10s @@ -33,7 +33,7 @@ services: start_period: 10s ewm-service: - build: main-service + build: core/main-service container_name: ewm-main-service-compose depends_on: ewm-db: @@ -59,7 +59,7 @@ services: POSTGRES_DB: ewm_main_db volumes: - main_db_data:/var/lib/postgresql/data - - ./main-service/src/main/resources/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql + - ./core/main-service/src/main/resources/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql healthcheck: test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB} -p 5432" ] interval: 10s diff --git a/main-service/Dockerfile b/core/main-service/Dockerfile similarity index 100% rename from main-service/Dockerfile rename to core/main-service/Dockerfile diff --git a/main-service/pom.xml b/core/main-service/pom.xml similarity index 97% rename from main-service/pom.xml rename to core/main-service/pom.xml index 1ac60b0..90f1227 100644 --- a/main-service/pom.xml +++ b/core/main-service/pom.xml @@ -5,8 +5,9 @@ 4.0.0 ru.practicum - explore-with-me + core 0.0.1-SNAPSHOT + ../pom.xml main-service diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/MainServiceApplication.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/MainServiceApplication.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/MainServiceApplication.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/MainServiceApplication.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/aspect/LogStatsHit.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/aspect/LogStatsHit.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/aspect/LogStatsHit.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/aspect/LogStatsHit.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/aspect/StatsHitAspect.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/aspect/StatsHitAspect.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/aspect/StatsHitAspect.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/aspect/StatsHitAspect.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/config/JpaAuditingConfig.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/config/JpaAuditingConfig.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/config/JpaAuditingConfig.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/config/JpaAuditingConfig.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCategoryController.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCategoryController.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCategoryController.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCategoryController.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCommentController.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCommentController.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCommentController.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCommentController.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCompilationController.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCompilationController.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCompilationController.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminCompilationController.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminEventController.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminEventController.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminEventController.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminEventController.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminUserController.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminUserController.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminUserController.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/admin/AdminUserController.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateCommentController.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateCommentController.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateCommentController.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateCommentController.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateEventController.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateEventController.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateEventController.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateEventController.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateRequestController.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateRequestController.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateRequestController.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/priv/PrivateRequestController.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCategoryController.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCategoryController.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCategoryController.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCategoryController.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCommentController.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCommentController.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCommentController.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCommentController.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCompilationController.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCompilationController.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCompilationController.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicCompilationController.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicEventController.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicEventController.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicEventController.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/controller/pub/PublicEventController.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/CategoryDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/CategoryDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/CategoryDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/CategoryDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/CommentAdminDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/CommentAdminDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/CommentAdminDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/CommentAdminDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/CommentDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/CommentDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/CommentDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/CommentDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/CompilationDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/CompilationDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/CompilationDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/CompilationDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventFullDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventFullDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventFullDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventFullDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventRequestStatusUpdateRequestDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventRequestStatusUpdateRequestDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventRequestStatusUpdateRequestDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventRequestStatusUpdateRequestDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventRequestStatusUpdateResultDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventRequestStatusUpdateResultDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventRequestStatusUpdateResultDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventRequestStatusUpdateResultDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventShortDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventShortDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventShortDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/EventShortDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewCategoryDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewCategoryDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewCategoryDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewCategoryDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewCommentDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewCommentDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewCommentDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewCommentDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewCompilationDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewCompilationDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewCompilationDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewCompilationDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewEventDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewEventDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewEventDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewEventDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewUserRequestDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewUserRequestDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewUserRequestDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/NewUserRequestDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/ParticipationRequestDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/ParticipationRequestDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/ParticipationRequestDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/ParticipationRequestDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateCommentDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateCommentDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateCommentDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateCommentDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateCompilationRequestDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateCompilationRequestDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateCompilationRequestDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateCompilationRequestDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateEventAdminRequestDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateEventAdminRequestDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateEventAdminRequestDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateEventAdminRequestDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateEventUserRequestDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateEventUserRequestDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateEventUserRequestDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UpdateEventUserRequestDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UserDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UserDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/UserDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UserDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UserShortDto.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UserShortDto.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/dto/UserShortDto.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/dto/UserShortDto.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/error/BusinessRuleViolationException.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/error/BusinessRuleViolationException.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/error/BusinessRuleViolationException.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/error/BusinessRuleViolationException.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/error/EntityAlreadyExistsException.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/error/EntityAlreadyExistsException.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/error/EntityAlreadyExistsException.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/error/EntityAlreadyExistsException.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/error/EntityDeletedException.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/error/EntityDeletedException.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/error/EntityDeletedException.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/error/EntityDeletedException.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/error/EntityNotFoundException.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/error/EntityNotFoundException.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/error/EntityNotFoundException.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/error/EntityNotFoundException.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/error/GlobalExceptionHandler.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/error/GlobalExceptionHandler.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/error/GlobalExceptionHandler.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/error/GlobalExceptionHandler.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/CategoryMapper.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/CategoryMapper.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/mapper/CategoryMapper.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/CategoryMapper.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/CommentMapper.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/CommentMapper.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/mapper/CommentMapper.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/CommentMapper.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/CompilationMapper.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/CompilationMapper.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/mapper/CompilationMapper.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/CompilationMapper.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/EventMapper.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/EventMapper.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/mapper/EventMapper.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/EventMapper.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/RequestMapper.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/RequestMapper.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/mapper/RequestMapper.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/RequestMapper.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/UserMapper.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/UserMapper.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/mapper/UserMapper.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/mapper/UserMapper.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/model/Category.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/model/Category.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/model/Category.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/model/Category.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/model/Comment.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/model/Comment.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/model/Comment.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/model/Comment.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/model/Compilation.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/model/Compilation.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/model/Compilation.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/model/Compilation.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/model/Event.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/model/Event.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/model/Event.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/model/Event.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/model/EventState.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/model/EventState.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/model/EventState.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/model/EventState.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/model/Location.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/model/Location.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/model/Location.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/model/Location.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/model/ParticipationRequest.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/model/ParticipationRequest.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/model/ParticipationRequest.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/model/ParticipationRequest.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/model/RequestStatus.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/model/RequestStatus.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/model/RequestStatus.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/model/RequestStatus.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/model/User.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/model/User.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/model/User.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/model/User.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/repository/CategoryRepository.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/repository/CategoryRepository.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/repository/CategoryRepository.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/repository/CategoryRepository.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/repository/CommentRepository.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/repository/CommentRepository.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/repository/CommentRepository.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/repository/CommentRepository.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/repository/CompilationRepository.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/repository/CompilationRepository.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/repository/CompilationRepository.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/repository/CompilationRepository.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/repository/EventRepository.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/repository/EventRepository.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/repository/EventRepository.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/repository/EventRepository.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/repository/RequestRepository.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/repository/RequestRepository.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/repository/RequestRepository.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/repository/RequestRepository.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/repository/UserRepository.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/repository/UserRepository.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/repository/UserRepository.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/repository/UserRepository.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/CategoryService.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/CategoryService.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/CategoryService.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/CategoryService.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/CategoryServiceImpl.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/CategoryServiceImpl.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/CategoryServiceImpl.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/CategoryServiceImpl.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/CommentService.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/CommentService.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/CommentService.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/CommentService.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/CommentServiceImpl.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/CommentServiceImpl.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/CommentServiceImpl.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/CommentServiceImpl.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/CompilationService.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/CompilationService.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/CompilationService.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/CompilationService.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/CompilationServiceImpl.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/CompilationServiceImpl.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/CompilationServiceImpl.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/CompilationServiceImpl.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/EventService.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/EventService.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/EventService.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/EventService.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/EventServiceImpl.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/EventServiceImpl.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/EventServiceImpl.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/EventServiceImpl.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/RequestService.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/RequestService.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/RequestService.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/RequestService.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/RequestServiceImpl.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/RequestServiceImpl.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/RequestServiceImpl.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/RequestServiceImpl.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/UserService.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/UserService.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/UserService.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/UserService.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/UserServiceImpl.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/UserServiceImpl.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/UserServiceImpl.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/UserServiceImpl.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/AdminCommentSearchParams.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/AdminCommentSearchParams.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/params/AdminCommentSearchParams.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/AdminCommentSearchParams.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/AdminEventSearchParams.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/AdminEventSearchParams.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/params/AdminEventSearchParams.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/AdminEventSearchParams.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/EventRequestStatusUpdateRequestParams.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/EventRequestStatusUpdateRequestParams.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/params/EventRequestStatusUpdateRequestParams.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/EventRequestStatusUpdateRequestParams.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/GetListUsersParameters.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/GetListUsersParameters.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/params/GetListUsersParameters.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/GetListUsersParameters.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/PublicCommentParameters.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/PublicCommentParameters.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/params/PublicCommentParameters.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/PublicCommentParameters.java diff --git a/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/PublicEventSearchParams.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/PublicEventSearchParams.java similarity index 100% rename from main-service/src/main/java/ru/practicum/explorewithme/main/service/params/PublicEventSearchParams.java rename to core/main-service/src/main/java/ru/practicum/explorewithme/main/service/params/PublicEventSearchParams.java diff --git a/main-service/src/main/resources/application-local.yaml b/core/main-service/src/main/resources/application-local.yaml similarity index 100% rename from main-service/src/main/resources/application-local.yaml rename to core/main-service/src/main/resources/application-local.yaml diff --git a/main-service/src/main/resources/application-mapper_test.yaml b/core/main-service/src/main/resources/application-mapper_test.yaml similarity index 100% rename from main-service/src/main/resources/application-mapper_test.yaml rename to core/main-service/src/main/resources/application-mapper_test.yaml diff --git a/main-service/src/main/resources/application-test.yaml b/core/main-service/src/main/resources/application-test.yaml similarity index 100% rename from main-service/src/main/resources/application-test.yaml rename to core/main-service/src/main/resources/application-test.yaml diff --git a/main-service/src/main/resources/application.yaml b/core/main-service/src/main/resources/application.yaml similarity index 100% rename from main-service/src/main/resources/application.yaml rename to core/main-service/src/main/resources/application.yaml diff --git a/main-service/src/main/resources/schema.sql b/core/main-service/src/main/resources/schema.sql similarity index 100% rename from main-service/src/main/resources/schema.sql rename to core/main-service/src/main/resources/schema.sql diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/aspect/StatsHitAspectTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/aspect/StatsHitAspectTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/aspect/StatsHitAspectTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/aspect/StatsHitAspectTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminCategoryControllerTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminCategoryControllerTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminCategoryControllerTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminCategoryControllerTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminCommentControllerTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminCommentControllerTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminCommentControllerTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminCommentControllerTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminEventControllerTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminEventControllerTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminEventControllerTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminEventControllerTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminUserControllerTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminUserControllerTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminUserControllerTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/admin/AdminUserControllerTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/controller/priv/PrivateCommentControllerTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/priv/PrivateCommentControllerTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/controller/priv/PrivateCommentControllerTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/priv/PrivateCommentControllerTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/controller/priv/PrivateEventControllerTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/priv/PrivateEventControllerTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/controller/priv/PrivateEventControllerTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/priv/PrivateEventControllerTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicCategoryControllerTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicCategoryControllerTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicCategoryControllerTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicCategoryControllerTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicCommentControllerTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicCommentControllerTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicCommentControllerTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicCommentControllerTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicEventControllerTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicEventControllerTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicEventControllerTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/controller/pub/PublicEventControllerTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/mapper/CategoryMapperTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/mapper/CategoryMapperTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/mapper/CategoryMapperTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/mapper/CategoryMapperTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/mapper/CommentMapperTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/mapper/CommentMapperTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/mapper/CommentMapperTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/mapper/CommentMapperTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/mapper/EventMapperTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/mapper/EventMapperTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/mapper/EventMapperTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/mapper/EventMapperTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/mapper/UserMapperTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/mapper/UserMapperTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/mapper/UserMapperTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/mapper/UserMapperTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/repository/EventRepositoryTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/repository/EventRepositoryTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/repository/EventRepositoryTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/repository/EventRepositoryTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/service/CategoryServiceIntegrationTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/service/CategoryServiceIntegrationTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/service/CategoryServiceIntegrationTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/service/CategoryServiceIntegrationTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/service/CommentServiceImplTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/service/CommentServiceImplTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/service/CommentServiceImplTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/service/CommentServiceImplTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/service/CommentServiceIntegrationTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/service/CommentServiceIntegrationTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/service/CommentServiceIntegrationTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/service/CommentServiceIntegrationTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/service/EventServiceImplTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/service/EventServiceImplTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/service/EventServiceImplTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/service/EventServiceImplTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/service/EventServiceIntegrationTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/service/EventServiceIntegrationTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/service/EventServiceIntegrationTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/service/EventServiceIntegrationTest.java diff --git a/main-service/src/test/java/ru/practicum/explorewithme/main/service/UserServiceIntegrationTest.java b/core/main-service/src/test/java/ru/practicum/explorewithme/main/service/UserServiceIntegrationTest.java similarity index 100% rename from main-service/src/test/java/ru/practicum/explorewithme/main/service/UserServiceIntegrationTest.java rename to core/main-service/src/test/java/ru/practicum/explorewithme/main/service/UserServiceIntegrationTest.java diff --git a/core/pom.xml b/core/pom.xml new file mode 100644 index 0000000..51e8214 --- /dev/null +++ b/core/pom.xml @@ -0,0 +1,26 @@ + + + 4.0.0 + + ru.practicum + explore-with-me + 0.0.1-SNAPSHOT + + + core + pom + + + 21 + 21 + UTF-8 + + + + main-service + stats-service + + + \ No newline at end of file diff --git a/stats-service/pom.xml b/core/stats-service/pom.xml similarity index 92% rename from stats-service/pom.xml rename to core/stats-service/pom.xml index d0e2a8a..eb35629 100644 --- a/stats-service/pom.xml +++ b/core/stats-service/pom.xml @@ -5,7 +5,7 @@ 4.0.0 ru.practicum - explore-with-me + core 0.0.1-SNAPSHOT diff --git a/stats-service/stats-client/pom.xml b/core/stats-service/stats-client/pom.xml similarity index 100% rename from stats-service/stats-client/pom.xml rename to core/stats-service/stats-client/pom.xml diff --git a/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClient.java b/core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClient.java similarity index 100% rename from stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClient.java rename to core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClient.java diff --git a/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClientImpl.java b/core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClientImpl.java similarity index 100% rename from stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClientImpl.java rename to core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClientImpl.java diff --git a/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/config/StatsClientModuleConfiguration.java b/core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/config/StatsClientModuleConfiguration.java similarity index 100% rename from stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/config/StatsClientModuleConfiguration.java rename to core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/config/StatsClientModuleConfiguration.java diff --git a/stats-service/stats-client/src/main/resources/application-local.yaml b/core/stats-service/stats-client/src/main/resources/application-local.yaml similarity index 100% rename from stats-service/stats-client/src/main/resources/application-local.yaml rename to core/stats-service/stats-client/src/main/resources/application-local.yaml diff --git a/stats-service/stats-client/src/main/resources/application.yaml b/core/stats-service/stats-client/src/main/resources/application.yaml similarity index 100% rename from stats-service/stats-client/src/main/resources/application.yaml rename to core/stats-service/stats-client/src/main/resources/application.yaml diff --git a/stats-service/stats-client/src/test/java/ru/practicum/explorewithme/stats/client/StatsClientTest.java b/core/stats-service/stats-client/src/test/java/ru/practicum/explorewithme/stats/client/StatsClientTest.java similarity index 100% rename from stats-service/stats-client/src/test/java/ru/practicum/explorewithme/stats/client/StatsClientTest.java rename to core/stats-service/stats-client/src/test/java/ru/practicum/explorewithme/stats/client/StatsClientTest.java diff --git a/stats-service/stats-dto/pom.xml b/core/stats-service/stats-dto/pom.xml similarity index 100% rename from stats-service/stats-dto/pom.xml rename to core/stats-service/stats-dto/pom.xml diff --git a/stats-service/stats-dto/src/main/java/ru/practicum/explorewithme/stats/dto/EndpointHitDto.java b/core/stats-service/stats-dto/src/main/java/ru/practicum/explorewithme/stats/dto/EndpointHitDto.java similarity index 100% rename from stats-service/stats-dto/src/main/java/ru/practicum/explorewithme/stats/dto/EndpointHitDto.java rename to core/stats-service/stats-dto/src/main/java/ru/practicum/explorewithme/stats/dto/EndpointHitDto.java diff --git a/stats-service/stats-dto/src/main/java/ru/practicum/explorewithme/stats/dto/ViewStatsDto.java b/core/stats-service/stats-dto/src/main/java/ru/practicum/explorewithme/stats/dto/ViewStatsDto.java similarity index 100% rename from stats-service/stats-dto/src/main/java/ru/practicum/explorewithme/stats/dto/ViewStatsDto.java rename to core/stats-service/stats-dto/src/main/java/ru/practicum/explorewithme/stats/dto/ViewStatsDto.java diff --git a/stats-service/stats-dto/src/test/java/ru/practicum/explorewithme/stats/dto/EndpointHitDtoTest.java b/core/stats-service/stats-dto/src/test/java/ru/practicum/explorewithme/stats/dto/EndpointHitDtoTest.java similarity index 100% rename from stats-service/stats-dto/src/test/java/ru/practicum/explorewithme/stats/dto/EndpointHitDtoTest.java rename to core/stats-service/stats-dto/src/test/java/ru/practicum/explorewithme/stats/dto/EndpointHitDtoTest.java diff --git a/stats-service/stats-dto/src/test/java/ru/practicum/explorewithme/stats/dto/ViewStatsDtoTest.java b/core/stats-service/stats-dto/src/test/java/ru/practicum/explorewithme/stats/dto/ViewStatsDtoTest.java similarity index 100% rename from stats-service/stats-dto/src/test/java/ru/practicum/explorewithme/stats/dto/ViewStatsDtoTest.java rename to core/stats-service/stats-dto/src/test/java/ru/practicum/explorewithme/stats/dto/ViewStatsDtoTest.java diff --git a/stats-service/stats-server/Dockerfile b/core/stats-service/stats-server/Dockerfile similarity index 100% rename from stats-service/stats-server/Dockerfile rename to core/stats-service/stats-server/Dockerfile diff --git a/stats-service/stats-server/pom.xml b/core/stats-service/stats-server/pom.xml similarity index 100% rename from stats-service/stats-server/pom.xml rename to core/stats-service/stats-server/pom.xml diff --git a/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/StatsServerApplication.java b/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/StatsServerApplication.java similarity index 100% rename from stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/StatsServerApplication.java rename to core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/StatsServerApplication.java diff --git a/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/controller/StatsController.java b/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/controller/StatsController.java similarity index 100% rename from stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/controller/StatsController.java rename to core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/controller/StatsController.java diff --git a/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/error/GlobalExceptionHandler.java b/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/error/GlobalExceptionHandler.java similarity index 100% rename from stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/error/GlobalExceptionHandler.java rename to core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/error/GlobalExceptionHandler.java diff --git a/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/mapper/EndpointHitMapper.java b/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/mapper/EndpointHitMapper.java similarity index 100% rename from stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/mapper/EndpointHitMapper.java rename to core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/mapper/EndpointHitMapper.java diff --git a/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/mapper/EndpointHitMapperImpl.java b/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/mapper/EndpointHitMapperImpl.java similarity index 100% rename from stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/mapper/EndpointHitMapperImpl.java rename to core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/mapper/EndpointHitMapperImpl.java diff --git a/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/model/EndpointHit.java b/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/model/EndpointHit.java similarity index 100% rename from stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/model/EndpointHit.java rename to core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/model/EndpointHit.java diff --git a/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/repository/StatsRepository.java b/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/repository/StatsRepository.java similarity index 100% rename from stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/repository/StatsRepository.java rename to core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/repository/StatsRepository.java diff --git a/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/service/StatsService.java b/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/service/StatsService.java similarity index 100% rename from stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/service/StatsService.java rename to core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/service/StatsService.java diff --git a/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/service/StatsServiceImpl.java b/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/service/StatsServiceImpl.java similarity index 100% rename from stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/service/StatsServiceImpl.java rename to core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/service/StatsServiceImpl.java diff --git a/stats-service/stats-server/src/main/resources/application-local.yaml b/core/stats-service/stats-server/src/main/resources/application-local.yaml similarity index 100% rename from stats-service/stats-server/src/main/resources/application-local.yaml rename to core/stats-service/stats-server/src/main/resources/application-local.yaml diff --git a/stats-service/stats-server/src/main/resources/application.yaml b/core/stats-service/stats-server/src/main/resources/application.yaml similarity index 100% rename from stats-service/stats-server/src/main/resources/application.yaml rename to core/stats-service/stats-server/src/main/resources/application.yaml diff --git a/stats-service/stats-server/src/main/resources/schema.sql b/core/stats-service/stats-server/src/main/resources/schema.sql similarity index 100% rename from stats-service/stats-server/src/main/resources/schema.sql rename to core/stats-service/stats-server/src/main/resources/schema.sql diff --git a/stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/controller/StatsControllerTest.java b/core/stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/controller/StatsControllerTest.java similarity index 100% rename from stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/controller/StatsControllerTest.java rename to core/stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/controller/StatsControllerTest.java diff --git a/stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/controller/StatsServerIntegrationTest.java b/core/stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/controller/StatsServerIntegrationTest.java similarity index 100% rename from stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/controller/StatsServerIntegrationTest.java rename to core/stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/controller/StatsServerIntegrationTest.java diff --git a/stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/repository/StatsRepositoryTest.java b/core/stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/repository/StatsRepositoryTest.java similarity index 100% rename from stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/repository/StatsRepositoryTest.java rename to core/stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/repository/StatsRepositoryTest.java diff --git a/stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/service/StatsServiceImplTest.java b/core/stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/service/StatsServiceImplTest.java similarity index 100% rename from stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/service/StatsServiceImplTest.java rename to core/stats-service/stats-server/src/test/java/ru/practicum/explorewithme/stats/server/service/StatsServiceImplTest.java diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index be96142..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,14 +0,0 @@ -services: - stats-server: - ports: - - "9090:9090" - - stats-db: - image: postgres:16.1 - - ewm-service: - ports: - - "8080:8080" - - ewm-db: - image: postgres:16.1 diff --git a/infra/pom.xml b/infra/pom.xml new file mode 100644 index 0000000..bfe5fdf --- /dev/null +++ b/infra/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + ru.practicum + explore-with-me + 0.0.1-SNAPSHOT + + + infra + + + 21 + 21 + UTF-8 + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 216701c..9033801 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.5 + 3.5.5 @@ -20,7 +20,7 @@ UTF-8 21 - 3.4.5 + 3.5.5 4.12.0 1.21.0 5.14.2 @@ -31,10 +31,10 @@ - stats-service - main-service ewm-common - + infra + core + From d165551f71b86d3586b4cefe9abdf0e8d633c4aa Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sat, 6 Sep 2025 00:06:30 +0300 Subject: [PATCH 02/15] feat(discovery): add basic discovery service setup --- infra/config-server/pom.xml | 20 +++++++++ infra/discovery-server/pom.xml | 41 +++++++++++++++++++ .../infra/discovery/EurekaServerApp.java | 15 +++++++ .../src/main/resources/application.yaml | 15 +++++++ infra/gateway-server/pom.xml | 20 +++++++++ infra/pom.xml | 6 +++ pom.xml | 8 ++++ 7 files changed, 125 insertions(+) create mode 100644 infra/config-server/pom.xml create mode 100644 infra/discovery-server/pom.xml create mode 100644 infra/discovery-server/src/main/java/ru/practicum/explorewithme/infra/discovery/EurekaServerApp.java create mode 100644 infra/discovery-server/src/main/resources/application.yaml create mode 100644 infra/gateway-server/pom.xml diff --git a/infra/config-server/pom.xml b/infra/config-server/pom.xml new file mode 100644 index 0000000..fd25c83 --- /dev/null +++ b/infra/config-server/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + ru.practicum + infra + 0.0.1-SNAPSHOT + + + config-server + + + 21 + 21 + UTF-8 + + + \ No newline at end of file diff --git a/infra/discovery-server/pom.xml b/infra/discovery-server/pom.xml new file mode 100644 index 0000000..818d07a --- /dev/null +++ b/infra/discovery-server/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + ru.practicum + infra + 0.0.1-SNAPSHOT + + + discovery-server + + + 21 + 21 + UTF-8 + + + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-server + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + \ No newline at end of file diff --git a/infra/discovery-server/src/main/java/ru/practicum/explorewithme/infra/discovery/EurekaServerApp.java b/infra/discovery-server/src/main/java/ru/practicum/explorewithme/infra/discovery/EurekaServerApp.java new file mode 100644 index 0000000..8072d18 --- /dev/null +++ b/infra/discovery-server/src/main/java/ru/practicum/explorewithme/infra/discovery/EurekaServerApp.java @@ -0,0 +1,15 @@ +package ru.practicum.explorewithme.infra.discovery; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; + +@SpringBootApplication +@EnableEurekaServer +public class EurekaServerApp { + + public static void main(String[] args) { + SpringApplication.run(EurekaServerApp.class, args); + } + +} diff --git a/infra/discovery-server/src/main/resources/application.yaml b/infra/discovery-server/src/main/resources/application.yaml new file mode 100644 index 0000000..5dbd41c --- /dev/null +++ b/infra/discovery-server/src/main/resources/application.yaml @@ -0,0 +1,15 @@ +server: + port: 8761 + +eureka: + instance: + hostname: ${EUREKA_HOSTNAME:localhost} + client: + registerWithEureka: false + fetchRegistry: false + serviceUrl: + defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ + +spring: + application: + name: discovery-server \ No newline at end of file diff --git a/infra/gateway-server/pom.xml b/infra/gateway-server/pom.xml new file mode 100644 index 0000000..691315b --- /dev/null +++ b/infra/gateway-server/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + ru.practicum + infra + 0.0.1-SNAPSHOT + + + gateway-server + + + 21 + 21 + UTF-8 + + + \ No newline at end of file diff --git a/infra/pom.xml b/infra/pom.xml index bfe5fdf..d7b7927 100644 --- a/infra/pom.xml +++ b/infra/pom.xml @@ -10,6 +10,12 @@ infra + pom + + config-server + discovery-server + gateway-server + 21 diff --git a/pom.xml b/pom.xml index 9033801..2e3109d 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,7 @@ UTF-8 21 3.5.5 + 2025.0.0 4.12.0 1.21.0 5.14.2 @@ -45,6 +46,13 @@ pom import + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + org.postgresql postgresql From aa145b20785f298c75614ea83e5c03cd66a944ce Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sat, 6 Sep 2025 00:12:43 +0300 Subject: [PATCH 03/15] build(discovery): add discovery to compose --- compose.yaml | 20 ++++++++++++++++++++ infra/discovery-server/Dockerfile | 5 +++++ 2 files changed, 25 insertions(+) create mode 100644 infra/discovery-server/Dockerfile diff --git a/compose.yaml b/compose.yaml index ef3d9da..92d4c34 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1,8 +1,26 @@ services: + discovery-server: + build: infra/discovery-server + container_name: ewm-discovery-server-compose + hostname: discovery-server + ports: + - "8761:8761" + environment: + EUREKA_HOSTNAME: discovery-server + restart: unless-stopped + healthcheck: + test: [ "CMD-SHELL", "curl -f http://localhost:8761/actuator/health || exit 1" ] + interval: 5s + timeout: 3s + retries: 5 + start_period: 5s + stats-server: build: core/stats-service/stats-server container_name: ewm-stats-server-compose depends_on: + discovery-server: + condition: service_healthy stats-db: condition: service_healthy ports: @@ -36,6 +54,8 @@ services: build: core/main-service container_name: ewm-main-service-compose depends_on: + discovery-server: + condition: service_healthy ewm-db: condition: service_healthy stats-server: diff --git a/infra/discovery-server/Dockerfile b/infra/discovery-server/Dockerfile new file mode 100644 index 0000000..0ff1817 --- /dev/null +++ b/infra/discovery-server/Dockerfile @@ -0,0 +1,5 @@ +FROM eclipse-temurin:21-jre-jammy +VOLUME /tmp +ARG JAR_FILE=target/*.jar +COPY ${JAR_FILE} app.jar +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"] \ No newline at end of file From 2f0ccf5370a89cf748b1ea12781c7c8e5d2f7044 Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sat, 6 Sep 2025 00:59:39 +0300 Subject: [PATCH 04/15] feat(discovery): make main service and stats server register with Eureka --- compose.yaml | 18 ++++++++++-------- core/main-service/pom.xml | 4 ++++ .../main/MainServiceApplication.java | 2 ++ .../src/main/resources/application.yaml | 10 +++++++++- core/stats-service/stats-server/pom.xml | 4 ++++ .../stats/server/StatsServerApplication.java | 2 ++ .../src/main/resources/application.yaml | 10 +++++++++- 7 files changed, 40 insertions(+), 10 deletions(-) diff --git a/compose.yaml b/compose.yaml index 92d4c34..c38fbc8 100644 --- a/compose.yaml +++ b/compose.yaml @@ -26,10 +26,11 @@ services: ports: - "9090:9090" environment: - - SPRING_DATASOURCE_URL=jdbc:postgresql://stats-db:5432/ewm_stats_db - - SPRING_DATASOURCE_USERNAME=stats_user - - SPRING_DATASOURCE_PASSWORD=stats_password - - JAVA_OPTS=-Duser.timezone=UTC + EUREKA_URI: http://discovery-server:8761/eureka/ + SPRING_DATASOURCE_URL: jdbc:postgresql://stats-db:5432/ewm_stats_db + SPRING_DATASOURCE_USERNAME: stats_user + SPRING_DATASOURCE_PASSWORD: stats_password + JAVA_OPTS: -Duser.timezone=UTC stats-db: image: postgres:16.1 @@ -63,10 +64,11 @@ services: ports: - "8080:8080" environment: - - SPRING_DATASOURCE_URL=jdbc:postgresql://ewm-db:5432/ewm_main_db - - SPRING_DATASOURCE_USERNAME=ewm_user - - SPRING_DATASOURCE_PASSWORD=ewm_password - - JAVA_OPTS=-Duser.timezone=UTC + EUREKA_URI: http://discovery-server:8761/eureka/ + SPRING_DATASOURCE_URL: jdbc:postgresql://ewm-db:5432/ewm_main_db + SPRING_DATASOURCE_USERNAME: ewm_user + SPRING_DATASOURCE_PASSWORD: ewm_password + JAVA_OPTS: -Duser.timezone=UTC ewm-db: image: postgres:16.1 diff --git a/core/main-service/pom.xml b/core/main-service/pom.xml index 90f1227..253d57b 100644 --- a/core/main-service/pom.xml +++ b/core/main-service/pom.xml @@ -18,6 +18,10 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + org.springframework.boot spring-boot-starter-actuator diff --git a/core/main-service/src/main/java/ru/practicum/explorewithme/main/MainServiceApplication.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/MainServiceApplication.java index 7856da2..3a8a216 100644 --- a/core/main-service/src/main/java/ru/practicum/explorewithme/main/MainServiceApplication.java +++ b/core/main-service/src/main/java/ru/practicum/explorewithme/main/MainServiceApplication.java @@ -2,10 +2,12 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.context.annotation.Import; import ru.practicum.explorewithme.stats.client.config.StatsClientModuleConfiguration; @SpringBootApplication +@EnableDiscoveryClient @Import(StatsClientModuleConfiguration.class) public class MainServiceApplication { public static void main(String[] args) { diff --git a/core/main-service/src/main/resources/application.yaml b/core/main-service/src/main/resources/application.yaml index 3b1d899..e632f73 100644 --- a/core/main-service/src/main/resources/application.yaml +++ b/core/main-service/src/main/resources/application.yaml @@ -17,4 +17,12 @@ spring: driver-class-name: org.postgresql.Driver sql: init: - mode: always \ No newline at end of file + mode: always + +eureka: + client: + serviceUrl: + defaultZone: ${EUREKA_URI:http://localhost:8761/eureka/} + instance: + instance-id: "${spring.application.name}:${random.value}" + leaseRenewalIntervalInSeconds: 10 \ No newline at end of file diff --git a/core/stats-service/stats-server/pom.xml b/core/stats-service/stats-server/pom.xml index 278694f..6fd6fa2 100644 --- a/core/stats-service/stats-server/pom.xml +++ b/core/stats-service/stats-server/pom.xml @@ -17,6 +17,10 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + org.springframework.boot spring-boot-starter-data-jpa diff --git a/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/StatsServerApplication.java b/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/StatsServerApplication.java index 2a59295..328ea08 100644 --- a/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/StatsServerApplication.java +++ b/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/StatsServerApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication +@EnableDiscoveryClient public class StatsServerApplication { public static void main(String[] args) { diff --git a/core/stats-service/stats-server/src/main/resources/application.yaml b/core/stats-service/stats-server/src/main/resources/application.yaml index c599416..338ba92 100644 --- a/core/stats-service/stats-server/src/main/resources/application.yaml +++ b/core/stats-service/stats-server/src/main/resources/application.yaml @@ -14,4 +14,12 @@ spring: driver-class-name: org.postgresql.Driver sql: init: - mode: always \ No newline at end of file + mode: always + +eureka: + client: + serviceUrl: + defaultZone: ${EUREKA_URI:http://localhost:8761/eureka/} + instance: + instance-id: "${spring.application.name}:${random.value}" + leaseRenewalIntervalInSeconds: 10 From e48fd666a75dfd5627c77ff6ad37cbb5f145c3ee Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sat, 6 Sep 2025 14:45:44 +0300 Subject: [PATCH 05/15] refactor(stats-service): refactor StatsClient to be a Feign client --- core/main-service/pom.xml | 9 + .../main/MainServiceApplication.java | 5 +- .../src/main/resources/application.yaml | 2 + core/stats-service/stats-client/pom.xml | 19 + .../stats/client/StatsClient.java | 20 +- .../StatsClientModuleConfiguration.java | 9 - .../stats/client/StatsClientTest.java | 445 ------------------ core/stats-service/stats-server/pom.xml | 8 +- .../server/controller/StatsController.java | 3 +- .../src/main/resources/application.yaml | 2 + 10 files changed, 61 insertions(+), 461 deletions(-) delete mode 100644 core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/config/StatsClientModuleConfiguration.java delete mode 100644 core/stats-service/stats-client/src/test/java/ru/practicum/explorewithme/stats/client/StatsClientTest.java diff --git a/core/main-service/pom.xml b/core/main-service/pom.xml index 253d57b..923c238 100644 --- a/core/main-service/pom.xml +++ b/core/main-service/pom.xml @@ -26,6 +26,15 @@ org.springframework.boot spring-boot-starter-actuator + + org.springframework.cloud + spring-cloud-starter-openfeign + + + ru.practicum + stats-server + ${project.version} + ru.practicum stats-client diff --git a/core/main-service/src/main/java/ru/practicum/explorewithme/main/MainServiceApplication.java b/core/main-service/src/main/java/ru/practicum/explorewithme/main/MainServiceApplication.java index 3a8a216..f97155b 100644 --- a/core/main-service/src/main/java/ru/practicum/explorewithme/main/MainServiceApplication.java +++ b/core/main-service/src/main/java/ru/practicum/explorewithme/main/MainServiceApplication.java @@ -3,12 +3,11 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; -import org.springframework.context.annotation.Import; -import ru.practicum.explorewithme.stats.client.config.StatsClientModuleConfiguration; +import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableDiscoveryClient -@Import(StatsClientModuleConfiguration.class) +@EnableFeignClients(basePackages = "ru.practicum.explorewithme.stats.client") public class MainServiceApplication { public static void main(String[] args) { SpringApplication.run(MainServiceApplication.class, args); diff --git a/core/main-service/src/main/resources/application.yaml b/core/main-service/src/main/resources/application.yaml index e632f73..4e75c40 100644 --- a/core/main-service/src/main/resources/application.yaml +++ b/core/main-service/src/main/resources/application.yaml @@ -23,6 +23,8 @@ eureka: client: serviceUrl: defaultZone: ${EUREKA_URI:http://localhost:8761/eureka/} + healthcheck: + enabled: true instance: instance-id: "${spring.application.name}:${random.value}" leaseRenewalIntervalInSeconds: 10 \ No newline at end of file diff --git a/core/stats-service/stats-client/pom.xml b/core/stats-service/stats-client/pom.xml index aeda0c2..7b67e49 100644 --- a/core/stats-service/stats-client/pom.xml +++ b/core/stats-service/stats-client/pom.xml @@ -38,6 +38,25 @@ ewm-common ${project.version} + + org.springframework.cloud + spring-cloud-openfeign-core + + + com.squareup.okhttp3 + mockwebserver + test + + + org.springframework.cloud + spring-cloud-starter-contract-stub-runner + test + + + org.springframework.cloud + spring-cloud-commons + test + diff --git a/core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClient.java b/core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClient.java index 99911b0..d803bf2 100644 --- a/core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClient.java +++ b/core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/StatsClient.java @@ -1,13 +1,29 @@ package ru.practicum.explorewithme.stats.client; +import static ru.practicum.explorewithme.common.constants.DateTimeConstants.DATE_TIME_FORMAT_PATTERN; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; import ru.practicum.explorewithme.stats.dto.EndpointHitDto; import ru.practicum.explorewithme.stats.dto.ViewStatsDto; import java.time.LocalDateTime; import java.util.List; +@FeignClient(name = "stats-server") public interface StatsClient { - void saveHit(EndpointHitDto endpointHitDto); - List getStats(LocalDateTime start, LocalDateTime end, List uris, Boolean unique); + @PostMapping("/hit") + void saveHit(@RequestBody EndpointHitDto endpointHitDto); + + @GetMapping("/stats") + List getStats( + @RequestParam @DateTimeFormat(pattern = DATE_TIME_FORMAT_PATTERN) LocalDateTime start, + @RequestParam @DateTimeFormat(pattern = DATE_TIME_FORMAT_PATTERN) LocalDateTime end, + @RequestParam(value = "uris", required = false) List uris, + @RequestParam(value = "unique", defaultValue = "false") Boolean unique); } diff --git a/core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/config/StatsClientModuleConfiguration.java b/core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/config/StatsClientModuleConfiguration.java deleted file mode 100644 index 3058b14..0000000 --- a/core/stats-service/stats-client/src/main/java/ru/practicum/explorewithme/stats/client/config/StatsClientModuleConfiguration.java +++ /dev/null @@ -1,9 +0,0 @@ -package ru.practicum.explorewithme.stats.client.config; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan("ru.practicum.explorewithme.stats.client") -public class StatsClientModuleConfiguration { -} \ No newline at end of file diff --git a/core/stats-service/stats-client/src/test/java/ru/practicum/explorewithme/stats/client/StatsClientTest.java b/core/stats-service/stats-client/src/test/java/ru/practicum/explorewithme/stats/client/StatsClientTest.java deleted file mode 100644 index 75a70f2..0000000 --- a/core/stats-service/stats-client/src/test/java/ru/practicum/explorewithme/stats/client/StatsClientTest.java +++ /dev/null @@ -1,445 +0,0 @@ -package ru.practicum.explorewithme.stats.client; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.springframework.test.web.client.match.MockRestRequestMatchers.content; -import static org.springframework.test.web.client.match.MockRestRequestMatchers.jsonPath; -import static org.springframework.test.web.client.match.MockRestRequestMatchers.method; -import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo; -import static org.springframework.test.web.client.response.MockRestResponseCreators.withServerError; -import static org.springframework.test.web.client.response.MockRestResponseCreators.withStatus; -import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess; - -import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.test.web.client.MockRestServiceServer; -import org.springframework.web.client.RestClient; -import org.springframework.web.client.RestClientException; -import org.springframework.web.client.RestTemplate; -import ru.practicum.explorewithme.stats.dto.EndpointHitDto; -import ru.practicum.explorewithme.stats.dto.ViewStatsDto; - -@DisplayName("Тесты для StatsClientImpl") -class StatsClientTest { - - private RestTemplate restTemplate; - private MockRestServiceServer mockServer; - private StatsClientImpl statsClient; - private final String baseUrl = "http://stats-server:9090"; - - @BeforeEach - void setUp() { - restTemplate = new RestTemplate(); - mockServer = MockRestServiceServer.createServer(restTemplate); - - // Создаем RestClient на основе RestTemplate - RestClient restClient = RestClient.builder(restTemplate) - .baseUrl(baseUrl) - .build(); - - statsClient = new StatsClientImpl(restClient); - } - - @Nested - @DisplayName("Тесты метода saveHit") - class SaveHitTests { - @Test - @DisplayName("Успешное сохранение статистики") - void saveHit_successful() { - // Подготовка тестовых данных - LocalDateTime timestamp = LocalDateTime.now(); - EndpointHitDto hitDto = new EndpointHitDto( - "service", - "/test", - "192.168.0.1", - timestamp - ); - - // Настройка ожидания и ответа сервера - mockServer.expect(requestTo(baseUrl + "/hit")) - .andExpect(method(HttpMethod.POST)) - .andExpect(content().contentType(MediaType.APPLICATION_JSON)) - .andExpect(jsonPath("$.app").value("service")) - .andExpect(jsonPath("$.uri").value("/test")) - .andExpect(jsonPath("$.ip").value("192.168.0.1")) - .andRespond(withStatus(HttpStatus.CREATED)); - - // Вызов тестируемого метода - assertDoesNotThrow( - () -> statsClient.saveHit(hitDto), - "Метод saveHit должен успешно выполниться без исключений" - ); - - // Проверка выполнения всех ожиданий - mockServer.verify(); - } - - @Test - @DisplayName("Обработка ошибки сервера при сохранении") - void saveHit_throwsExceptionWhenFails() { - // Подготовка тестовых данных - EndpointHitDto hitDto = new EndpointHitDto( - "service", - "/test", - "192.168.0.1", - LocalDateTime.now() - ); - - // Настройка ожидания и ответа сервера с ошибкой 500 - mockServer.expect(requestTo(baseUrl + "/hit")) - .andExpect(method(HttpMethod.POST)) - .andRespond(withServerError()); - - // Вызов тестируемого метода и проверка исключения - Exception exception = assertThrows( - RestClientException.class, - () -> statsClient.saveHit(hitDto), - "Должно быть выброшено исключение при ошибке сервера" - ); - - assertThat(exception.getMessage()) - .as("Сообщение об ошибке должно содержать информацию о проблеме") - .contains("500"); - - // Проверка выполнения всех ожиданий - mockServer.verify(); - } - - @Test - @DisplayName("Обработка клиентской ошибки (400 Bad Request)") - void saveHit_handlesBadRequest() { - // Подготовка тестовых данных с некорректными значениями - EndpointHitDto hitDto = new EndpointHitDto( - "", // Пустое значение приведет к ошибке валидации - "/test", - "192.168.0.1", - LocalDateTime.now() - ); - - // Настройка ожидания и ответа сервера с ошибкой 400 - mockServer.expect(requestTo(baseUrl + "/hit")) - .andExpect(method(HttpMethod.POST)) - .andRespond(withStatus(HttpStatus.BAD_REQUEST) - .contentType(MediaType.APPLICATION_JSON) - .body("{\"error\":\"Validation failed\"}")); - - // Вызов тестируемого метода и проверка исключения - Exception exception = assertThrows( - RestClientException.class, - () -> statsClient.saveHit(hitDto), - "Должно быть выброшено исключение при ошибке валидации" - ); - - assertThat(exception.getMessage()) - .as("Сообщение об ошибке должно содержать информацию о коде статуса") - .contains("400"); - - // Проверка выполнения всех ожиданий - mockServer.verify(); - } - - @Test - @DisplayName("Обработка null в качестве параметра") - void saveHit_handlesNullParameter() { - // Вызов метода с null-параметром - Exception exception = assertThrows( - NullPointerException.class, - () -> statsClient.saveHit(null), - "Должно быть выброшено исключение при null-параметре" - ); - - // Проверка, что мок-сервер не получил запроса - // Это означает, что исключение произошло до обращения к серверу - mockServer.verify(); - } - } - - @Nested - @DisplayName("Тесты метода getStats") - class GetStatsTests { - @Test - @DisplayName("Успешное получение статистики") - void getStats_successful() { - // Подготовка тестовых данных с использованием LocalDateTime - LocalDateTime start = LocalDateTime.of(2023, 1, 1, 0, 0, 0); - LocalDateTime end = LocalDateTime.of(2023, 12, 31, 23, 59, 59); - List uris = Arrays.asList("/event/1", "/event/2"); - Boolean unique = true; - - String expectedResponseJson = - "[{\"app\":\"app1\",\"uri\":\"/event/1\",\"hits\":10}," + - "{\"app\":\"app1\",\"uri\":\"/event/2\",\"hits\":5}]"; - - // Форматированные строки для URL - String formattedStart = "2023-01-01%2000:00:00"; - String formattedEnd = "2023-12-31%2023:59:59"; - - // Формирование URL для запроса - String url = baseUrl + "/stats" + - "?start=" + formattedStart + - "&end=" + formattedEnd + - "&uris=/event/1" + - "&uris=/event/2" + - "&unique=" + unique; - - // Настройка ожидания и ответа сервера - mockServer.expect(requestTo(url)) - .andExpect(method(HttpMethod.GET)) - .andRespond(withSuccess(expectedResponseJson, MediaType.APPLICATION_JSON)); - - // Вызов тестируемого метода - List result = statsClient.getStats(start, end, uris, unique); - - // Проверка результата - assertThat(result) - .as("Результат должен содержать 2 элемента") - .hasSize(2); - - assertThat(result.get(0).getApp()) - .as("Первый элемент должен иметь правильное значение app") - .isEqualTo("app1"); - - assertThat(result.get(0).getUri()) - .as("Первый элемент должен иметь правильное значение uri") - .isEqualTo("/event/1"); - - assertThat(result.get(0).getHits()) - .as("Первый элемент должен иметь правильное значение hits") - .isEqualTo(10L); - - assertThat(result.get(1).getUri()) - .as("Второй элемент должен иметь правильное значение uri") - .isEqualTo("/event/2"); - - assertThat(result.get(1).getHits()) - .as("Второй элемент должен иметь правильное значение hits") - .isEqualTo(5L); - - // Проверка выполнения всех ожиданий - mockServer.verify(); - } - - @Test - @DisplayName("Получение статистики с пустым списком URI") - void getStats_withEmptyUris() { - // Подготовка тестовых данных с использованием LocalDateTime - LocalDateTime start = LocalDateTime.of(2023, 1, 1, 0, 0, 0); - LocalDateTime end = LocalDateTime.of(2023, 12, 31, 23, 59, 59); - List uris = Collections.emptyList(); - Boolean unique = false; - - String expectedResponseJson = "[{\"app\":\"app1\",\"uri\":\"all\",\"hits\":15}]"; - - // Форматированные строки для URL - String formattedStart = "2023-01-01%2000:00:00"; - String formattedEnd = "2023-12-31%2023:59:59"; - - // Формирование URL для запроса - String url = baseUrl + "/stats" + - "?start=" + formattedStart + - "&end=" + formattedEnd + - "&unique=" + unique; - - // Настройка ожидания и ответа сервера - mockServer.expect(requestTo(url)) - .andExpect(method(HttpMethod.GET)) - .andRespond(withSuccess(expectedResponseJson, MediaType.APPLICATION_JSON)); - - // Вызов тестируемого метода - List result = statsClient.getStats(start, end, uris, unique); - - // Проверка результата - assertThat(result) - .as("Результат должен содержать 1 элемент") - .hasSize(1); - - assertThat(result.get(0).getApp()) - .as("Элемент должен иметь правильное значение app") - .isEqualTo("app1"); - - assertThat(result.get(0).getUri()) - .as("Элемент должен иметь правильное значение uri") - .isEqualTo("all"); - - assertThat(result.get(0).getHits()) - .as("Элемент должен иметь правильное значение hits") - .isEqualTo(15L); - - // Проверка выполнения всех ожиданий - mockServer.verify(); - } - - @Test - @DisplayName("Получение статистики с null вместо списка URI") - void getStats_withNullUris() { - // Подготовка тестовых данных с использованием LocalDateTime - LocalDateTime start = LocalDateTime.of(2023, 1, 1, 0, 0, 0); - LocalDateTime end = LocalDateTime.of(2023, 12, 31, 23, 59, 59); - List uris = null; - Boolean unique = false; - - String expectedResponseJson = "[{\"app\":\"app1\",\"uri\":\"all\",\"hits\":15}]"; - - // Форматированные строки для URL - String formattedStart = "2023-01-01%2000:00:00"; - String formattedEnd = "2023-12-31%2023:59:59"; - - // URL без параметров uris - String url = baseUrl + "/stats" + - "?start=" + formattedStart + - "&end=" + formattedEnd + - "&unique=" + unique; - - // Настройка ожидания и ответа сервера - mockServer.expect(requestTo(url)) - .andExpect(method(HttpMethod.GET)) - .andRespond(withSuccess(expectedResponseJson, MediaType.APPLICATION_JSON)); - - // Вызов тестируемого метода - List result = statsClient.getStats(start, end, uris, unique); - - // Проверка результата - assertThat(result) - .as("Результат должен содержать 1 элемент") - .hasSize(1); - - assertThat(result.get(0).getUri()) - .as("Элемент должен иметь правильное значение uri") - .isEqualTo("all"); - - // Проверка выполнения всех ожиданий - mockServer.verify(); - } - - @Test - @DisplayName("Получение статистики с null вместо флага unique") - void getStats_withNullUniqueFlag() { - // Подготовка тестовых данных с использованием LocalDateTime - LocalDateTime start = LocalDateTime.of(2023, 1, 1, 0, 0, 0); - LocalDateTime end = LocalDateTime.of(2023, 12, 31, 23, 59, 59); - List uris = Collections.singletonList("/event/1"); - Boolean unique = null; - - String expectedResponseJson = "[{\"app\":\"app1\",\"uri\":\"/event/1\",\"hits\":10}]"; - - // Форматированные строки для URL - String formattedStart = "2023-01-01%2000:00:00"; - String formattedEnd = "2023-12-31%2023:59:59"; - - // URL с null в качестве unique - String url = baseUrl + "/stats" + - "?start=" + formattedStart + - "&end=" + formattedEnd + - "&uris=/event/1"; - - // Настройка ожидания и ответа сервера - mockServer.expect(requestTo(url)) - .andExpect(method(HttpMethod.GET)) - .andRespond(withSuccess(expectedResponseJson, MediaType.APPLICATION_JSON)); - - // Вызов тестируемого метода - List result = statsClient.getStats(start, end, uris, unique); - - // Проверка результата - assertThat(result) - .as("Результат должен содержать 1 элемент") - .hasSize(1); - - assertThat(result.get(0).getUri()) - .as("Элемент должен иметь правильное значение uri") - .isEqualTo("/event/1"); - - // Проверка выполнения всех ожиданий - mockServer.verify(); - } - - @Test - @DisplayName("Обработка ошибки сервера при получении статистики") - void getStats_throwsExceptionWhenFails() { - // Подготовка тестовых данных с использованием LocalDateTime - LocalDateTime start = LocalDateTime.of(2023, 1, 1, 0, 0, 0); - LocalDateTime end = LocalDateTime.of(2023, 12, 31, 23, 59, 59); - List uris = Arrays.asList("/event/1", "/event/2"); - Boolean unique = true; - - // Форматированные строки для URL - String formattedStart = "2023-01-01%2000:00:00"; - String formattedEnd = "2023-12-31%2023:59:59"; - - // Формирование URL для запроса - String url = baseUrl + "/stats" + - "?start=" + formattedStart + - "&end=" + formattedEnd + - "&uris=/event/1" + - "&uris=/event/2" + - "&unique=" + unique; - - // Настройка ожидания и ответа сервера с ошибкой - mockServer.expect(requestTo(url)) - .andExpect(method(HttpMethod.GET)) - .andRespond(withServerError()); - - // Вызов тестируемого метода и проверка исключения - Exception exception = assertThrows( - RestClientException.class, - () -> statsClient.getStats(start, end, uris, unique), - "Должно быть выброшено исключение при ошибке сервера" - ); - - assertThat(exception.getMessage()) - .as("Сообщение об ошибке должно содержать информацию о проблеме") - .contains("500"); - - // Проверка выполнения всех ожиданий - mockServer.verify(); - } - - @Test - @DisplayName("Получение пустого массива в ответе") - void getStats_emptyResponse() { - // Подготовка тестовых данных с использованием LocalDateTime - LocalDateTime start = LocalDateTime.of(2023, 1, 1, 0, 0, 0); - LocalDateTime end = LocalDateTime.of(2023, 12, 31, 23, 59, 59); - List uris = Arrays.asList("/non-existent/1", "/non-existent/2"); - Boolean unique = true; - - // Форматированные строки для URL - String formattedStart = "2023-01-01%2000:00:00"; - String formattedEnd = "2023-12-31%2023:59:59"; - - // Формирование URL - String url = baseUrl + "/stats" + - "?start=" + formattedStart + - "&end=" + formattedEnd + - "&uris=/non-existent/1" + - "&uris=/non-existent/2" + - "&unique=" + unique; - - // Настройка ожидания и ответа сервера с пустым массивом - mockServer.expect(requestTo(url)) - .andExpect(method(HttpMethod.GET)) - .andRespond(withSuccess("[]", MediaType.APPLICATION_JSON)); - - // Вызов тестируемого метода - List result = statsClient.getStats(start, end, uris, unique); - - // Проверка, что результат - пустой список - assertThat(result) - .as("Результат должен быть пустым списком") - .isEmpty(); - - // Проверка выполнения всех ожиданий - mockServer.verify(); - } - } -} \ No newline at end of file diff --git a/core/stats-service/stats-server/pom.xml b/core/stats-service/stats-server/pom.xml index 6fd6fa2..8f44276 100644 --- a/core/stats-service/stats-server/pom.xml +++ b/core/stats-service/stats-server/pom.xml @@ -63,13 +63,19 @@ ru.practicum ewm-common - 0.0.1-SNAPSHOT + ${project.version} compile org.mockito mockito-inline + + ru.practicum + stats-client + ${project.version} + compile + diff --git a/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/controller/StatsController.java b/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/controller/StatsController.java index 82f53cf..ed7ea30 100644 --- a/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/controller/StatsController.java +++ b/core/stats-service/stats-server/src/main/java/ru/practicum/explorewithme/stats/server/controller/StatsController.java @@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; +import ru.practicum.explorewithme.stats.client.StatsClient; import ru.practicum.explorewithme.stats.dto.EndpointHitDto; import ru.practicum.explorewithme.stats.dto.ViewStatsDto; import ru.practicum.explorewithme.stats.server.service.StatsService; @@ -25,7 +26,7 @@ @RequiredArgsConstructor @Slf4j @SuppressWarnings("unused") -public class StatsController { +public class StatsController implements StatsClient { private final StatsService statsService; diff --git a/core/stats-service/stats-server/src/main/resources/application.yaml b/core/stats-service/stats-server/src/main/resources/application.yaml index 338ba92..30ca2e7 100644 --- a/core/stats-service/stats-server/src/main/resources/application.yaml +++ b/core/stats-service/stats-server/src/main/resources/application.yaml @@ -20,6 +20,8 @@ eureka: client: serviceUrl: defaultZone: ${EUREKA_URI:http://localhost:8761/eureka/} + healthcheck: + enabled: true instance: instance-id: "${spring.application.name}:${random.value}" leaseRenewalIntervalInSeconds: 10 From 915a3d57c3b3f381bd0bb056e111a9a44ec84791 Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sat, 6 Sep 2025 15:51:48 +0300 Subject: [PATCH 06/15] refactor(config-server): switch to Spring cloud configuration --- core/main-service/pom.xml | 4 +++ .../src/main/resources/application.yaml | 31 +++++++++---------- core/stats-service/stats-server/pom.xml | 4 +++ .../src/main/resources/application.yaml | 28 ++++++++--------- infra/config-server/pom.xml | 25 +++++++++++++++ .../configserver/ConfigServerApplication.java | 17 ++++++++++ .../src/main/resources/application.yaml | 22 +++++++++++++ .../config/application-postgres.yaml | 15 +++++++++ .../main-service}/application-local.yaml | 0 .../application-mapper_test.yaml | 0 .../main-service}/application-test.yaml | 0 .../config/main-service/application.yaml | 5 +++ .../stats-server}/application-local.yaml | 3 ++ 13 files changed, 123 insertions(+), 31 deletions(-) create mode 100644 infra/config-server/src/main/java/ru/practicum/explorewithme/infra/configserver/ConfigServerApplication.java create mode 100644 infra/config-server/src/main/resources/application.yaml create mode 100644 infra/config-server/src/main/resources/config/application-postgres.yaml rename {core/main-service/src/main/resources => infra/config-server/src/main/resources/config/main-service}/application-local.yaml (100%) rename {core/main-service/src/main/resources => infra/config-server/src/main/resources/config/main-service}/application-mapper_test.yaml (100%) rename {core/main-service/src/main/resources => infra/config-server/src/main/resources/config/main-service}/application-test.yaml (100%) create mode 100644 infra/config-server/src/main/resources/config/main-service/application.yaml rename {core/stats-service/stats-server/src/main/resources => infra/config-server/src/main/resources/config/stats-server}/application-local.yaml (94%) diff --git a/core/main-service/pom.xml b/core/main-service/pom.xml index 923c238..9d4e8da 100644 --- a/core/main-service/pom.xml +++ b/core/main-service/pom.xml @@ -22,6 +22,10 @@ org.springframework.cloud spring-cloud-starter-netflix-eureka-client + + org.springframework.cloud + spring-cloud-starter-config + org.springframework.boot spring-boot-starter-actuator diff --git a/core/main-service/src/main/resources/application.yaml b/core/main-service/src/main/resources/application.yaml index 4e75c40..e9a2008 100644 --- a/core/main-service/src/main/resources/application.yaml +++ b/core/main-service/src/main/resources/application.yaml @@ -1,23 +1,20 @@ -server: - port: 8080 - -stats-server: - url: http://stats-server:9090 - spring: application: name: main-service - jpa: - hibernate: - ddl-auto: validate - datasource: - url: ${SPRING_DATASOURCE_URL} - username: ${SPRING_DATASOURCE_USERNAME} - password: ${SPRING_DATASOURCE_PASSWORD} - driver-class-name: org.postgresql.Driver - sql: - init: - mode: always + profiles: + active: postgres + config: + import: "configserver:" + cloud: + config: + discovery: + enabled: true + serviceId: config-server + fail-fast: true + retry: + max-attempts: 10 + initial-interval: 1000 + useRandomPolicy: true eureka: client: diff --git a/core/stats-service/stats-server/pom.xml b/core/stats-service/stats-server/pom.xml index 8f44276..97eac4c 100644 --- a/core/stats-service/stats-server/pom.xml +++ b/core/stats-service/stats-server/pom.xml @@ -21,6 +21,10 @@ org.springframework.cloud spring-cloud-starter-netflix-eureka-client + + org.springframework.cloud + spring-cloud-starter-config + org.springframework.boot spring-boot-starter-data-jpa diff --git a/core/stats-service/stats-server/src/main/resources/application.yaml b/core/stats-service/stats-server/src/main/resources/application.yaml index 30ca2e7..0bb0491 100644 --- a/core/stats-service/stats-server/src/main/resources/application.yaml +++ b/core/stats-service/stats-server/src/main/resources/application.yaml @@ -1,20 +1,20 @@ -server: - port: 9090 - spring: application: name: stats-server - jpa: - hibernate: - ddl-auto: validate - datasource: - url: ${SPRING_DATASOURCE_URL} - username: ${SPRING_DATASOURCE_USERNAME} - password: ${SPRING_DATASOURCE_PASSWORD} - driver-class-name: org.postgresql.Driver - sql: - init: - mode: always + profiles: + active: postgres + config: + import: "configserver:" + cloud: + config: + discovery: + enabled: true + serviceId: config-server + fail-fast: true + retry: + max-attempts: 10 + initial-interval: 1000 + useRandomPolicy: true eureka: client: diff --git a/infra/config-server/pom.xml b/infra/config-server/pom.xml index fd25c83..160d04a 100644 --- a/infra/config-server/pom.xml +++ b/infra/config-server/pom.xml @@ -7,6 +7,7 @@ ru.practicum infra 0.0.1-SNAPSHOT + ../pom.xml config-server @@ -17,4 +18,28 @@ UTF-8 + + + org.springframework.cloud + spring-cloud-config-server + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/infra/config-server/src/main/java/ru/practicum/explorewithme/infra/configserver/ConfigServerApplication.java b/infra/config-server/src/main/java/ru/practicum/explorewithme/infra/configserver/ConfigServerApplication.java new file mode 100644 index 0000000..950b013 --- /dev/null +++ b/infra/config-server/src/main/java/ru/practicum/explorewithme/infra/configserver/ConfigServerApplication.java @@ -0,0 +1,17 @@ +package ru.practicum.explorewithme.infra.configserver; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.config.server.EnableConfigServer; + +@EnableConfigServer +@SpringBootApplication +@EnableDiscoveryClient +public class ConfigServerApplication { + + public static void main(String[] args) { + SpringApplication.run(ConfigServerApplication.class, args); + } + +} \ No newline at end of file diff --git a/infra/config-server/src/main/resources/application.yaml b/infra/config-server/src/main/resources/application.yaml new file mode 100644 index 0000000..1a1cdc2 --- /dev/null +++ b/infra/config-server/src/main/resources/application.yaml @@ -0,0 +1,22 @@ +server: + port: ${PORT:0} + +spring: + application: + name: config-server + profiles: + active: native + cloud: + config: + server: + native: + searchLocations: + - classpath:config + - classpath:config/{application} + +eureka: + client: + serviceUrl: + defaultZone: ${EUREKA_URI:http://localhost:8761/eureka/} + instance: + prefer-ip-address: true diff --git a/infra/config-server/src/main/resources/config/application-postgres.yaml b/infra/config-server/src/main/resources/config/application-postgres.yaml new file mode 100644 index 0000000..51d04d2 --- /dev/null +++ b/infra/config-server/src/main/resources/config/application-postgres.yaml @@ -0,0 +1,15 @@ +spring: + jpa: + hibernate: + ddl-auto: validate + datasource: + url: ${SPRING_DATASOURCE_URL} + username: ${SPRING_DATASOURCE_USERNAME} + password: ${SPRING_DATASOURCE_PASSWORD} + driver-class-name: org.postgresql.Driver + sql: + init: + mode: always + properties: + hibernate: + dialect: org.hibernate.dialect.PostgreSQLDialect \ No newline at end of file diff --git a/core/main-service/src/main/resources/application-local.yaml b/infra/config-server/src/main/resources/config/main-service/application-local.yaml similarity index 100% rename from core/main-service/src/main/resources/application-local.yaml rename to infra/config-server/src/main/resources/config/main-service/application-local.yaml diff --git a/core/main-service/src/main/resources/application-mapper_test.yaml b/infra/config-server/src/main/resources/config/main-service/application-mapper_test.yaml similarity index 100% rename from core/main-service/src/main/resources/application-mapper_test.yaml rename to infra/config-server/src/main/resources/config/main-service/application-mapper_test.yaml diff --git a/core/main-service/src/main/resources/application-test.yaml b/infra/config-server/src/main/resources/config/main-service/application-test.yaml similarity index 100% rename from core/main-service/src/main/resources/application-test.yaml rename to infra/config-server/src/main/resources/config/main-service/application-test.yaml diff --git a/infra/config-server/src/main/resources/config/main-service/application.yaml b/infra/config-server/src/main/resources/config/main-service/application.yaml new file mode 100644 index 0000000..b1fb646 --- /dev/null +++ b/infra/config-server/src/main/resources/config/main-service/application.yaml @@ -0,0 +1,5 @@ +server: + port: 8080 + +stats-server: + url: http://stats-server:9090 \ No newline at end of file diff --git a/core/stats-service/stats-server/src/main/resources/application-local.yaml b/infra/config-server/src/main/resources/config/stats-server/application-local.yaml similarity index 94% rename from core/stats-service/stats-server/src/main/resources/application-local.yaml rename to infra/config-server/src/main/resources/config/stats-server/application-local.yaml index 6b0b01a..77331d7 100644 --- a/core/stats-service/stats-server/src/main/resources/application-local.yaml +++ b/infra/config-server/src/main/resources/config/stats-server/application-local.yaml @@ -1,3 +1,6 @@ +server: + port: 9090 + spring: datasource: url: jdbc:postgresql://localhost:6543/ewm_stats_db From 616ae931eeb89160e36fe0dcaf813c0736c8cb4e Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sat, 6 Sep 2025 16:47:56 +0300 Subject: [PATCH 07/15] build(config-server): add config server to compose --- compose.yaml | 23 +++++++++++++++++++ infra/config-server/Dockerfile | 5 ++++ .../src/main/resources/application.yaml | 11 +++++++++ 3 files changed, 39 insertions(+) create mode 100644 infra/config-server/Dockerfile diff --git a/compose.yaml b/compose.yaml index c38fbc8..7c40c1c 100644 --- a/compose.yaml +++ b/compose.yaml @@ -15,12 +15,33 @@ services: retries: 5 start_period: 5s + config-server: + build: infra/config-server + container_name: config-server + depends_on: + discovery-server: + condition: service_healthy + ports: + - "8888:8888" + restart: unless-stopped + healthcheck: + test: [ "CMD-SHELL", "curl -f http://localhost:8888/actuator/health | grep -q '\"eureka\":.*\"details\":{\"applications\":{\"CONFIG-SERVER\":1}}'" ] + interval: 5s + timeout: 5s + retries: 10 + start_period: 5s + environment: + EUREKA_URI: http://discovery-server:8761/eureka/ + PORT: 8888 + stats-server: build: core/stats-service/stats-server container_name: ewm-stats-server-compose depends_on: discovery-server: condition: service_healthy + config-server: + condition: service_healthy stats-db: condition: service_healthy ports: @@ -57,6 +78,8 @@ services: depends_on: discovery-server: condition: service_healthy + config-server: + condition: service_healthy ewm-db: condition: service_healthy stats-server: diff --git a/infra/config-server/Dockerfile b/infra/config-server/Dockerfile new file mode 100644 index 0000000..0ff1817 --- /dev/null +++ b/infra/config-server/Dockerfile @@ -0,0 +1,5 @@ +FROM eclipse-temurin:21-jre-jammy +VOLUME /tmp +ARG JAR_FILE=target/*.jar +COPY ${JAR_FILE} app.jar +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"] \ No newline at end of file diff --git a/infra/config-server/src/main/resources/application.yaml b/infra/config-server/src/main/resources/application.yaml index 1a1cdc2..1efd2bd 100644 --- a/infra/config-server/src/main/resources/application.yaml +++ b/infra/config-server/src/main/resources/application.yaml @@ -20,3 +20,14 @@ eureka: defaultZone: ${EUREKA_URI:http://localhost:8761/eureka/} instance: prefer-ip-address: true + +management: + endpoint: + health: + show-details: always + probes: + enabled: true + endpoints: + web: + exposure: + include: health, info \ No newline at end of file From b3ecb5f0e8fa09fce7a21370d73fb261503b5142 Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sat, 6 Sep 2025 18:55:26 +0300 Subject: [PATCH 08/15] feat(gateway-server): implement gateway server with circuit breaker --- compose.yaml | 19 ++++- .../config/gateway-server/application.yaml | 84 +++++++++++++++++++ .../main-service/application-local.yaml | 3 + .../config/main-service/application.yaml | 15 ++-- .../config/stats-server/application.yaml | 10 +++ infra/discovery-server/pom.xml | 1 + infra/gateway-server/Dockerfile | 5 ++ infra/gateway-server/pom.xml | 43 ++++++++++ .../infra/gateway/GatewayApplication.java | 14 ++++ .../controller/FallbackController.java | 19 +++++ .../src/main/resources/application.yaml | 25 ++++++ 11 files changed, 231 insertions(+), 7 deletions(-) create mode 100644 infra/config-server/src/main/resources/config/gateway-server/application.yaml create mode 100644 infra/config-server/src/main/resources/config/stats-server/application.yaml create mode 100644 infra/gateway-server/Dockerfile create mode 100644 infra/gateway-server/src/main/java/ru/practicum/explorewithme/infra/gateway/GatewayApplication.java create mode 100644 infra/gateway-server/src/main/java/ru/practicum/explorewithme/infra/gateway/controller/FallbackController.java create mode 100644 infra/gateway-server/src/main/resources/application.yaml diff --git a/compose.yaml b/compose.yaml index 7c40c1c..517b78a 100644 --- a/compose.yaml +++ b/compose.yaml @@ -29,11 +29,26 @@ services: interval: 5s timeout: 5s retries: 10 - start_period: 5s + start_period: 10s environment: EUREKA_URI: http://discovery-server:8761/eureka/ PORT: 8888 + gateway-server: + build: infra/gateway-server + container_name: gateway-server + depends_on: + discovery-server: + condition: service_healthy + config-server: + condition: service_healthy + ports: + - "8080:8080" + restart: unless-stopped + environment: + EUREKA_URI: http://discovery-server:8761/eureka/ + PORT: 8080 + stats-server: build: core/stats-service/stats-server container_name: ewm-stats-server-compose @@ -85,7 +100,7 @@ services: stats-server: condition: service_started ports: - - "8080:8080" + - "8081:8081" environment: EUREKA_URI: http://discovery-server:8761/eureka/ SPRING_DATASOURCE_URL: jdbc:postgresql://ewm-db:5432/ewm_main_db diff --git a/infra/config-server/src/main/resources/config/gateway-server/application.yaml b/infra/config-server/src/main/resources/config/gateway-server/application.yaml new file mode 100644 index 0000000..73fc080 --- /dev/null +++ b/infra/config-server/src/main/resources/config/gateway-server/application.yaml @@ -0,0 +1,84 @@ +server: + port: ${PORT:8080} + +spring: + cloud: + gateway: + server: + webflux: + discovery: + locator: + enabled: false + default-filters: + - name: Retry + args: + retries: 3 + statuses: + - SERVICE_UNAVAILABLE # 503 + - BAD_GATEWAY # 502 + - GATEWAY_TIMEOUT # 504 + methods: + - GET + backoff: + firstBackoff: 25ms + maxBackoff: 300ms + factor: 2 + basedOnPreviousValue: false + + - name: CircuitBreaker + args: + name: default-breaker + fallbackUri: forward:/service-fallback + routes: + - id: main-service-admin-route + uri: lb://main-service + predicates: + - Path=/admin/** + + - id: main-service-users-route + uri: lb://main-service + predicates: + - Path=/users/** + + - id: main-service-categories-route + uri: lb://main-service + predicates: + - Path=/categories/** + + - id: main-service-events-route + uri: lb://main-service + predicates: + - Path=/events/** + + - id: main-service-compilations-route + uri: lb://main-service + predicates: + - Path=/compilations/** + loadbalancer: + enabled: true + retry: + enabled: false # no retry cascades + cache: + enabled: true + ttl: 30s + +resilience4j: + circuitbreaker: + configs: + default: + slidingWindowType: COUNT_BASED + slidingWindowSize: 20 + failureRateThreshold: 50 + waitDurationInOpenState: 10s + permittedNumberOfCallsInHalfOpenState: 3 + slowCallRateThreshold: 50 + slowCallDurationThreshold: 2s + + instances: + default-breaker: + baseConfig: default + + timelimiter: + configs: + default: + timeoutDuration: 4s \ No newline at end of file diff --git a/infra/config-server/src/main/resources/config/main-service/application-local.yaml b/infra/config-server/src/main/resources/config/main-service/application-local.yaml index 43b09bd..951b000 100644 --- a/infra/config-server/src/main/resources/config/main-service/application-local.yaml +++ b/infra/config-server/src/main/resources/config/main-service/application-local.yaml @@ -1,3 +1,6 @@ +server: + port: 8081 + stats-server: url: http://localhost:9090 diff --git a/infra/config-server/src/main/resources/config/main-service/application.yaml b/infra/config-server/src/main/resources/config/main-service/application.yaml index b1fb646..a8e6e5c 100644 --- a/infra/config-server/src/main/resources/config/main-service/application.yaml +++ b/infra/config-server/src/main/resources/config/main-service/application.yaml @@ -1,5 +1,10 @@ -server: - port: 8080 - -stats-server: - url: http://stats-server:9090 \ No newline at end of file +management: + endpoint: + health: + show-details: always + probes: + enabled: true + endpoints: + web: + exposure: + include: health, info \ No newline at end of file diff --git a/infra/config-server/src/main/resources/config/stats-server/application.yaml b/infra/config-server/src/main/resources/config/stats-server/application.yaml new file mode 100644 index 0000000..a8e6e5c --- /dev/null +++ b/infra/config-server/src/main/resources/config/stats-server/application.yaml @@ -0,0 +1,10 @@ +management: + endpoint: + health: + show-details: always + probes: + enabled: true + endpoints: + web: + exposure: + include: health, info \ No newline at end of file diff --git a/infra/discovery-server/pom.xml b/infra/discovery-server/pom.xml index 818d07a..700311c 100644 --- a/infra/discovery-server/pom.xml +++ b/infra/discovery-server/pom.xml @@ -7,6 +7,7 @@ ru.practicum infra 0.0.1-SNAPSHOT + ../pom.xml discovery-server diff --git a/infra/gateway-server/Dockerfile b/infra/gateway-server/Dockerfile new file mode 100644 index 0000000..0ff1817 --- /dev/null +++ b/infra/gateway-server/Dockerfile @@ -0,0 +1,5 @@ +FROM eclipse-temurin:21-jre-jammy +VOLUME /tmp +ARG JAR_FILE=target/*.jar +COPY ${JAR_FILE} app.jar +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"] \ No newline at end of file diff --git a/infra/gateway-server/pom.xml b/infra/gateway-server/pom.xml index 691315b..688e18d 100644 --- a/infra/gateway-server/pom.xml +++ b/infra/gateway-server/pom.xml @@ -7,6 +7,7 @@ ru.practicum infra 0.0.1-SNAPSHOT + ../pom.xml gateway-server @@ -17,4 +18,46 @@ UTF-8 + + + org.springframework.cloud + spring-cloud-starter-gateway-server-webflux + + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + + org.springframework.cloud + spring-cloud-starter-config + + + + org.springframework.cloud + spring-cloud-starter-circuitbreaker-reactor-resilience4j + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.projectlombok + lombok + provided + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/infra/gateway-server/src/main/java/ru/practicum/explorewithme/infra/gateway/GatewayApplication.java b/infra/gateway-server/src/main/java/ru/practicum/explorewithme/infra/gateway/GatewayApplication.java new file mode 100644 index 0000000..a5cb128 --- /dev/null +++ b/infra/gateway-server/src/main/java/ru/practicum/explorewithme/infra/gateway/GatewayApplication.java @@ -0,0 +1,14 @@ +package ru.practicum.explorewithme.infra.gateway; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +@SpringBootApplication +@EnableDiscoveryClient +public class GatewayApplication { + + public static void main(String[] args) { + SpringApplication.run(GatewayApplication.class, args); + } +} diff --git a/infra/gateway-server/src/main/java/ru/practicum/explorewithme/infra/gateway/controller/FallbackController.java b/infra/gateway-server/src/main/java/ru/practicum/explorewithme/infra/gateway/controller/FallbackController.java new file mode 100644 index 0000000..5f7bdfe --- /dev/null +++ b/infra/gateway-server/src/main/java/ru/practicum/explorewithme/infra/gateway/controller/FallbackController.java @@ -0,0 +1,19 @@ +package ru.practicum.explorewithme.infra.gateway.controller; + +import java.util.HashMap; +import java.util.Map; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Mono; + +@RestController +public class FallbackController { + + @RequestMapping("/service-fallback") + public Mono> serviceFallback() { + Map response = new HashMap<>(); + response.put("status", "error"); + response.put("message", "The requested service is currently unavailable. Please try again later."); + return Mono.just(response); + } +} diff --git a/infra/gateway-server/src/main/resources/application.yaml b/infra/gateway-server/src/main/resources/application.yaml new file mode 100644 index 0000000..711575f --- /dev/null +++ b/infra/gateway-server/src/main/resources/application.yaml @@ -0,0 +1,25 @@ +spring: + application: + name: gateway-server + config: + import: "configserver:" + cloud: + config: + discovery: + enabled: true + serviceId: config-server + fail-fast: true + retry: + max-attempts: 10 + initial-interval: 1000 + useRandomPolicy: true + +eureka: + client: + serviceUrl: + defaultZone: ${EUREKA_URI:http://localhost:8761/eureka/} + healthcheck: + enabled: true + instance: + instance-id: "${spring.application.name}:${random.value}" + leaseRenewalIntervalInSeconds: 10 From b4156375652c9cb642a133bf24cafada6c85d8dc Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sat, 6 Sep 2025 19:37:33 +0300 Subject: [PATCH 09/15] test: fix integration tests by disabling cloud dependencies --- .../test/resources}/application-mapper_test.yaml | 0 .../src/test/resources}/application-test.yaml | 0 .../src/test/resources/application.yaml | 15 +++++++++++++++ .../src/test/resources/application.yaml | 9 +++++++++ 4 files changed, 24 insertions(+) rename {infra/config-server/src/main/resources/config/main-service => core/main-service/src/test/resources}/application-mapper_test.yaml (100%) rename {infra/config-server/src/main/resources/config/main-service => core/main-service/src/test/resources}/application-test.yaml (100%) create mode 100644 core/main-service/src/test/resources/application.yaml create mode 100644 core/stats-service/stats-server/src/test/resources/application.yaml diff --git a/infra/config-server/src/main/resources/config/main-service/application-mapper_test.yaml b/core/main-service/src/test/resources/application-mapper_test.yaml similarity index 100% rename from infra/config-server/src/main/resources/config/main-service/application-mapper_test.yaml rename to core/main-service/src/test/resources/application-mapper_test.yaml diff --git a/infra/config-server/src/main/resources/config/main-service/application-test.yaml b/core/main-service/src/test/resources/application-test.yaml similarity index 100% rename from infra/config-server/src/main/resources/config/main-service/application-test.yaml rename to core/main-service/src/test/resources/application-test.yaml diff --git a/core/main-service/src/test/resources/application.yaml b/core/main-service/src/test/resources/application.yaml new file mode 100644 index 0000000..18b8a7c --- /dev/null +++ b/core/main-service/src/test/resources/application.yaml @@ -0,0 +1,15 @@ +spring: + cloud: + config: + enabled: false + discovery: + enabled: false + sql: + init: + mode: always + properties: + hibernate: + dialect: org.hibernate.dialect.PostgreSQLDialect +eureka: + client: + enabled: false \ No newline at end of file diff --git a/core/stats-service/stats-server/src/test/resources/application.yaml b/core/stats-service/stats-server/src/test/resources/application.yaml new file mode 100644 index 0000000..689e431 --- /dev/null +++ b/core/stats-service/stats-server/src/test/resources/application.yaml @@ -0,0 +1,9 @@ +spring: + cloud: + config: + enabled: false + discovery: + enabled: false +eureka: + client: + enabled: false \ No newline at end of file From ad4eb3dbb6f845d4dfcd75dcc4c671aca7abea38 Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sat, 6 Sep 2025 23:19:49 +0300 Subject: [PATCH 10/15] refactor: move commons module under core --- {ewm-common => core/ewm-common}/pom.xml | 2 +- .../explorewithme/common/constants/DateTimeConstants.java | 0 .../java/ru/practicum/explorewithme/common/error/ApiError.java | 0 core/pom.xml | 1 + pom.xml | 1 - 5 files changed, 2 insertions(+), 2 deletions(-) rename {ewm-common => core/ewm-common}/pom.xml (95%) rename {ewm-common => core/ewm-common}/src/main/java/ru/practicum/explorewithme/common/constants/DateTimeConstants.java (100%) rename {ewm-common => core/ewm-common}/src/main/java/ru/practicum/explorewithme/common/error/ApiError.java (100%) diff --git a/ewm-common/pom.xml b/core/ewm-common/pom.xml similarity index 95% rename from ewm-common/pom.xml rename to core/ewm-common/pom.xml index c835673..684588d 100644 --- a/ewm-common/pom.xml +++ b/core/ewm-common/pom.xml @@ -5,7 +5,7 @@ 4.0.0 ru.practicum - explore-with-me + core 0.0.1-SNAPSHOT ../pom.xml diff --git a/ewm-common/src/main/java/ru/practicum/explorewithme/common/constants/DateTimeConstants.java b/core/ewm-common/src/main/java/ru/practicum/explorewithme/common/constants/DateTimeConstants.java similarity index 100% rename from ewm-common/src/main/java/ru/practicum/explorewithme/common/constants/DateTimeConstants.java rename to core/ewm-common/src/main/java/ru/practicum/explorewithme/common/constants/DateTimeConstants.java diff --git a/ewm-common/src/main/java/ru/practicum/explorewithme/common/error/ApiError.java b/core/ewm-common/src/main/java/ru/practicum/explorewithme/common/error/ApiError.java similarity index 100% rename from ewm-common/src/main/java/ru/practicum/explorewithme/common/error/ApiError.java rename to core/ewm-common/src/main/java/ru/practicum/explorewithme/common/error/ApiError.java diff --git a/core/pom.xml b/core/pom.xml index 51e8214..7d7ae9c 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -21,6 +21,7 @@ main-service stats-service + ewm-common \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2e3109d..c3176a1 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,6 @@ - ewm-common infra core From 52f1e350fbe16b2953bd84fe2301d9ae48561d94 Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sat, 6 Sep 2025 23:20:08 +0300 Subject: [PATCH 11/15] docs: update README after refactor --- README.md | 160 ++++++++++++++++++++++-------------------------------- 1 file changed, 65 insertions(+), 95 deletions(-) diff --git a/README.md b/README.md index a5ef670..bbb7829 100644 --- a/README.md +++ b/README.md @@ -1,162 +1,132 @@ # Explore With Me (Исследуй со мной) -Приложение-афиша, позволяющее пользователям делиться информацией об интересных событиях и находить компанию для участия в них. Изначально проект был разработан в команде в рамках обучения в Яндекс Практикуме, а в настоящее время дорабатывается и расширяется как индивидуальный дипломный проект. +Приложение-афиша, позволяющее пользователям делиться информацией об интересных событиях и находить компанию для участия в них. Изначально проект был разработан в команде в рамках обучения в Яндекс Практикуме. + +В настоящее время проект развивается как индивидуальный дипломный проект, в рамках которого архитектура была переведена на современный микросервисный стек с использованием **Spring Cloud**. ## Оглавление +- [Архитектура](#архитектура) - [Технологии](#технологии) - [Структура проекта](#структура-проекта) - [API Спецификации](#api-спецификации) - [Начало работы](#начало-работы) - [Предварительные требования](#предварительные-требования) - [Сборка проекта](#сборка-проекта) - - [Запуск с использованием Docker Compose](#запуск-с-использованием-docker-compose) + - [Запуск с использованием Docker Compose (Рекомендуемый способ)](#запуск-с-использованием-docker-compose-рекомендуемый-способ) - [Локальный запуск для разработки (IntelliJ IDEA)](#локальный-запуск-для-разработки-intellij-idea) - - [Локальный запуск Stats Service](#локальный-запуск-stats-service-stats-server) - - [Локальный запуск Main Service](#локальный-запуск-main-service-main-service) - [Примеры использования API](#примеры-использования-api) - - [Публичные эндпоинты Событий, Категорий, Подборок](#публичные-эндпоинты-событий-категорий-подборок) - - [Публичные эндпоинты Комментариев](#публичные-эндпоинты-комментариев) - [Тестирование](#тестирование) - - [Юнит и Интеграционные тесты](#юнит-и-интеграционные-тесты) - - [Postman-тесты для Дополнительной Функциональности](#postman-тесты-для-дополнительной-функциональности) - [Реализованная Дополнительная Функциональность: Комментарии](#реализованная-дополнительная-функциональность-комментарии) - [История проекта и Автор](#история-проекта-и-автор) +## Архитектура + +Приложение построено на основе микросервисной архитектуры с использованием компонентов **Spring Cloud** для обеспечения отказоустойчивости, масштабируемости и централизованного управления. + +- **API Gateway (`gateway-server`)**: Единая точка входа для всех внешних запросов. Отвечает за маршрутизацию, балансировку нагрузки, а также реализует паттерны отказоустойчивости (Retries, Circuit Breaker с использованием Resilience4j). +- **Discovery Server (`discovery-server`)**: Сервер обнаружения сервисов (Netflix Eureka). Все микросервисы регистрируются в нем, что позволяет им динамически находить друг друга по имени, не используя статические IP-адреса и порты. +- **Config Server (`config-server`)**: Сервер конфигурации. Предоставляет централизованное управление конфигурацией для всех сервисов. Сами сервисы при запуске запрашивают свои настройки у Config Server. +- **Межсервисное взаимодействие**: Для коммуникации между `main-service` и `stats-server` используется декларативный HTTP-клиент **OpenFeign**, который интегрирован с Eureka для динамического обнаружения сервисов. + ## Технологии - Java 21 -- Spring Boot 3.4.5 +- Spring Boot 3.5.5 +- Spring Cloud (Gateway, Netflix Eureka, Config) +- OpenFeign, Resilience4j (межсервисное взаимодействие и отказоустойчивость) - Spring Data JPA, QueryDSL -- Spring MVC, Spring AOP (для интеграции со StatsClient) +- Spring MVC, Spring AOP (интеграция со StatsClient) - PostgreSQL 16.1 - Maven - Docker / Docker Compose -- Lombok -- MapStruct (для маппинга DTO) -- JUnit 5, Mockito -- Testcontainers -- Checkstyle, Spotbugs, Jacoco (для контроля качества кода) +- Lombok, MapStruct +- JUnit 5, Mockito, Testcontainers +- Checkstyle, Spotbugs, Jacoco (контроль качества кода) ## Структура проекта -Проект является многомодульным Maven-проектом и состоит из следующих основных частей: +Проект является многомодульным Maven-проектом и разделен на два логических слоя: `core` (бизнес-логика) и `infra` (инфраструктурные сервисы). -- `explore-with-me` (корневой POM) - - `ewm-common`: Общий модуль, содержащий классы, используемые как основным сервисом, так и сервисом статистики (например, `ApiError.java`, общие константы). - - `main-service`: Основной сервис приложения. Отвечает за бизнес-логику, управление пользователями, событиями, категориями, подборками и запросами на участие. Взаимодействует с `stats-client` для сбора статистики. - - `Dockerfile` - - `schema.sql` (для инициализации схемы БД `ewm_main_db`) - - `stats-service` (родительский POM для модулей статистики) - - `stats-dto`: Data Transfer Objects (DTO) для сервиса статистики. - * `stats-client`: HTTP-клиент для взаимодействия с API сервиса статистики (используется `main-service`). - * `stats-server`: Сервис статистики (сбор и предоставление данных о запросах к эндпоинтам). - * `Dockerfile` - * `schema.sql` (для инициализации схемы БД `ewm_stats_db`) +``` +explore-with-me/ +| +├── core/ (Модули, реализующие бизнес-логику приложения) +│ ├── ewm-common/ (Общий модуль для core-сервисов) +│ ├── main-service/ +│ └── stats-service/ +│ ├── stats-client/ +│ ├── stats-dto/ +│ └── stats-server/ +| +└── infra/ (Инфраструктурные сервисы Spring Cloud) + ├── config-server/ (Сервер конфигурации) + ├── discovery-server/ (Сервер обнаружения) + └── gateway-server/ (API-шлюз) +``` ## API Спецификации -Актуальные спецификации API, включая эндпоинты для реализованной дополнительной функциональности "Комментарии", можно найти в репозитории: +Спецификации API остаются без изменений, так как инфраструктурные преобразования не затронули публичный контракт сервисов. - **Основной сервис:** [`ewm-main-service-spec.json`](https://github.com/impatient0/java-plus-graduation/blob/main/ewm-main-service-spec.json) - * *Примечание: Оригинальная спецификация от Яндекс Практикума [здесь](https://raw.githubusercontent.com/yandex-praktikum/java-explore-with-me/main/ewm-main-service-spec.json) не включает эндпоинты для комментариев. Описание реализованных эндпоинтов для комментариев см. в разделе [Реализованная Дополнительная Функциональность: Комментарии](#реализованная-дополнительная-функциональность-комментарии).* - **Сервис статистики:** [`ewm-stats-service.json`](https://github.com/impatient0/java-plus-graduation/blob/main/ewm-stats-service-spec.json) -*Рекомендуется просматривать через Swagger Editor или аналогичный инструмент.* - ## Начало работы ### Предварительные требования -Для работы с проектом вам понадобятся: - - JDK 21 - Apache Maven 3.6+ - Docker и Docker Compose -- IntelliJ IDEA (рекомендуется) ### Сборка проекта -Для сборки всех модулей проекта (включая генерацию Q-типов QueryDSL и реализаций MapStruct) выполните: +Для сборки всех модулей проекта выполните команду в корневой директории: ```bash mvn clean install ``` -Эта команда также запустит статические анализаторы кода и юнит-тесты. -### Запуск с использованием Docker Compose +### Запуск с использованием Docker Compose (Рекомендуемый способ) -Это основной способ запуска всего приложения для проверки взаимодействия сервисов. +Это основной способ запуска всего приложения, который поднимает все 5 сервисов в правильном порядке. 1. **Соберите проект:** `mvn clean install` 2. **Запустите сервисы:** В корневой директории проекта выполните: ```bash - docker-compose up --build -d + docker-compose up --build ``` - - Сервис статистики (`stats-server`): `http://localhost:9090` - - Основной сервис (`main-service`): `http://localhost:8080` + Эта команда запустит: + - `discovery-server` + - `config-server` + - `stats-server` (и его БД) + - `main-service` (и его БД) + - `gateway-server` + +3. **Доступ к приложению:** + - **Единая точка входа (API Gateway):** `http://localhost:8080` + - **Eureka Dashboard:** `http://localhost:8761` -3. **Просмотр логов:** - ```bash - docker-compose logs -f main-service - docker-compose logs -f stats-server - ``` 4. **Остановка сервисов:** - ```bash - docker-compose down - ``` - Для удаления volumes (данных БД): ```bash docker-compose down -v ``` - *Примечание: При первом запуске `docker-compose up` скрипты `schema.sql` из каждого сервиса будут выполнены для создания таблиц в соответствующих базах данных.* ### Локальный запуск для разработки (IntelliJ IDEA) -#### Локальный запуск Stats Service (`stats-server`) - -Предусмотрен профиль запуска `stat-local` в IntelliJ IDEA. - -1. **База данных для `stats-server`:** Настройте локальный PostgreSQL согласно `stats-service/stats-server/src/main/resources/application-local.yml` (порт, имя БД, пользователь, пароль). - ```yaml - # stats-service/stats-server/src/main/resources/application-local.yml - spring: - datasource: - url: jdbc:postgresql://localhost:6543/ewm_stats_db # Пример - username: stats_user - password: stats_password - jpa: - hibernate: - ddl-auto: validate # Используется schema.sql из classpath (src/main/resources) - sql: - init: - mode: always # Для выполнения schema.sql при локальном запуске - ``` -2. **Запуск `StatsServerApplication`:** Используйте Run Configuration "stat-local" (VM options: `-Dspring.profiles.active=local`). - -#### Локальный запуск Main Service (`main-service`) - -Предусмотрен профиль запуска `main-local` в IntelliJ IDEA. - -1. **База данных для `main-service`:** Настройте локальный PostgreSQL согласно `main-service/src/main/resources/application-local.yml`. - ```yaml - # main-service/src/main/resources/application-local.yml - stats-server: - url: http://localhost:9090 # Если stats-server тоже запущен локально - - spring: - datasource: - url: jdbc:postgresql://localhost:5432/ewm_main_db # Пример - username: ewm_user - password: ewm_password - jpa: - hibernate: - ddl-auto: validate # Используется schema.sql из classpath - sql: - init: - mode: always # Для выполнения schema.sql при локальном запуске - ``` -2. **Запуск `MainServiceApplication`:** Используйте Run Configuration "main-local" (VM options: `-Dspring.profiles.active=local`). Убедитесь, что `stats-server` уже запущен (локально или в Docker), так как `main-service` от него зависит. +Локальный запуск требует ручного старта всех сервисов в правильной последовательности. Это полезно для отладки конкретного сервиса. + +**Важно:** Все сервисы (кроме `gateway-server` и `discovery-server`) запускаются на случайных портах и получают свою конфигурацию от `config-server`. + +**Порядок запуска:** + +1. **`discovery-server`**: Запустите `DiscoveryServerApplication`. Дождитесь полного старта. +2. **`config-server`**: Запустите `ConfigServerApplication`. Убедитесь, что он зарегистрировался в Eureka. +3. **`stats-server`** и **`main-service`**: Запустите профили `main-local` и `stats-local` (порядок между ними не важен). Они запустят приложения `MainServiceApplication` и `StatsServerApplication`, а также их БД. +4. **`gateway-server`**: Запустите `GatewayServerApplication`. + +После запуска всех сервисов **все API-запросы** должны направляться на порт API Gateway: `http://localhost:8080`. ## Примеры использования API From 2618cef84ed842a90ff49401f878fb7992426865 Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sat, 6 Sep 2025 23:30:16 +0300 Subject: [PATCH 12/15] feat(core): set random ports for core services --- .../src/main/resources/config/main-service/application.yaml | 3 +++ .../src/main/resources/config/stats-server/application.yaml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/infra/config-server/src/main/resources/config/main-service/application.yaml b/infra/config-server/src/main/resources/config/main-service/application.yaml index a8e6e5c..213525f 100644 --- a/infra/config-server/src/main/resources/config/main-service/application.yaml +++ b/infra/config-server/src/main/resources/config/main-service/application.yaml @@ -1,3 +1,6 @@ +server: + port: 0 + management: endpoint: health: diff --git a/infra/config-server/src/main/resources/config/stats-server/application.yaml b/infra/config-server/src/main/resources/config/stats-server/application.yaml index a8e6e5c..213525f 100644 --- a/infra/config-server/src/main/resources/config/stats-server/application.yaml +++ b/infra/config-server/src/main/resources/config/stats-server/application.yaml @@ -1,3 +1,6 @@ +server: + port: 0 + management: endpoint: health: From 64733e3926b82703d3620b6892faebb1a85ac772 Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sun, 7 Sep 2025 01:02:28 +0300 Subject: [PATCH 13/15] feat: improve actuator endpoints configuration and Eureka healthchecks --- .../src/main/resources/application.yaml | 3 +++ .../src/main/resources/config/application.yaml | 10 ++++++++++ .../config/gateway-server/application.yaml | 11 ++++++++++- .../resources/config/main-service/application.yaml | 13 +------------ .../resources/config/stats-server/application.yaml | 13 +------------ 5 files changed, 25 insertions(+), 25 deletions(-) create mode 100644 infra/config-server/src/main/resources/config/application.yaml diff --git a/infra/config-server/src/main/resources/application.yaml b/infra/config-server/src/main/resources/application.yaml index 1efd2bd..9342346 100644 --- a/infra/config-server/src/main/resources/application.yaml +++ b/infra/config-server/src/main/resources/application.yaml @@ -18,6 +18,9 @@ eureka: client: serviceUrl: defaultZone: ${EUREKA_URI:http://localhost:8761/eureka/} + healthcheck: + enabled: true + instance: prefer-ip-address: true diff --git a/infra/config-server/src/main/resources/config/application.yaml b/infra/config-server/src/main/resources/config/application.yaml new file mode 100644 index 0000000..73819b4 --- /dev/null +++ b/infra/config-server/src/main/resources/config/application.yaml @@ -0,0 +1,10 @@ +management: + endpoints: + web: + exposure: + include: health,info + endpoint: + health: + show-details: always + probes: + enabled: true \ No newline at end of file diff --git a/infra/config-server/src/main/resources/config/gateway-server/application.yaml b/infra/config-server/src/main/resources/config/gateway-server/application.yaml index 73fc080..1a1155c 100644 --- a/infra/config-server/src/main/resources/config/gateway-server/application.yaml +++ b/infra/config-server/src/main/resources/config/gateway-server/application.yaml @@ -81,4 +81,13 @@ resilience4j: timelimiter: configs: default: - timeoutDuration: 4s \ No newline at end of file + timeoutDuration: 4s + +management: + endpoints: + web: + exposure: + include: gateway,health,info + endpoint: + gateway: + enabled: true \ No newline at end of file diff --git a/infra/config-server/src/main/resources/config/main-service/application.yaml b/infra/config-server/src/main/resources/config/main-service/application.yaml index 213525f..46eac2f 100644 --- a/infra/config-server/src/main/resources/config/main-service/application.yaml +++ b/infra/config-server/src/main/resources/config/main-service/application.yaml @@ -1,13 +1,2 @@ server: - port: 0 - -management: - endpoint: - health: - show-details: always - probes: - enabled: true - endpoints: - web: - exposure: - include: health, info \ No newline at end of file + port: 0 \ No newline at end of file diff --git a/infra/config-server/src/main/resources/config/stats-server/application.yaml b/infra/config-server/src/main/resources/config/stats-server/application.yaml index 213525f..46eac2f 100644 --- a/infra/config-server/src/main/resources/config/stats-server/application.yaml +++ b/infra/config-server/src/main/resources/config/stats-server/application.yaml @@ -1,13 +1,2 @@ server: - port: 0 - -management: - endpoint: - health: - show-details: always - probes: - enabled: true - endpoints: - web: - exposure: - include: health, info \ No newline at end of file + port: 0 \ No newline at end of file From ac305f83e841f93357ae03244bb7778f5315e137 Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sun, 7 Sep 2025 01:22:07 +0300 Subject: [PATCH 14/15] fix: make Eureka check readiness instead of liveliness --- .../src/main/resources/application.yaml | 1 + .../src/main/resources/application.yaml | 1 + .../src/main/resources/application.yaml | 1 + .../src/main/resources/config/application.yaml | 16 ++++++++++------ .../config/gateway-server/application.yaml | 10 +++++++++- infra/gateway-server/pom.xml | 5 +++++ .../src/main/resources/application.yaml | 1 + 7 files changed, 28 insertions(+), 7 deletions(-) diff --git a/core/main-service/src/main/resources/application.yaml b/core/main-service/src/main/resources/application.yaml index e9a2008..6afe14d 100644 --- a/core/main-service/src/main/resources/application.yaml +++ b/core/main-service/src/main/resources/application.yaml @@ -23,5 +23,6 @@ eureka: healthcheck: enabled: true instance: + health-check-url-path: /actuator/health/readiness instance-id: "${spring.application.name}:${random.value}" leaseRenewalIntervalInSeconds: 10 \ No newline at end of file diff --git a/core/stats-service/stats-server/src/main/resources/application.yaml b/core/stats-service/stats-server/src/main/resources/application.yaml index 0bb0491..eb3f23f 100644 --- a/core/stats-service/stats-server/src/main/resources/application.yaml +++ b/core/stats-service/stats-server/src/main/resources/application.yaml @@ -23,5 +23,6 @@ eureka: healthcheck: enabled: true instance: + health-check-url-path: /actuator/health/readiness instance-id: "${spring.application.name}:${random.value}" leaseRenewalIntervalInSeconds: 10 diff --git a/infra/config-server/src/main/resources/application.yaml b/infra/config-server/src/main/resources/application.yaml index 9342346..a86d23b 100644 --- a/infra/config-server/src/main/resources/application.yaml +++ b/infra/config-server/src/main/resources/application.yaml @@ -22,6 +22,7 @@ eureka: enabled: true instance: + health-check-url-path: /actuator/health/readiness prefer-ip-address: true management: diff --git a/infra/config-server/src/main/resources/config/application.yaml b/infra/config-server/src/main/resources/config/application.yaml index 73819b4..b9c2658 100644 --- a/infra/config-server/src/main/resources/config/application.yaml +++ b/infra/config-server/src/main/resources/config/application.yaml @@ -1,10 +1,14 @@ management: - endpoints: - web: - exposure: - include: health,info endpoint: health: - show-details: always probes: - enabled: true \ No newline at end of file + enabled: true + health: + livenessstate: + enabled: true + readinessstate: + enabled: true + endpoints: + web: + exposure: + include: health,info,prometheus \ No newline at end of file diff --git a/infra/config-server/src/main/resources/config/gateway-server/application.yaml b/infra/config-server/src/main/resources/config/gateway-server/application.yaml index 1a1155c..b7045cc 100644 --- a/infra/config-server/src/main/resources/config/gateway-server/application.yaml +++ b/infra/config-server/src/main/resources/config/gateway-server/application.yaml @@ -87,7 +87,15 @@ management: endpoints: web: exposure: - include: gateway,health,info + include: health,info,gateway endpoint: + health: + probes: + enabled: true gateway: + enabled: true + health: + livenessstate: + enabled: true + readinessstate: enabled: true \ No newline at end of file diff --git a/infra/gateway-server/pom.xml b/infra/gateway-server/pom.xml index 688e18d..1d9f72b 100644 --- a/infra/gateway-server/pom.xml +++ b/infra/gateway-server/pom.xml @@ -24,6 +24,11 @@ spring-cloud-starter-gateway-server-webflux + + org.springframework.boot + spring-boot-starter-webflux + + org.springframework.cloud spring-cloud-starter-netflix-eureka-client diff --git a/infra/gateway-server/src/main/resources/application.yaml b/infra/gateway-server/src/main/resources/application.yaml index 711575f..5685afa 100644 --- a/infra/gateway-server/src/main/resources/application.yaml +++ b/infra/gateway-server/src/main/resources/application.yaml @@ -21,5 +21,6 @@ eureka: healthcheck: enabled: true instance: + health-check-url-path: /actuator/health/readiness instance-id: "${spring.application.name}:${random.value}" leaseRenewalIntervalInSeconds: 10 From 055a1c76d9cffcb163b59b569da5746b382bffe5 Mon Sep 17 00:00:00 2001 From: Pepe Ronin Date: Sun, 7 Sep 2025 02:33:54 +0300 Subject: [PATCH 15/15] fix: reduce Eureka poll intervals --- .../src/main/resources/application.yaml | 3 --- core/stats-service/stats-server/pom.xml | 1 + .../src/main/resources/application.yaml | 3 --- infra/config-server/pom.xml | 1 + .../src/main/resources/application.yaml | 3 --- .../src/main/resources/config/application.yaml | 13 ++++++++++++- infra/gateway-server/pom.xml | 1 + .../src/main/resources/application.yaml | 3 --- 8 files changed, 15 insertions(+), 13 deletions(-) diff --git a/core/main-service/src/main/resources/application.yaml b/core/main-service/src/main/resources/application.yaml index 6afe14d..b7474dd 100644 --- a/core/main-service/src/main/resources/application.yaml +++ b/core/main-service/src/main/resources/application.yaml @@ -20,9 +20,6 @@ eureka: client: serviceUrl: defaultZone: ${EUREKA_URI:http://localhost:8761/eureka/} - healthcheck: - enabled: true instance: - health-check-url-path: /actuator/health/readiness instance-id: "${spring.application.name}:${random.value}" leaseRenewalIntervalInSeconds: 10 \ No newline at end of file diff --git a/core/stats-service/stats-server/pom.xml b/core/stats-service/stats-server/pom.xml index 97eac4c..3f6a3e6 100644 --- a/core/stats-service/stats-server/pom.xml +++ b/core/stats-service/stats-server/pom.xml @@ -11,6 +11,7 @@ stats-server + jar diff --git a/core/stats-service/stats-server/src/main/resources/application.yaml b/core/stats-service/stats-server/src/main/resources/application.yaml index eb3f23f..cf15002 100644 --- a/core/stats-service/stats-server/src/main/resources/application.yaml +++ b/core/stats-service/stats-server/src/main/resources/application.yaml @@ -20,9 +20,6 @@ eureka: client: serviceUrl: defaultZone: ${EUREKA_URI:http://localhost:8761/eureka/} - healthcheck: - enabled: true instance: - health-check-url-path: /actuator/health/readiness instance-id: "${spring.application.name}:${random.value}" leaseRenewalIntervalInSeconds: 10 diff --git a/infra/config-server/pom.xml b/infra/config-server/pom.xml index 160d04a..41078ba 100644 --- a/infra/config-server/pom.xml +++ b/infra/config-server/pom.xml @@ -11,6 +11,7 @@ config-server + jar 21 diff --git a/infra/config-server/src/main/resources/application.yaml b/infra/config-server/src/main/resources/application.yaml index a86d23b..2fe93a1 100644 --- a/infra/config-server/src/main/resources/application.yaml +++ b/infra/config-server/src/main/resources/application.yaml @@ -18,11 +18,8 @@ eureka: client: serviceUrl: defaultZone: ${EUREKA_URI:http://localhost:8761/eureka/} - healthcheck: - enabled: true instance: - health-check-url-path: /actuator/health/readiness prefer-ip-address: true management: diff --git a/infra/config-server/src/main/resources/config/application.yaml b/infra/config-server/src/main/resources/config/application.yaml index b9c2658..0dec9e2 100644 --- a/infra/config-server/src/main/resources/config/application.yaml +++ b/infra/config-server/src/main/resources/config/application.yaml @@ -11,4 +11,15 @@ management: endpoints: web: exposure: - include: health,info,prometheus \ No newline at end of file + include: health,info,prometheus + +eureka: + instance: + health-check-url-path: /actuator/health/readiness + lease-renewal-interval-in-seconds: 5 + lease-expiration-duration-in-seconds: 15 + + client: + healthcheck: + enabled: true + registry-fetch-interval-seconds: 5 \ No newline at end of file diff --git a/infra/gateway-server/pom.xml b/infra/gateway-server/pom.xml index 1d9f72b..dc78b14 100644 --- a/infra/gateway-server/pom.xml +++ b/infra/gateway-server/pom.xml @@ -11,6 +11,7 @@ gateway-server + jar 21 diff --git a/infra/gateway-server/src/main/resources/application.yaml b/infra/gateway-server/src/main/resources/application.yaml index 5685afa..bcba139 100644 --- a/infra/gateway-server/src/main/resources/application.yaml +++ b/infra/gateway-server/src/main/resources/application.yaml @@ -18,9 +18,6 @@ eureka: client: serviceUrl: defaultZone: ${EUREKA_URI:http://localhost:8761/eureka/} - healthcheck: - enabled: true instance: - health-check-url-path: /actuator/health/readiness instance-id: "${spring.application.name}:${random.value}" leaseRenewalIntervalInSeconds: 10