├── .deploy
├── deploy_dev.sh
├── deploy_prod.sh
├── dev_dockerfile
└── prod_dockerfile
├── .github
├── ISSUE_TEMPLATE
│ ├── feature.md
│ └── fix.md
├── pull_request_template.md
└── workflows
│ ├── CD-dev.yml
│ ├── CD-prod.yml
│ ├── CI-dev.yml
│ └── CI-prod.yml
├── .gitignore
├── README.md
├── build.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── docs
└── asciidoc
│ ├── AlarmHistory-API.adoc
│ ├── Auth-API.adoc
│ ├── Block-API.adoc
│ ├── Board-API.adoc
│ ├── BoardComment_API.adoc
│ ├── Fire-API.adoc
│ ├── Image-API.adoc
│ ├── Mission-API.adoc
│ ├── MissionArchive-API.adoc
│ ├── MissionArchiveComment_API.adoc
│ ├── MissionBoard-API.adoc
│ ├── MissionGatherBoard-API.adoc
│ ├── Mypage-API.adoc
│ ├── Overview.adoc
│ ├── Report-API.adoc
│ ├── Team-API.adoc
│ ├── TeamScore-API.adoc
│ └── api.adoc
├── main
├── java
│ └── com
│ │ └── moing
│ │ └── backend
│ │ ├── BackendApplication.java
│ │ ├── domain
│ │ ├── alarm
│ │ │ └── application
│ │ │ │ ├── MultiAlarmEventUseCase.java
│ │ │ │ └── SingleAlarmEventUseCase.java
│ │ ├── auth
│ │ │ ├── application
│ │ │ │ ├── dto
│ │ │ │ │ ├── request
│ │ │ │ │ │ ├── SignInRequest.java
│ │ │ │ │ │ ├── SignUpRequest.java
│ │ │ │ │ │ └── TestRequest.java
│ │ │ │ │ └── response
│ │ │ │ │ │ ├── CheckNicknameResponse.java
│ │ │ │ │ │ ├── GoogleUserResponse.java
│ │ │ │ │ │ ├── KakaoAccessTokenResponse.java
│ │ │ │ │ │ ├── KakaoUserResponse.java
│ │ │ │ │ │ ├── ReissueTokenResponse.java
│ │ │ │ │ │ └── SignInResponse.java
│ │ │ │ └── service
│ │ │ │ │ ├── CheckNicknameUseCase.java
│ │ │ │ │ ├── MemberAuthUseCase.java
│ │ │ │ │ ├── ReissueTokenUseCase.java
│ │ │ │ │ ├── SignInProvider.java
│ │ │ │ │ ├── SignInUseCase.java
│ │ │ │ │ ├── SignUpUseCase.java
│ │ │ │ │ ├── WithdrawProvider.java
│ │ │ │ │ ├── apple
│ │ │ │ │ ├── AppleSignInUseCase.java
│ │ │ │ │ ├── AppleTokenUseCase.java
│ │ │ │ │ ├── AppleWithdrawUseCase.java
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── AppleClient.java
│ │ │ │ │ │ ├── AppleToken.java
│ │ │ │ │ │ └── Keys.java
│ │ │ │ │ ├── google
│ │ │ │ │ ├── GoogleSignInUseCase.java
│ │ │ │ │ ├── GoogleTokenUseCase.java
│ │ │ │ │ ├── GoogleWithdrawUseCase.java
│ │ │ │ │ └── utils
│ │ │ │ │ │ └── GoogleClient.java
│ │ │ │ │ └── kakao
│ │ │ │ │ ├── KakaoSignInUseCase.java
│ │ │ │ │ ├── KakaoTokenUseCase.java
│ │ │ │ │ ├── KakaoWithdrawUseCase.java
│ │ │ │ │ └── utils
│ │ │ │ │ ├── KakaoClient.java
│ │ │ │ │ └── KakaoUnlinkResponse.java
│ │ │ ├── exception
│ │ │ │ ├── AccountAlreadyExistedException.java
│ │ │ │ ├── AppIdInvalidException.java
│ │ │ │ ├── AuthException.java
│ │ │ │ ├── NicknameDuplicationException.java
│ │ │ │ ├── TokenInvalidException.java
│ │ │ │ └── UnknownProviderException.java
│ │ │ └── presentation
│ │ │ │ ├── AuthController.java
│ │ │ │ ├── AuthRedirectController.java
│ │ │ │ └── constant
│ │ │ │ └── AuthResponseMessage.java
│ │ ├── block
│ │ │ ├── application
│ │ │ │ ├── mapper
│ │ │ │ │ └── BlockMapper.java
│ │ │ │ └── service
│ │ │ │ │ ├── BlockCreateUseCase.java
│ │ │ │ │ ├── BlockDeleteUseCase.java
│ │ │ │ │ └── BlockReadUseCase.java
│ │ │ ├── domain
│ │ │ │ ├── entity
│ │ │ │ │ └── Block.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── BlockCustomRepository.java
│ │ │ │ │ ├── BlockCustomRepositoryImpl.java
│ │ │ │ │ ├── BlockRepository.java
│ │ │ │ │ └── BlockRepositoryUtils.java
│ │ │ │ └── service
│ │ │ │ │ ├── BlockDeleteService.java
│ │ │ │ │ ├── BlockQueryService.java
│ │ │ │ │ └── BlockSaveService.java
│ │ │ ├── exception
│ │ │ │ ├── BlockException.java
│ │ │ │ └── NotFoundBlockException.java
│ │ │ └── presentation
│ │ │ │ ├── BlockController.java
│ │ │ │ └── constant
│ │ │ │ └── BlockResponseMessage.java
│ │ ├── board
│ │ │ ├── application
│ │ │ │ ├── dto
│ │ │ │ │ ├── request
│ │ │ │ │ │ ├── CreateBoardRequest.java
│ │ │ │ │ │ └── UpdateBoardRequest.java
│ │ │ │ │ └── response
│ │ │ │ │ │ ├── BoardBlocks.java
│ │ │ │ │ │ ├── CreateBoardResponse.java
│ │ │ │ │ │ ├── GetAllBoardResponse.java
│ │ │ │ │ │ ├── GetBoardDetailResponse.java
│ │ │ │ │ │ └── UpdateBoardResponse.java
│ │ │ │ ├── mapper
│ │ │ │ │ └── BoardMapper.java
│ │ │ │ └── service
│ │ │ │ │ ├── CreateBoardUseCase.java
│ │ │ │ │ ├── DeleteBoardUseCase.java
│ │ │ │ │ ├── GetBoardUseCase.java
│ │ │ │ │ ├── SendBoardAlarmUseCase.java
│ │ │ │ │ └── UpdateBoardUseCase.java
│ │ │ ├── domain
│ │ │ │ ├── entity
│ │ │ │ │ └── Board.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── BoardCustomRepository.java
│ │ │ │ │ ├── BoardCustomRepositoryImpl.java
│ │ │ │ │ └── BoardRepository.java
│ │ │ │ └── service
│ │ │ │ │ ├── BoardDeleteService.java
│ │ │ │ │ ├── BoardGetService.java
│ │ │ │ │ └── BoardSaveService.java
│ │ │ ├── exception
│ │ │ │ ├── BoardException.java
│ │ │ │ ├── NotAuthByBoardException.java
│ │ │ │ └── NotFoundByBoardIdException.java
│ │ │ └── presentation
│ │ │ │ ├── BoardController.java
│ │ │ │ └── constant
│ │ │ │ └── BoardResponseMessage.java
│ │ ├── boardComment
│ │ │ ├── application
│ │ │ │ ├── mapper
│ │ │ │ │ └── BoardCommentMapper.java
│ │ │ │ └── service
│ │ │ │ │ ├── CreateBoardCommentUseCase.java
│ │ │ │ │ ├── DeleteBoardCommentUseCase.java
│ │ │ │ │ ├── GetBoardCommentUseCase.java
│ │ │ │ │ └── SendBoardCommentAlarmUseCase.java
│ │ │ ├── domain
│ │ │ │ ├── entity
│ │ │ │ │ └── BoardComment.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── BoardCommentCustomRepository.java
│ │ │ │ │ ├── BoardCommentCustomRepositoryImpl.java
│ │ │ │ │ └── BoardCommentRepository.java
│ │ │ │ └── service
│ │ │ │ │ ├── BoardCommentDeleteService.java
│ │ │ │ │ ├── BoardCommentGetService.java
│ │ │ │ │ └── BoardCommentSaveService.java
│ │ │ ├── exception
│ │ │ │ ├── BoardCommentException.java
│ │ │ │ ├── NotAuthByBoardCommentException.java
│ │ │ │ └── NotFoundByBoardCommentIdException.java
│ │ │ └── presentattion
│ │ │ │ ├── BoardCommentController.java
│ │ │ │ └── constant
│ │ │ │ └── BoardCommentResponseMessage.java
│ │ ├── boardRead
│ │ │ ├── application
│ │ │ │ ├── mapper
│ │ │ │ │ └── BoardReadMapper.java
│ │ │ │ └── service
│ │ │ │ │ └── CreateBoardReadUseCase.java
│ │ │ └── domain
│ │ │ │ ├── entity
│ │ │ │ └── BoardRead.java
│ │ │ │ ├── repository
│ │ │ │ └── BoardReadRepository.java
│ │ │ │ └── service
│ │ │ │ └── BoardReadSaveService.java
│ │ ├── comment
│ │ │ ├── application
│ │ │ │ └── dto
│ │ │ │ │ ├── request
│ │ │ │ │ └── CreateCommentRequest.java
│ │ │ │ │ └── response
│ │ │ │ │ ├── CommentBlocks.java
│ │ │ │ │ ├── CreateCommentResponse.java
│ │ │ │ │ └── GetCommentResponse.java
│ │ │ └── domain
│ │ │ │ ├── entity
│ │ │ │ └── Comment.java
│ │ │ │ └── service
│ │ │ │ ├── CommentDeleteService.java
│ │ │ │ ├── CommentGetService.java
│ │ │ │ └── CommentSaveService.java
│ │ ├── fire
│ │ │ ├── application
│ │ │ │ ├── dto
│ │ │ │ │ ├── req
│ │ │ │ │ │ └── FireThrowReq.java
│ │ │ │ │ └── res
│ │ │ │ │ │ ├── FireReceiveRes.java
│ │ │ │ │ │ └── FireThrowRes.java
│ │ │ │ ├── mapper
│ │ │ │ │ └── FireMapper.java
│ │ │ │ └── service
│ │ │ │ │ ├── FireThrowAlarmUseCase.java
│ │ │ │ │ └── FireThrowUseCase.java
│ │ │ ├── domain
│ │ │ │ ├── entity
│ │ │ │ │ └── Fire.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── FireCustomRepository.java
│ │ │ │ │ ├── FireCustomRepositoryImpl.java
│ │ │ │ │ └── FireRepository.java
│ │ │ │ └── service
│ │ │ │ │ ├── FireQueryService.java
│ │ │ │ │ └── FireSaveService.java
│ │ │ ├── exception
│ │ │ │ ├── FireException.java
│ │ │ │ ├── NoAuthThrowFireException.java
│ │ │ │ ├── NotFoundFireException.java
│ │ │ │ └── NotFoundFireReceiversException.java
│ │ │ └── presentation
│ │ │ │ ├── FireController.java
│ │ │ │ └── constant
│ │ │ │ └── FireResponseMessage.java
│ │ ├── history
│ │ │ ├── application
│ │ │ │ ├── dto
│ │ │ │ │ └── response
│ │ │ │ │ │ ├── GetAlarmCountResponse.java
│ │ │ │ │ │ ├── GetAlarmHistoryResponse.java
│ │ │ │ │ │ ├── MemberIdAndToken.java
│ │ │ │ │ │ └── NewUploadInfo.java
│ │ │ │ ├── mapper
│ │ │ │ │ └── AlarmHistoryMapper.java
│ │ │ │ └── service
│ │ │ │ │ ├── CleanupUseCase.java
│ │ │ │ │ ├── GetAlarmHistoryUseCase.java
│ │ │ │ │ ├── ReadAlarmHistoryUseCase.java
│ │ │ │ │ ├── SaveMultiAlarmHistoryUseCase.java
│ │ │ │ │ └── SaveSingleAlarmHistoryUseCase.java
│ │ │ ├── domain
│ │ │ │ ├── entity
│ │ │ │ │ ├── AlarmHistory.java
│ │ │ │ │ ├── AlarmType.java
│ │ │ │ │ └── PagePath.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── AlarmHistoryCustomRepository.java
│ │ │ │ │ ├── AlarmHistoryCustomRepositoryImpl.java
│ │ │ │ │ └── AlarmHistoryRepository.java
│ │ │ │ └── service
│ │ │ │ │ ├── AlarmHistoryDeleteService.java
│ │ │ │ │ ├── AlarmHistoryGetService.java
│ │ │ │ │ └── AlarmHistorySaveService.java
│ │ │ ├── exception
│ │ │ │ ├── AlarmHistoryException.java
│ │ │ │ └── NotFoundAlarmHistoryException.java
│ │ │ └── presentation
│ │ │ │ ├── AlarmHistoryController.java
│ │ │ │ └── constant
│ │ │ │ └── AlarmHistoryResponseMessage.java
│ │ ├── infra
│ │ │ └── image
│ │ │ │ ├── application
│ │ │ │ ├── dto
│ │ │ │ │ ├── ImageFileExtension.java
│ │ │ │ │ ├── ImageUrlDto.java
│ │ │ │ │ ├── request
│ │ │ │ │ │ └── IssuePresignedUrlRequest.java
│ │ │ │ │ └── response
│ │ │ │ │ │ └── IssuePresignedUrlResponse.java
│ │ │ │ └── service
│ │ │ │ │ └── IssuePresignedUrlUseCase.java
│ │ │ │ └── presentation
│ │ │ │ ├── ImageController.java
│ │ │ │ └── constant
│ │ │ │ └── EImageResponseMessage.java
│ │ ├── member
│ │ │ ├── application
│ │ │ │ ├── mapper
│ │ │ │ │ └── MemberMapper.java
│ │ │ │ └── service
│ │ │ │ │ └── UpdateRemindAlarmUseCase.java
│ │ │ ├── domain
│ │ │ │ ├── constant
│ │ │ │ │ ├── Gender.java
│ │ │ │ │ ├── RegistrationStatus.java
│ │ │ │ │ ├── Role.java
│ │ │ │ │ └── SocialProvider.java
│ │ │ │ ├── entity
│ │ │ │ │ └── Member.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── MemberCustomRepository.java
│ │ │ │ │ ├── MemberCustomRepositoryImpl.java
│ │ │ │ │ └── MemberRepository.java
│ │ │ │ └── service
│ │ │ │ │ ├── MemberCheckService.java
│ │ │ │ │ ├── MemberDeleteService.java
│ │ │ │ │ ├── MemberGetService.java
│ │ │ │ │ └── MemberSaveService.java
│ │ │ ├── dto
│ │ │ │ ├── request
│ │ │ │ │ └── PostUpdatePushAlarm.java
│ │ │ │ └── response
│ │ │ │ │ └── UserProperty.java
│ │ │ ├── exception
│ │ │ │ ├── MemberException.java
│ │ │ │ ├── NotFoundBySocialIdException.java
│ │ │ │ └── NotFoundRemindAlarmException.java
│ │ │ └── presentation
│ │ │ │ └── RemindAlarmController.java
│ │ ├── mission
│ │ │ ├── application
│ │ │ │ ├── dto
│ │ │ │ │ ├── req
│ │ │ │ │ │ └── MissionReq.java
│ │ │ │ │ └── res
│ │ │ │ │ │ ├── FinishMissionBoardRes.java
│ │ │ │ │ │ ├── GatherRepeatMissionRes.java
│ │ │ │ │ │ ├── GatherSingleMissionRes.java
│ │ │ │ │ │ ├── MissionConfirmRes.java
│ │ │ │ │ │ ├── MissionCreateRes.java
│ │ │ │ │ │ ├── MissionReadRes.java
│ │ │ │ │ │ ├── MissionRecommendRes.java
│ │ │ │ │ │ ├── RepeatMissionBoardRes.java
│ │ │ │ │ │ └── SingleMissionBoardRes.java
│ │ │ │ ├── mapper
│ │ │ │ │ └── MissionMapper.java
│ │ │ │ └── service
│ │ │ │ │ ├── MissionCreateUseCase.java
│ │ │ │ │ ├── MissionDeleteUseCase.java
│ │ │ │ │ ├── MissionGatherBoardUseCase.java
│ │ │ │ │ ├── MissionReadUseCase.java
│ │ │ │ │ ├── MissionRemindAlarmUseCase.java
│ │ │ │ │ ├── MissionScheduleUseCase.java
│ │ │ │ │ ├── MissionUpdateUseCase.java
│ │ │ │ │ ├── SendMissionCreateAlarmUseCase.java
│ │ │ │ │ └── SendMissionStartAlarmUseCase.java
│ │ │ ├── domain
│ │ │ │ ├── entity
│ │ │ │ │ ├── Mission.java
│ │ │ │ │ └── constant
│ │ │ │ │ │ ├── MissionStatus.java
│ │ │ │ │ │ ├── MissionType.java
│ │ │ │ │ │ └── MissionWay.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── MissionCustomRepository.java
│ │ │ │ │ ├── MissionCustomRepositoryImpl.java
│ │ │ │ │ └── MissionRepository.java
│ │ │ │ └── service
│ │ │ │ │ ├── MissionDeleteService.java
│ │ │ │ │ ├── MissionQueryService.java
│ │ │ │ │ ├── MissionSaveService.java
│ │ │ │ │ └── MissionUpdateService.java
│ │ │ ├── exception
│ │ │ │ ├── MissionException.java
│ │ │ │ ├── NoAccessCreateMission.java
│ │ │ │ ├── NoAccessDeleteMission.java
│ │ │ │ ├── NoAccessUpdateMission.java
│ │ │ │ ├── NoMoreCreateMission.java
│ │ │ │ ├── NotFoundEndMissionException.java
│ │ │ │ ├── NotFoundMissionException.java
│ │ │ │ └── NotFoundOngoingMissionException.java
│ │ │ └── presentation
│ │ │ │ ├── MissionController.java
│ │ │ │ └── constant
│ │ │ │ └── MissionResponseMessage.java
│ │ ├── missionArchive
│ │ │ ├── application
│ │ │ │ ├── dto
│ │ │ │ │ ├── req
│ │ │ │ │ │ ├── MissionArchiveHeartReq.java
│ │ │ │ │ │ └── MissionArchiveReq.java
│ │ │ │ │ └── res
│ │ │ │ │ │ ├── MissionArchiveHeartRes.java
│ │ │ │ │ │ ├── MissionArchivePhotoRes.java
│ │ │ │ │ │ ├── MissionArchiveRes.java
│ │ │ │ │ │ ├── MissionArchiveStatusRes.java
│ │ │ │ │ │ ├── MyArchiveStatus.java
│ │ │ │ │ │ ├── MyMissionArchiveRes.java
│ │ │ │ │ │ ├── MyTeamsRes.java
│ │ │ │ │ │ └── PersonalArchiveRes.java
│ │ │ │ ├── mapper
│ │ │ │ │ └── MissionArchiveMapper.java
│ │ │ │ └── service
│ │ │ │ │ ├── MissionArchiveBoardUseCase.java
│ │ │ │ │ ├── MissionArchiveCreateMessage.java
│ │ │ │ │ ├── MissionArchiveCreateUseCase.java
│ │ │ │ │ ├── MissionArchiveDeleteUseCase.java
│ │ │ │ │ ├── MissionArchiveReadUseCase.java
│ │ │ │ │ ├── MissionArchiveUpdateUseCase.java
│ │ │ │ │ ├── RepeatMissionArchiveReadUseCase.java
│ │ │ │ │ └── SendMissionArchiveCreateAlarmUseCase.java
│ │ │ ├── domain
│ │ │ │ ├── constant
│ │ │ │ │ └── MissionArchiveResponseMessage.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── MissionArchive.java
│ │ │ │ │ └── MissionArchiveStatus.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── MissionArchiveCustomRepository.java
│ │ │ │ │ ├── MissionArchiveCustomRepositoryImpl.java
│ │ │ │ │ ├── MissionArchiveRepository.java
│ │ │ │ │ └── OrderCondition.java
│ │ │ │ └── service
│ │ │ │ │ ├── MissionArchiveDeleteService.java
│ │ │ │ │ ├── MissionArchiveQueryService.java
│ │ │ │ │ ├── MissionArchiveSaveService.java
│ │ │ │ │ └── MissionArchiveScheduleQueryService.java
│ │ │ ├── exception
│ │ │ │ ├── MissionArchiveException.java
│ │ │ │ ├── NoAccessMissionArchiveException.java
│ │ │ │ ├── NoMoreMissionArchiveException.java
│ │ │ │ ├── NotFoundMissionArchiveException.java
│ │ │ │ └── NotYetMissionArchiveException.java
│ │ │ └── presentation
│ │ │ │ ├── MissionArchiveController.java
│ │ │ │ ├── MissionBoardController.java
│ │ │ │ └── MissionGatherController.java
│ │ ├── missionComment
│ │ │ ├── application
│ │ │ │ ├── mapper
│ │ │ │ │ └── MissionCommentMapper.java
│ │ │ │ └── service
│ │ │ │ │ ├── CreateMissionCommentUseCase.java
│ │ │ │ │ ├── DeleteMissionCommentUseCase.java
│ │ │ │ │ ├── GetMissionCommentUseCase.java
│ │ │ │ │ └── SendMissionCommentAlarmUseCase.java
│ │ │ ├── domain
│ │ │ │ ├── entity
│ │ │ │ │ └── MissionComment.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── MissionCommentCustomRepository.java
│ │ │ │ │ ├── MissionCommentCustomRepositoryImpl.java
│ │ │ │ │ └── MissionCommentRepository.java
│ │ │ │ └── service
│ │ │ │ │ ├── MissionCommentDeleteService.java
│ │ │ │ │ ├── MissionCommentGetService.java
│ │ │ │ │ └── MissionCommentSaveService.java
│ │ │ ├── exception
│ │ │ │ ├── MissionCommentException.java
│ │ │ │ ├── NotAuthByMissionCommentException.java
│ │ │ │ └── NotFoundByMissionCommentIdException.java
│ │ │ └── presentation
│ │ │ │ └── MissionCommentController.java
│ │ ├── missionHeart
│ │ │ ├── application
│ │ │ │ ├── dto
│ │ │ │ │ └── MissionHeartRes.java
│ │ │ │ ├── mapper
│ │ │ │ │ └── MissionHeartMapper.java
│ │ │ │ └── service
│ │ │ │ │ └── MissionHeartUseCase.java
│ │ │ ├── domain
│ │ │ │ ├── constant
│ │ │ │ │ └── MissionHeartStatus.java
│ │ │ │ ├── entity
│ │ │ │ │ └── MissionHeart.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── MissionHeartCustomRepository.java
│ │ │ │ │ ├── MissionHeartCustomRepositoryImpl.java
│ │ │ │ │ └── MissionHeartRepository.java
│ │ │ │ └── service
│ │ │ │ │ ├── MissionHeartQueryService.java
│ │ │ │ │ ├── MissionHeartSaveService.java
│ │ │ │ │ └── MissionHeartUpdateService.java
│ │ │ └── exception
│ │ │ │ ├── MissionHeartException.java
│ │ │ │ └── NoAccessMissionHeartException.java
│ │ ├── missionRead
│ │ │ ├── application
│ │ │ │ ├── mapper
│ │ │ │ │ └── MissionReadMapper.java
│ │ │ │ └── service
│ │ │ │ │ └── CreateMissionReadUseCase.java
│ │ │ └── domain
│ │ │ │ ├── entity
│ │ │ │ └── MissionRead.java
│ │ │ │ ├── repository
│ │ │ │ ├── MissionReadRepository.java
│ │ │ │ └── MissionReadRepositoryUtils.java
│ │ │ │ └── service
│ │ │ │ └── MissionReadSaveService.java
│ │ ├── mypage
│ │ │ ├── application
│ │ │ │ ├── dto
│ │ │ │ │ ├── request
│ │ │ │ │ │ ├── UpdateProfileRequest.java
│ │ │ │ │ │ └── WithdrawRequest.java
│ │ │ │ │ └── response
│ │ │ │ │ │ ├── GetAlarmResponse.java
│ │ │ │ │ │ ├── GetMyPageResponse.java
│ │ │ │ │ │ ├── GetMyPageTeamBlock.java
│ │ │ │ │ │ └── GetProfileResponse.java
│ │ │ │ ├── mapper
│ │ │ │ │ └── MyPageMapper.java
│ │ │ │ └── service
│ │ │ │ │ ├── AlarmUseCase.java
│ │ │ │ │ ├── GetMyPageUseCase.java
│ │ │ │ │ ├── ProfileUseCase.java
│ │ │ │ │ ├── SignOutUseCase.java
│ │ │ │ │ └── WithdrawUseCase.java
│ │ │ ├── domain
│ │ │ │ ├── entity
│ │ │ │ │ └── Feedback.java
│ │ │ │ ├── repository
│ │ │ │ │ └── FeedbackRepository.java
│ │ │ │ └── service
│ │ │ │ │ └── FeedbackSaveService.java
│ │ │ ├── exception
│ │ │ │ ├── AlarmInvalidException.java
│ │ │ │ ├── ExistingTeamException.java
│ │ │ │ └── MyPageException.java
│ │ │ └── presentation
│ │ │ │ ├── MyPageController.java
│ │ │ │ └── constant
│ │ │ │ └── MypageResponseMessage.java
│ │ ├── report
│ │ │ ├── application
│ │ │ │ ├── dto
│ │ │ │ │ └── BlockMemberRes.java
│ │ │ │ ├── mapper
│ │ │ │ │ └── ReportMapper.java
│ │ │ │ └── service
│ │ │ │ │ ├── BoardCommentReportStrategy.java
│ │ │ │ │ ├── BoardReportStrategy.java
│ │ │ │ │ ├── MissionArchiveReportStrategy.java
│ │ │ │ │ ├── MissionCommentReportStrategy.java
│ │ │ │ │ ├── ReportCreateUseCase.java
│ │ │ │ │ └── ReportStrategy.java
│ │ │ ├── domain
│ │ │ │ ├── entity
│ │ │ │ │ ├── Report.java
│ │ │ │ │ └── constant
│ │ │ │ │ │ └── ReportType.java
│ │ │ │ ├── repository
│ │ │ │ │ └── ReportRepository.java
│ │ │ │ └── service
│ │ │ │ │ └── ReportSaveService.java
│ │ │ └── presentation
│ │ │ │ ├── ReportController.java
│ │ │ │ └── constant
│ │ │ │ ├── ReportResponseMessage.java
│ │ │ │ └── StrategyCategory.java
│ │ ├── statistics
│ │ │ ├── application
│ │ │ │ ├── dto
│ │ │ │ │ └── DailyStats.java
│ │ │ │ └── service
│ │ │ │ │ ├── DAUFire.java
│ │ │ │ │ ├── DAUManager.java
│ │ │ │ │ ├── DAUMember.java
│ │ │ │ │ ├── DAUMissionArchive.java
│ │ │ │ │ ├── DAUOnceMission.java
│ │ │ │ │ ├── DAUProvider.java
│ │ │ │ │ ├── DAURepeatMission.java
│ │ │ │ │ ├── DAUScheduleUseCase.java
│ │ │ │ │ └── DAUTeam.java
│ │ │ └── domain
│ │ │ │ └── constant
│ │ │ │ └── DAUStatusType.java
│ │ ├── team
│ │ │ ├── application
│ │ │ │ ├── dto
│ │ │ │ │ ├── request
│ │ │ │ │ │ ├── CreateTeamRequest.java
│ │ │ │ │ │ └── UpdateTeamRequest.java
│ │ │ │ │ └── response
│ │ │ │ │ │ ├── CreateTeamResponse.java
│ │ │ │ │ │ ├── DeleteTeamResponse.java
│ │ │ │ │ │ ├── GetCurrentStatusResponse.java
│ │ │ │ │ │ ├── GetLeaderInfoResponse.java
│ │ │ │ │ │ ├── GetNewTeamResponse.java
│ │ │ │ │ │ ├── GetTeamCountResponse.java
│ │ │ │ │ │ ├── GetTeamDetailResponse.java
│ │ │ │ │ │ ├── GetTeamResponse.java
│ │ │ │ │ │ ├── ReviewTeamResponse.java
│ │ │ │ │ │ ├── TeamBlock.java
│ │ │ │ │ │ ├── TeamInfo.java
│ │ │ │ │ │ ├── TeamMemberInfo.java
│ │ │ │ │ │ └── UpdateTeamResponse.java
│ │ │ │ ├── mapper
│ │ │ │ │ └── TeamMapper.java
│ │ │ │ └── service
│ │ │ │ │ ├── CheckLeaderUseCase.java
│ │ │ │ │ ├── CreateTeamUseCase.java
│ │ │ │ │ ├── DisbandTeamUseCase.java
│ │ │ │ │ ├── GetTeamUseCase.java
│ │ │ │ │ ├── RejectTeamUseCase.java
│ │ │ │ │ ├── ReviewTeamUseCase.java
│ │ │ │ │ ├── SignInTeamUseCase.java
│ │ │ │ │ ├── UpdateTeamUseCase.java
│ │ │ │ │ └── WithdrawTeamUseCase.java
│ │ │ ├── domain
│ │ │ │ ├── constant
│ │ │ │ │ ├── ApprovalStatus.java
│ │ │ │ │ └── Category.java
│ │ │ │ ├── entity
│ │ │ │ │ └── Team.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── TeamCustomRepository.java
│ │ │ │ │ ├── TeamCustomRepositoryImpl.java
│ │ │ │ │ └── TeamRepository.java
│ │ │ │ └── service
│ │ │ │ │ ├── TeamGetService.java
│ │ │ │ │ ├── TeamSaveService.java
│ │ │ │ │ └── TeamUpdateService.java
│ │ │ ├── exception
│ │ │ │ ├── AlreadyJoinTeamException.java
│ │ │ │ ├── AlreadyWithdrawTeamException.java
│ │ │ │ ├── DeletedTeamException.java
│ │ │ │ ├── NotAuthByTeamException.java
│ │ │ │ ├── NotFoundByTeamIdException.java
│ │ │ │ └── TeamException.java
│ │ │ └── presentation
│ │ │ │ ├── TeamController.java
│ │ │ │ └── constant
│ │ │ │ └── TeamResponseMessage.java
│ │ ├── teamMember
│ │ │ ├── domain
│ │ │ │ ├── entity
│ │ │ │ │ └── TeamMember.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── TeamMemberCustomRepository.java
│ │ │ │ │ ├── TeamMemberCustomRepositoryImpl.java
│ │ │ │ │ └── TeamMemberRepository.java
│ │ │ │ └── service
│ │ │ │ │ ├── TeamMemberGetService.java
│ │ │ │ │ └── TeamMemberSaveService.java
│ │ │ └── exception
│ │ │ │ └── TeamMemberException.java
│ │ └── teamScore
│ │ │ ├── application
│ │ │ ├── dto
│ │ │ │ └── TeamScoreRes.java
│ │ │ ├── mapper
│ │ │ │ └── TeamScoreMapper.java
│ │ │ └── service
│ │ │ │ ├── TeamScoreGetUseCase.java
│ │ │ │ ├── TeamScoreLogicUseCase.java
│ │ │ │ └── TeamScoreUpdateUseCase.java
│ │ │ ├── domain
│ │ │ ├── entity
│ │ │ │ ├── ScoreStatus.java
│ │ │ │ └── TeamScore.java
│ │ │ ├── repository
│ │ │ │ ├── TeamScoreCustomRepository.java
│ │ │ │ ├── TeamScoreCustomRepositoryImpl.java
│ │ │ │ └── TeamScoreRepository.java
│ │ │ └── service
│ │ │ │ ├── TeamScoreQueryService.java
│ │ │ │ └── TeamScoreSaveService.java
│ │ │ └── presentation
│ │ │ ├── TeamScoreController.java
│ │ │ └── constant
│ │ │ └── TeamScoreResponseMessage.java
│ │ └── global
│ │ ├── annotation
│ │ ├── DomainService.java
│ │ ├── Enum.java
│ │ ├── EnumValidator.java
│ │ ├── Mapper.java
│ │ ├── Util.java
│ │ └── ValidEnum.java
│ │ ├── config
│ │ ├── fcm
│ │ │ ├── FcmConfig.java
│ │ │ ├── constant
│ │ │ │ ├── ApproveTeamMessage.java
│ │ │ │ ├── FireThrowMessage.java
│ │ │ │ ├── NewCommentUploadMessage.java
│ │ │ │ ├── NewMissionTitle.java
│ │ │ │ ├── NewNoticeUploadMessage.java
│ │ │ │ ├── NewUploadTitle.java
│ │ │ │ └── RemindMissionTitle.java
│ │ │ ├── dto
│ │ │ │ ├── event
│ │ │ │ │ ├── MultiFcmEvent.java
│ │ │ │ │ └── SingleFcmEvent.java
│ │ │ │ ├── request
│ │ │ │ │ ├── MultiRequest.java
│ │ │ │ │ └── SingleRequest.java
│ │ │ │ └── response
│ │ │ │ │ ├── MultiResponse.java
│ │ │ │ │ └── SingleResponse.java
│ │ │ ├── exception
│ │ │ │ ├── ExceptionHandler.java
│ │ │ │ ├── FirebaseException.java
│ │ │ │ ├── InitializeException.java
│ │ │ │ ├── MessagingException.java
│ │ │ │ └── NotificationException.java
│ │ │ └── service
│ │ │ │ ├── MessageSender.java
│ │ │ │ ├── MultiMessageSender.java
│ │ │ │ └── SingleMessageSender.java
│ │ ├── querydsl
│ │ │ └── QuerydslConfig.java
│ │ ├── redis
│ │ │ ├── RedisConfig.java
│ │ │ ├── RedisUtil.java
│ │ │ └── constant
│ │ │ │ └── RefreshTokenConstant.java
│ │ ├── s3
│ │ │ ├── ImageUrlUtil.java
│ │ │ ├── S3Config.java
│ │ │ └── S3Service.java
│ │ ├── security
│ │ │ ├── SecurityConfig.java
│ │ │ ├── dto
│ │ │ │ └── User.java
│ │ │ ├── filter
│ │ │ │ ├── JwtAccessDeniedHandler.java
│ │ │ │ ├── JwtAuthFilter.java
│ │ │ │ └── JwtAuthenticationEntryPoint.java
│ │ │ ├── jwt
│ │ │ │ ├── JwtExceptionList.java
│ │ │ │ ├── JwtSecurityConfig.java
│ │ │ │ ├── NotFoundRefreshToken.java
│ │ │ │ └── TokenUtil.java
│ │ │ ├── oauth
│ │ │ │ ├── CustomOAuth2UserService.java
│ │ │ │ ├── CustomUserDetails.java
│ │ │ │ ├── CustomUserDetailsService.java
│ │ │ │ ├── OAuth2Attribute.java
│ │ │ │ ├── OAuth2FailureHandler.java
│ │ │ │ └── OAuth2SuccessHandler.java
│ │ │ └── util
│ │ │ │ └── AuthenticationUtil.java
│ │ ├── slack
│ │ │ ├── SlackConfig.java
│ │ │ ├── exception
│ │ │ │ ├── ExceptionEventHandler.java
│ │ │ │ └── dto
│ │ │ │ │ └── ExceptionEvent.java
│ │ │ ├── team
│ │ │ │ ├── TeamCreateHandler.java
│ │ │ │ └── dto
│ │ │ │ │ └── TeamCreateEvent.java
│ │ │ └── util
│ │ │ │ ├── SlackAdapter.java
│ │ │ │ └── WebhookUtil.java
│ │ ├── sns
│ │ │ └── AppleConfig.java
│ │ └── webclient
│ │ │ └── WebClientConfig.java
│ │ ├── entity
│ │ └── BaseTimeEntity.java
│ │ ├── exception
│ │ ├── ApplicationException.java
│ │ ├── GlobalExceptionHandler.java
│ │ └── InternalServerErrorException.java
│ │ ├── interceptor
│ │ └── AuthInterceptor.java
│ │ ├── log
│ │ ├── aop
│ │ │ ├── LogAspect.java
│ │ │ ├── LogFormat.java
│ │ │ ├── LogTrace.java
│ │ │ ├── Pointcuts.java
│ │ │ └── TraceStatus.java
│ │ └── filter
│ │ │ ├── LogThreadIdHandleFilter.java
│ │ │ └── RequestInfoFormat.java
│ │ ├── response
│ │ ├── BaseBoardServiceResponse.java
│ │ ├── BaseMissionServiceResponse.java
│ │ ├── BaseServiceResponse.java
│ │ ├── ErrorCode.java
│ │ ├── ErrorResponse.java
│ │ ├── SuccessResponse.java
│ │ └── TokenInfoResponse.java
│ │ └── utils
│ │ ├── AesConverter.java
│ │ ├── AesUtil.java
│ │ ├── BaseBoardService.java
│ │ ├── BaseMissionService.java
│ │ ├── BaseService.java
│ │ ├── FeignClientConfig.java
│ │ ├── SecurityUtils.java
│ │ ├── StartupRunner.java
│ │ └── UpdateUtils.java
└── resources
│ └── logback.xml
└── test
└── java
└── com
└── moing
└── backend
├── BackendApplicationTests.java
├── config
├── CommonControllerTest.java
└── RestDocsConfig.java
└── domain
├── auth
└── presentation
│ └── AuthControllerTest.java
├── block
└── presentation
│ └── BlockControllerTest.java
├── board
├── domain
│ └── BoardRepositoryTest.java
└── presentation
│ └── BoardControllerTest.java
├── boardComment
└── presentation
│ └── BoardCommentControllerTest.java
├── fire
└── representation
│ └── FireControllerTest.java
├── history
└── presentation
│ └── AlarmHistoryControllerTest.java
├── infra
└── image
│ └── presentation
│ └── ImageControllerTest.java
├── member
└── domain
│ └── repository
│ └── MemberCustomRepositoryTest.java
├── mission
└── representation
│ └── MissionControllerTest.java
├── missionArchive
├── domain
│ └── repository
│ │ └── MissionArchiveCustomRepositoryImplTest.java
└── representation
│ ├── MissionArchiveControllerTest.java
│ ├── MissionBoardControllerTest.java
│ └── MissionGatherControllerTest.java
├── missionComment
├── domain
│ └── MissionRepositoryTest.java
└── presentation
│ └── MissionCommentControllerTest.java
├── missionState
└── domain
│ └── service
│ └── MissionStateQueryServiceTest.java
├── mypage
└── presentation
│ └── MypageControllerTest.java
├── report
└── presentation
│ └── ReportControllerTest.java
├── team
├── application
│ └── service
│ │ └── CreateTeamUseCaseTest.java
└── presentation
│ └── TeamControllerTest.java
└── teamScore
└── presentation
└── TeamScoreControllerTest.java
/.deploy/dev_dockerfile:
--------------------------------------------------------------------------------
1 | FROM openjdk:11-jdk
2 |
3 | # 타임존 설정
4 | ENV TZ=Asia/Seoul
5 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
6 |
7 | ARG CACHEBREAKER=1
8 | ARG JAR_FILE=./build/libs/backend-0.0.1-SNAPSHOT.jar
9 | COPY ${JAR_FILE} app.jar
10 |
11 | # 문서를 이미지의 /static/docs 디렉토리에 복사
12 | COPY ./build/docs/asciidoc/*.html /static/docs/
13 |
14 | # 애플리케이션 실행 시 -cp 옵션을 사용하여 /static/docs 디렉토리를 클래스패스에 추가
15 | ENTRYPOINT ["java","-cp",".:/static/docs","-Dspring.profiles.active=dev","-jar","/app.jar"]
16 |
17 |
--------------------------------------------------------------------------------
/.deploy/prod_dockerfile:
--------------------------------------------------------------------------------
1 | FROM openjdk:11-jdk
2 |
3 | # 타임존 설정
4 | ENV TZ=Asia/Seoul
5 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
6 |
7 | ARG CACHEBREAKER=1
8 | ARG JAR_FILE=./build/libs/backend-0.0.1-SNAPSHOT.jar
9 | COPY ${JAR_FILE} app.jar
10 |
11 | # 문서를 이미지의 /static/docs 디렉토리에 복사
12 | COPY ./build/docs/asciidoc/*.html /static/docs/
13 |
14 | # 애플리케이션 실행 시 -cp 옵션을 사용하여 /static/docs 디렉토리를 클래스패스에 추가
15 | ENTRYPOINT ["java","-cp",".:/static/docs","-Dspring.profiles.active=prod","-jar","/app.jar"]
16 |
17 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: feature
3 | about: feat
4 | title: 'feat/ :'
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | ## 📢 description
11 |
12 | ## ✅ to do
13 | - [ ]
14 | - [ ]
15 | - [ ]
16 |
17 | ## 🔗 etc
18 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/fix.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: fix
3 | about: fix
4 | title: 'fix/ :'
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | ## description
11 |
12 | ## to do
13 | [ ]
14 | [ ]
15 | [ ]
16 |
17 | ## etc
18 |
--------------------------------------------------------------------------------
/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 | ## PR 타입
2 | - [ ] 기능 추가
3 | - [ ] 버그 수정
4 | - [ ] 의존성, 환경 변수, 빌드 관련 업데이트
5 | - [ ] 기타 사소한 수정
6 |
7 | ## 개요
8 |
9 | ## 변경 사항
10 |
11 | ## 코드 리뷰 시 참고 사항
12 |
13 | ## 테스트 결과
14 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | .gradle
3 | build/
4 | !gradle/wrapper/gradle-wrapper.jar
5 | !**/src/main/**/build/
6 | !**/src/test/**/build/
7 |
8 | ### STS ###
9 | .apt_generated
10 | .classpath
11 | .factorypath
12 | .project
13 | .settings
14 | .springBeans
15 | .sts4-cache
16 | bin/
17 | !**/src/main/**/bin/
18 | !**/src/test/**/bin/
19 |
20 | ### IntelliJ IDEA ###
21 | .idea
22 | *.iws
23 | *.iml
24 | *.ipr
25 | out/
26 | !**/src/main/**/out/
27 | !**/src/test/**/out/
28 |
29 | ### NetBeans ###
30 | /nbproject/private/
31 | /nbbuild/
32 | /dist/
33 | /nbdist/
34 | /.nb-gradle/
35 |
36 | ### VS Code ###
37 | .vscode/
38 |
39 | ### yml ###
40 | application.yml
41 | application-local.yml
42 | application-dev.yml
43 | .DS_Store
44 | src/main/resources/firebase-key.json
45 |
46 | src/test/resources/
47 | .jpb
48 | data.sql
49 |
50 | #### docs ####
51 | !**/src/main/resources/static/docs/
52 | *.html
53 |
54 | firebase-key.json
55 | apple-key.p8
56 | logs/
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MOING_server_release
2 | ## System Architecture
3 | 
4 |
5 | ## Backend CI/CD
6 |
7 |
8 | ## Monitoring
9 | 
10 |
11 | ## DB ERD
12 | 
13 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Modagbul/MOING_Server_Release/5b3dc87235074013925ef84a8115ceece31f3816/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'backend'
2 |
--------------------------------------------------------------------------------
/src/docs/asciidoc/AlarmHistory-API.adoc:
--------------------------------------------------------------------------------
1 | [[AlarmHistory-API]]
2 | = AlarmHistory API
3 |
4 | [[AlarmHistory-알림-모아보기]]
5 | == AlarmHistory 알림 모아보기
6 | operation::alarm-history-controller-test/get_all_alarm_history[snippets='http-request,http-response,response-fields']
7 |
8 | == Type Category
9 | |===
10 | | Category | Description
11 |
12 | | `NEW_UPLOAD`
13 | | 신규 업로드 알림
14 |
15 | | `FIRE`
16 | | 불던지기 알림
17 |
18 | | `REMIND`
19 | | 리마인드 알림
20 |
21 | | `APPROVE_TEAM`
22 | | 소모임 승인
23 |
24 | | `REJECT_TEAM`
25 | | 소모임 반려
26 |
27 | | `COMMENT`
28 | | 댓글 생성 알림
29 | |===
30 |
31 | [[AlarmHistory-알림-단건-조회하기]]
32 | == AlarmHistory 알림 단건 조회하기
33 | operation::alarm-history-controller-test/read_alarm_history[snippets='http-request,http-response,response-fields']
34 |
35 | [[AlarmHistory-안읽은-알림개수-조회하기]]
36 | == AlarmHistory 안읽은 알림 개수 조회하기
37 | operation::alarm-history-controller-test/get_alarm_count[snippets='http-request,http-response,response-fields']
38 |
--------------------------------------------------------------------------------
/src/docs/asciidoc/Block-API.adoc:
--------------------------------------------------------------------------------
1 |
2 |
3 | [[Block-API]]
4 | = Block API
5 |
6 | [[Block-차단하기]]
7 | === 차단하기
8 | operation::block-controller-test/차단_하기[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
9 |
10 | ---
11 | === 차단 해제 하기
12 | operation::block-controller-test/차단_해제_하기[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
13 |
14 | ---
15 |
16 | === 차단한 유저 조회 List
17 | operation::block-controller-test/차단한_유저_목록[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
18 |
19 | ---
20 |
21 | === 차단한 유저 정보 조회
22 | operation::block-controller-test/차단한_유저_정보_목록[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
23 |
24 | ---
25 |
--------------------------------------------------------------------------------
/src/docs/asciidoc/Board-API.adoc:
--------------------------------------------------------------------------------
1 | [[Board-API]]
2 | = Board API
3 |
4 | [[Board-게시글-생성]]
5 | == Board 게시글 생성
6 | operation::board-controller-test/create_board[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
7 | ---
8 |
9 | [[Board-게시글-수정]]
10 | == Board 게시글 수정
11 | operation::board-controller-test/update_board[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
12 | ---
13 |
14 | [[Board-게시글-삭제]]
15 | == Board 게시글 삭제
16 | operation::board-controller-test/delete_board[snippets='http-request,path-parameters,response-fields']
17 | ---
18 |
19 | [[Board-게시글-전체-조회]]
20 | == Board 게시글 전체 조회
21 | operation::board-controller-test/get_board_all[snippets='http-request,path-parameters,http-response,response-fields']
22 | ---
23 |
24 | [[Board-게시글-상제-조회]]
25 | == Board 게시글 상세 조회
26 | operation::board-controller-test/get_board_detail[snippets='http-request,path-parameters,http-response,response-fields']
27 | ---
--------------------------------------------------------------------------------
/src/docs/asciidoc/BoardComment_API.adoc:
--------------------------------------------------------------------------------
1 | [[Board-Comment-API]]
2 | = Board Comment API
3 |
4 | [[Board-Comment-댓글-생성]]
5 | == Board Comment 댓글 생성
6 | operation::board-comment-controller-test/create_board_comment[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
7 | ---
8 |
9 | [[Board-Comment-댓글-삭제]]
10 | == Board Comment 댓글 삭제
11 | operation::board-comment-controller-test/delete_board_comment[snippets='http-request,path-parameters,response-fields']
12 | ---
13 |
14 | [[Board-Comment-댓글-전체-조회]]
15 | == Board Comment 댓글 전체 조회
16 | operation::board-comment-controller-test/get_board_comment_all[snippets='http-request,path-parameters,http-response,response-fields']
17 | ---
18 |
--------------------------------------------------------------------------------
/src/docs/asciidoc/Fire-API.adoc:
--------------------------------------------------------------------------------
1 |
2 |
3 | [[Fire-API]]
4 | = Fire API
5 |
6 | [[Fire-불던지기]]
7 | == 불 던지기
8 | operation::fire-controller-test/불_던지기[snippets='http-request,path-parameters,http-response,response-fields']
9 |
10 | ---
11 | [[Fire-불던질사람조회]]
12 | == 불 던질 사람 조회
13 | operation::fire-controller-test/불_던질_사람_조회[snippets='http-request,path-parameters,http-response,response-fields']
14 |
15 | ---
16 |
17 |
--------------------------------------------------------------------------------
/src/docs/asciidoc/Image-API.adoc:
--------------------------------------------------------------------------------
1 | [[Image-API]]
2 | = Image API
3 |
4 | [[Presigned-Url-발급]]
5 | == Presigned Url 발급
6 | operation::image-controller-test/create_presigned_url[snippets='http-request,http-response,request-fields,response-fields']
7 |
8 | === imageFileExtension
9 | |===
10 | | input 형식
11 |
12 | | `JPG`
13 |
14 | | `JPEG`
15 |
16 | | `PNG`
17 | |===
--------------------------------------------------------------------------------
/src/docs/asciidoc/MissionArchiveComment_API.adoc:
--------------------------------------------------------------------------------
1 | [[Mission-Comment-API]]
2 | = Mission Comment API
3 |
4 | [[Mission-Comment-댓글-생성]]
5 | == Mission Comment 댓글 생성
6 | operation::mission-comment-controller-test/create_mission_comment[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
7 | ---
8 |
9 | [[Mission-Comment-댓글-삭제]]
10 | == Mission Comment 댓글 삭제
11 | operation::mission-comment-controller-test/delete_mission_comment[snippets='http-request,path-parameters,response-fields']
12 | ---
13 |
14 | [[MissionArchive-Comment-댓글-전체-조회]]
15 | == Mission Comment 댓글 전체 조회
16 | operation::mission-comment-controller-test/get_board_comment_all[snippets='http-request,path-parameters,http-response,response-fields']
17 | ---
--------------------------------------------------------------------------------
/src/docs/asciidoc/MissionBoard-API.adoc:
--------------------------------------------------------------------------------
1 |
2 |
3 | [[MissionBoard-API]]
4 | = MissionBoard API
5 |
6 | [[MissionBoard-단일미션인증조회]]
7 | == 단일 미션 인증 조회
8 | operation::mission-board-controller-test/단일_미션_인증_조회[snippets='http-request,path-parameters,http-response,response-fields']
9 |
10 | ---
11 |
12 | [[MissionBoard-반복미션인증조회]]
13 | == 반복 미션 인증 조회
14 | operation::mission-board-controller-test/반복_미션_인증_조회[snipipets='http-request,path-parameters,request-fields,http-response,response-fields']
15 |
16 | ---
17 |
18 | [[MissionBoard-종료된인증조회]]
19 | == 종료된 인증 조회
20 | operation::mission-board-controller-test/종료된_인증_조회[snippets='http-request,path-parameters,http-response,response-fields']
21 |
22 | ---
23 |
--------------------------------------------------------------------------------
/src/docs/asciidoc/Report-API.adoc:
--------------------------------------------------------------------------------
1 |
2 |
3 | [[Report-API]]
4 | = Report API
5 |
6 | [[Report-신고하기]]
7 | === 신고하기
8 | operation::report-controller-test/신고하기[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
9 |
10 | ---
11 |
--------------------------------------------------------------------------------
/src/docs/asciidoc/TeamScore-API.adoc:
--------------------------------------------------------------------------------
1 |
2 |
3 | [[TeamScore-API]]
4 | = TeamScore API
5 |
6 | [[TeamScore-팀별-불-레벨-경험치-조회]]
7 | === 팀별_불_레벨_경험치_조회
8 | operation::team-score-controller-test/팀별_불_레벨_경험치_조회[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
9 |
10 | ---
11 |
--------------------------------------------------------------------------------
/src/docs/asciidoc/api.adoc:
--------------------------------------------------------------------------------
1 | = Moing API Doc
2 | :doctype: book
3 | :icons: font
4 | :source-highlighter: highlightjs
5 | :toc: left
6 | :toclevels: 1
7 | :sectlinks:
8 |
9 | include::Overview.adoc[]
10 |
11 | include::Image-API.adoc[]
12 |
13 | include::Auth-API.adoc[]
14 |
15 | include::Mypage-API.adoc[]
16 |
17 | include::AlarmHistory-API.adoc[]
18 |
19 | include::Team-API.adoc[]
20 |
21 | include::Mission-API.adoc[]
22 |
23 | include::MissionArchive-API.adoc[]
24 |
25 | include::MissionArchiveComment_API.adoc[]
26 |
27 | include::MissionBoard-API.adoc[]
28 |
29 | include::MissionGatherBoard-API.adoc[]
30 |
31 | include::Fire-API.adoc[]
32 |
33 | include::Board-API.adoc[]
34 |
35 | include::BoardComment_API.adoc[]
36 |
37 | include::TeamScore-API.adoc[]
38 |
39 | include::Report-API.adoc[]
40 |
41 | include::Block-API.adoc[]
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/BackendApplication.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 | import org.springframework.cloud.openfeign.EnableFeignClients;
6 | import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
7 | import org.springframework.scheduling.annotation.EnableAsync;
8 |
9 | @EnableAsync
10 | @EnableFeignClients
11 | @SpringBootApplication
12 | @EnableJpaAuditing
13 | public class BackendApplication {
14 |
15 | public static void main(String[] args) {
16 | SpringApplication.run(BackendApplication.class, args);
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/dto/request/SignInRequest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.dto.request;
2 |
3 | import lombok.*;
4 |
5 | import javax.validation.constraints.NotBlank;
6 |
7 | @Builder
8 | @AllArgsConstructor
9 | @NoArgsConstructor
10 | @Getter
11 | public class SignInRequest {
12 | @NotBlank(message="socialToken 을 입력해주세요.")
13 | private String socialToken;
14 |
15 | @NotBlank(message = "fcmToken 을 입력해주세요.")
16 | private String fcmToken;
17 |
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/dto/request/SignUpRequest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.dto.request;
2 |
3 | import com.moing.backend.domain.member.domain.constant.Gender;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Builder;
6 | import lombok.Getter;
7 | import lombok.NoArgsConstructor;
8 |
9 | import javax.validation.constraints.NotBlank;
10 | import javax.validation.constraints.Size;
11 |
12 | @Builder
13 | @AllArgsConstructor
14 | @NoArgsConstructor
15 | @Getter
16 | public class SignUpRequest {
17 |
18 | @NotBlank(message = "nickName 을 입력해주세요.")
19 | @Size(min = 1, max = 10, message="nickName 은 최소 1개, 최대 10개의 문자만 입력 가능합니다.")
20 | private String nickName;
21 |
22 | private Gender gender;
23 |
24 | private String birthDate;
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/dto/request/TestRequest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.dto.request;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Builder
9 | @AllArgsConstructor
10 | @NoArgsConstructor
11 | @Getter
12 | public class TestRequest {
13 | private String socialId;
14 |
15 | private String fcmToken;
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/dto/response/CheckNicknameResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Builder
9 | @AllArgsConstructor
10 | @NoArgsConstructor
11 | @Getter
12 | public class CheckNicknameResponse {
13 | private Boolean isDuplicated;
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/dto/response/GoogleUserResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.dto.response;
2 |
3 | import com.fasterxml.jackson.databind.PropertyNamingStrategy;
4 | import com.fasterxml.jackson.databind.annotation.JsonNaming;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | @Data
10 | @NoArgsConstructor
11 | @AllArgsConstructor
12 | @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
13 | public class GoogleUserResponse {
14 |
15 | private String aud;
16 | private String sub;
17 | private String email;
18 | private String name;
19 | private String picture;
20 |
21 | public void adaptResponse() {
22 | if(email.length() > 50) email = email.substring(0, 50);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/dto/response/KakaoAccessTokenResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.dto.response;
2 |
3 | import com.fasterxml.jackson.databind.PropertyNamingStrategy;
4 | import com.fasterxml.jackson.databind.annotation.JsonNaming;
5 | import lombok.*;
6 |
7 | @Builder
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | @Getter
11 | @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
12 | public class KakaoAccessTokenResponse {
13 | private String appId;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/dto/response/ReissueTokenResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.dto.response;
2 |
3 | import com.moing.backend.global.response.TokenInfoResponse;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Builder;
6 | import lombok.Getter;
7 | import lombok.NoArgsConstructor;
8 |
9 | @Getter
10 | @Builder
11 | @AllArgsConstructor
12 | @NoArgsConstructor
13 | public class ReissueTokenResponse {
14 |
15 | private String accessToken;
16 | private String refreshToken;
17 |
18 | public static ReissueTokenResponse from(TokenInfoResponse tokenInfoResponse) {
19 | return ReissueTokenResponse.builder()
20 | .accessToken(tokenInfoResponse.getAccessToken())
21 | .refreshToken(tokenInfoResponse.getRefreshToken())
22 | .build();
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/service/CheckNicknameUseCase.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.service;
2 |
3 | import com.moing.backend.domain.auth.application.dto.response.CheckNicknameResponse;
4 | import com.moing.backend.domain.member.domain.service.MemberCheckService;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.stereotype.Service;
7 | import org.springframework.transaction.annotation.Transactional;
8 |
9 | @Service
10 | @RequiredArgsConstructor
11 | public class CheckNicknameUseCase {
12 |
13 | private final MemberCheckService memberCheckService;
14 |
15 | @Transactional(readOnly=true)
16 | public CheckNicknameResponse checkNickname(String nickname){
17 | boolean isDuplicated=memberCheckService.checkNickname(nickname);
18 | return new CheckNicknameResponse(isDuplicated);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/service/SignInProvider.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.service;
2 |
3 | import com.moing.backend.domain.member.domain.entity.Member;
4 |
5 | public interface SignInProvider {
6 | Member getUserData(String accessToken);
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/service/WithdrawProvider.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.service;
2 |
3 | import java.io.IOException;
4 |
5 | public interface WithdrawProvider {
6 | void withdraw(String token) throws IOException;
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/service/apple/utils/AppleClient.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.service.apple.utils;
2 |
3 | import com.moing.backend.global.utils.FeignClientConfig;
4 | import org.springframework.cloud.openfeign.FeignClient;
5 | import org.springframework.web.bind.annotation.GetMapping;
6 | import org.springframework.web.bind.annotation.PostMapping;
7 |
8 | @FeignClient(name = "appleClient", url = "https://appleid.apple.com/auth", configuration = FeignClientConfig.class)
9 | public interface AppleClient {
10 | @GetMapping(value = "/keys")
11 | Keys getKeys();
12 | @PostMapping(value = "/token", consumes = "application/x-www-form-urlencoded")
13 | AppleToken.Response getToken(AppleToken.Request request);
14 |
15 | @PostMapping(value = "/revoke", consumes = "application/x-www-form-urlencoded")
16 | void revoke(AppleToken.RevokeRequest request);
17 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/service/apple/utils/Keys.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.service.apple.utils;
2 |
3 | import lombok.Data;
4 |
5 | import java.util.List;
6 |
7 | @Data
8 | public class Keys {
9 |
10 | private List keys;
11 |
12 | @Data
13 | public static class PubKey{
14 | private String alg;
15 |
16 | private String e;
17 |
18 | private String kid;
19 |
20 | private String kty;
21 |
22 | private String n;
23 |
24 | private String use;
25 | }
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/service/google/GoogleTokenUseCase.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.service.google;
2 |
3 | import com.moing.backend.domain.auth.exception.AppIdInvalidException;
4 | import com.moing.backend.domain.auth.exception.TokenInvalidException;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.beans.factory.annotation.Value;
7 | import org.springframework.stereotype.Component;
8 |
9 | import java.util.Arrays;
10 |
11 | @Component
12 | @RequiredArgsConstructor
13 | public class GoogleTokenUseCase {
14 |
15 | @Value("${oauth2.google.appId}")
16 | private String appId;
17 |
18 | public void verifyAccessToken(String aud) {
19 | String extractedAppId = Arrays.stream(aud.split("-"))
20 | .findFirst()
21 | .orElseThrow(TokenInvalidException::new);
22 |
23 | if (!appId.equals(extractedAppId)) throw new AppIdInvalidException();
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/service/google/GoogleWithdrawUseCase.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.service.google;
2 |
3 | import com.moing.backend.domain.auth.application.service.WithdrawProvider;
4 | import com.moing.backend.domain.auth.application.service.google.utils.GoogleClient;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.stereotype.Service;
7 |
8 | import java.io.IOException;
9 |
10 | @Service("googleWithdraw")
11 | @RequiredArgsConstructor
12 | public class GoogleWithdrawUseCase implements WithdrawProvider {
13 |
14 | private final GoogleClient googleClient;
15 |
16 | public void withdraw(String token) throws IOException {
17 | googleClient.revoke(token);
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/service/google/utils/GoogleClient.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.service.google.utils;
2 |
3 | import com.moing.backend.global.utils.FeignClientConfig;
4 | import org.springframework.cloud.openfeign.FeignClient;
5 | import org.springframework.web.bind.annotation.PostMapping;
6 | import org.springframework.web.bind.annotation.RequestParam;
7 |
8 | @FeignClient(name = "googleClient", url = "https://oauth2.googleapis.com", configuration = FeignClientConfig.class)
9 | public interface GoogleClient {
10 | @PostMapping(value = "/revoke", consumes = "application/x-www-form-urlencoded")
11 | void revoke(@RequestParam("token") String token);
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/service/kakao/KakaoWithdrawUseCase.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.service.kakao;
2 |
3 | import com.moing.backend.domain.auth.application.service.WithdrawProvider;
4 | import com.moing.backend.domain.auth.application.service.kakao.utils.KakaoClient;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.stereotype.Service;
7 |
8 | import java.io.IOException;
9 |
10 | @Service("kakaoWithdraw")
11 | @RequiredArgsConstructor
12 | public class KakaoWithdrawUseCase implements WithdrawProvider {
13 |
14 | private final KakaoClient kakaoClient;
15 |
16 | public void withdraw(String token) throws IOException {
17 |
18 | kakaoClient.unlinkUser("Bearer " + token);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/service/kakao/utils/KakaoClient.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.service.kakao.utils;
2 |
3 | import com.moing.backend.global.utils.FeignClientConfig;
4 | import org.springframework.cloud.openfeign.FeignClient;
5 | import org.springframework.web.bind.annotation.PostMapping;
6 | import org.springframework.web.bind.annotation.RequestHeader;
7 |
8 | @FeignClient(name = "kakaoClient", url = "https://kapi.kakao.com", configuration = FeignClientConfig.class)
9 | public interface KakaoClient {
10 | @PostMapping("/v1/user/unlink")
11 | KakaoUnlinkResponse unlinkUser(@RequestHeader("Authorization") String accessToken);
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/application/service/kakao/utils/KakaoUnlinkResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.application.service.kakao.utils;
2 |
3 | import lombok.Getter;
4 |
5 | @Getter
6 | public class KakaoUnlinkResponse {
7 | private String id;
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/exception/AccountAlreadyExistedException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class AccountAlreadyExistedException extends AuthException {
7 | public AccountAlreadyExistedException() {
8 | super(ErrorCode.ACCOUNT_ALREADY_EXIST,
9 | HttpStatus.UNAUTHORIZED);
10 | }
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/exception/AppIdInvalidException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class AppIdInvalidException extends AuthException{
7 | public AppIdInvalidException() {
8 | super(ErrorCode.APPID_INVALID_ERROR,
9 | HttpStatus.CONFLICT);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/exception/AuthException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class AuthException extends ApplicationException {
8 | protected AuthException(ErrorCode errorCode, HttpStatus httpStatus) {
9 | super(errorCode, httpStatus);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/exception/NicknameDuplicationException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NicknameDuplicationException extends AuthException {
7 | public NicknameDuplicationException(){
8 | super(ErrorCode.NICKNAME_DUPLICATION_ERROR,
9 | HttpStatus.BAD_REQUEST);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/exception/TokenInvalidException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class TokenInvalidException extends AuthException {
7 | public TokenInvalidException() {
8 | super(ErrorCode.TOKEN_INVALID_ERROR,
9 | HttpStatus.CONFLICT);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/exception/UnknownProviderException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.exception;
2 |
3 | public class UnknownProviderException {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/auth/presentation/constant/AuthResponseMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.auth.presentation.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum AuthResponseMessage {
9 | SIGN_IN_SUCCESS("로그인을 했습니다"),
10 | SIGN_UP_SUCCESS("회원 가입을 했습니다"),
11 | REISSUE_TOKEN_SUCCESS("토큰을 재발급했습니다"),
12 | CHECK_NICKNAME_SUCCESS("닉네임 중복검사를 했습니다");
13 | private final String message;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/block/application/mapper/BlockMapper.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.block.application.mapper;
2 |
3 | import com.moing.backend.domain.block.domain.entity.Block;
4 | import com.moing.backend.global.annotation.Mapper;
5 |
6 | @Mapper
7 | public class BlockMapper {
8 |
9 | public static Block mapToBlock(Long memberId, Long targetId) {
10 | return Block.builder()
11 | .blockMemberId(memberId)
12 | .targetId(targetId)
13 | .build();
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/block/domain/entity/Block.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.block.domain.entity;
2 |
3 | import com.moing.backend.global.entity.BaseTimeEntity;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Builder;
6 | import lombok.Getter;
7 | import lombok.NoArgsConstructor;
8 |
9 | import javax.persistence.*;
10 |
11 | @Entity
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | @Getter
15 | @Builder
16 | public class Block extends BaseTimeEntity {
17 |
18 |
19 | @Id
20 | @GeneratedValue(strategy = GenerationType.IDENTITY)
21 | @Column(name = "block_id")
22 | private Long id;
23 |
24 | private Long blockMemberId;
25 | private Long targetId;
26 |
27 | public Block(Long blockMemberId, Long targetId) {
28 | this.blockMemberId=blockMemberId;
29 | this.targetId=targetId;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/block/domain/repository/BlockCustomRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.block.domain.repository;
2 |
3 | import com.moing.backend.domain.block.domain.entity.Block;
4 | import com.moing.backend.domain.report.application.dto.BlockMemberRes;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.stereotype.Repository;
7 |
8 | import java.util.List;
9 | import java.util.Optional;
10 |
11 |
12 | public interface BlockCustomRepository{
13 |
14 | Optional> getMyBlockList(Long memberId);
15 | Optional> getMyBlockInfoList(Long memberId);
16 | Optional getBlockById(Long memberId, Long targetId);
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/block/domain/repository/BlockRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.block.domain.repository;
2 |
3 | import com.moing.backend.domain.block.domain.entity.Block;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | public interface BlockRepository extends JpaRepository,BlockCustomRepository {
7 |
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/block/domain/service/BlockDeleteService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.block.domain.service;
2 |
3 | import com.moing.backend.domain.block.domain.entity.Block;
4 | import com.moing.backend.domain.block.domain.repository.BlockRepository;
5 | import com.moing.backend.domain.block.exception.NotFoundBlockException;
6 | import com.moing.backend.global.annotation.DomainService;
7 | import lombok.RequiredArgsConstructor;
8 |
9 | @DomainService
10 | @RequiredArgsConstructor
11 | public class BlockDeleteService {
12 | private final BlockRepository blockRepository;
13 |
14 | public void delete(Long memberId, Long targetId) {
15 | Block block = blockRepository.getBlockById(memberId, targetId).orElseThrow(NotFoundBlockException::new);
16 | blockRepository.delete(block);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/block/domain/service/BlockSaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.block.domain.service;
2 |
3 | import com.moing.backend.domain.block.domain.entity.Block;
4 | import com.moing.backend.domain.block.domain.repository.BlockRepository;
5 | import com.moing.backend.global.annotation.DomainService;
6 | import lombok.RequiredArgsConstructor;
7 |
8 | import java.util.Optional;
9 |
10 | @DomainService
11 | @RequiredArgsConstructor
12 | public class BlockSaveService {
13 |
14 | private final BlockRepository blockRepository;
15 |
16 |
17 | public Block save(Block block) {
18 | //기존에 동일한 사람이 차단했으면 중복 제거
19 | Optional findBlock=blockRepository.getBlockById(block.getBlockMemberId(), block.getTargetId());
20 | return findBlock.orElseGet(() -> blockRepository.save(block));
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/block/exception/BlockException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.block.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class BlockException extends ApplicationException {
8 | protected BlockException(ErrorCode errorCode, HttpStatus httpStatus) {
9 | super(errorCode, httpStatus);
10 | }
11 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/block/exception/NotFoundBlockException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.block.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotFoundBlockException extends BlockException {
7 | public NotFoundBlockException() {
8 | super(ErrorCode.NOT_FOUND_BY_BOARD_ID_ERROR,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/block/presentation/constant/BlockResponseMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.block.presentation.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum BlockResponseMessage {
9 |
10 | CREATE_BLOCK_SUCCESS("사용자 차단을 완료했습니다."),
11 | GET_BLOCK_SUCCESS("사용자 차단 목록 조회를 완료했습니다."),
12 | DELETE_BLOCK_SUCCESS("사용자 차단 해제를 완료했습니다.");
13 |
14 | private final String message;
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/application/dto/request/CreateBoardRequest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.application.dto.request;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | import javax.validation.constraints.NotBlank;
9 | import javax.validation.constraints.NotNull;
10 | import javax.validation.constraints.Size;
11 |
12 | @AllArgsConstructor
13 | @Builder
14 | @NoArgsConstructor
15 | @Getter
16 | public class CreateBoardRequest {
17 | @NotBlank(message = "title 을 입력해 주세요.")
18 | @Size(min = 0, max = 30, message = "제목 글자수를 초과했습니다.")
19 | private String title;
20 |
21 | @NotBlank(message = "content 을 입력해 주세요.")
22 | @Size(min = 0, max = 300, message = "내용 글자수를 초과했습니다.")
23 | private String content;
24 |
25 | @NotNull(message = "notice 사용 여부(isNotice) 를 입력해 주세요.")
26 | private Boolean isNotice;
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/application/dto/request/UpdateBoardRequest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.application.dto.request;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 |
6 | import javax.validation.constraints.NotBlank;
7 | import javax.validation.constraints.NotNull;
8 | import javax.validation.constraints.Size;
9 |
10 | @Getter
11 | @Builder
12 | public class UpdateBoardRequest {
13 | @NotBlank(message = "title 을 입력해 주세요.")
14 | @Size(min = 1, max = 15, message = "title 은 최소 1개, 최대 15개의 문자만 입력 가능합니다.")
15 | private String title;
16 |
17 | @NotBlank(message = "content 을 입력해 주세요.")
18 | @Size(min = 1, max = 300, message = "content 은 최소 1개, 최대 10개의 문자만 입력 가능합니다.")
19 | private String content;
20 |
21 | @NotNull(message = "notice 사용 여부(isNotice) 를 입력해 주세요.")
22 | private Boolean isNotice;
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/application/dto/response/CreateBoardResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @AllArgsConstructor
9 | @Builder
10 | @NoArgsConstructor
11 | @Getter
12 | public class CreateBoardResponse {
13 | private Long boardId;
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/application/dto/response/GetAllBoardResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.util.ArrayList;
9 | import java.util.List;
10 |
11 | @AllArgsConstructor
12 | @Builder
13 | @NoArgsConstructor
14 | @Getter
15 | public class GetAllBoardResponse {
16 | private int noticeNum;
17 | private List noticeBlocks=new ArrayList<>();
18 | private int notNoticeNum;
19 | private List notNoticeBlocks=new ArrayList<>();
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/application/dto/response/GetBoardDetailResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @AllArgsConstructor
9 | @Builder
10 | @NoArgsConstructor
11 | @Getter
12 | public class GetBoardDetailResponse {
13 |
14 | private Long boardId;
15 |
16 | private String writerNickName;
17 |
18 | private Boolean writerIsLeader;
19 |
20 | private String writerProfileImage;
21 |
22 | private String title;
23 |
24 | private String content;
25 |
26 | private String createdDate;
27 |
28 | private Boolean isWriter;
29 |
30 | private Boolean isNotice;
31 |
32 | private Long makerId;
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/application/dto/response/UpdateBoardResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | @Getter
8 | @AllArgsConstructor
9 | @Builder
10 | public class UpdateBoardResponse {
11 | private Long boardId;
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/domain/repository/BoardCustomRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.domain.repository;
2 |
3 | import com.moing.backend.domain.board.application.dto.response.GetAllBoardResponse;
4 |
5 | public interface BoardCustomRepository {
6 | GetAllBoardResponse findBoardAll(Long teamId, Long memberId);
7 | Integer findUnReadBoardNum(Long teamId, Long memberId);
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/domain/repository/BoardRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.domain.repository;
2 |
3 | import com.moing.backend.domain.board.domain.entity.Board;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | import java.util.Optional;
7 |
8 | public interface BoardRepository extends JpaRepository, BoardCustomRepository {
9 |
10 | Optional findBoardByBoardId(Long boardId);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/domain/service/BoardDeleteService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.domain.service;
2 |
3 | import com.moing.backend.domain.board.domain.entity.Board;
4 | import com.moing.backend.domain.board.domain.repository.BoardRepository;
5 | import com.moing.backend.global.annotation.DomainService;
6 | import lombok.RequiredArgsConstructor;
7 |
8 | import javax.transaction.Transactional;
9 |
10 | @DomainService
11 | @Transactional
12 | @RequiredArgsConstructor
13 | public class BoardDeleteService {
14 |
15 | private final BoardRepository boardRepository;
16 |
17 | public void deleteBoard(Board board){
18 | boardRepository.delete(board);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/domain/service/BoardSaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.domain.service;
2 |
3 | import com.moing.backend.domain.board.domain.entity.Board;
4 | import com.moing.backend.domain.board.domain.repository.BoardRepository;
5 | import com.moing.backend.global.annotation.DomainService;
6 | import lombok.RequiredArgsConstructor;
7 |
8 | import javax.transaction.Transactional;
9 |
10 | @DomainService
11 | @Transactional
12 | @RequiredArgsConstructor
13 | public class BoardSaveService {
14 |
15 | private final BoardRepository boardRepository;
16 |
17 | public Board saveBoard(Board board) {
18 | return this.boardRepository.save(board);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/exception/BoardException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class BoardException extends ApplicationException {
8 | protected BoardException(ErrorCode errorCode, HttpStatus httpStatus) {
9 | super(errorCode, httpStatus);
10 | }
11 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/exception/NotAuthByBoardException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotAuthByBoardException extends BoardException {
7 | public NotAuthByBoardException() {
8 | super(ErrorCode.NOT_AUTH_BY_BOARD_ID_ERROR,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/exception/NotFoundByBoardIdException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotFoundByBoardIdException extends BoardException {
7 | public NotFoundByBoardIdException() {
8 | super(ErrorCode.NOT_FOUND_BY_BOARD_ID_ERROR,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/board/presentation/constant/BoardResponseMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.board.presentation.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum BoardResponseMessage {
9 | CREATE_BOARD_SUCCESS("게시글을 생성했습니다."),
10 | GET_BOARD_ALL_SUCCESS("게시글 목록을 모두 조회했습니다."),
11 | UPDATE_BOARD_SUCCESS("게시글을 수정했습니다."),
12 | GET_BOARD_DETAIL_SUCCESS("게시글 상세 조회했습니다."),
13 | DELETE_BOARD_SUCCESS("게시글을 삭제했습니다");
14 | private final String message;
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/boardComment/application/mapper/BoardCommentMapper.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.boardComment.application.mapper;
2 |
3 | import com.moing.backend.domain.board.domain.entity.Board;
4 | import com.moing.backend.domain.comment.application.dto.request.CreateCommentRequest;
5 | import com.moing.backend.domain.boardComment.domain.entity.BoardComment;
6 | import com.moing.backend.domain.teamMember.domain.entity.TeamMember;
7 | import lombok.RequiredArgsConstructor;
8 | import org.springframework.stereotype.Component;
9 |
10 | @Component
11 | @RequiredArgsConstructor
12 | public class BoardCommentMapper {
13 | public static BoardComment toBoardComment(TeamMember teamMember, Board board, CreateCommentRequest createCommentRequest, boolean isLeader) {
14 | BoardComment boardComment= new BoardComment();
15 | boardComment.init(createCommentRequest.getContent(),isLeader);
16 | boardComment.updateBoard(board);
17 | boardComment.updateTeamMember(teamMember);
18 | return boardComment;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/boardComment/domain/repository/BoardCommentCustomRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.boardComment.domain.repository;
2 |
3 | import com.moing.backend.domain.comment.application.dto.response.GetCommentResponse;
4 | import com.moing.backend.domain.history.application.dto.response.NewUploadInfo;
5 | import com.moing.backend.domain.teamMember.domain.entity.TeamMember;
6 |
7 | import java.util.List;
8 | import java.util.Optional;
9 |
10 | public interface BoardCommentCustomRepository {
11 | GetCommentResponse findBoardCommentAll(Long boardId, TeamMember teamMember);
12 |
13 | Optional> findNewUploadInfo(Long memberId, Long boardId);
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/boardComment/domain/repository/BoardCommentRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.boardComment.domain.repository;
2 |
3 | import com.moing.backend.domain.boardComment.domain.entity.BoardComment;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | import java.util.Optional;
7 |
8 | public interface BoardCommentRepository extends JpaRepository, BoardCommentCustomRepository {
9 | Optional findBoardCommentByBoardCommentId(Long boardCommentId);
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/boardComment/domain/service/BoardCommentDeleteService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.boardComment.domain.service;
2 |
3 | import com.moing.backend.domain.boardComment.domain.entity.BoardComment;
4 | import com.moing.backend.domain.boardComment.domain.repository.BoardCommentRepository;
5 | import com.moing.backend.domain.comment.domain.service.CommentDeleteService;
6 | import com.moing.backend.global.annotation.DomainService;
7 | import lombok.RequiredArgsConstructor;
8 |
9 | @DomainService
10 | @RequiredArgsConstructor
11 | public class BoardCommentDeleteService implements CommentDeleteService {
12 | private final BoardCommentRepository boardCommentRepository;
13 |
14 | @Override
15 | public void deleteComment(BoardComment boardComment){
16 | this.boardCommentRepository.delete(boardComment);
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/boardComment/domain/service/BoardCommentSaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.boardComment.domain.service;
2 |
3 | import com.moing.backend.domain.boardComment.domain.repository.BoardCommentRepository;
4 | import com.moing.backend.domain.boardComment.domain.entity.BoardComment;
5 | import com.moing.backend.domain.comment.domain.service.CommentSaveService;
6 | import com.moing.backend.global.annotation.DomainService;
7 | import lombok.RequiredArgsConstructor;
8 |
9 | @DomainService
10 | @RequiredArgsConstructor
11 | public class BoardCommentSaveService implements CommentSaveService {
12 |
13 | private final BoardCommentRepository boardCommentRepository;
14 |
15 | @Override
16 | public BoardComment saveComment(BoardComment boardComment){
17 | return this.boardCommentRepository.save(boardComment);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/boardComment/exception/BoardCommentException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.boardComment.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class BoardCommentException extends ApplicationException {
8 | protected BoardCommentException(ErrorCode errorCode, HttpStatus httpStatus) {
9 | super(errorCode, httpStatus);
10 | }
11 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/boardComment/exception/NotAuthByBoardCommentException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.boardComment.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotAuthByBoardCommentException extends BoardCommentException {
7 | public NotAuthByBoardCommentException() {
8 | super(ErrorCode.NOT_AUTH_BY_BOARD_COMMENT_ID_ERROR,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/boardComment/exception/NotFoundByBoardCommentIdException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.boardComment.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotFoundByBoardCommentIdException extends BoardCommentException {
7 | public NotFoundByBoardCommentIdException() {
8 | super(ErrorCode.NOT_FOUND_BY_BOARD_COMMENT_ID_ERROR,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/boardComment/presentattion/constant/BoardCommentResponseMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.boardComment.presentattion.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum BoardCommentResponseMessage {
9 | CREATE_BOARD_COMMENT_SUCCESS("댓글을 생성했습니다."),
10 | GET_BOARD_COMMENT_ALL_SUCCESS("댓글 목록을 모두 조회했습니다."),
11 | DELETE_BOARD_COMMENT_SUCCESS("댓글을 삭제했습니다");
12 | private final String message;
13 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/boardRead/application/mapper/BoardReadMapper.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.boardRead.application.mapper;
2 |
3 | import com.moing.backend.domain.board.domain.entity.Board;
4 | import com.moing.backend.domain.boardRead.domain.entity.BoardRead;
5 | import com.moing.backend.domain.member.domain.entity.Member;
6 | import com.moing.backend.domain.team.domain.entity.Team;
7 | import org.springframework.stereotype.Component;
8 |
9 | @Component
10 | public class BoardReadMapper {
11 | public static BoardRead toBoardRead(Team team, Member member){
12 | BoardRead boardRead=new BoardRead();
13 | boardRead.updateTeam(team);
14 | boardRead.updateMember(member);
15 | return boardRead;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/boardRead/domain/repository/BoardReadRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.boardRead.domain.repository;
2 |
3 | import com.moing.backend.domain.board.domain.entity.Board;
4 | import com.moing.backend.domain.boardRead.domain.entity.BoardRead;
5 | import com.moing.backend.domain.member.domain.entity.Member;
6 | import com.moing.backend.domain.team.domain.entity.Team;
7 | import org.springframework.data.jpa.repository.JpaRepository;
8 | import org.springframework.data.jpa.repository.Lock;
9 |
10 | import javax.persistence.LockModeType;
11 | import java.util.List;
12 | import java.util.Optional;
13 |
14 | public interface BoardReadRepository extends JpaRepository {
15 |
16 | List findBoardReadByBoardAndMemberAndTeam(Board board, Member member, Team team);
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/comment/application/dto/request/CreateCommentRequest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.comment.application.dto.request;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | import javax.validation.constraints.NotBlank;
9 | import javax.validation.constraints.Size;
10 |
11 | @AllArgsConstructor
12 | @Builder
13 | @NoArgsConstructor
14 | @Getter
15 | public class CreateCommentRequest {
16 |
17 | @NotBlank(message = "content 을 입력해 주세요.")
18 | @Size(min = 0, max = 300, message = "댓글 글자수를 초과했습니다.")
19 | private String content;
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/comment/application/dto/response/CreateCommentResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.comment.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @AllArgsConstructor
9 | @Builder
10 | @NoArgsConstructor
11 | @Getter
12 | public class CreateCommentResponse {
13 | private Long commentId;
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/comment/application/dto/response/GetCommentResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.comment.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.util.List;
9 |
10 | @AllArgsConstructor
11 | @Builder
12 | @NoArgsConstructor
13 | @Getter
14 | public class GetCommentResponse {
15 | private List commentBlocks;
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/comment/domain/entity/Comment.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.comment.domain.entity;
2 |
3 | import com.moing.backend.global.entity.BaseTimeEntity;
4 | import lombok.Getter;
5 | import org.springframework.data.jpa.domain.support.AuditingEntityListener;
6 |
7 | import javax.persistence.Column;
8 | import javax.persistence.EntityListeners;
9 | import javax.persistence.MappedSuperclass;
10 |
11 | @Getter
12 | @MappedSuperclass
13 | @EntityListeners(AuditingEntityListener.class)
14 | public class Comment extends BaseTimeEntity {
15 |
16 | @Column(nullable = false, length = 300)
17 | protected String content;
18 |
19 | protected boolean isLeader; /*작성자 소모임장유무*/
20 | public void updateContent(String content) {
21 | this.content = content;
22 | }
23 |
24 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/comment/domain/service/CommentDeleteService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.comment.domain.service;
2 |
3 | public interface CommentDeleteService {
4 | void deleteComment(T comment);
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/comment/domain/service/CommentGetService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.comment.domain.service;
2 |
3 | import com.moing.backend.domain.comment.application.dto.response.GetCommentResponse;
4 | import com.moing.backend.domain.history.application.dto.response.NewUploadInfo;
5 | import com.moing.backend.domain.teamMember.domain.entity.TeamMember;
6 |
7 | import java.util.List;
8 | import java.util.Optional;
9 |
10 | public interface CommentGetService {
11 | T getComment(Long commentId);
12 | GetCommentResponse getCommentAll(Long boardId, TeamMember teamMember);
13 | Optional> getNewUploadInfo(Long memberId, Long boardId);
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/comment/domain/service/CommentSaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.comment.domain.service;
2 |
3 | public interface CommentSaveService {
4 | T saveComment(T comment);
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/fire/application/dto/req/FireThrowReq.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.fire.application.dto.req;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 | import lombok.NoArgsConstructor;
6 |
7 | @NoArgsConstructor
8 | @Getter
9 | public class FireThrowReq {
10 |
11 | private String message;
12 |
13 | @Builder
14 | public FireThrowReq(String message) {
15 | this.message = message;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/fire/application/dto/res/FireReceiveRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.fire.application.dto.res;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | @Builder
8 | @Getter
9 | @AllArgsConstructor
10 | public class FireReceiveRes {
11 |
12 | private Long receiveMemberId;
13 | private String nickname;
14 | private String fireStatus;
15 | private String profileImg;
16 |
17 | public FireReceiveRes(Long receiveMemberId, String nickname,String profileImg) {
18 | this.receiveMemberId = receiveMemberId;
19 | this.nickname = nickname;
20 | this.profileImg = profileImg;
21 | }
22 |
23 | public void updateFireStatus(boolean status) {
24 | if (status)
25 | this.fireStatus = "True";
26 | else this.fireStatus = "False";
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/fire/application/dto/res/FireThrowRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.fire.application.dto.res;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 |
6 | @Getter
7 | @Builder
8 | public class FireThrowRes {
9 |
10 | private Long receiveMemberId;
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/fire/domain/entity/Fire.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.fire.domain.entity;
2 |
3 | import com.moing.backend.global.entity.BaseTimeEntity;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Builder;
6 | import lombok.Getter;
7 | import lombok.NoArgsConstructor;
8 |
9 | import javax.persistence.*;
10 |
11 | @Entity
12 | @Builder
13 | @Getter
14 | @NoArgsConstructor
15 | @AllArgsConstructor
16 | public class Fire extends BaseTimeEntity {
17 |
18 | @Id
19 | @GeneratedValue(strategy = GenerationType.IDENTITY)
20 | @Column(name = "fire_id")
21 | private Long id;
22 |
23 | private Long throwMemberId;
24 |
25 | private Long receiveMemberId;
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/fire/domain/repository/FireCustomRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.fire.domain.repository;
2 |
3 |
4 | import com.moing.backend.domain.fire.application.dto.res.FireReceiveRes;
5 |
6 | import java.util.List;
7 | import java.util.Optional;
8 |
9 | public interface FireCustomRepository {
10 |
11 | boolean hasFireCreatedWithinOneHour(Long throwMemberId, Long receiveMemberId);
12 | Optional> getFireReceivers(Long teamId, Long missionId, Long memberId);
13 | Long getTodayFires();
14 | Long getYesterdayFires();
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/fire/domain/repository/FireRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.fire.domain.repository;
2 |
3 | import com.moing.backend.domain.fire.domain.entity.Fire;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | public interface FireRepository extends JpaRepository,FireCustomRepository {
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/fire/domain/service/FireSaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.fire.domain.service;
2 |
3 | import com.moing.backend.domain.fire.domain.entity.Fire;
4 | import com.moing.backend.domain.fire.domain.repository.FireCustomRepository;
5 | import com.moing.backend.domain.fire.domain.repository.FireRepository;
6 | import com.moing.backend.global.annotation.DomainService;
7 | import lombok.RequiredArgsConstructor;
8 | import org.springframework.transaction.annotation.Transactional;
9 |
10 | @DomainService
11 | @Transactional
12 | @RequiredArgsConstructor
13 | public class FireSaveService {
14 |
15 | private final FireRepository fireRepository;
16 |
17 | public Fire save(Fire fire) {
18 | return fireRepository.save(fire);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/fire/exception/FireException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.fire.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class FireException extends ApplicationException {
8 |
9 | protected FireException(ErrorCode errorCode, HttpStatus httpStatus) {
10 | super(errorCode, httpStatus);
11 | }
12 |
13 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/fire/exception/NoAuthThrowFireException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.fire.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NoAuthThrowFireException extends FireException {
7 |
8 | public NoAuthThrowFireException() {
9 | super(ErrorCode.NOT_AUTH_FIRE_THROW,
10 | HttpStatus.NOT_FOUND);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/fire/exception/NotFoundFireException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.fire.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotFoundFireException extends FireException {
7 |
8 | public NotFoundFireException() {
9 | super(ErrorCode.NOT_FOUND_FIRE,
10 | HttpStatus.NOT_FOUND);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/fire/exception/NotFoundFireReceiversException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.fire.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotFoundFireReceiversException extends FireException {
7 |
8 | public NotFoundFireReceiversException() {
9 | super(ErrorCode.NOT_FOUND_FIRE_RECEIVERS,
10 | HttpStatus.NOT_FOUND);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/fire/presentation/constant/FireResponseMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.fire.presentation.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum FireResponseMessage {
9 | THROW_FIRE_SUCCESS("불던지기를 완료 했습니다"),
10 | GET_RECEIVERS_SUCCESS("불 던질사람 조회를 완료 했습니다");
11 |
12 | private final String message;
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/history/application/dto/response/GetAlarmCountResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.history.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | @Getter
8 | @AllArgsConstructor
9 | @Builder
10 | public class GetAlarmCountResponse {
11 |
12 | private String count;
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/history/application/dto/response/MemberIdAndToken.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.history.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.util.List;
9 |
10 | @Getter
11 | @Builder
12 | @AllArgsConstructor
13 | @NoArgsConstructor
14 | public class MemberIdAndToken {
15 |
16 | private String fcmToken;
17 | private Long memberId;
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/history/application/dto/response/NewUploadInfo.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.history.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Getter
9 | @Builder
10 | @AllArgsConstructor
11 | @NoArgsConstructor
12 | public class NewUploadInfo {
13 |
14 | private String fcmToken;
15 | private Long memberId;
16 | private boolean isNewUploadPush;
17 | private boolean isSignOut;
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/history/domain/entity/AlarmType.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.history.domain.entity;
2 |
3 | import lombok.Getter;
4 |
5 | @Getter
6 | public enum AlarmType {
7 | NEW_UPLOAD,
8 | FIRE,
9 | REMIND,
10 | APPROVE_TEAM,
11 | REJECT_TEAM,
12 | COMMENT
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/history/domain/entity/PagePath.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.history.domain.entity;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @Getter
7 | @AllArgsConstructor
8 | public enum PagePath {
9 |
10 | NOTICE_PATH("/post/detail"),
11 |
12 | MISSION_PATH("/missions/prove"),
13 |
14 | MISSION_ALL_PTAH("/missions"),
15 |
16 | HOME_PATH("/home");
17 |
18 |
19 | private final String value;
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/history/domain/repository/AlarmHistoryCustomRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.history.domain.repository;
2 |
3 | import com.moing.backend.domain.history.application.dto.response.GetAlarmHistoryResponse;
4 |
5 | import java.util.List;
6 |
7 | public interface AlarmHistoryCustomRepository {
8 |
9 | List findAlarmHistoriesByMemberId(Long memberId);
10 | String findUnreadAlarmCount(Long memberId);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/history/domain/repository/AlarmHistoryRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.history.domain.repository;
2 |
3 | import com.moing.backend.domain.history.domain.entity.AlarmHistory;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | import java.time.LocalDateTime;
7 | import java.util.Optional;
8 |
9 | public interface AlarmHistoryRepository extends JpaRepository, AlarmHistoryCustomRepository {
10 |
11 | Optional findAlarmHistoryByIdAndReceiverId(Long id, Long receiverId);
12 | void deleteByCreatedDateBefore(LocalDateTime dateTime);
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/history/domain/service/AlarmHistoryDeleteService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.history.domain.service;
2 |
3 | import com.moing.backend.domain.history.domain.repository.AlarmHistoryRepository;
4 | import com.moing.backend.global.annotation.DomainService;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.transaction.annotation.Transactional;
7 |
8 | import java.time.LocalDateTime;
9 |
10 | @DomainService
11 | @Transactional
12 | @RequiredArgsConstructor
13 | public class AlarmHistoryDeleteService {
14 |
15 | private final AlarmHistoryRepository alarmHistoryRepository;
16 |
17 | public void deleteByCreatedDateBefore(LocalDateTime oneWeekAgo) {
18 | alarmHistoryRepository.deleteByCreatedDateBefore(oneWeekAgo);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/history/domain/service/AlarmHistorySaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.history.domain.service;
2 |
3 | import com.moing.backend.domain.history.domain.entity.AlarmHistory;
4 | import com.moing.backend.domain.history.domain.repository.AlarmHistoryRepository;
5 | import com.moing.backend.global.annotation.DomainService;
6 | import lombok.RequiredArgsConstructor;
7 |
8 | import javax.transaction.Transactional;
9 | import java.util.List;
10 |
11 | @DomainService
12 | @Transactional
13 | @RequiredArgsConstructor
14 | public class AlarmHistorySaveService {
15 |
16 | private final AlarmHistoryRepository alarmHistoryRepository;
17 |
18 | public void saveAlarmHistories(List alarmHistories){
19 | alarmHistoryRepository.saveAll(alarmHistories);
20 | }
21 |
22 | public void saveAlarmHistory(AlarmHistory alarmHistory){
23 | alarmHistoryRepository.save(alarmHistory);
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/history/exception/AlarmHistoryException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.history.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class AlarmHistoryException extends ApplicationException {
8 | protected AlarmHistoryException(ErrorCode errorCode, HttpStatus httpStatus) {
9 | super(errorCode, httpStatus);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/history/exception/NotFoundAlarmHistoryException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.history.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotFoundAlarmHistoryException extends AlarmHistoryException {
7 | public NotFoundAlarmHistoryException() {
8 | super(ErrorCode.NOT_FOUND_BY_ALARM_HISOTRY_ID_ERROR,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/history/presentation/constant/AlarmHistoryResponseMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.history.presentation.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum AlarmHistoryResponseMessage {
9 | GET_ALL_ALARM_HISTORY("알림 히스토리를 모두 조회했습니다."),
10 | READ_ALARM_HISTORY("알림 히스토리 한 개를 조회했습니다."),
11 | GET_UNREAD_ALARM_HISTORY("안읽은 알림 개수를 조회했습니다");
12 | private final String message;
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/infra/image/application/dto/ImageFileExtension.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.infra.image.application.dto;
2 |
3 |
4 | import lombok.AllArgsConstructor;
5 | import lombok.Getter;
6 |
7 | @Getter
8 | @AllArgsConstructor
9 | public enum ImageFileExtension {
10 | JPEG("jpeg"),
11 | JPG("jpg"),
12 | PNG("png");
13 |
14 | private final String uploadExtension;
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/infra/image/application/dto/ImageUrlDto.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.infra.image.application.dto;
2 |
3 |
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | @Getter
8 | @Builder
9 | public class ImageUrlDto {
10 |
11 | private final String presignedUrl;
12 | private final String key;
13 |
14 | public static ImageUrlDto of(String url, String key) {
15 | return ImageUrlDto.builder().presignedUrl(url).key(key).build();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/infra/image/application/dto/request/IssuePresignedUrlRequest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.infra.image.application.dto.request;
2 |
3 |
4 | import com.moing.backend.domain.infra.image.application.dto.ImageFileExtension;
5 | import com.moing.backend.global.annotation.ValidEnum;
6 | import lombok.AllArgsConstructor;
7 | import lombok.Builder;
8 | import lombok.Getter;
9 | import lombok.NoArgsConstructor;
10 |
11 | import javax.validation.constraints.NotBlank;
12 |
13 | @Builder
14 | @Getter
15 | @AllArgsConstructor
16 | @NoArgsConstructor
17 | public class IssuePresignedUrlRequest {
18 |
19 |
20 | @NotBlank(message = "파일 확장자를 입력해주세요.")
21 | @ValidEnum(
22 | enumClass = ImageFileExtension.class,
23 | message = "유효하지 않은 ImageFileExtension 파라미터입니다.")
24 | private ImageFileExtension imageFileExtension;
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/infra/image/application/dto/response/IssuePresignedUrlResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.infra.image.application.dto.response;
2 |
3 |
4 | import com.moing.backend.domain.infra.image.application.dto.ImageUrlDto;
5 | import com.moing.backend.global.config.s3.ImageUrlUtil;
6 | import lombok.Builder;
7 | import lombok.Getter;
8 |
9 | @Getter
10 | @Builder
11 | public class IssuePresignedUrlResponse {
12 |
13 | private final String presignedUrl;
14 |
15 | private final String imgUrl;
16 |
17 | public static IssuePresignedUrlResponse from(ImageUrlDto urlDto) {
18 | String imgUrl = ImageUrlUtil.prefix +"/"+ urlDto.getKey();
19 |
20 | return IssuePresignedUrlResponse.builder()
21 | .presignedUrl(urlDto.getPresignedUrl())
22 | .imgUrl(imgUrl)
23 | .build();
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/infra/image/application/service/IssuePresignedUrlUseCase.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.infra.image.application.service;
2 |
3 |
4 | import com.moing.backend.domain.infra.image.application.dto.request.IssuePresignedUrlRequest;
5 | import com.moing.backend.domain.infra.image.application.dto.response.IssuePresignedUrlResponse;
6 | import com.moing.backend.global.config.s3.S3Service;
7 | import lombok.RequiredArgsConstructor;
8 | import org.springframework.stereotype.Service;
9 |
10 |
11 | @Service
12 | @RequiredArgsConstructor
13 | public class IssuePresignedUrlUseCase {
14 |
15 | private final S3Service s3Service;
16 |
17 | public IssuePresignedUrlResponse execute(IssuePresignedUrlRequest issuePresignedUrlRequest) {
18 |
19 | return IssuePresignedUrlResponse.from(
20 | s3Service.issuePreSignedUrl(
21 | issuePresignedUrlRequest.getImageFileExtension()));
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/infra/image/presentation/constant/EImageResponseMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.infra.image.presentation.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum EImageResponseMessage {
9 | ISSUE_PRESIGNED_URL_SUCCESS("presignedUrl을 발급하였습니다");
10 |
11 | private final String message;
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/member/domain/constant/Gender.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.member.domain.constant;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @AllArgsConstructor
7 | @Getter
8 | public enum Gender {
9 | MAN, WOMAN, NEUTRALITY
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/member/domain/constant/RegistrationStatus.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.member.domain.constant;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @AllArgsConstructor
7 | @Getter
8 | public enum RegistrationStatus {
9 | UNCOMPLETED("회원가입을 합니다. 추가 정보를 입력하세요."),
10 | COMPLETED("로그인을 합니다.");
11 | private String message;
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/member/domain/constant/Role.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.member.domain.constant;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @AllArgsConstructor
7 | @Getter
8 | public enum Role {
9 | USER("ROLE_USER"),
10 | ADMIN("ROLE_ADMIN");
11 |
12 | private final String key;
13 | }
14 |
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/member/domain/constant/SocialProvider.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.member.domain.constant;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @AllArgsConstructor
7 | @Getter
8 | public enum SocialProvider {
9 | GOOGLE, APPLE, KAKAO;
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/member/domain/repository/MemberCustomRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.member.domain.repository;
2 |
3 | import com.moing.backend.domain.member.domain.entity.Member;
4 |
5 | import java.util.List;
6 | import java.util.Optional;
7 |
8 | public interface MemberCustomRepository {
9 |
10 | boolean checkNickname(String nickname);
11 | Optional findNotDeletedBySocialId(String socialId);
12 | Optional findNotDeletedByEmail(String email);
13 | Optional findNotDeletedByMemberId(Long id);
14 | Long getTodayNewMembers();
15 | Long getYesterdayNewMembers();
16 |
17 | Optional> findAllMemberOnPushAlarm(Long offset, Long limit);
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/member/domain/repository/MemberRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.member.domain.repository;
2 |
3 | import com.moing.backend.domain.member.domain.entity.Member;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | public interface MemberRepository extends JpaRepository, MemberCustomRepository {
7 |
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/member/domain/service/MemberCheckService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.member.domain.service;
2 |
3 | import com.moing.backend.domain.member.domain.repository.MemberRepository;
4 | import com.moing.backend.global.annotation.DomainService;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.transaction.annotation.Transactional;
7 |
8 | @DomainService
9 | @RequiredArgsConstructor
10 | public class MemberCheckService {
11 | private final MemberRepository memberRepository;
12 |
13 | @Transactional(readOnly = true)
14 | public boolean checkNickname(String nickname) {
15 | return memberRepository.checkNickname(nickname);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/member/domain/service/MemberDeleteService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.member.domain.service;
2 |
3 | import com.moing.backend.domain.member.domain.entity.Member;
4 | import com.moing.backend.domain.member.domain.repository.MemberRepository;
5 | import com.moing.backend.global.annotation.DomainService;
6 | import lombok.RequiredArgsConstructor;
7 |
8 | import javax.transaction.Transactional;
9 |
10 | @DomainService
11 | @Transactional
12 | @RequiredArgsConstructor
13 | public class MemberDeleteService {
14 |
15 | private final MemberRepository memberRepository;
16 |
17 | public void deleteMember(Member member){
18 | this.memberRepository.delete(member);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/member/dto/request/PostUpdatePushAlarm.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.member.dto.request;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Getter
8 | @AllArgsConstructor
9 | @NoArgsConstructor
10 | public class PostUpdatePushAlarm {
11 |
12 | private String title;
13 | private String message;
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/member/dto/response/UserProperty.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.member.dto.response;
2 |
3 | import com.moing.backend.domain.member.domain.constant.Gender;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Builder;
6 | import lombok.Getter;
7 | import lombok.NoArgsConstructor;
8 |
9 | import java.time.LocalDate;
10 |
11 | @Builder
12 | @AllArgsConstructor
13 | @NoArgsConstructor
14 | @Getter
15 | public class UserProperty {
16 | private Gender gender;
17 | private LocalDate birthDate;
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/member/exception/MemberException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.member.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class MemberException extends ApplicationException {
8 | protected MemberException(ErrorCode errorCode, HttpStatus httpStatus) {
9 | super(errorCode, httpStatus);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/member/exception/NotFoundBySocialIdException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.member.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotFoundBySocialIdException extends MemberException {
7 | public NotFoundBySocialIdException() {
8 | super(ErrorCode.NOT_FOUND_BY_SOCIAL_ID_ERROR,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/member/exception/NotFoundRemindAlarmException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.member.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotFoundRemindAlarmException extends MemberException {
7 | public NotFoundRemindAlarmException() {
8 | super(ErrorCode.NOT_FOUND_ALL_MEMBER,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/application/dto/req/MissionReq.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.application.dto.req;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 | import lombok.*;
8 |
9 |
10 | @AllArgsConstructor
11 | @Builder
12 | @NoArgsConstructor
13 | @Getter
14 | public class MissionReq {
15 |
16 | private String title;
17 | private String dueTo;
18 |
19 | private String rule;
20 | private String content;
21 | private int number;
22 |
23 | private String type;
24 | private String way;
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/application/dto/res/GatherRepeatMissionRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.application.dto.res;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | import java.util.List;
8 |
9 | @Getter
10 | @Builder
11 | @AllArgsConstructor
12 | public class GatherRepeatMissionRes {
13 |
14 | private Long missionId;
15 | private Long teamId;
16 | private String teamName;
17 | private String missionTitle;
18 | private String totalNum;
19 | private String doneNum;
20 | private String status;
21 | private String donePeople;
22 | private String totalPeople;
23 |
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/application/dto/res/GatherSingleMissionRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.application.dto.res;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.ToString;
7 |
8 | @Getter
9 | @Builder
10 | @ToString
11 | @AllArgsConstructor
12 | public class GatherSingleMissionRes {
13 | private Long missionId;
14 | private Long teamId;
15 | private String teamName;
16 | private String missionTitle;
17 | private String dueTo;
18 | private String status;
19 | private String done;
20 | private String total;
21 |
22 | public GatherSingleMissionRes(Long missionId, Long teamId, String teamName, String missionTitle, String dueTo, String status, String total) {
23 | this.missionId = missionId;
24 | this.teamId = teamId;
25 | this.teamName = teamName;
26 | this.missionTitle = missionTitle;
27 | this.dueTo = dueTo;
28 | this.status = status;
29 | this.total = total;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/application/dto/res/MissionConfirmRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.application.dto.res;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | @Getter
8 | @Builder
9 | @AllArgsConstructor
10 | public class MissionConfirmRes {
11 | private Long missionId;
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/application/dto/res/MissionCreateRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.application.dto.res;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 |
6 | @Getter
7 | @Builder
8 | public class MissionCreateRes {
9 |
10 | private Long missionId;
11 |
12 | private String title;
13 | private String dueTo;
14 |
15 | private String rule;
16 | private String content;
17 | private int number;
18 |
19 | private String type;
20 | private String status;
21 | private String way;
22 |
23 | private Boolean isLeader;
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/application/dto/res/MissionReadRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.application.dto.res;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | @Getter
8 | @Builder
9 | @AllArgsConstructor
10 | public class MissionReadRes {
11 |
12 | private String title;
13 | private String dueTo;
14 |
15 | private String rule;
16 | private String content;
17 |
18 | private String type;
19 | private String way;
20 |
21 | private Boolean isLeader;
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/application/dto/res/MissionRecommendRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.application.dto.res;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 | import lombok.Setter;
6 |
7 | @Builder
8 | @Getter
9 | @Setter
10 | public class MissionRecommendRes {
11 | String category;
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/application/dto/res/SingleMissionBoardRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.application.dto.res;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.Setter;
7 |
8 | @Getter
9 | @Setter
10 | @Builder
11 | @AllArgsConstructor
12 | public class SingleMissionBoardRes {
13 | private Long missionId;
14 | private String dueTo; // 날짜
15 | private String title;
16 | private String status;
17 | private String missionType;
18 | private Boolean isRead;
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/domain/entity/constant/MissionStatus.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.domain.entity.constant;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @Getter
7 | @AllArgsConstructor
8 | public enum MissionStatus {
9 | END,
10 | ONGOING,
11 | SUCCESS,
12 | FAIL,
13 | WAIT
14 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/domain/entity/constant/MissionType.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.domain.entity.constant;
2 |
3 | public enum MissionType {
4 |
5 | ONCE,REPEAT;
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/domain/entity/constant/MissionWay.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.domain.entity.constant;
2 |
3 | public enum MissionWay {
4 | TEXT,
5 | LINK,
6 | PHOTO;
7 |
8 | private String name;
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/domain/repository/MissionRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.domain.repository;
2 |
3 | import com.moing.backend.domain.mission.domain.entity.Mission;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.stereotype.Repository;
6 |
7 | @Repository
8 | public interface MissionRepository extends JpaRepository,MissionCustomRepository {
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/domain/service/MissionDeleteService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.domain.service;
2 |
3 | import com.moing.backend.domain.mission.domain.repository.MissionRepository;
4 | import com.moing.backend.global.annotation.DomainService;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.transaction.annotation.Transactional;
7 |
8 | @DomainService
9 | @Transactional
10 | @RequiredArgsConstructor
11 | public class MissionDeleteService {
12 |
13 | private final MissionRepository missionRepository;
14 |
15 | public Long deleteMission(Long missionId) {
16 | missionRepository.deleteById(missionId);
17 | return missionId;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/domain/service/MissionSaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.domain.service;
2 |
3 | import com.moing.backend.domain.mission.domain.entity.Mission;
4 | import com.moing.backend.domain.mission.domain.repository.MissionRepository;
5 | import com.moing.backend.global.annotation.DomainService;
6 | import lombok.RequiredArgsConstructor;
7 | import org.springframework.transaction.annotation.Transactional;
8 |
9 | @DomainService
10 | @Transactional
11 | @RequiredArgsConstructor
12 | public class MissionSaveService {
13 |
14 | private final MissionRepository missionRepository;
15 |
16 | public void save(Mission mission) {
17 | missionRepository.save(mission);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/domain/service/MissionUpdateService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.domain.service;
2 |
3 | import com.moing.backend.domain.mission.domain.entity.Mission;
4 | import com.moing.backend.domain.mission.domain.repository.MissionRepository;
5 | import com.moing.backend.global.annotation.DomainService;
6 | import lombok.RequiredArgsConstructor;
7 | import org.springframework.transaction.annotation.Transactional;
8 |
9 | @DomainService
10 | @Transactional
11 | @RequiredArgsConstructor
12 | public class MissionUpdateService {
13 |
14 | private final MissionRepository missionRepository;
15 |
16 | public void updateMission(Mission mission) {
17 | missionRepository.save(mission);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/exception/MissionException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class MissionException extends ApplicationException {
8 |
9 | protected MissionException(ErrorCode errorCode, HttpStatus httpStatus) {
10 | super(errorCode, httpStatus);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/exception/NoAccessCreateMission.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NoAccessCreateMission extends MissionException {
7 |
8 | public NoAccessCreateMission() {
9 | super(ErrorCode.NO_ACCESS_CREATE_MISSION,
10 | HttpStatus.UNAUTHORIZED);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/exception/NoAccessDeleteMission.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NoAccessDeleteMission extends MissionException {
7 |
8 | public NoAccessDeleteMission() {
9 | super(ErrorCode.NO_ACCESS_DELETE_MISSION,
10 | HttpStatus.UNAUTHORIZED);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/exception/NoAccessUpdateMission.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NoAccessUpdateMission extends MissionException {
7 |
8 | public NoAccessUpdateMission() {
9 | super(ErrorCode.NO_ACCESS_UPDATE_MISSION,
10 | HttpStatus.UNAUTHORIZED);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/exception/NoMoreCreateMission.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NoMoreCreateMission extends MissionException {
7 |
8 | public NoMoreCreateMission() {
9 | super(ErrorCode.NO_MORE_CREATE_MISSION,
10 | HttpStatus.UNAUTHORIZED);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/exception/NotFoundEndMissionException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotFoundEndMissionException extends MissionException {
7 |
8 | public NotFoundEndMissionException() {
9 | super(ErrorCode.NOT_FOUND_MISSION,
10 | HttpStatus.NOT_FOUND);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/exception/NotFoundMissionException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public class NotFoundMissionException extends MissionException {
8 |
9 | public NotFoundMissionException() {
10 | super(ErrorCode.NOT_FOUND_MISSION,
11 | HttpStatus.NOT_FOUND);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/exception/NotFoundOngoingMissionException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotFoundOngoingMissionException extends MissionException {
7 |
8 | public NotFoundOngoingMissionException() {
9 | super(ErrorCode.NOT_FOUND_MISSION,
10 | HttpStatus.NOT_FOUND);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mission/presentation/constant/MissionResponseMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mission.presentation.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum MissionResponseMessage {
9 | CREATE_MISSION_SUCCESS("미션 생성을 완료 했습니다"),
10 | READ_MISSION_SUCCESS("미션 조회를 완료 했습니다"),
11 | UPDATE_MISSION_SUCCESS("미션 수정을 완료 했습니다"),
12 | END_MISSION_SUCCESS("미션 종료를 완료 했습니다"),
13 | DELETE_MISSION_SUCCESS("미션 삭제를 완료 했습니다"),
14 | RECOMMEND_MISSION_SUCCESS("미션 추천을 위한 팀 카테고리를 조회 했습니다"),
15 | CONFIRM_MISSION_SUCCESS("미션 설명을 확인했습니다.");
16 |
17 | private final String message;
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/application/dto/req/MissionArchiveHeartReq.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.application.dto.req;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Getter
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | @Builder
12 | public class MissionArchiveHeartReq {
13 | private Long archiveId;
14 | private String heartStatus;
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/application/dto/req/MissionArchiveReq.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.application.dto.req;
2 |
3 | import lombok.*;
4 |
5 | import javax.annotation.Nullable;
6 | import javax.validation.constraints.Size;
7 |
8 | @Builder
9 | @NoArgsConstructor
10 | @Getter
11 | public class MissionArchiveReq {
12 |
13 | private String status;
14 |
15 | @Size(min = 1, max = 1000)
16 | private String archive; //사진일 경우 파일명, 이외에는 text,link
17 |
18 | private String contents;
19 |
20 | @Builder
21 | public MissionArchiveReq(String status, String archive, String contents) {
22 | this.status = status;
23 | this.archive = archive;
24 | this.contents = contents;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/application/dto/res/MissionArchiveHeartRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.application.dto.res;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Getter
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | @Builder
12 | public class MissionArchiveHeartRes {
13 | private Long archiveId;
14 | private String heartStatus;
15 | private int hearts;
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/application/dto/res/MissionArchivePhotoRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.application.dto.res;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.util.List;
9 |
10 | @Builder
11 | @Getter
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class MissionArchivePhotoRes {
15 | Long teamId;
16 | List photo;
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/application/dto/res/MissionArchiveRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.application.dto.res;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 | @AllArgsConstructor
8 | @Builder
9 | @NoArgsConstructor
10 | @Getter
11 | public class MissionArchiveRes {
12 |
13 | private Long archiveId;
14 | private String archive;
15 | private String way;
16 | private String createdDate;
17 | private String status;
18 | private Long count;
19 | private String heartStatus;
20 | private Long hearts;
21 | private String contents;
22 | private Long comments;
23 |
24 | public void updateCount(Long count) {
25 | this.count = count;
26 | }
27 |
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/application/dto/res/MissionArchiveStatusRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.application.dto.res;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @AllArgsConstructor
9 | @Builder
10 | @NoArgsConstructor
11 | @Getter
12 | public class MissionArchiveStatusRes {
13 | private String total;
14 | private String done;
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/application/dto/res/MyArchiveStatus.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.application.dto.res;
2 |
3 | import lombok.*;
4 |
5 | @ToString
6 | @AllArgsConstructor
7 | @Builder
8 | @NoArgsConstructor
9 | @Getter
10 | public class MyArchiveStatus {
11 | private boolean end;
12 | private String status;
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/application/dto/res/MyMissionArchiveRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.application.dto.res;
2 |
3 | import com.moing.backend.domain.missionArchive.domain.entity.MissionArchive;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Builder;
6 | import lombok.Getter;
7 | import lombok.NoArgsConstructor;
8 |
9 | import java.util.List;
10 |
11 | @AllArgsConstructor
12 | @Builder
13 | @NoArgsConstructor
14 | @Getter
15 | public class MyMissionArchiveRes {
16 | private String today;
17 | private List archives;
18 |
19 | public void updateArchives(List archives) {
20 | this.archives = archives;
21 | }
22 |
23 | public void updateTodayStatus(Boolean bo) {
24 | if (bo) {
25 | this.today = "True";
26 | } else {
27 | this.today = "False";
28 | }
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/application/dto/res/MyTeamsRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.application.dto.res;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | @Getter
11 | @Builder
12 | public class MyTeamsRes {
13 | private Long teamId;
14 | private String teamName;
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/application/dto/res/PersonalArchiveRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.application.dto.res;
2 |
3 | import lombok.*;
4 |
5 | import javax.annotation.Nullable;
6 |
7 | @AllArgsConstructor
8 | @Builder
9 | @NoArgsConstructor
10 | @Getter
11 | public class PersonalArchiveRes {
12 |
13 | private Long archiveId;
14 | private String nickname;
15 | private String profileImg;
16 |
17 | private String archive;
18 | private String createdDate;
19 | private String way;
20 |
21 | private String heartStatus;
22 | private int hearts;
23 |
24 | private String status;
25 | private Long count;
26 |
27 | private Long makerId;
28 |
29 | @Nullable
30 | private String contents;
31 | private Long comments;
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/application/service/MissionArchiveCreateMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.application.service;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum MissionArchiveCreateMessage {
9 |
10 | CREATOR_CREATE_MISSION_ARCHIVE("%s님이 미션을 인증했어요!"),
11 | TEAM_AND_TITLE("[%s] %s");
12 |
13 | private final String message;
14 |
15 | public String to(String creator) {
16 | return String.format(message, creator);
17 | }
18 |
19 | public String teamAndTitle(String team, String title) {
20 | return String.format(message, team, title);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/domain/entity/MissionArchiveStatus.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.domain.entity;
2 |
3 | public enum MissionArchiveStatus {
4 | INCOMPLETE,COMPLETE,SKIP
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/domain/repository/MissionArchiveRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.domain.repository;
2 |
3 | import com.moing.backend.domain.missionArchive.domain.entity.MissionArchive;
4 | import feign.Param;
5 | import org.springframework.data.jpa.repository.JpaRepository;
6 | import org.springframework.data.jpa.repository.Query;
7 | import org.springframework.stereotype.Repository;
8 |
9 | import java.util.List;
10 | import java.util.Optional;
11 |
12 | @Repository
13 | public interface MissionArchiveRepository extends JpaRepository,MissionArchiveCustomRepository {
14 |
15 | @Query("select m from MissionArchive as m where m.mission.id = :missionId and m.member.memberId =:memberId order by m.createdDate")
16 | Optional> findArchivesByMissionIdAndMemberId(@Param("memberId") Long memberId, @Param("missionId")Long missionId);
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/domain/repository/OrderCondition.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.domain.repository;
2 |
3 | public enum OrderCondition {
4 | DUETO,CREATED
5 |
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/domain/service/MissionArchiveDeleteService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.domain.service;
2 |
3 | import com.moing.backend.domain.missionArchive.domain.entity.MissionArchive;
4 | import com.moing.backend.domain.missionArchive.domain.repository.MissionArchiveRepository;
5 | import com.moing.backend.domain.missionComment.domain.service.MissionCommentDeleteService;
6 | import com.moing.backend.global.annotation.DomainService;
7 | import lombok.RequiredArgsConstructor;
8 | import org.springframework.transaction.annotation.Transactional;
9 |
10 | @DomainService
11 | @Transactional
12 | @RequiredArgsConstructor
13 | public class MissionArchiveDeleteService {
14 |
15 | private final MissionArchiveRepository missionArchiveRepository;
16 |
17 | public void deleteMissionArchive(MissionArchive missionArchive) {
18 | missionArchiveRepository.delete(missionArchive);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/domain/service/MissionArchiveSaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.domain.service;
2 |
3 | import com.moing.backend.domain.missionArchive.domain.entity.MissionArchive;
4 | import com.moing.backend.domain.missionArchive.domain.repository.MissionArchiveRepository;
5 | import com.moing.backend.global.annotation.DomainService;
6 | import lombok.RequiredArgsConstructor;
7 | import org.springframework.transaction.annotation.Transactional;
8 |
9 | @DomainService
10 | @Transactional
11 | @RequiredArgsConstructor
12 | public class MissionArchiveSaveService {
13 |
14 | private final MissionArchiveRepository missionArchiveRepository;
15 |
16 | public MissionArchive save(MissionArchive missionArchive) {
17 | return missionArchiveRepository.save(missionArchive);
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/exception/MissionArchiveException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class MissionArchiveException extends ApplicationException {
8 |
9 | protected MissionArchiveException(ErrorCode errorCode, HttpStatus httpStatus) {
10 | super(errorCode, httpStatus);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/exception/NoAccessMissionArchiveException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NoAccessMissionArchiveException extends MissionArchiveException {
7 | public NoAccessMissionArchiveException() {
8 | super(ErrorCode.NO_MORE_ARCHIVE_ERROR, HttpStatus.NOT_FOUND);
9 |
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/exception/NoMoreMissionArchiveException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NoMoreMissionArchiveException extends MissionArchiveException {
7 |
8 | public NoMoreMissionArchiveException() {
9 | super(ErrorCode.NO_MORE_ARCHIVE_ERROR,
10 | HttpStatus.NOT_FOUND);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/exception/NotFoundMissionArchiveException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotFoundMissionArchiveException extends MissionArchiveException {
7 |
8 | public NotFoundMissionArchiveException() {
9 | super(ErrorCode.NOT_FOUND_MISSION_ARCHIVE,
10 | HttpStatus.NOT_FOUND);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionArchive/exception/NotYetMissionArchiveException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionArchive.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotYetMissionArchiveException extends MissionArchiveException {
7 |
8 | public NotYetMissionArchiveException() {
9 | super(ErrorCode.NOT_YET_MISSION_ARCHIVE,
10 | HttpStatus.NOT_FOUND);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionComment/domain/repository/MissionCommentCustomRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionComment.domain.repository;
2 |
3 | import com.moing.backend.domain.comment.application.dto.response.GetCommentResponse;
4 | import com.moing.backend.domain.history.application.dto.response.NewUploadInfo;
5 | import com.moing.backend.domain.teamMember.domain.entity.TeamMember;
6 |
7 | import java.util.List;
8 | import java.util.Optional;
9 |
10 | public interface MissionCommentCustomRepository {
11 | GetCommentResponse findMissionCommentAll(Long missionArchiveId, TeamMember teamMember);
12 |
13 | Optional> findNewUploadInfo(Long memberId, Long missionArchiveId);
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionComment/domain/repository/MissionCommentRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionComment.domain.repository;
2 |
3 | import com.moing.backend.domain.missionComment.domain.entity.MissionComment;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | import java.util.List;
7 | import java.util.Optional;
8 |
9 | public interface MissionCommentRepository extends JpaRepository, MissionCommentCustomRepository {
10 |
11 | Optional findMissionCommentByMissionCommentId(Long missionCommentId);
12 |
13 | void deleteAllMissionCommentsByMissionArchiveId(Long missionArchiveId);
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionComment/domain/service/MissionCommentSaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionComment.domain.service;
2 |
3 | import com.moing.backend.domain.comment.domain.service.CommentSaveService;
4 | import com.moing.backend.domain.missionComment.domain.entity.MissionComment;
5 | import com.moing.backend.domain.missionComment.domain.repository.MissionCommentRepository;
6 | import com.moing.backend.global.annotation.DomainService;
7 | import lombok.RequiredArgsConstructor;
8 |
9 | @DomainService
10 | @RequiredArgsConstructor
11 | public class MissionCommentSaveService implements CommentSaveService {
12 |
13 | private final MissionCommentRepository missionCommentRepository;
14 |
15 | @Override
16 | public MissionComment saveComment(MissionComment comment) {
17 | return missionCommentRepository.save(comment);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionComment/exception/MissionCommentException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionComment.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class MissionCommentException extends ApplicationException {
8 | protected MissionCommentException(ErrorCode errorCode, HttpStatus httpStatus) {
9 | super(errorCode, httpStatus);
10 | }
11 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionComment/exception/NotAuthByMissionCommentException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionComment.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotAuthByMissionCommentException extends MissionCommentException {
7 | public NotAuthByMissionCommentException() {
8 | super(ErrorCode.NOT_AUTH_BY_MISSION_COMMENT_ID_ERROR,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionComment/exception/NotFoundByMissionCommentIdException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionComment.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotFoundByMissionCommentIdException extends MissionCommentException {
7 | public NotFoundByMissionCommentIdException() {
8 | super(ErrorCode.NOT_FOUND_BY_MISSION_COMMENT_ID_ERROR,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionHeart/application/dto/MissionHeartRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionHeart.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @AllArgsConstructor
9 | @Builder
10 | @NoArgsConstructor
11 | @Getter
12 | public class MissionHeartRes {
13 | private Long missionArchiveId;
14 | private String missionHeartStatus;
15 | private int hearts;
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionHeart/domain/constant/MissionHeartStatus.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionHeart.domain.constant;
2 |
3 | public enum MissionHeartStatus {
4 | True,False
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionHeart/domain/repository/MissionHeartCustomRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionHeart.domain.repository;
2 |
3 | import com.moing.backend.domain.missionHeart.domain.entity.MissionHeart;
4 | import org.springframework.stereotype.Repository;
5 |
6 | import java.util.Optional;
7 |
8 | @Repository
9 | public interface MissionHeartCustomRepository {
10 |
11 | boolean findAlreadyHeart(Long memberId, Long archiveId);
12 | MissionHeart findByMemberIdAndArchiveId(Long memberId, Long archiveId);
13 |
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionHeart/domain/repository/MissionHeartRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionHeart.domain.repository;
2 |
3 | import com.moing.backend.domain.missionHeart.domain.entity.MissionHeart;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | public interface MissionHeartRepository extends JpaRepository,MissionHeartCustomRepository {
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionHeart/domain/service/MissionHeartSaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionHeart.domain.service;
2 |
3 | import com.moing.backend.domain.missionHeart.domain.entity.MissionHeart;
4 | import com.moing.backend.domain.missionHeart.domain.repository.MissionHeartCustomRepository;
5 | import com.moing.backend.domain.missionHeart.domain.repository.MissionHeartRepository;
6 | import com.moing.backend.global.annotation.DomainService;
7 | import lombok.RequiredArgsConstructor;
8 | import org.springframework.transaction.annotation.Transactional;
9 |
10 | @DomainService
11 | @Transactional
12 | @RequiredArgsConstructor
13 | public class MissionHeartSaveService {
14 |
15 | private final MissionHeartRepository missionHeartRepository;
16 |
17 | public MissionHeart save(MissionHeart missionHeart) {
18 | return missionHeartRepository.save(missionHeart);
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionHeart/exception/MissionHeartException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionHeart.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class MissionHeartException extends ApplicationException {
8 | protected MissionHeartException(ErrorCode errorCode, HttpStatus httpStatus) {
9 | super(errorCode, httpStatus);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionHeart/exception/NoAccessMissionHeartException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionHeart.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NoAccessMissionHeartException extends MissionHeartException {
7 | public NoAccessMissionHeartException() {
8 | super(ErrorCode.NO_ACCESS_HEART_FOR_ME, HttpStatus.NOT_FOUND);
9 |
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionRead/application/mapper/MissionReadMapper.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionRead.application.mapper;
2 |
3 | import com.moing.backend.domain.member.domain.entity.Member;
4 | import com.moing.backend.domain.missionRead.domain.entity.MissionRead;
5 | import com.moing.backend.domain.team.domain.entity.Team;
6 | import org.springframework.stereotype.Component;
7 |
8 | @Component
9 | public class MissionReadMapper {
10 | public static MissionRead toMissionRead(Team team, Member member){
11 | MissionRead missionRead=new MissionRead();
12 | missionRead.updateTeam(team);
13 | missionRead.updateMember(member);
14 | return missionRead;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/missionRead/domain/repository/MissionReadRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionRead.domain.repository;
2 |
3 | import com.moing.backend.domain.member.domain.entity.Member;
4 | import com.moing.backend.domain.mission.domain.entity.Mission;
5 | import com.moing.backend.domain.missionRead.domain.entity.MissionRead;
6 | import com.moing.backend.domain.team.domain.entity.Team;
7 | import org.springframework.data.jpa.repository.JpaRepository;
8 |
9 | import java.util.List;
10 |
11 | public interface MissionReadRepository extends JpaRepository {
12 |
13 | List findMissionReadByMissionAndMemberAndTeam(Mission mission, Member member, Team team);
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/application/dto/request/UpdateProfileRequest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.application.dto.request;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Builder
9 | @AllArgsConstructor
10 | @NoArgsConstructor
11 | @Getter
12 | public class UpdateProfileRequest {
13 |
14 | private String profileImage;
15 | private String nickName;
16 | private String introduction;
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/application/dto/request/WithdrawRequest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.application.dto.request;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | import javax.validation.constraints.NotBlank;
9 | import javax.validation.constraints.Size;
10 |
11 | @Builder
12 | @AllArgsConstructor
13 | @NoArgsConstructor
14 | @Getter
15 | public class WithdrawRequest {
16 | @NotBlank(message = "reason 을 입력해주세요.")
17 | @Size(min = 1, max = 500, message="reason 은 최소 1개, 최대 500개의 문자만 입력 가능합니다.")
18 | private String reason;
19 |
20 | @NotBlank(message = "socialToken 을 입력해주세요.")
21 | private String socialToken;
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/application/dto/response/GetAlarmResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Builder
9 | @AllArgsConstructor
10 | @NoArgsConstructor
11 | @Getter
12 | public class GetAlarmResponse {
13 |
14 | private boolean isNewUploadPush;
15 | private boolean isRemindPush;
16 | private boolean isFirePush;
17 | private boolean isCommentPush;
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/application/dto/response/GetMyPageResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.util.ArrayList;
9 | import java.util.List;
10 |
11 | @Builder
12 | @AllArgsConstructor
13 | @NoArgsConstructor
14 | @Getter
15 | public class GetMyPageResponse {
16 | private String profileImage;
17 | private String nickName;
18 | private String introduction;
19 | private List categories=new ArrayList<>();
20 | private List getMyPageTeamBlocks = new ArrayList<>();
21 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/application/dto/response/GetMyPageTeamBlock.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Builder
9 | @AllArgsConstructor
10 | @NoArgsConstructor
11 | @Getter
12 | public class GetMyPageTeamBlock {
13 | private Long teamId;
14 | private String teamName;
15 | private String category;
16 | private String profileImgUrl;
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/application/dto/response/GetProfileResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Builder
9 | @AllArgsConstructor
10 | @NoArgsConstructor
11 | @Getter
12 | public class GetProfileResponse {
13 | private String profileImage;
14 | private String nickName;
15 | private String introduction;
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/application/service/SignOutUseCase.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.application.service;
2 |
3 | import com.moing.backend.domain.member.domain.entity.Member;
4 | import com.moing.backend.domain.member.domain.service.MemberGetService;
5 | import com.moing.backend.global.config.security.jwt.TokenUtil;
6 | import lombok.RequiredArgsConstructor;
7 | import org.springframework.stereotype.Service;
8 |
9 | import javax.transaction.Transactional;
10 |
11 | @Service
12 | @Transactional
13 | @RequiredArgsConstructor
14 | public class SignOutUseCase {
15 |
16 | private final TokenUtil tokenUtil;
17 | private final MemberGetService memberGetService;
18 |
19 | public void signOut(String socialId){
20 | tokenUtil.expireRefreshToken(socialId);
21 | Member member=memberGetService.getMemberBySocialId(socialId);
22 | member.signOut();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/domain/entity/Feedback.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.domain.entity;
2 |
3 | import com.moing.backend.global.entity.BaseTimeEntity;
4 | import lombok.*;
5 |
6 | import javax.persistence.*;
7 |
8 |
9 | @Builder
10 | @NoArgsConstructor
11 | @AllArgsConstructor
12 | @Getter
13 | @Entity
14 | public class Feedback extends BaseTimeEntity {
15 |
16 | @Id
17 | @GeneratedValue(strategy = GenerationType.IDENTITY)
18 | @Column(name = "feedback_id")
19 | private Long feedbackId;
20 |
21 | @Column(nullable = false)
22 | private Long memberId;
23 |
24 | @Column(nullable = false, length = 500)
25 | private String reason;
26 |
27 | public Feedback(Long memberId, String reason){
28 | this.memberId=memberId;
29 | this.reason=reason;
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/domain/repository/FeedbackRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.domain.repository;
2 |
3 | import com.moing.backend.domain.mypage.domain.entity.Feedback;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | public interface FeedbackRepository extends JpaRepository {
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/domain/service/FeedbackSaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.domain.service;
2 |
3 | import com.moing.backend.domain.member.domain.entity.Member;
4 | import com.moing.backend.domain.mypage.application.dto.request.WithdrawRequest;
5 | import com.moing.backend.domain.mypage.domain.entity.Feedback;
6 | import com.moing.backend.domain.mypage.domain.repository.FeedbackRepository;
7 | import com.moing.backend.global.annotation.DomainService;
8 | import lombok.RequiredArgsConstructor;
9 |
10 | import javax.transaction.Transactional;
11 |
12 | @DomainService
13 | @RequiredArgsConstructor
14 | public class FeedbackSaveService {
15 | private final FeedbackRepository feedbackRepository;
16 |
17 | @Transactional
18 | public void saveFeedback(Member member, WithdrawRequest withdrawRequest){
19 | Feedback feedback=new Feedback(member.getMemberId(), withdrawRequest.getReason());
20 | feedbackRepository.save(feedback);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/exception/AlarmInvalidException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class AlarmInvalidException extends MyPageException {
7 | public AlarmInvalidException() {
8 | super(ErrorCode.INVALID_ALARM_ERROR,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/exception/ExistingTeamException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public class ExistingTeamException extends ApplicationException {
8 | public ExistingTeamException() {
9 | super(ErrorCode.EXISTING_TEAM_ERROR,
10 | HttpStatus.NOT_FOUND);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/exception/MyPageException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class MyPageException extends ApplicationException {
8 | protected MyPageException(ErrorCode errorCode, HttpStatus httpStatus) {
9 | super(errorCode, httpStatus);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/mypage/presentation/constant/MypageResponseMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.mypage.presentation.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum MypageResponseMessage {
9 | TEST_SIGNUP_SUCCESS("회원가입이 되었습니다."),
10 | SIGN_OUT_SUCCESS("로그아웃을 했습니다"),
11 | WITHDRAWAL_SUCCESS("회원탈퇴를 했습니다"),
12 | GET_MYPAGE_SUCCESS("마이페이지를 조회했습니다"),
13 | GET_PROFILE_SUCCESS("프로필을 조회했습니다"),
14 | UPDATE_PROFILE_SUCCESS("프로필을 수정했습니다"),
15 | GET_ALARM_SUCCESS("알람 정보를 조회했습니다"),
16 | UPDATE_ALARM_SUCCESS("알람 정보를 수정했습니다");
17 | private final String message;
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/report/application/dto/BlockMemberRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.report.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.Setter;
7 |
8 | @Builder
9 | @Getter
10 | @Setter
11 | @AllArgsConstructor
12 | public class BlockMemberRes {
13 | private Long targetId;
14 | private String nickName;
15 | private String introduce;
16 | private String profileImg;
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/report/application/mapper/ReportMapper.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.report.application.mapper;
2 |
3 | import com.moing.backend.domain.report.domain.entity.Report;
4 | import com.moing.backend.domain.report.domain.entity.constant.ReportType;
5 | import com.moing.backend.global.annotation.Mapper;
6 |
7 | @Mapper
8 | public class ReportMapper {
9 |
10 | public static Report mapToReport(Long memberId, Long targetId, String reportType,String targetMemberNickName) {
11 | return Report.builder()
12 | .reportMemberId(memberId)
13 | .reportType(ReportType.valueOf(reportType))
14 | .targetId(targetId)
15 | .targetMemberNickName(targetMemberNickName)
16 | .build();
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/report/application/service/ReportStrategy.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.report.application.service;
2 |
3 | public interface ReportStrategy {
4 | String processReport(Long targetId);
5 |
6 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/report/domain/entity/Report.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.report.domain.entity;
2 |
3 |
4 | import com.moing.backend.domain.report.domain.entity.constant.ReportType;
5 | import com.moing.backend.global.entity.BaseTimeEntity;
6 | import lombok.AllArgsConstructor;
7 | import lombok.Builder;
8 | import lombok.Getter;
9 | import lombok.NoArgsConstructor;
10 |
11 | import javax.persistence.*;
12 |
13 | @Entity
14 | @NoArgsConstructor
15 | @AllArgsConstructor
16 | @Getter
17 | @Builder
18 | public class Report extends BaseTimeEntity {
19 |
20 | @Id
21 | @GeneratedValue(strategy = GenerationType.IDENTITY)
22 | @Column(name = "report_id")
23 | private Long id;
24 |
25 | @Enumerated(EnumType.STRING)
26 | private ReportType reportType;
27 |
28 | private Long reportMemberId;
29 | private Long targetId;
30 | private String targetMemberNickName;
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/report/domain/entity/constant/ReportType.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.report.domain.entity.constant;
2 |
3 | public enum ReportType {
4 | MISSION, BOARD, BCOMMENT, MCOMMENT
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/report/domain/repository/ReportRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.report.domain.repository;
2 |
3 | import com.moing.backend.domain.report.domain.entity.Report;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | public interface ReportRepository extends JpaRepository {
7 |
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/report/domain/service/ReportSaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.report.domain.service;
2 |
3 | import com.moing.backend.domain.report.domain.entity.Report;
4 | import com.moing.backend.domain.report.domain.repository.ReportRepository;
5 | import com.moing.backend.global.annotation.DomainService;
6 | import lombok.RequiredArgsConstructor;
7 |
8 | @DomainService
9 | @RequiredArgsConstructor
10 | public class ReportSaveService {
11 |
12 | private final ReportRepository reportRepository;
13 |
14 | public Report save(Report report) {
15 | return reportRepository.save(report);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/report/presentation/constant/ReportResponseMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.report.presentation.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum ReportResponseMessage {
9 |
10 | CREATE_REPORT_SUCCESS("게시글 신고를 완료 했습니다."),
11 | REPORT_MESSAGE("신고 접수로 삭제되었습니다."),
12 | REPORT_PHOTO("https://mo-ing.s3.ap-northeast-2.amazonaws.com/reportImage.png");
13 |
14 | private final String message;
15 |
16 |
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/report/presentation/constant/StrategyCategory.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.report.presentation.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum StrategyCategory {
9 |
10 | BCOMMENT("boardCommentReportStrategy"),
11 | BOARD("boardReportStrategy"),
12 | MISSION("missionArchiveReportStrategy"),
13 | MCOMMENT("missionCommentReportStrategy");
14 |
15 | private final String strategyName;
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/statistics/application/dto/DailyStats.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.statistics.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 | import lombok.NoArgsConstructor;
6 |
7 | import javax.persistence.SqlResultSetMapping;
8 |
9 | @Getter
10 | @AllArgsConstructor
11 | @NoArgsConstructor
12 | public class DailyStats {
13 |
14 | private long todayNewMembers;
15 | private long yesterdayNewMembers;
16 | private long todayNewTeams;
17 | private long yesterdayNewTeams;
18 | private long todayRepeatMission;
19 | private long yesterdayRepeatMission;
20 | private long todayOnceMission;
21 | private long yesterdayOnceMission;
22 |
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/statistics/application/service/DAUFire.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.statistics.application.service;
2 |
3 | import com.moing.backend.domain.fire.domain.service.FireQueryService;
4 | import com.moing.backend.domain.statistics.domain.constant.DAUStatusType;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.stereotype.Service;
7 |
8 | @RequiredArgsConstructor
9 | @Service
10 | public class DAUFire implements DAUProvider {
11 |
12 | private final FireQueryService fireQueryService;
13 |
14 | @Override
15 | public Long getTodayStats() {
16 | return fireQueryService.getTodayFires();
17 | }
18 |
19 | @Override
20 | public Long getYesterdayStats() {
21 | return fireQueryService.getYesterdayFires();
22 | }
23 |
24 | @Override
25 | public DAUStatusType getSupportedType() {
26 | return DAUStatusType.DAILY_FIRE_COUNT;
27 | }
28 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/statistics/application/service/DAUMember.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.statistics.application.service;
2 |
3 | import com.moing.backend.domain.member.domain.service.MemberGetService;
4 | import com.moing.backend.domain.statistics.domain.constant.DAUStatusType;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.stereotype.Service;
7 |
8 | @RequiredArgsConstructor
9 | @Service
10 | public class DAUMember implements DAUProvider {
11 |
12 | private final MemberGetService memberGetService;
13 |
14 | @Override
15 | public Long getTodayStats() {
16 | return memberGetService.getTodayNewMembers();
17 | }
18 |
19 | @Override
20 | public Long getYesterdayStats() {
21 | return memberGetService.getYesterdayNewMembers();
22 | }
23 |
24 | @Override
25 | public DAUStatusType getSupportedType() {
26 | return DAUStatusType.DAILY_MEMBER_COUNT;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/statistics/application/service/DAUMissionArchive.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.statistics.application.service;
2 |
3 | import com.moing.backend.domain.missionArchive.domain.service.MissionArchiveQueryService;
4 | import com.moing.backend.domain.statistics.domain.constant.DAUStatusType;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.stereotype.Service;
7 |
8 | @RequiredArgsConstructor
9 | @Service
10 | public class DAUMissionArchive implements DAUProvider {
11 |
12 | private final MissionArchiveQueryService missionArchiveQueryService;
13 |
14 | @Override
15 | public Long getTodayStats() {
16 | return missionArchiveQueryService.getTodayMissionArchives();
17 | }
18 |
19 | @Override
20 | public Long getYesterdayStats() {
21 | return missionArchiveQueryService.getYesterdayMissionArchives();
22 | }
23 |
24 | @Override
25 | public DAUStatusType getSupportedType() {
26 | return DAUStatusType.DAILY_MISSION_ARCHIVE_COUNT;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/statistics/application/service/DAUOnceMission.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.statistics.application.service;
2 |
3 | import com.moing.backend.domain.mission.domain.service.MissionQueryService;
4 | import com.moing.backend.domain.statistics.domain.constant.DAUStatusType;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.stereotype.Service;
7 |
8 | @RequiredArgsConstructor
9 | @Service
10 | public class DAUOnceMission implements DAUProvider {
11 | private final MissionQueryService missionQueryService;
12 |
13 | @Override
14 | public Long getTodayStats() {
15 | return missionQueryService.getTodayOnceMissions();
16 | }
17 |
18 | @Override
19 | public Long getYesterdayStats() {
20 | return missionQueryService.getYesterdayOnceMissions();
21 | }
22 |
23 | @Override
24 | public DAUStatusType getSupportedType() {
25 | return DAUStatusType.DAILY_ONCE_MISSION_COUNT;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/statistics/application/service/DAUProvider.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.statistics.application.service;
2 |
3 | import com.moing.backend.domain.statistics.domain.constant.DAUStatusType;
4 |
5 | public interface DAUProvider {
6 | Long getTodayStats();
7 | Long getYesterdayStats();
8 | DAUStatusType getSupportedType();
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/statistics/application/service/DAURepeatMission.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.statistics.application.service;
2 |
3 | import com.moing.backend.domain.mission.domain.service.MissionQueryService;
4 | import com.moing.backend.domain.statistics.domain.constant.DAUStatusType;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.stereotype.Service;
7 |
8 | @RequiredArgsConstructor
9 | @Service
10 | public class DAURepeatMission implements DAUProvider {
11 | private final MissionQueryService missionQueryService;
12 |
13 | @Override
14 | public Long getTodayStats() {
15 | return missionQueryService.getTodayRepeatMissions();
16 | }
17 |
18 | @Override
19 | public Long getYesterdayStats() {
20 | return missionQueryService.getYesterdayRepeatMissions();
21 | }
22 |
23 | @Override
24 | public DAUStatusType getSupportedType() {
25 | return DAUStatusType.DAILY_REPEAT_MISSION_COUNT;
26 | }
27 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/statistics/application/service/DAUTeam.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.statistics.application.service;
2 |
3 | import com.moing.backend.domain.statistics.domain.constant.DAUStatusType;
4 | import com.moing.backend.domain.team.domain.service.TeamGetService;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.stereotype.Service;
7 |
8 | @RequiredArgsConstructor
9 | @Service
10 | public class DAUTeam implements DAUProvider {
11 |
12 | private final TeamGetService teamGetService;
13 |
14 | @Override
15 | public Long getTodayStats() {
16 | return teamGetService.getTodayNewTeams();
17 | }
18 |
19 | @Override
20 | public Long getYesterdayStats() {
21 | return teamGetService.getYesterdayNewTeams();
22 | }
23 |
24 | @Override
25 | public DAUStatusType getSupportedType() {
26 | return DAUStatusType.DAILY_TEAM_COUNT;
27 | }
28 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/statistics/domain/constant/DAUStatusType.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.statistics.domain.constant;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @AllArgsConstructor
7 | @Getter
8 | public enum DAUStatusType {
9 | DAILY_TEAM_COUNT("[DAU] 일일 모임 생성 수"),
10 | DAILY_MEMBER_COUNT("[DAU] 일일 신규 가입자 수"),
11 | DAILY_REPEAT_MISSION_COUNT("[DAU] 일일 반복 미션 생성 개수"),
12 | DAILY_ONCE_MISSION_COUNT("[DAU] 일일 한번 미션 생성 개수"),
13 | DAILY_MISSION_ARCHIVE_COUNT("[DAU] 일일 미션 인증 개수"),
14 | DAILY_FIRE_COUNT("[DAU] 일일 불 던지기 생성 개수");
15 | private final String message;
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/application/dto/request/UpdateTeamRequest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.dto.request;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | import javax.validation.constraints.NotBlank;
9 | import javax.validation.constraints.Size;
10 |
11 | @AllArgsConstructor
12 | @Builder
13 | @NoArgsConstructor
14 | @Getter
15 | public class UpdateTeamRequest {
16 |
17 | private String name;
18 |
19 | private String introduction;
20 |
21 | private String profileImgUrl;
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/application/dto/response/CreateTeamResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Getter
9 | @Builder
10 | @AllArgsConstructor
11 | @NoArgsConstructor
12 | public class CreateTeamResponse {
13 | private Long teamId;
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/application/dto/response/DeleteTeamResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Getter
9 | @Builder
10 | @AllArgsConstructor
11 | @NoArgsConstructor
12 | public class DeleteTeamResponse {
13 | private Long teamId;
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/application/dto/response/GetCurrentStatusResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | @Getter
8 | @Builder
9 | @AllArgsConstructor
10 | public class GetCurrentStatusResponse {
11 |
12 | private String name;
13 |
14 | private String introduction;
15 |
16 | private String profileImgUrl;
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/application/dto/response/GetLeaderInfoResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | @Getter
8 | @Builder
9 | @AllArgsConstructor
10 | public class GetLeaderInfoResponse {
11 |
12 | private Long teamId;
13 | private String teamName;
14 | private Long leaderId;
15 | private String leaderName;
16 | private String leaderFcmToken;
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/application/dto/response/GetNewTeamResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | import java.time.LocalDateTime;
8 |
9 | @Getter
10 | @Builder
11 | @AllArgsConstructor
12 | public class GetNewTeamResponse {
13 |
14 | private String teamName;
15 | private String category;
16 | private String promise;
17 | private String introduction;
18 | private String profileImgUrl;
19 | private LocalDateTime createdDate;
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/application/dto/response/GetTeamCountResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.dto.response;
2 |
3 | import com.querydsl.core.annotations.QueryProjection;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Builder;
6 | import lombok.Getter;
7 |
8 | @Getter
9 | @Builder
10 | @AllArgsConstructor
11 | public class GetTeamCountResponse {
12 |
13 | private String teamName;
14 | private Long numOfTeam;
15 | private String leaderName;
16 | private String memberName;
17 |
18 | public void updateCount(Long count){
19 | this.numOfTeam=count;
20 | }
21 |
22 | public void updateMemberName(String nickName){
23 | this.memberName=nickName;
24 | }
25 |
26 | @QueryProjection
27 | public GetTeamCountResponse(String teamName, String leaderName){
28 | this.teamName=teamName;
29 | this.leaderName=leaderName;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/application/dto/response/GetTeamDetailResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | @Getter
8 | @Builder
9 | @AllArgsConstructor
10 | public class GetTeamDetailResponse {
11 | private Integer boardNum; //안 읽은 게시글
12 | private TeamInfo teamInfo;
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/application/dto/response/ReviewTeamResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Getter
9 | @Builder
10 | @AllArgsConstructor
11 | @NoArgsConstructor
12 | public class ReviewTeamResponse {
13 |
14 | private Long teamId;
15 | private String teamName;
16 | private Integer numOfMember;
17 | private Long duration; //걸린시간(단위:날짜)
18 | private Long numOfMission;
19 | private Integer levelOfFire; //불꽃 레벨
20 | private Boolean isLeader;
21 | private String memberName;
22 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/application/dto/response/TeamInfo.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | import java.time.LocalDateTime;
8 | import java.util.ArrayList;
9 | import java.util.List;
10 |
11 | @AllArgsConstructor
12 | @Getter
13 | @Builder
14 | public class TeamInfo {
15 | private Boolean isDeleted;
16 | private LocalDateTime deletionTime;
17 | private String teamName; //소모임 이름
18 | private Integer numOfMember; //소모임원 수
19 | private String category; //카테고리
20 | private String introduction; //소개
21 | private Long currentUserId; //현재 유저 아이디
22 | private List teamMemberInfoList = new ArrayList<>(); //소모임원 정보
23 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/application/dto/response/TeamMemberInfo.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.dto.response;
2 |
3 | import com.querydsl.core.annotations.QueryProjection;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Builder;
6 | import lombok.Getter;
7 |
8 | @Getter
9 | @AllArgsConstructor
10 | @Builder
11 | public class TeamMemberInfo {
12 | private Long memberId;
13 | private String nickName;
14 | private String profileImage;
15 | private String introduction;
16 | private Boolean isLeader;
17 |
18 | @QueryProjection
19 | public TeamMemberInfo(Long memberId, String nickName, String profileImage, String introduction, Long leaderId){
20 | this.memberId=memberId;
21 | this.nickName=nickName;
22 | this.profileImage=profileImage;
23 | this.introduction=introduction;
24 | this.isLeader=memberId.equals(leaderId);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/application/dto/response/UpdateTeamResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | @Getter
8 | @AllArgsConstructor
9 | @Builder
10 | public class UpdateTeamResponse {
11 | private Long teamId;
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/application/service/CheckLeaderUseCase.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.service;
2 |
3 | import com.moing.backend.domain.member.domain.entity.Member;
4 | import com.moing.backend.domain.team.domain.entity.Team;
5 | import com.moing.backend.domain.team.exception.NotAuthByTeamException;
6 | import lombok.RequiredArgsConstructor;
7 | import org.springframework.stereotype.Service;
8 |
9 | import javax.transaction.Transactional;
10 | import java.util.Objects;
11 |
12 | @Service
13 | @Transactional
14 | @RequiredArgsConstructor
15 | public class CheckLeaderUseCase {
16 | public boolean isTeamLeader(Member member, Team team) {
17 | return Objects.equals(member.getMemberId(), team.getLeaderId());
18 | }
19 |
20 | public void validateTeamLeader(Member member, Team team) {
21 | if (!isTeamLeader(member, team)) {
22 | throw new NotAuthByTeamException();
23 | }
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/domain/constant/ApprovalStatus.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.domain.constant;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 | import lombok.RequiredArgsConstructor;
6 |
7 | @Getter
8 | @AllArgsConstructor
9 | public enum ApprovalStatus {
10 | NO_CONFIRMATION("확인안함"),
11 | APPROVAL("승인"),
12 | REJECTION("거절");
13 | private final String message;
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/domain/constant/Category.java:
--------------------------------------------------------------------------------
1 | //package com.moing.backend.domain.team.domain.constant;
2 | //
3 | //import lombok.Getter;
4 | //import lombok.RequiredArgsConstructor;
5 | //
6 | //@Getter
7 | //@RequiredArgsConstructor
8 | //public enum Category{
9 | // SPORTS("스포츠/운동"),
10 | // HABIT("생활습관 개선"),
11 | // TEST("시험/취업준비"),
12 | // STUDY("스터디/공부"),
13 | // READING("독서"),
14 | // ETC("그외 자기계발");
15 | //
16 | // private final String message;
17 | //}
18 | //
19 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/domain/repository/TeamRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.domain.repository;
2 |
3 | import com.moing.backend.domain.team.domain.entity.Team;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | import java.util.Optional;
7 |
8 | public interface TeamRepository extends JpaRepository, TeamCustomRepository {
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/domain/service/TeamSaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.domain.service;
2 |
3 | import com.moing.backend.domain.team.domain.entity.Team;
4 | import com.moing.backend.domain.team.domain.repository.TeamRepository;
5 | import com.moing.backend.global.annotation.DomainService;
6 | import lombok.RequiredArgsConstructor;
7 |
8 | @DomainService
9 | @RequiredArgsConstructor
10 | public class TeamSaveService {
11 | private final TeamRepository teamRepository;
12 | public void saveTeam(Team team){
13 | teamRepository.save(team);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/domain/service/TeamUpdateService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.domain.service;
2 |
3 | import com.moing.backend.domain.team.domain.repository.TeamRepository;
4 | import com.moing.backend.global.annotation.DomainService;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.context.ApplicationEventPublisher;
7 |
8 | import java.util.List;
9 |
10 | @DomainService
11 | @RequiredArgsConstructor
12 | public class TeamUpdateService {
13 |
14 | private final TeamRepository teamRepository;
15 | private final ApplicationEventPublisher eventPublisher;
16 | public void updateTeamStatus(boolean isApproved, List teamIds){
17 | teamRepository.updateTeamStatus(isApproved, teamIds);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/exception/AlreadyJoinTeamException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class AlreadyJoinTeamException extends TeamException{
7 | public AlreadyJoinTeamException(){
8 | super(ErrorCode.ALREADY_JOIN_ERROR,
9 | HttpStatus.UNAUTHORIZED);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/exception/AlreadyWithdrawTeamException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class AlreadyWithdrawTeamException extends TeamException{
7 | public AlreadyWithdrawTeamException(){
8 | super(ErrorCode.ALREADY_WITHDRAW_ERROR,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/exception/DeletedTeamException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class DeletedTeamException extends TeamException{
7 | public DeletedTeamException(){
8 | super(ErrorCode.DELETED_TEAM_ERROR,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/exception/NotAuthByTeamException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotAuthByTeamException extends TeamException{
7 | public NotAuthByTeamException(){
8 | super(ErrorCode.NOT_AUTH_BY_TEAM_ERROR,
9 | HttpStatus.UNAUTHORIZED);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/exception/NotFoundByTeamIdException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotFoundByTeamIdException extends TeamException{
7 | public NotFoundByTeamIdException(){
8 | super(ErrorCode.NOT_FOUND_BY_TEAM_ID_ERROR,
9 | HttpStatus.NOT_FOUND);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/exception/TeamException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class TeamException extends ApplicationException {
8 | protected TeamException(ErrorCode errorCode, HttpStatus httpStatus) {
9 | super(errorCode, httpStatus);
10 | }
11 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/team/presentation/constant/TeamResponseMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.presentation.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum TeamResponseMessage {
9 | CREATE_TEAM_SUCCESS("소모임을 생성하였습니다."),
10 | GET_TEAM_SUCCESS("홈 화면에서 내 소모임을 모두 조회했습니다."),
11 | GET_TEAM_DETAIL_SUCCESS("목표보드를 조회했습니다."),
12 | SIGNIN_TEAM_SUCCESS("소모임에 가입하였습니다."),
13 | GET_CURRENT_STATUS_SUCCESS("소모임 수정 전 조회했습니다."),
14 | REVIEW_TEAM_SUCCESS("소모임 삭제 전 조회했습니다."),
15 | DISBAND_TEAM_SUCCESS("[소모임장 권한] 소모임을 강제 종료했습니다."),
16 | UPDATE_TEAM_SUCCESS("[소모임장 권한] 소모임을 수정했습니다"),
17 | WITHDRAW_TEAM_SUCCESS("[소모임원 권한] 소모임을 탈퇴하였습니다"),
18 | SEND_APPROVAL_ALARM_SUCCESS("소모임들이 승인되었습니다."),
19 | SEND_REJECTION_ALARM_SUCCESS("소모임들이 반려되었습니다."),
20 | GET_NEW_TEAM_SUCCESS("새로운 소모임들을 조회했습니다."),
21 | GET_TEAM_COUNT_SUCCESS("소모임의 개수와 닉네임을 조회했습니다.");
22 | private final String message;
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/teamMember/domain/repository/TeamMemberCustomRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.teamMember.domain.repository;
2 |
3 | import com.moing.backend.domain.history.application.dto.response.NewUploadInfo;
4 | import com.moing.backend.domain.team.application.dto.response.TeamMemberInfo;
5 |
6 | import java.util.List;
7 | import java.util.Optional;
8 |
9 | public interface TeamMemberCustomRepository {
10 | Optional> findNewUploadInfo(Long teamId, Long memberId);
11 | List findTeamMemberInfoByTeamId(Long memberId, Long teamId);
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/teamMember/domain/repository/TeamMemberRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.teamMember.domain.repository;
2 |
3 | import com.moing.backend.domain.member.domain.entity.Member;
4 | import com.moing.backend.domain.team.domain.entity.Team;
5 | import com.moing.backend.domain.teamMember.domain.entity.TeamMember;
6 | import org.springframework.data.jpa.repository.JpaRepository;
7 | import org.springframework.data.jpa.repository.Modifying;
8 | import org.springframework.data.jpa.repository.Query;
9 |
10 | import javax.swing.text.html.Option;
11 | import java.util.Optional;
12 |
13 | public interface TeamMemberRepository extends JpaRepository, TeamMemberCustomRepository{
14 |
15 | Optional findTeamMemberByTeamAndMember(Team team, Member member);
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/teamMember/exception/TeamMemberException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.teamMember.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class TeamMemberException extends ApplicationException {
8 | protected TeamMemberException(ErrorCode errorCode, HttpStatus httpStatus) {
9 | super(errorCode, httpStatus);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/teamScore/application/dto/TeamScoreRes.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.teamScore.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Getter
9 | @Builder
10 | @AllArgsConstructor
11 | @NoArgsConstructor
12 | public class TeamScoreRes {
13 |
14 | private Long score;
15 | private Long level;
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/teamScore/application/mapper/TeamScoreMapper.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.teamScore.application.mapper;
2 |
3 | import com.moing.backend.domain.team.domain.entity.Team;
4 | import com.moing.backend.domain.teamScore.domain.entity.TeamScore;
5 | import com.moing.backend.global.annotation.Mapper;
6 | import org.springframework.stereotype.Component;
7 |
8 | @Component
9 | public class TeamScoreMapper {
10 |
11 | public static TeamScore mapToTeamScore(Team team) {
12 | return TeamScore.builder()
13 | .score(0L)
14 | .level(1L)
15 | .team(team)
16 | .build();
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/teamScore/domain/entity/ScoreStatus.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.teamScore.domain.entity;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum ScoreStatus {
9 | PLUS(1L), MINUS(-1L);
10 | private final Long value;
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/teamScore/domain/repository/TeamScoreCustomRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.teamScore.domain.repository;
2 |
3 |
4 | import com.moing.backend.domain.team.domain.entity.Team;
5 | import com.moing.backend.domain.teamScore.domain.entity.TeamScore;
6 |
7 | public interface TeamScoreCustomRepository {
8 |
9 | TeamScore findTeamScoreByTeam(Long teamId);
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/teamScore/domain/repository/TeamScoreCustomRepositoryImpl.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.teamScore.domain.repository;
2 |
3 | import static com.moing.backend.domain.teamScore.domain.entity.QTeamScore.teamScore;
4 |
5 | import com.moing.backend.domain.team.domain.entity.Team;
6 | import com.moing.backend.domain.teamScore.domain.entity.TeamScore;
7 | import com.querydsl.jpa.impl.JPAQueryFactory;
8 |
9 | import javax.persistence.EntityManager;
10 |
11 | public class TeamScoreCustomRepositoryImpl implements TeamScoreCustomRepository {
12 |
13 |
14 | private final JPAQueryFactory queryFactory;
15 |
16 | public TeamScoreCustomRepositoryImpl(EntityManager entityManager) {
17 | this.queryFactory = new JPAQueryFactory(entityManager);
18 | }
19 |
20 | @Override
21 | public TeamScore findTeamScoreByTeam(Long teamId) {
22 | return queryFactory
23 | .selectFrom(teamScore)
24 | .where(teamScore.team.teamId.eq(teamId)).fetchFirst();
25 | }
26 |
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/teamScore/domain/repository/TeamScoreRepository.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.teamScore.domain.repository;
2 |
3 | import com.moing.backend.domain.teamScore.domain.entity.TeamScore;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | public interface TeamScoreRepository extends JpaRepository , TeamScoreCustomRepository{
7 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/teamScore/domain/service/TeamScoreQueryService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.teamScore.domain.service;
2 |
3 | import com.moing.backend.domain.team.domain.entity.Team;
4 | import com.moing.backend.domain.team.domain.service.TeamGetService;
5 | import com.moing.backend.domain.teamScore.domain.entity.TeamScore;
6 | import com.moing.backend.domain.teamScore.domain.repository.TeamScoreRepository;
7 | import com.moing.backend.global.annotation.DomainService;
8 | import lombok.RequiredArgsConstructor;
9 | import org.springframework.transaction.annotation.Transactional;
10 |
11 |
12 | @DomainService
13 | @Transactional
14 | @RequiredArgsConstructor
15 | public class TeamScoreQueryService {
16 |
17 | private final TeamScoreRepository teamScoreRepository;
18 | private final TeamGetService teamGetService;
19 |
20 | public TeamScore findTeamScoreByTeam(Long teamId) {
21 |
22 | return teamScoreRepository.findTeamScoreByTeam(teamId);
23 | }
24 |
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/teamScore/domain/service/TeamScoreSaveService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.teamScore.domain.service;
2 |
3 | import com.moing.backend.domain.team.domain.entity.Team;
4 | import com.moing.backend.domain.team.domain.service.TeamGetService;
5 | import com.moing.backend.domain.teamScore.domain.entity.TeamScore;
6 | import com.moing.backend.domain.teamScore.domain.repository.TeamScoreRepository;
7 | import com.moing.backend.global.annotation.DomainService;
8 | import lombok.RequiredArgsConstructor;
9 | import org.springframework.transaction.annotation.Transactional;
10 |
11 |
12 | @DomainService
13 | @Transactional
14 | @RequiredArgsConstructor
15 | public class TeamScoreSaveService {
16 |
17 | private final TeamScoreRepository teamScoreRepository;
18 | private final TeamGetService teamGetService;
19 |
20 | public TeamScore save(TeamScore teamScore) {
21 |
22 | return teamScoreRepository.save(teamScore);
23 | }
24 |
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/domain/teamScore/presentation/constant/TeamScoreResponseMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.teamScore.presentation.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum TeamScoreResponseMessage {
9 | GET_TEAMSCORE_SUCCESS("팀 경험치/레벨 조회를 완료 했습니다");
10 |
11 | private final String message;
12 | }
13 |
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/annotation/DomainService.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.annotation;
2 |
3 | import org.springframework.stereotype.Service;
4 |
5 | import java.lang.annotation.ElementType;
6 | import java.lang.annotation.Retention;
7 | import java.lang.annotation.RetentionPolicy;
8 | import java.lang.annotation.Target;
9 |
10 | @Target(ElementType.TYPE)
11 | @Retention(RetentionPolicy.RUNTIME)
12 | @Service
13 | public @interface DomainService {
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/annotation/Enum.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.annotation;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import java.lang.annotation.ElementType;
6 | import java.lang.annotation.Retention;
7 | import java.lang.annotation.RetentionPolicy;
8 | import java.lang.annotation.Target;
9 |
10 | @Constraint(validatedBy = {EnumValidator.class})
11 | @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
12 | @Retention(RetentionPolicy.RUNTIME)
13 | public @interface Enum {
14 | String message() default "enum 형식메 맞지 않습니다.";
15 | Class>[] groups() default {};
16 | Class extends Payload>[] payload() default {};
17 | Class extends java.lang.Enum>> enumClass();
18 | boolean ignoreCase() default false;
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/annotation/Mapper.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | @Target(ElementType.TYPE)
9 | @Retention(RetentionPolicy.RUNTIME)
10 | public @interface Mapper {
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/annotation/Util.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.annotation;
2 |
3 | import org.springframework.core.annotation.AliasFor;
4 | import org.springframework.stereotype.Component;
5 |
6 | import java.lang.annotation.*;
7 |
8 | @Target({ElementType.TYPE})
9 | @Retention(RetentionPolicy.RUNTIME)
10 | @Documented
11 | @Component
12 | public @interface Util {
13 | @AliasFor(annotation = Component.class)
14 | String value() default "";
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/annotation/ValidEnum.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.annotation;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import java.lang.annotation.ElementType;
6 | import java.lang.annotation.Retention;
7 | import java.lang.annotation.RetentionPolicy;
8 | import java.lang.annotation.Target;
9 |
10 | @Constraint(validatedBy = {EnumValidator.class})
11 | @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
12 | @Retention(RetentionPolicy.RUNTIME)
13 | public @interface ValidEnum {
14 | String message() default "Invalid value. This is not permitted.";
15 |
16 | Class>[] groups() default {};
17 |
18 | Class extends Payload>[] payload() default {};
19 |
20 | Class extends java.lang.Enum>> enumClass();
21 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/constant/ApproveTeamMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.constant;
2 |
3 | import lombok.RequiredArgsConstructor;
4 |
5 | @RequiredArgsConstructor
6 | public enum ApproveTeamMessage {
7 |
8 | APPROVE_TEAM_MESSAGE("%s님, [%s] 모임이 타오를 준비를 마쳤어요!", "지금 바로 우리 모임원들을 초대해볼까요? 🔥"),
9 |
10 | REJECT_TEAM_MESSAGE("%s님, [%s] 모임 신청이 반려됐어요.", "신청서를 점검한 뒤 다시 한번 모임을 신청해주세요!");
11 |
12 | private final String title;
13 | private final String body;
14 |
15 | public String title(String memberName, String teamName) {
16 | return String.format(title, memberName, teamName);
17 | }
18 |
19 | public String body() {
20 | return body;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/constant/NewCommentUploadMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.constant;
2 |
3 |
4 | import lombok.Getter;
5 | import lombok.RequiredArgsConstructor;
6 |
7 | @Getter
8 | @RequiredArgsConstructor
9 | public enum NewCommentUploadMessage {
10 |
11 | NEW_COMMENT_UPLOAD_MESSAGE("%s", "[%s님의 댓글] %s");
12 |
13 | private final String title;
14 | private final String body;
15 |
16 | public String title(String commentContent) {
17 | return String.format(title, commentContent);
18 | }
19 |
20 | public String body(String writerNickname, String boardTitle) {
21 | return String.format(body, writerNickname, boardTitle);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/constant/NewMissionTitle.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum NewMissionTitle {
9 |
10 | NEW_SINGLE_MISSION_COMING("의 새로운 미션이 등장했어요! "),
11 | NEW_REPEAT_MISSION_COMING("의 새로운 반복미션이 시작되었어요! ");
12 | private final String title;
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/constant/NewNoticeUploadMessage.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum NewNoticeUploadMessage {
9 |
10 | NEW_NOTICE_UPLOAD_MESSAGE("%s에 새로 올라온 공지를 확인하세요!", "%s");
11 |
12 | private final String title;
13 | private final String body;
14 |
15 | public String title(String teamName) {
16 | return String.format(title, teamName);
17 | }
18 |
19 | public String body(String noticeTitle) {
20 | return String.format(body, noticeTitle);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/constant/NewUploadTitle.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 |
6 | @Getter
7 | @RequiredArgsConstructor
8 | public enum NewUploadTitle{
9 | UPLOAD_NOTICE_NEW_TITLE("새로운 공지 알려드려요!"),
10 | UPLOAD_VOTE_NEW_TITLE("새로운 투표 알려드려요!"),
11 | UPLOAD_MISSION_NEW_TITLE("새로운 미션 알려드려요!");
12 | private final String title;
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/dto/event/MultiFcmEvent.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.dto.event;
2 |
3 | import com.moing.backend.domain.history.application.dto.response.MemberIdAndToken;
4 | import com.moing.backend.domain.history.domain.entity.AlarmType;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Getter;
7 |
8 | import java.util.List;
9 | import java.util.Optional;
10 |
11 | @Getter
12 | @AllArgsConstructor
13 | public class MultiFcmEvent {
14 |
15 | private String title;
16 | private String body;
17 | private Optional> idAndTokensByPush;
18 | private Optional> idAndTokensBySave;
19 | private String idInfo;
20 | private String name;
21 | private AlarmType alarmType;
22 | private String path;
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/dto/event/SingleFcmEvent.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.dto.event;
2 |
3 | import com.moing.backend.domain.history.application.dto.response.MemberIdAndToken;
4 | import com.moing.backend.domain.history.domain.entity.AlarmType;
5 | import com.moing.backend.domain.member.domain.entity.Member;
6 | import lombok.AllArgsConstructor;
7 | import lombok.Getter;
8 |
9 | import java.util.List;
10 |
11 | @Getter
12 | @AllArgsConstructor
13 | public class SingleFcmEvent {
14 |
15 | private Member member;
16 | private String title;
17 | private String body;
18 | private String idInfo;
19 | private String name;
20 | private AlarmType alarmType;
21 | private String path;
22 | private boolean isAlarmPush;
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/dto/request/MultiRequest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.dto.request;
2 |
3 | import com.moing.backend.domain.history.application.dto.response.MemberIdAndToken;
4 | import com.moing.backend.domain.history.domain.entity.AlarmType;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Getter;
7 | import lombok.NoArgsConstructor;
8 |
9 | import javax.validation.constraints.NotNull;
10 | import java.util.List;
11 | import java.util.Optional;
12 |
13 | @Getter
14 | @NoArgsConstructor
15 | @AllArgsConstructor
16 | public class MultiRequest {
17 |
18 | private List memberIdAndTokens;
19 |
20 | private String title;
21 |
22 | private String body;
23 |
24 | private String idInfo;
25 |
26 | private String name;
27 |
28 | private AlarmType alarmType;
29 |
30 | private String path;
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/dto/request/SingleRequest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.dto.request;
2 |
3 | import com.moing.backend.domain.history.domain.entity.AlarmType;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Getter
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | public class SingleRequest {
12 |
13 | private String registrationToken;
14 |
15 | private String title;
16 |
17 | private String body;
18 |
19 | private Long memberId;
20 |
21 | private String idInfo;
22 |
23 | private String name;
24 |
25 | private AlarmType alarmType;
26 |
27 | private String path;
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/dto/response/MultiResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | import java.util.List;
7 |
8 | @Getter
9 | @AllArgsConstructor
10 | public class MultiResponse {
11 | private final String response;
12 | private final List failedTokens;
13 |
14 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/dto/response/SingleResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.dto.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @Getter
7 | @AllArgsConstructor
8 | public class SingleResponse {
9 | private final String response;
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/exception/FirebaseException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.exception;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public abstract class FirebaseException extends ApplicationException {
8 | protected FirebaseException(ErrorCode errorCode, HttpStatus httpStatus) {
9 | super(errorCode, httpStatus);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/exception/InitializeException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class InitializeException extends FirebaseException {
7 | public InitializeException() {
8 | super(ErrorCode.INITIALIZE_ERROR,
9 | HttpStatus.INTERNAL_SERVER_ERROR
10 | );
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/exception/MessagingException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class MessagingException extends FirebaseException {
7 | public MessagingException(String message) {
8 | super(ErrorCode.MESSAGING_ERROR,
9 | HttpStatus.INTERNAL_SERVER_ERROR);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/exception/NotificationException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public class NotificationException extends FirebaseException {
7 | public NotificationException(String message) {
8 | super(ErrorCode.NOTIFICATION_ERROR,
9 | HttpStatus.INTERNAL_SERVER_ERROR);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/fcm/service/MessageSender.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.fcm.service;
2 |
3 | public interface MessageSender {
4 | void send(T request);
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/querydsl/QuerydslConfig.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.querydsl;
2 |
3 | import com.querydsl.jpa.impl.JPAQueryFactory;
4 | import org.springframework.context.annotation.Bean;
5 | import org.springframework.context.annotation.Configuration;
6 |
7 | import javax.persistence.EntityManager;
8 | import javax.persistence.PersistenceContext;
9 |
10 | @Configuration
11 | public class QuerydslConfig {
12 | @PersistenceContext
13 | private EntityManager entityManager;
14 |
15 | @Bean
16 | public JPAQueryFactory jpaQueryFactory() {
17 | return new JPAQueryFactory(this.entityManager);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/redis/constant/RefreshTokenConstant.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.redis.constant;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public class RefreshTokenConstant {
8 | @Getter
9 | @RequiredArgsConstructor
10 | public enum ERefreshTokenMessage {
11 | TOKEN_REFRESH_SUCCESS("토큰 재발급을 완료하였습니다");
12 | private final String message;
13 | }
14 |
15 | @Getter
16 | @RequiredArgsConstructor
17 | public enum RefreshTokenExceptionList {
18 | NOT_FOUND_TOKEN_ERROR("R0003", HttpStatus.NOT_FOUND, "Refresh-Token을 찾을 수 없습니다. 아예 새롭게 로그인을 하세요");
19 | private final String errorCode;
20 | private final HttpStatus httpStatus;
21 | private final String message;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/s3/ImageUrlUtil.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.s3;
2 |
3 | import com.moing.backend.global.annotation.Util;
4 | import org.springframework.beans.factory.annotation.Value;
5 |
6 | @Util
7 | public class ImageUrlUtil {
8 | public static String prefix;
9 |
10 | @Value("${image.prefix}")
11 | public void setPrefix(String value) {
12 | prefix = value;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/security/dto/User.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.security.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.util.List;
9 |
10 | @Builder
11 | @AllArgsConstructor
12 | @NoArgsConstructor
13 | @Data
14 | public class User {
15 | private String socialId;
16 | private String email;
17 | private List roles;
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/security/jwt/JwtExceptionList.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.security.jwt;
2 |
3 | import lombok.Getter;
4 | import lombok.RequiredArgsConstructor;
5 | import org.springframework.http.HttpStatus;
6 |
7 | @Getter
8 | @RequiredArgsConstructor
9 | public enum JwtExceptionList {
10 | UNKNOWN_ERROR("J0001", HttpStatus.INTERNAL_SERVER_ERROR, "예상치 못한 오류가 발생했습니다."),
11 | MAL_FORMED_TOKEN("J0002", HttpStatus.UNAUTHORIZED, "잘못된 JWT 서명입니다."),
12 | EXPIRED_TOKEN("J0003", HttpStatus.UNAUTHORIZED, "만료된 토큰입니다."),
13 | UNSUPPORTED_TOKEN("J0004", HttpStatus.UNAUTHORIZED, "지원되지 않는 토큰입니다."),
14 | ACCESS_DENIED("J0005", HttpStatus.UNAUTHORIZED, "접근이 거부되었습니다."),
15 | ILLEGAL_TOKEN("J0006", HttpStatus.UNAUTHORIZED, "JWT 토큰이 잘못되었습니다."),
16 | ADDITIONAL_REQUIRED_TOKEN("J0007", HttpStatus.UNAUTHORIZED, "추가 정보를 입력해야 합니다.");
17 | private final String errorCode;
18 | private final HttpStatus httpStatus;
19 | private final String message;
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/security/jwt/NotFoundRefreshToken.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.security.jwt;
2 |
3 | import com.moing.backend.global.exception.ApplicationException;
4 | import com.moing.backend.global.response.ErrorCode;
5 | import org.springframework.http.HttpStatus;
6 |
7 | public class NotFoundRefreshToken extends ApplicationException {
8 | public NotFoundRefreshToken() {
9 | super(ErrorCode.NOT_FOUND_REFRESH_TOKEN_ERROR,
10 | HttpStatus.UNAUTHORIZED);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/slack/SlackConfig.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.slack;
2 |
3 | import com.slack.api.Slack;
4 | import org.springframework.context.annotation.Bean;
5 | import org.springframework.context.annotation.Configuration;
6 |
7 | @Configuration
8 | public class SlackConfig {
9 |
10 | @Bean
11 | public Slack slackClient() {
12 | return Slack.getInstance();
13 | }
14 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/slack/exception/ExceptionEventHandler.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.slack.exception;
2 |
3 | import com.moing.backend.global.config.slack.exception.dto.ExceptionEvent;
4 | import com.moing.backend.global.config.slack.util.WebhookUtil;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.context.annotation.Profile;
7 | import org.springframework.context.event.EventListener;
8 | import org.springframework.scheduling.annotation.Async;
9 | import org.springframework.stereotype.Component;
10 |
11 | @RequiredArgsConstructor
12 | @Component
13 | @Profile("prod")
14 | public class ExceptionEventHandler {
15 |
16 | private final WebhookUtil webhookUtil;
17 |
18 | @Async
19 | @EventListener
20 | public void onExceptionEvent(ExceptionEvent event) {
21 | webhookUtil.sendSlackAlertErrorLog(event.getRequest(), event.getException());
22 | }
23 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/slack/exception/dto/ExceptionEvent.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.slack.exception.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | import javax.servlet.http.HttpServletRequest;
7 |
8 | @Getter
9 | @AllArgsConstructor
10 | public class ExceptionEvent {
11 |
12 | private final HttpServletRequest request;
13 | private final Exception exception;
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/slack/team/TeamCreateHandler.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.slack.team;
2 |
3 | import com.moing.backend.global.config.slack.team.dto.TeamCreateEvent;
4 | import com.moing.backend.global.config.slack.util.WebhookUtil;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.context.annotation.Profile;
7 | import org.springframework.context.event.EventListener;
8 | import org.springframework.scheduling.annotation.Async;
9 | import org.springframework.stereotype.Component;
10 |
11 | @RequiredArgsConstructor
12 | @Component
13 | @Profile("prod")
14 | public class TeamCreateHandler {
15 |
16 | private final WebhookUtil webhookUtil;
17 |
18 | @Async
19 | @EventListener
20 | public void onTeamCreateEvent(TeamCreateEvent event) {
21 | webhookUtil.sendSlackTeamCreatedMessage(event.getTeamName(), event.getLeaderId());
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/slack/team/dto/TeamCreateEvent.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.slack.team.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @Getter
7 | @AllArgsConstructor
8 | public class TeamCreateEvent {
9 |
10 | private final String teamName;
11 | private final Long leaderId;
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/config/slack/util/WebhookUtil.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.config.slack.util;
2 |
3 | import javax.servlet.http.HttpServletRequest;
4 | import java.util.Map;
5 |
6 | public interface WebhookUtil {
7 |
8 | void sendSlackAlertErrorLog(HttpServletRequest request, Exception e);
9 |
10 | void sendSlackTeamCreatedMessage(String teamName, Long leaderId);
11 |
12 | void sendDailyStatsMessage(Map todayStats, Map yesterdayStats);
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/entity/BaseTimeEntity.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.entity;
2 |
3 | import lombok.Getter;
4 | import org.springframework.data.annotation.CreatedDate;
5 | import org.springframework.data.annotation.LastModifiedDate;
6 | import org.springframework.data.jpa.domain.support.AuditingEntityListener;
7 |
8 | import javax.persistence.Column;
9 | import javax.persistence.EntityListeners;
10 | import javax.persistence.MappedSuperclass;
11 | import java.time.LocalDateTime;
12 |
13 | @Getter
14 | @MappedSuperclass
15 | @EntityListeners(AuditingEntityListener.class)
16 | public class BaseTimeEntity {
17 |
18 | @CreatedDate
19 | @Column(updatable = false)
20 | private LocalDateTime createdDate;
21 |
22 | @LastModifiedDate
23 | private LocalDateTime lastModifiedDate;
24 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/exception/ApplicationException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.exception;
2 |
3 | import com.moing.backend.global.response.ErrorCode;
4 | import org.springframework.http.HttpStatus;
5 |
6 | public abstract class ApplicationException extends RuntimeException {
7 |
8 | private final ErrorCode errorCode;
9 | private final HttpStatus httpStatus;
10 |
11 | protected ApplicationException(ErrorCode errorCode, HttpStatus httpStatus) {
12 | super(errorCode.getMessage());
13 | this.errorCode = errorCode;
14 | this.httpStatus = httpStatus;
15 | }
16 |
17 | public ErrorCode getErrorCode() { return errorCode;}
18 |
19 | public HttpStatus getHttpStatus() {
20 | return httpStatus;
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/exception/InternalServerErrorException.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.exception;
2 |
3 | public class InternalServerErrorException extends RuntimeException{
4 |
5 | public InternalServerErrorException(String message){ super(message); }
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/log/aop/Pointcuts.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.log.aop;
2 |
3 | import org.aspectj.lang.annotation.Aspect;
4 | import org.aspectj.lang.annotation.Pointcut;
5 |
6 | @Aspect
7 | public class Pointcuts {
8 |
9 |
10 | @Pointcut("execution(* com.moing.backend.*presentation.*Controller.*(..))")
11 | public void allController() {}
12 |
13 | @Pointcut("execution(* com.moing.backend..service..*.*(..))")
14 | public void allService() {
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/log/aop/TraceStatus.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.log.aop;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 | import lombok.RequiredArgsConstructor;
6 |
7 | @RequiredArgsConstructor
8 | @Getter
9 | @AllArgsConstructor
10 | public class TraceStatus {
11 | private String threadId;
12 | private Long startTime;
13 | private String className;
14 | private String methodName;
15 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/log/filter/RequestInfoFormat.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.log.filter;
2 |
3 | import com.fasterxml.jackson.annotation.JsonInclude;
4 | import lombok.AccessLevel;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Builder;
7 | import lombok.Getter;
8 |
9 | @Getter
10 | @Builder
11 | @JsonInclude(JsonInclude.Include.NON_NULL)
12 | @AllArgsConstructor(access = AccessLevel.PRIVATE)
13 | public class RequestInfoFormat {
14 | private final String threadId;
15 | private final String url;
16 | private final String method;
17 | private final String ip;
18 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/response/BaseBoardServiceResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.response;
2 |
3 | import com.moing.backend.domain.board.domain.entity.Board;
4 | import com.moing.backend.domain.member.domain.entity.Member;
5 | import com.moing.backend.domain.team.domain.entity.Team;
6 | import com.moing.backend.domain.teamMember.domain.entity.TeamMember;
7 | import lombok.AllArgsConstructor;
8 | import lombok.Getter;
9 | import lombok.NoArgsConstructor;
10 |
11 | @Getter
12 | @AllArgsConstructor
13 | @NoArgsConstructor
14 | public class BaseBoardServiceResponse {
15 | private Member member;
16 | private Team team;
17 | private Board board;
18 | private TeamMember teamMember;
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/response/BaseMissionServiceResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.response;
2 |
3 | import com.moing.backend.domain.member.domain.entity.Member;
4 | import com.moing.backend.domain.missionArchive.domain.entity.MissionArchive;
5 | import com.moing.backend.domain.team.domain.entity.Team;
6 | import com.moing.backend.domain.teamMember.domain.entity.TeamMember;
7 | import lombok.AllArgsConstructor;
8 | import lombok.Getter;
9 | import lombok.NoArgsConstructor;
10 |
11 | @Getter
12 | @AllArgsConstructor
13 | @NoArgsConstructor
14 | public class BaseMissionServiceResponse {
15 | private Member member;
16 | private Team team;
17 | private MissionArchive missionArchive;
18 | private TeamMember teamMember;
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/response/BaseServiceResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.response;
2 |
3 | import com.moing.backend.domain.member.domain.entity.Member;
4 | import com.moing.backend.domain.team.domain.entity.Team;
5 | import com.moing.backend.domain.teamMember.domain.entity.TeamMember;
6 | import lombok.AllArgsConstructor;
7 | import lombok.Getter;
8 | import lombok.NoArgsConstructor;
9 |
10 | @Getter
11 | @AllArgsConstructor
12 | @NoArgsConstructor
13 | public class BaseServiceResponse {
14 | private Member member;
15 | private Team team;
16 | private TeamMember teamMember;
17 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/response/SuccessResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.response;
2 |
3 | import com.fasterxml.jackson.annotation.JsonInclude;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Getter;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Getter
9 | @AllArgsConstructor
10 | @NoArgsConstructor
11 | public class SuccessResponse {
12 | private Boolean isSuccess;
13 | private String message;
14 | @JsonInclude(JsonInclude.Include.NON_NULL)
15 | private T data;
16 |
17 | public static SuccessResponse create(String message) {
18 | return new SuccessResponse<>(true, message, null);
19 | }
20 |
21 | public static SuccessResponse create(String message, T data) {
22 | return new SuccessResponse<>(true, message, data);
23 | }
24 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/response/TokenInfoResponse.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.response;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | @Builder
8 | @Getter
9 | @AllArgsConstructor
10 | public class TokenInfoResponse {
11 | private String grantType;
12 | private String accessToken;
13 | private String refreshToken;
14 | private Long refreshTokenExpirationTime;
15 |
16 | public static TokenInfoResponse from(String grantType, String accessToken, String refreshToken, Long refreshTokenExpirationTime) {
17 | return TokenInfoResponse.builder()
18 | .grantType(grantType)
19 | .accessToken(accessToken)
20 | .refreshToken(refreshToken)
21 | .refreshTokenExpirationTime(refreshTokenExpirationTime)
22 | .build();
23 | }
24 |
25 | public void updateRefreshToken(String refreshToken){
26 | this.refreshToken=refreshToken;
27 | }
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/utils/FeignClientConfig.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.utils;
2 |
3 | import org.springframework.context.annotation.Configuration;
4 |
5 | @Configuration
6 | public class FeignClientConfig {
7 | }
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/utils/SecurityUtils.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.utils;
2 |
3 | import com.moing.backend.domain.member.domain.entity.Member;
4 | import com.moing.backend.global.config.security.oauth.CustomUserDetails;
5 | import lombok.AccessLevel;
6 | import lombok.NoArgsConstructor;
7 | import org.springframework.security.core.context.SecurityContextHolder;
8 | import org.springframework.transaction.annotation.Transactional;
9 |
10 | import java.util.Objects;
11 |
12 | @NoArgsConstructor(access = AccessLevel.PROTECTED)
13 | @Transactional
14 | public class SecurityUtils {
15 |
16 | public static Member getLoggedInUser() {
17 | try {
18 | return
19 | ((CustomUserDetails) Objects.requireNonNull(SecurityContextHolder.getContext().getAuthentication()).getPrincipal()).getMember();
20 | } catch (NullPointerException e) {
21 | throw new RuntimeException();
22 | }
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/moing/backend/global/utils/UpdateUtils.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.global.utils;
2 |
3 | import com.moing.backend.global.annotation.Util;
4 | import com.moing.backend.global.config.s3.S3Service;
5 | import lombok.RequiredArgsConstructor;
6 | import org.springframework.stereotype.Component;
7 |
8 | @Util
9 | @RequiredArgsConstructor
10 | public class UpdateUtils {
11 |
12 | private final S3Service s3Service;
13 |
14 | public static T getUpdatedValue(T currentValue, T oldValue) {
15 | if(currentValue!=null){
16 | return currentValue;
17 | }
18 | return oldValue;
19 | }
20 |
21 | public void deleteOldImgUrl(String currentImageUrl, String oldImageUrl) {
22 | if (currentImageUrl != null && oldImageUrl != null) {
23 | s3Service.deleteImage(oldImageUrl);
24 | }
25 | }
26 |
27 | public void deleteImgUrl(String imageUrl) {
28 | if (imageUrl != null) {
29 | s3Service.deleteImage(imageUrl);
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/test/java/com/moing/backend/BackendApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | //@SpringBootTest
7 | class BackendApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/test/java/com/moing/backend/config/RestDocsConfig.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.config;
2 |
3 | import org.springframework.boot.test.context.TestConfiguration;
4 | import org.springframework.context.annotation.Bean;
5 | import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation;
6 | import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler;
7 | import org.springframework.restdocs.operation.preprocess.Preprocessors;
8 |
9 | @TestConfiguration
10 | public class RestDocsConfig {
11 | @Bean
12 | public RestDocumentationResultHandler write(){
13 | return MockMvcRestDocumentation.document(
14 | "{class-name}/{method-name}",
15 | Preprocessors.preprocessRequest(Preprocessors.prettyPrint()),
16 | Preprocessors.preprocessResponse(Preprocessors.prettyPrint())
17 | );
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/test/java/com/moing/backend/domain/missionComment/domain/MissionRepositoryTest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.missionComment.domain;
2 |
3 | import com.moing.backend.domain.missionComment.domain.repository.MissionCommentRepository;
4 | import org.springframework.beans.factory.annotation.Autowired;
5 | import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
6 | import org.springframework.boot.test.context.SpringBootTest;
7 | import org.springframework.test.context.ActiveProfiles;
8 | import org.springframework.transaction.annotation.Transactional;
9 |
10 | @SpringBootTest
11 | @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
12 | @ActiveProfiles("dev")
13 | @Transactional
14 | public class MissionRepositoryTest {
15 |
16 | @Autowired
17 | MissionCommentRepository missionCommentRepository;
18 | public void create_Mission_Comment(){
19 |
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/test/java/com/moing/backend/domain/missionState/domain/service/MissionStateQueryServiceTest.java:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Modagbul/MOING_Server_Release/5b3dc87235074013925ef84a8115ceece31f3816/src/test/java/com/moing/backend/domain/missionState/domain/service/MissionStateQueryServiceTest.java
--------------------------------------------------------------------------------
/src/test/java/com/moing/backend/domain/team/application/service/CreateTeamUseCaseTest.java:
--------------------------------------------------------------------------------
1 | package com.moing.backend.domain.team.application.service;
2 |
3 | import org.junit.jupiter.api.Test;
4 |
5 | import static org.junit.jupiter.api.Assertions.*;
6 |
7 | class CreateTeamUseCaseTest {
8 |
9 | @Test
10 | void createTeam() {
11 | }
12 | }
--------------------------------------------------------------------------------