Skip to content

[NO-ISSUE] 커밋 755d2a7로 롤백#218

Merged
Develop-KIM merged 4 commits intodevelopfrom
fix/NO-ISSUE-properties
Mar 11, 2026
Merged

[NO-ISSUE] 커밋 755d2a7로 롤백#218
Develop-KIM merged 4 commits intodevelopfrom
fix/NO-ISSUE-properties

Conversation

@Develop-KIM
Copy link
Member

No description provided.

Copilot AI review requested due to automatic review settings March 11, 2026 12:50
@coderabbitai
Copy link

coderabbitai bot commented Mar 11, 2026

Warning

Rate limit exceeded

@Develop-KIM has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 13 minutes and 26 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 632bc960-e757-46ed-bf32-981a16955490

📥 Commits

Reviewing files that changed from the base of the PR and between bb3c9e1 and 8feeb45.

📒 Files selected for processing (136)
  • .gitignore
  • src/docs/asciidoc/admin/location.adoc
  • src/docs/도메인모델.md
  • src/main/java/com/souzip/adapter/config/AdminProperties.java
  • src/main/java/com/souzip/adapter/persistence/admin/AdminInitializer.java
  • src/main/java/com/souzip/adapter/security/admin/annotation/AdminAccess.java
  • src/main/java/com/souzip/adapter/security/admin/annotation/SuperAdminOnly.java
  • src/main/java/com/souzip/adapter/security/admin/annotation/ViewerAccess.java
  • src/main/java/com/souzip/adapter/security/admin/encoder/SecurePasswordEncoder.java
  • src/main/java/com/souzip/adapter/security/admin/jwt/JwtTokenProviderAdapter.java
  • src/main/java/com/souzip/adapter/webapi/admin/AdminApi.java
  • src/main/java/com/souzip/adapter/webapi/admin/AdminAuthApi.java
  • src/main/java/com/souzip/adapter/webapi/admin/AdminLocationApi.java
  • src/main/java/com/souzip/adapter/webapi/admin/AdminNoticeApi.java
  • src/main/java/com/souzip/adapter/webapi/admin/dto/AdminLoginRequest.java
  • src/main/java/com/souzip/adapter/webapi/admin/dto/AdminLoginResponse.java
  • src/main/java/com/souzip/adapter/webapi/admin/dto/AdminRefreshRequest.java
  • src/main/java/com/souzip/adapter/webapi/admin/dto/AdminRefreshResponse.java
  • src/main/java/com/souzip/adapter/webapi/admin/dto/AdminRegisterResponse.java
  • src/main/java/com/souzip/adapter/webapi/admin/dto/AdminResponse.java
  • src/main/java/com/souzip/adapter/webapi/admin/dto/CityResponse.java
  • src/main/java/com/souzip/adapter/webapi/admin/dto/CountryResponse.java
  • src/main/java/com/souzip/application/admin/AdminAuthService.java
  • src/main/java/com/souzip/application/admin/AdminLocationModifyService.java
  • src/main/java/com/souzip/application/admin/AdminLocationQueryService.java
  • src/main/java/com/souzip/application/admin/AdminModifyService.java
  • src/main/java/com/souzip/application/admin/AdminQueryService.java
  • src/main/java/com/souzip/application/admin/dto/AdminLoginResult.java
  • src/main/java/com/souzip/application/admin/dto/AdminPageResult.java
  • src/main/java/com/souzip/application/admin/dto/AdminRefreshResult.java
  • src/main/java/com/souzip/application/admin/provided/AdminFinder.java
  • src/main/java/com/souzip/application/admin/provided/AdminLocationFinder.java
  • src/main/java/com/souzip/application/admin/provided/AdminLocationModifier.java
  • src/main/java/com/souzip/application/admin/provided/AdminModifier.java
  • src/main/java/com/souzip/application/admin/required/AdminRepository.java
  • src/main/java/com/souzip/application/admin/required/TokenProvider.java
  • src/main/java/com/souzip/application/notice/assembler/NoticeResponseAssembler.java
  • src/main/java/com/souzip/domain/admin/Admin.java
  • src/main/java/com/souzip/domain/admin/AdminRefreshToken.java
  • src/main/java/com/souzip/domain/admin/AdminRegisterRequest.java
  • src/main/java/com/souzip/domain/admin/PasswordEncoder.java
  • src/main/java/com/souzip/domain/admin/application/AdminAuthService.java
  • src/main/java/com/souzip/domain/admin/application/AdminCityQueryUseCase.java
  • src/main/java/com/souzip/domain/admin/application/AdminCountryQueryUseCase.java
  • src/main/java/com/souzip/domain/admin/application/AdminManagementService.java
  • src/main/java/com/souzip/domain/admin/application/AdminManagementUseCase.java
  • src/main/java/com/souzip/domain/admin/application/command/AdminCreateCityCommand.java
  • src/main/java/com/souzip/domain/admin/application/command/AdminDeleteCityCommand.java
  • src/main/java/com/souzip/domain/admin/application/command/AdminLoginCommand.java
  • src/main/java/com/souzip/domain/admin/application/command/AdminUpdateCityCommand.java
  • src/main/java/com/souzip/domain/admin/application/command/AdminUpdateCityPriorityCommand.java
  • src/main/java/com/souzip/domain/admin/application/command/InviteAdminCommand.java
  • src/main/java/com/souzip/domain/admin/application/port/CityCommandPort.java
  • src/main/java/com/souzip/domain/admin/application/port/CityQueryPort.java
  • src/main/java/com/souzip/domain/admin/application/port/CountryQueryPort.java
  • src/main/java/com/souzip/domain/admin/application/query/AdminCityQueryService.java
  • src/main/java/com/souzip/domain/admin/application/query/AdminCountryQueryService.java
  • src/main/java/com/souzip/domain/admin/application/query/CitySearchQuery.java
  • src/main/java/com/souzip/domain/admin/exception/AdminErrorCode.java
  • src/main/java/com/souzip/domain/admin/exception/AdminException.java
  • src/main/java/com/souzip/domain/admin/infrastructure/encoder/AdminPasswordEncoderImpl.java
  • src/main/java/com/souzip/domain/admin/infrastructure/entity/AdminEntity.java
  • src/main/java/com/souzip/domain/admin/infrastructure/entity/AdminRefreshTokenEntity.java
  • src/main/java/com/souzip/domain/admin/infrastructure/init/AdminInitializer.java
  • src/main/java/com/souzip/domain/admin/infrastructure/init/AdminProperties.java
  • src/main/java/com/souzip/domain/admin/infrastructure/persistence/AdminJpaRepository.java
  • src/main/java/com/souzip/domain/admin/infrastructure/persistence/AdminMapper.java
  • src/main/java/com/souzip/domain/admin/infrastructure/persistence/AdminRefreshTokenJpaRepository.java
  • src/main/java/com/souzip/domain/admin/infrastructure/persistence/AdminRefreshTokenMapper.java
  • src/main/java/com/souzip/domain/admin/infrastructure/persistence/AdminRefreshTokenRepositoryImpl.java
  • src/main/java/com/souzip/domain/admin/infrastructure/persistence/AdminRepositoryImpl.java
  • src/main/java/com/souzip/domain/admin/infrastructure/persistence/CityCommandAdapter.java
  • src/main/java/com/souzip/domain/admin/infrastructure/persistence/CityQueryAdapter.java
  • src/main/java/com/souzip/domain/admin/infrastructure/persistence/CountryQueryAdapter.java
  • src/main/java/com/souzip/domain/admin/infrastructure/scheduler/AdminRefreshTokenCleanupScheduler.java
  • src/main/java/com/souzip/domain/admin/infrastructure/security/annotation/AdminAccess.java
  • src/main/java/com/souzip/domain/admin/infrastructure/security/annotation/CurrentAdminId.java
  • src/main/java/com/souzip/domain/admin/infrastructure/security/annotation/SuperAdminOnly.java
  • src/main/java/com/souzip/domain/admin/infrastructure/security/annotation/ViewerAccess.java
  • src/main/java/com/souzip/domain/admin/infrastructure/security/jwt/AdminJwtAuthenticationFilter.java
  • src/main/java/com/souzip/domain/admin/infrastructure/security/resolver/CurrentAdminIdArgumentResolver.java
  • src/main/java/com/souzip/domain/admin/model/Admin.java
  • src/main/java/com/souzip/domain/admin/model/AdminPasswordEncoder.java
  • src/main/java/com/souzip/domain/admin/model/AdminRefreshToken.java
  • src/main/java/com/souzip/domain/admin/model/AdminRole.java
  • src/main/java/com/souzip/domain/admin/model/Password.java
  • src/main/java/com/souzip/domain/admin/model/Username.java
  • src/main/java/com/souzip/domain/admin/presentation/AdminAuthController.java
  • src/main/java/com/souzip/domain/admin/presentation/AdminManagementController.java
  • src/main/java/com/souzip/domain/admin/presentation/request/AdminLoginRequest.java
  • src/main/java/com/souzip/domain/admin/presentation/request/AdminRefreshRequest.java
  • src/main/java/com/souzip/domain/admin/presentation/request/CreateCityRequest.java
  • src/main/java/com/souzip/domain/admin/presentation/request/InviteAdminRequest.java
  • src/main/java/com/souzip/domain/admin/presentation/request/UpdateCityRequest.java
  • src/main/java/com/souzip/domain/admin/presentation/response/AdminLoginResponse.java
  • src/main/java/com/souzip/domain/admin/presentation/response/AdminRefreshResponse.java
  • src/main/java/com/souzip/domain/admin/presentation/response/AdminResponse.java
  • src/main/java/com/souzip/domain/admin/presentation/response/InviteAdminResponse.java
  • src/main/java/com/souzip/domain/admin/repository/AdminRefreshTokenRepository.java
  • src/main/java/com/souzip/domain/admin/repository/AdminRepository.java
  • src/main/java/com/souzip/domain/city/application/command/CityCommandService.java
  • src/main/java/com/souzip/domain/city/application/command/UpdateCityCommand.java
  • src/main/java/com/souzip/domain/city/entity/City.java
  • src/main/java/com/souzip/domain/city/entity/CityCreateRequest.java
  • src/main/java/com/souzip/domain/city/entity/CityUpdateRequest.java
  • src/main/java/com/souzip/domain/country/application/query/CountryQueryService.java
  • src/main/java/com/souzip/global/config/WebConfig.java
  • src/main/java/com/souzip/global/exception/ErrorCode.java
  • src/main/java/com/souzip/global/security/config/SecurityConfig.java
  • src/main/resources/META-INF/orm.xml
  • src/test/java/com/souzip/adapter/webapi/admin/AdminApiTest.java
  • src/test/java/com/souzip/adapter/webapi/admin/AdminAuthApiTest.java
  • src/test/java/com/souzip/adapter/webapi/admin/AdminLocationApiTest.java
  • src/test/java/com/souzip/adapter/webapi/admin/AdminNoticeApiTest.java
  • src/test/java/com/souzip/application/admin/AdminAuthServiceTest.java
  • src/test/java/com/souzip/application/admin/AdminModifyServiceTest.java
  • src/test/java/com/souzip/application/admin/AdminQueryServiceTest.java
  • src/test/java/com/souzip/docs/RestDocsSupport.java
  • src/test/java/com/souzip/domain/admin/AdminFixture.java
  • src/test/java/com/souzip/domain/admin/AdminRefreshTokenTest.java
  • src/test/java/com/souzip/domain/admin/AdminTest.java
  • src/test/java/com/souzip/domain/admin/application/AdminAuthServiceTest.java
  • src/test/java/com/souzip/domain/admin/application/AdminCityQueryServiceTest.java
  • src/test/java/com/souzip/domain/admin/application/AdminCountryQueryServiceTest.java
  • src/test/java/com/souzip/domain/admin/application/AdminManagementServiceTest.java
  • src/test/java/com/souzip/domain/admin/fixture/TestAdminPasswordEncoder.java
  • src/test/java/com/souzip/domain/admin/infrastructure/persistence/AdminMapperTest.java
  • src/test/java/com/souzip/domain/admin/infrastructure/persistence/AdminRefreshTokenMapperTest.java
  • src/test/java/com/souzip/domain/admin/infrastructure/persistence/AdminRefreshTokenRepositoryTest.java
  • src/test/java/com/souzip/domain/admin/infrastructure/persistence/AdminRepositoryTest.java
  • src/test/java/com/souzip/domain/admin/model/AdminRefreshTokenTest.java
  • src/test/java/com/souzip/domain/admin/model/AdminTest.java
  • src/test/java/com/souzip/domain/admin/model/PasswordTest.java
  • src/test/java/com/souzip/domain/admin/model/UsernameTest.java
  • src/test/java/com/souzip/domain/admin/presentation/AdminAuthControllerTest.java
  • src/test/java/com/souzip/domain/admin/presentation/AdminManagementControllerTest.java
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/NO-ISSUE-properties

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

# Conflicts:
#	src/main/java/com/souzip/application/admin/required/CityCommandPort.java
#	src/main/java/com/souzip/application/admin/required/CityQueryPort.java
#	src/main/java/com/souzip/application/admin/required/CountryQueryPort.java
@Develop-KIM Develop-KIM force-pushed the fix/NO-ISSUE-properties branch from d48c7ed to 8feeb45 Compare March 11, 2026 12:52
@Develop-KIM Develop-KIM merged commit 2074aa6 into develop Mar 11, 2026
1 check passed
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR rolls back to commit 755d2a7 while re-establishing the admin domain/API structure under com.souzip.domain.admin (models, application services, persistence adapters, security wiring) and updating tests + REST Docs accordingly.

Changes:

  • Introduces a new domain.admin module (controllers, services/use-cases, repositories, ports/adapters, security annotations/filter/resolver, init/cleanup scheduler).
  • Replaces legacy application.admin + adapter.webapi.admin admin implementations with the new structure and removes outdated DTOs/services/tests.
  • Adds/updates controller/service/repository/unit tests and adjusts REST Docs snippets + documentation.

Reviewed changes

Copilot reviewed 135 out of 136 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
src/test/java/com/souzip/domain/admin/presentation/AdminManagementControllerTest.java Adds RestDocs tests for admin management endpoints
src/test/java/com/souzip/domain/admin/presentation/AdminAuthControllerTest.java Adds RestDocs tests for admin auth endpoints
src/test/java/com/souzip/domain/admin/model/UsernameTest.java Adds Username value-object tests
src/test/java/com/souzip/domain/admin/model/PasswordTest.java Adds Password value-object tests
src/test/java/com/souzip/domain/admin/model/AdminTest.java Adds Admin domain tests
src/test/java/com/souzip/domain/admin/model/AdminRefreshTokenTest.java Adds AdminRefreshToken domain tests
src/test/java/com/souzip/domain/admin/infrastructure/persistence/AdminRepositoryTest.java Adds JPA adapter tests for AdminRepositoryImpl
src/test/java/com/souzip/domain/admin/infrastructure/persistence/AdminRefreshTokenRepositoryTest.java Adds JPA adapter tests for refresh token repository
src/test/java/com/souzip/domain/admin/infrastructure/persistence/AdminRefreshTokenMapperTest.java Adds mapper tests for refresh token entity/domain
src/test/java/com/souzip/domain/admin/infrastructure/persistence/AdminMapperTest.java Adds mapper tests for admin entity/domain
src/test/java/com/souzip/domain/admin/fixture/TestAdminPasswordEncoder.java Adds test password encoder fixture
src/test/java/com/souzip/domain/admin/application/AdminManagementServiceTest.java Adds service tests for admin management
src/test/java/com/souzip/domain/admin/application/AdminCountryQueryServiceTest.java Adds query service tests for countries
src/test/java/com/souzip/domain/admin/application/AdminCityQueryServiceTest.java Adds query service tests for cities
src/test/java/com/souzip/domain/admin/application/AdminAuthServiceTest.java Adds auth service tests (login/refresh/logout)
src/test/java/com/souzip/domain/admin/AdminTest.java Removes legacy admin domain test
src/test/java/com/souzip/domain/admin/AdminRefreshTokenTest.java Removes legacy refresh token test
src/test/java/com/souzip/domain/admin/AdminFixture.java Removes legacy admin fixture
src/test/java/com/souzip/docs/RestDocsSupport.java Updates CurrentAdminId import/package
src/test/java/com/souzip/application/admin/AdminQueryServiceTest.java Removes legacy application-layer admin tests
src/test/java/com/souzip/application/admin/AdminModifyServiceTest.java Removes legacy application-layer admin tests
src/test/java/com/souzip/application/admin/AdminAuthServiceTest.java Removes legacy application-layer admin tests
src/test/java/com/souzip/adapter/webapi/admin/AdminNoticeApiTest.java Adjusts imports to new AdminRole location
src/test/java/com/souzip/adapter/webapi/admin/AdminLocationApiTest.java Removes legacy admin location API test
src/test/java/com/souzip/adapter/webapi/admin/AdminAuthApiTest.java Removes legacy admin auth API test
src/test/java/com/souzip/adapter/webapi/admin/AdminApiTest.java Removes legacy admin API test
src/main/resources/META-INF/orm.xml Removes legacy admin ORM mappings and reformats XML
src/main/java/com/souzip/global/security/config/SecurityConfig.java Points to new admin JWT filter package
src/main/java/com/souzip/global/config/WebConfig.java Points to new CurrentAdminIdArgumentResolver package
src/main/java/com/souzip/domain/city/entity/CityUpdateRequest.java Removes legacy city update request DTO
src/main/java/com/souzip/domain/city/entity/CityCreateRequest.java Removes legacy city create request DTO
src/main/java/com/souzip/domain/admin/repository/AdminRepository.java Adds admin repository abstraction
src/main/java/com/souzip/domain/admin/repository/AdminRefreshTokenRepository.java Moves refresh token repository to domain layer + adjusts API
src/main/java/com/souzip/domain/admin/presentation/response/InviteAdminResponse.java Adds invite response DTO
src/main/java/com/souzip/domain/admin/presentation/response/AdminResponse.java Adds admin list response DTO + pagination mapping
src/main/java/com/souzip/domain/admin/presentation/response/AdminRefreshResponse.java Adds refresh response DTO
src/main/java/com/souzip/domain/admin/presentation/response/AdminLoginResponse.java Adds login response DTO
src/main/java/com/souzip/domain/admin/presentation/request/UpdateCityRequest.java Adds update-city-name request DTO
src/main/java/com/souzip/domain/admin/presentation/request/InviteAdminRequest.java Adds invite-admin request DTO + validation
src/main/java/com/souzip/domain/admin/presentation/request/CreateCityRequest.java Adds create-city request DTO + validation
src/main/java/com/souzip/domain/admin/presentation/request/AdminRefreshRequest.java Adds refresh request DTO + validation
src/main/java/com/souzip/domain/admin/presentation/request/AdminLoginRequest.java Adds login request DTO + command mapping
src/main/java/com/souzip/domain/admin/presentation/AdminManagementController.java Adds admin management endpoints (admins/countries/cities)
src/main/java/com/souzip/domain/admin/presentation/AdminAuthController.java Adds admin auth endpoints (login/refresh/logout)
src/main/java/com/souzip/domain/admin/model/Username.java Adds username value object + validation
src/main/java/com/souzip/domain/admin/model/Password.java Adds password value object (encoding/matching)
src/main/java/com/souzip/domain/admin/model/AdminRole.java Moves AdminRole into domain.admin.model
src/main/java/com/souzip/domain/admin/model/AdminRefreshToken.java Adds refresh token domain model
src/main/java/com/souzip/domain/admin/model/AdminPasswordEncoder.java Adds password encoder interface
src/main/java/com/souzip/domain/admin/model/Admin.java Adds admin domain aggregate
src/main/java/com/souzip/domain/admin/infrastructure/security/resolver/CurrentAdminIdArgumentResolver.java Moves/updates resolver package + formatting
src/main/java/com/souzip/domain/admin/infrastructure/security/jwt/AdminJwtAuthenticationFilter.java Moves/updates admin JWT filter package/imports
src/main/java/com/souzip/domain/admin/infrastructure/security/annotation/ViewerAccess.java Adds method-security annotation for viewer/admin/super-admin
src/main/java/com/souzip/domain/admin/infrastructure/security/annotation/SuperAdminOnly.java Adds method-security annotation for super-admin only
src/main/java/com/souzip/domain/admin/infrastructure/security/annotation/CurrentAdminId.java Moves CurrentAdminId annotation package
src/main/java/com/souzip/domain/admin/infrastructure/security/annotation/AdminAccess.java Adds method-security annotation for admin/super-admin
src/main/java/com/souzip/domain/admin/infrastructure/scheduler/AdminRefreshTokenCleanupScheduler.java Moves refresh-token cleanup scheduler into admin module
src/main/java/com/souzip/domain/admin/infrastructure/persistence/CountryQueryAdapter.java Adds adapter from CountryAdminPort to admin query port
src/main/java/com/souzip/domain/admin/infrastructure/persistence/CityQueryAdapter.java Adds adapter from CityAdminPort to admin query port
src/main/java/com/souzip/domain/admin/infrastructure/persistence/CityCommandAdapter.java Adds adapter from admin commands to city management port
src/main/java/com/souzip/domain/admin/infrastructure/persistence/AdminRepositoryImpl.java Adds JPA-backed admin repository implementation
src/main/java/com/souzip/domain/admin/infrastructure/persistence/AdminRefreshTokenRepositoryImpl.java Adds JPA-backed refresh token repository implementation
src/main/java/com/souzip/domain/admin/infrastructure/persistence/AdminRefreshTokenMapper.java Adds refresh token entity/domain mapper
src/main/java/com/souzip/domain/admin/infrastructure/persistence/AdminRefreshTokenJpaRepository.java Adds Spring Data JPA repository for refresh tokens
src/main/java/com/souzip/domain/admin/infrastructure/persistence/AdminMapper.java Adds admin entity/domain mapper
src/main/java/com/souzip/domain/admin/infrastructure/persistence/AdminJpaRepository.java Adds Spring Data JPA repository for admins
src/main/java/com/souzip/domain/admin/infrastructure/init/AdminProperties.java Adds initial-admin configuration properties
src/main/java/com/souzip/domain/admin/infrastructure/init/AdminInitializer.java Adds initializer to create initial SUPER_ADMIN if missing
src/main/java/com/souzip/domain/admin/infrastructure/entity/AdminRefreshTokenEntity.java Adds JPA entity for refresh tokens
src/main/java/com/souzip/domain/admin/infrastructure/entity/AdminEntity.java Adds JPA entity for admins
src/main/java/com/souzip/domain/admin/infrastructure/encoder/AdminPasswordEncoderImpl.java Adds Spring Security PasswordEncoder adapter
src/main/java/com/souzip/domain/admin/exception/AdminException.java Minor formatting cleanup
src/main/java/com/souzip/domain/admin/exception/AdminErrorCode.java Adjusts error codes (adds username empty)
src/main/java/com/souzip/domain/admin/application/query/CitySearchQuery.java Adds query DTO for city search
src/main/java/com/souzip/domain/admin/application/query/AdminCountryQueryService.java Adds country query use-case implementation
src/main/java/com/souzip/domain/admin/application/query/AdminCityQueryService.java Adds city query use-case implementation
src/main/java/com/souzip/domain/admin/application/port/CountryQueryPort.java Adds country query port
src/main/java/com/souzip/domain/admin/application/port/CityQueryPort.java Adds city query port
src/main/java/com/souzip/domain/admin/application/port/CityCommandPort.java Adds city command port
src/main/java/com/souzip/domain/admin/application/command/InviteAdminCommand.java Adds invite admin command
src/main/java/com/souzip/domain/admin/application/command/AdminUpdateCityPriorityCommand.java Adds update city priority command
src/main/java/com/souzip/domain/admin/application/command/AdminUpdateCityCommand.java Adds update city name command
src/main/java/com/souzip/domain/admin/application/command/AdminLoginCommand.java Adds login command
src/main/java/com/souzip/domain/admin/application/command/AdminDeleteCityCommand.java Adds delete city command
src/main/java/com/souzip/domain/admin/application/command/AdminCreateCityCommand.java Adds create city command
src/main/java/com/souzip/domain/admin/application/AdminManagementUseCase.java Adds admin management use-case interface
src/main/java/com/souzip/domain/admin/application/AdminManagementService.java Adds admin management service implementation
src/main/java/com/souzip/domain/admin/application/AdminCountryQueryUseCase.java Adds country query use-case interface
src/main/java/com/souzip/domain/admin/application/AdminCityQueryUseCase.java Adds city query use-case interface
src/main/java/com/souzip/domain/admin/application/AdminAuthService.java Adds admin auth service (JWT + refresh tokens)
src/main/java/com/souzip/domain/admin/PasswordEncoder.java Removes legacy password encoder interface
src/main/java/com/souzip/domain/admin/AdminRegisterRequest.java Removes legacy register request DTO
src/main/java/com/souzip/domain/admin/AdminRefreshToken.java Removes legacy refresh token domain entity
src/main/java/com/souzip/domain/admin/Admin.java Removes legacy admin domain entity
src/main/java/com/souzip/application/notice/assembler/NoticeResponseAssembler.java Adjusts author username mapping to Username.value()
src/main/java/com/souzip/application/admin/required/TokenProvider.java Removes legacy token provider abstraction
src/main/java/com/souzip/application/admin/required/CountryQueryPort.java Removes legacy country query port
src/main/java/com/souzip/application/admin/required/CityQueryPort.java Removes legacy city query port
src/main/java/com/souzip/application/admin/required/CityCommandPort.java Removes legacy city command port
src/main/java/com/souzip/application/admin/required/AdminRepository.java Removes legacy admin repository contract
src/main/java/com/souzip/application/admin/provided/AdminModifier.java Removes legacy provided interface
src/main/java/com/souzip/application/admin/provided/AdminLocationModifier.java Removes legacy provided interface
src/main/java/com/souzip/application/admin/provided/AdminLocationFinder.java Removes legacy provided interface
src/main/java/com/souzip/application/admin/provided/AdminFinder.java Removes legacy provided interface
src/main/java/com/souzip/application/admin/dto/AdminRefreshResult.java Removes legacy DTO
src/main/java/com/souzip/application/admin/dto/AdminPageResult.java Removes legacy DTO
src/main/java/com/souzip/application/admin/dto/AdminLoginResult.java Removes legacy DTO
src/main/java/com/souzip/application/admin/AdminQueryService.java Removes legacy query service
src/main/java/com/souzip/application/admin/AdminModifyService.java Removes legacy modify service
src/main/java/com/souzip/application/admin/AdminLocationQueryService.java Removes legacy location query service
src/main/java/com/souzip/application/admin/AdminLocationModifyService.java Removes legacy location modify service
src/main/java/com/souzip/application/admin/AdminAuthService.java Removes legacy admin auth service
src/main/java/com/souzip/adapter/webapi/admin/dto/CountryResponse.java Removes legacy web DTO
src/main/java/com/souzip/adapter/webapi/admin/dto/CityResponse.java Removes legacy web DTO
src/main/java/com/souzip/adapter/webapi/admin/dto/AdminResponse.java Removes legacy web DTO
src/main/java/com/souzip/adapter/webapi/admin/dto/AdminRegisterResponse.java Removes legacy web DTO
src/main/java/com/souzip/adapter/webapi/admin/dto/AdminRefreshResponse.java Removes legacy web DTO
src/main/java/com/souzip/adapter/webapi/admin/dto/AdminRefreshRequest.java Removes legacy web DTO
src/main/java/com/souzip/adapter/webapi/admin/dto/AdminLoginResponse.java Removes legacy web DTO
src/main/java/com/souzip/adapter/webapi/admin/dto/AdminLoginRequest.java Removes legacy web DTO
src/main/java/com/souzip/adapter/webapi/admin/AdminNoticeApi.java Switches security annotation imports to new packages
src/main/java/com/souzip/adapter/webapi/admin/AdminLocationApi.java Removes legacy admin location API
src/main/java/com/souzip/adapter/webapi/admin/AdminAuthApi.java Removes legacy admin auth API
src/main/java/com/souzip/adapter/webapi/admin/AdminApi.java Removes legacy admin API
src/main/java/com/souzip/adapter/security/admin/jwt/JwtTokenProviderAdapter.java Removes legacy token provider adapter
src/main/java/com/souzip/adapter/security/admin/encoder/SecurePasswordEncoder.java Removes legacy encoder implementation
src/main/java/com/souzip/adapter/security/admin/annotation/ViewerAccess.java Removes legacy annotation
src/main/java/com/souzip/adapter/security/admin/annotation/SuperAdminOnly.java Removes legacy annotation
src/main/java/com/souzip/adapter/security/admin/annotation/AdminAccess.java Removes legacy annotation
src/main/java/com/souzip/adapter/persistence/admin/AdminInitializer.java Removes legacy initializer
src/main/java/com/souzip/adapter/config/AdminProperties.java Removes legacy properties component
src/docs/asciidoc/admin/location.adoc Updates admin location docs (adds priority reset section)
.gitignore Ignores root .env instead of resources .env
Comments suppressed due to low confidence (1)

src/main/java/com/souzip/domain/admin/infrastructure/security/jwt/AdminJwtAuthenticationFilter.java:22

  • Remove the inline "// ← 추가" comments in the import section. These comments add noise to production code and can trip style/checkstyle rules; the imports themselves are self-explanatory.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@@ -32,15 +32,6 @@ operation::admin/get-cities[snippets='http-request,request-headers,query-paramet

operation::admin/create-city[snippets='http-request,request-headers,request-fields,http-response,response-fields']

Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AdminManagementControllerTest documents a 도시 이름 수정 endpoint (admin/update-city-name), but this Asciidoc file no longer includes any section/operation that references that snippet. Add a 도시 이름 수정 section (or restore an update section) so the endpoint is included in the generated docs.

Suggested change
[[city-update-name]]
=== 도시 이름 수정
도시의 이름을 수정합니다.
* SUPER_ADMIN 또는 ADMIN 권한이 필요합니다.
operation::admin/update-city-name[snippets='http-request,request-headers,path-parameters,request-fields,http-response,response-fields']

Copilot uses AI. Check for mistakes.
Comment on lines +75 to +77
requestFields(
fieldWithPath("username").type(JsonFieldType.STRING).description("어드민 아이디 (4~10자)"),
fieldWithPath("password").type(JsonFieldType.STRING).description("비밀번호")
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The REST Docs description says the admin username is "410자", but the domain Username value object validates 2~20 characters. Please align the documentation with the actual validation rules (or adjust the validation if the intended constraint is 410).

Copilot uses AI. Check for mistakes.
Comment on lines +20 to +43
public static AdminRefreshToken create(UUID adminId, String token, LocalDateTime expiresAt) {
return new AdminRefreshToken(
UUID.randomUUID(),
adminId,
token,
expiresAt,
LocalDateTime.now()
);
}

public static AdminRefreshToken restore(
UUID id,
UUID adminId,
String token,
LocalDateTime expiresAt,
LocalDateTime createdAt
) {
return new AdminRefreshToken(id, adminId, token, expiresAt, createdAt);
}

public void updateToken(String token, LocalDateTime expiresAt) {
this.token = token;
this.expiresAt = expiresAt;
}
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AdminRefreshToken.create(...) and updateToken(...) no longer validate required fields (adminId/token/expiresAt). This permits constructing an invalid token object (null values) and can cause runtime failures later (e.g., expiry checks, persistence). Add null/blank checks (and optionally validate that expiresAt is in the future) to preserve domain invariants.

Copilot uses AI. Check for mistakes.
Comment on lines +7 to +10
@ConfigurationProperties(prefix = "admin.initial")
public class
AdminProperties {
private final String username;
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The class declaration is split across two lines (public class then AdminProperties). While valid Java, it’s likely an accidental formatting artifact and can violate style rules / reduce readability. Reformat to a standard single-line class declaration.

Copilot uses AI. Check for mistakes.
Comment on lines +97 to +100
public SuccessResponse<PaginationResponse<CityQueryResult>> getCities(
@RequestParam Long countryId,
@RequestParam(required = false) String keyword,
@ModelAttribute PaginationRequest paginationRequest
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GET /api/admin/cities currently requires countryId, but existing API docs/tests describe it as optional with a default (e.g., 83). If countryId should be optional, set required=false and provide defaultValue (or apply the default inside the method) so the runtime behavior matches the documented contract; otherwise update the docs/tests to remove the default/optional wording.

Copilot uses AI. Check for mistakes.
Comment on lines +3 to +16
import com.souzip.domain.admin.application.AdminManagementService.AdminPageResult;
import com.souzip.domain.admin.application.command.AdminCreateCityCommand;
import com.souzip.domain.admin.application.command.AdminDeleteCityCommand;
import com.souzip.domain.admin.application.command.AdminUpdateCityCommand;
import com.souzip.domain.admin.application.command.AdminUpdateCityPriorityCommand;
import com.souzip.domain.admin.application.command.InviteAdminCommand;
import com.souzip.domain.admin.model.Admin;
import java.util.UUID;

public interface AdminManagementUseCase {

AdminPageResult getAdmins(int pageNo, int pageSize);

Admin inviteAdmin(InviteAdminCommand command);
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AdminManagementUseCase depends on the nested AdminManagementService.AdminPageResult type, which couples the interface to a concrete implementation. Consider moving AdminPageResult to its own top-level DTO (or defining it on the interface) so other implementations can exist without importing the service class.

Copilot uses AI. Check for mistakes.
Comment on lines +12 to +30
import com.souzip.domain.admin.infrastructure.encoder.AdminPasswordEncoderImpl;
import com.souzip.domain.admin.model.Admin;
import com.souzip.domain.admin.model.AdminRole;
import com.souzip.domain.admin.repository.AdminRepository;
import java.util.List;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Transactional(readOnly = true)
@RequiredArgsConstructor
@Service
public class AdminManagementService implements AdminManagementUseCase {

private final AdminRepository adminRepository;
private final AdminPasswordEncoderImpl passwordEncoder;
private final CityCommandPort cityCommandPort;

Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AdminManagementService injects AdminPasswordEncoderImpl (a concrete type) instead of the AdminPasswordEncoder interface. Injecting the interface keeps the service decoupled from the infrastructure layer and simplifies testing/replacement of the encoder implementation.

Copilot uses AI. Check for mistakes.
Comment on lines +11 to +17
public static Password encode(String rawPassword, AdminPasswordEncoder encoder) {
return new Password(encoder.encode(rawPassword));
}

public static Password of(String encodedValue) {
return new Password(encodedValue);
}
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Password.encode(...) / Password.of(...) accept null (and encode will pass null through to the encoder). This allows creating an invalid Password value object and can lead to NPEs or weak/empty passwords being persisted (e.g., via initializer/service code). Add validation (non-null, and if required by the domain, minimum length) inside Password (and reintroduce/adjust an error code as needed) so invariants are enforced consistently.

Copilot uses AI. Check for mistakes.
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d48c7ed979

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +36 to +40
Admin admin = Admin.create(
username.value(),
adminProperties.getPassword(),
AdminRole.SUPER_ADMIN,
passwordEncoder

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 초기 어드민 비밀번호 정책을 강제하세요

여기서 초기 SUPER_ADMIN 생성 시 admin.initial.password를 그대로 Admin.create로 전달하고 있어, 최소 길이(8자) 같은 비밀번호 정책을 전혀 거치지 않습니다. 현재 초대 API는 DTO validation으로 길이를 막지만 bootstrap 경로는 우회되므로, 운영 설정 실수만으로 매우 약한 관리자 비밀번호가 저장되어 인증 보안이 약화됩니다.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants