- JAVA 17
- SpringBoot 3.2.1
- Build Tool Gradle 0 groovy
- Spring Web, H2(λ‘컬μ©), JPA, Lombok, MySql
masterλ μΈμ λ μ§ λ°°ν¬κ° κ°λ₯ν μν(릴리μ¦)- μλ‘μ΄ νλ‘μ νΈλ
developμ κΈ°λ°μΌλ‘ λ³λfeatureλΈλμΉλ₯Ό μμ±νμ¬ μμ μ μ§νν¨ - λΈλμΉλ λ‘컬μ commitνκ³ , μ κΈ°μ μΌλ‘ μ격 λΈλμΉμ pushν¨
- νΌλλ°±μ΄λ λμμ΄ νμνκ±°λ,μ½λ λ³ν© ν μ€λΉκ° λμλ€λ©΄ pull requestλ₯Ό λ§λ¬
- λ€λ₯Έμ¬λμ΄ λ³κ²½λ μ½λλ₯Ό κ²ν ν λ€ μΉμΈνλ©΄
masterμ λ³ν©ν¨ - λ³ν©λ
masterλ μ¦μ λ°°ν¬ν μ μμΌλ©°, λ°°ν¬ ν΄μΌλ§ ν¨
μΆμ² : https://puleugo.tistory.com/165
List<HouseResponseDto> houseResponseDtoList = new ArrayList<>();
for (House house : findHouses) {
List<Review> reviewList = reviewRepository.findAllByHouse(house);
if (reviewList.size() == 0) {
houseResponseDtoList.add(HouseResponseDto.of(house, 0, 0));
continue;
}
Optional<CardLike> cardLike = cardLikeRepository.findByCardIdAndUserId(id, user.getId());
if(cardLike.isEmpty()) {
cardLikeRepository.saveAndFlush(CardLike.of(card.get(), user));
return ResponseEntity.ok().body(MessageResponseDto.of("μ’μμ μΆκ°", HttpStatus.OK));
} else{
cardLikeRepository.delete(cardLike.get());
return ResponseEntity.ok().body(MessageResponseDto.of("μ’μμ μ·¨μ", HttpStatus.OK));
}// λκΈ μμ
@Transactional
public ResponseEntity updateComment(Long id, CommentRequestDto commentRequestDto, User user){
// ν΄λΉ idμ λκΈμ΄ DBμ μλμ§ νμΈ
Optional<Comment> comment = commentRepository.findById(id);
if (comment.isEmpty()) {
throw new IllegalArgumentException("ν΄λΉ λκΈμ΄ μ‘΄μ¬νμ§ μμ΅λλ€.");
}a+b+c+d // bad
a + b + c + d // goodint[] num = {1,2,3,4,5,6,7,8,9}; //bad
int[] num = {1, 2, 3, 4, 5, 6, 7, 8, 9}; //good1οΈβ£ ν΄λμ€λͺ λ€μλ ν μΉΈ λμ΄μ°κΈ°, μμ 첫 μ€ λμ΄μ°κΈ° μλλ ν μ€ λμ΄μ°κΈ°
public class AdminController {
private final AdminService adminService;
@Operation(summary = "νμκ°μ
API", description = "νμμ λ±λ‘ν©λλ€.")
@ResponseStatus(value = HttpStatus.OK)
@Secured(PositionEnum.Authority.ADMIN)
@PostMapping("/signup")
public SuccessResponse signup(@Valid @RequestBody SignupRequestDto signupRequestDto, @AuthenticationPrincipal UserDetailsImpl userDetails) {
return adminService.signup(signupRequestDto, userDetails.getMember());
}
}2οΈβ£ import ν΄μ μΈ λλ μ€ λμ΄μ°κΈ° (X)
private final PostRepository postRepository;
private final CategoryRepository categoryRepository;
private final KeywordRepository keywordRepository;
private final EmitterRepository emitterRepository;3οΈβ£ λ³μ μ μΈ λ€μ λ©μλ μ€λ©΄ μ€λ°κΏ ν΄ μ£ΌμΈμ.
Optional<Post> findPost = postRepository.findById(id);
if (findPost.isEmpty()) {
throw new IllegalArgumentException("ν΄λΉ κ²μκΈμ΄ μμ΅λλ€.");
} else if (member.getPosition().getNum() < findPost.get().getModifyPermission().getNum()) {
throw new IllegalArgumentException("μμ κ°λ₯ν νμ λ±κΈμ΄ μλλλ€.");
}4οΈβ£ else ifλ μμλ§ λμ΄μ°κΈ° ν΄ μ£ΌμΈμ.
if(post.isEmpty()) {
throw new IllegalArgumentException("ν΄λΉ κ²μκΈμ΄ μμ΅λλ€.");
} else if(member.getPosition().getNum() < post.get().getReadablePosition().getNum()){
throw new IllegalArgumentException("μ½κΈ° κ°λ₯ν νμ λ±κΈμ΄ μλλλ€.");
}5οΈβ£ β}β μ¬μ΄μ returnλ¬Έμ λμ΄μ°κΈ°λ₯Ό ν΄ μ£ΌμΈμ.
}
return key.toString();
}6οΈβ£ λ©μλ λͺ κ³Ό λ€μ μ€μ λμ΄μ°κΈ° ν΄ μ£ΌμΈμ.
@Transactional
public SuccessResponse createBookMarkFolder(String folderName, Member member){
Optional<Member> findMember = memberRepository.findById(member.getId());
...
}ttg
βββ TtgApplication.java
βββ domain
βΒ Β βββ coupon
βΒ Β βΒ Β βββ api
βΒ Β βΒ Β βΒ Β βββ CouponController.java
βΒ Β βΒ Β βββ application
βΒ Β βΒ Β βΒ Β βββ CouponService.java
βΒ Β βΒ Β βΒ Β βββ CouponServiceImpl.java
βΒ Β βΒ Β βββ dto
βΒ Β βΒ Β βΒ Β βββ CouponResponseDto.java
βΒ Β βΒ Β βΒ Β βββ MyPageCouponResponseDTO.java
βΒ Β βΒ Β βΒ Β βββ converter
βΒ Β βΒ Β βΒ Β βββ CouponConverter.java
βΒ Β βΒ Β βββ entity
βΒ Β βΒ Β βΒ Β βββ Coupon.java
βΒ Β βΒ Β βββ exception
βΒ Β βΒ Β βΒ Β βββ handler
βΒ Β βΒ Β βΒ Β βββ CouponHandler.java
βΒ Β βΒ Β βββ repository
βΒ Β βΒ Β βΒ Β βββ CouponRepository.java
βΒ Β βΒ Β βββ utils
βΒ Β βΒ Β βββ BitMatrixToMultipartFileConverter.java
βΒ Β βΒ Β βββ CustomMultipartFile.java
βΒ Β βΒ Β βββ QrCodeGenerator.java
βΒ Β βββ member
βΒ Β βΒ Β βββ api
βΒ Β βΒ Β βΒ Β βββ MemberController.java
βΒ Β βΒ Β βββ application
βΒ Β βΒ Β βΒ Β βββ MemberCommandService.java
βΒ Β βΒ Β βΒ Β βββ MemberCommandServiceImpl.java
βΒ Β βΒ Β βΒ Β βββ MemberQueryService.java
βΒ Β βΒ Β βΒ Β βββ MemberQueryServiceImpl.java
βΒ Β βΒ Β βΒ Β βββ MemberService.java
βΒ Β βΒ Β βΒ Β βββ MemberServiceImpl.java
βΒ Β βΒ Β βΒ Β βββ OAuth2MemberServiceImpl.java
βΒ Β βΒ Β βββ dto
βΒ Β βΒ Β βΒ Β βββ MemberImageRequestDTO.java
βΒ Β βΒ Β βΒ Β βββ MemberImageResponseDTO.java
βΒ Β βΒ Β βΒ Β βββ MyPageAllResponseDto.java
βΒ Β βΒ Β βΒ Β βββ MyPageMemberResponseDTO.java
βΒ Β βΒ Β βΒ Β βββ converter
βΒ Β βΒ Β βΒ Β βββ MemberConverter.java
βΒ Β βΒ Β βββ entity
βΒ Β βΒ Β βΒ Β βββ CustomOAuth2Member.java
βΒ Β βΒ Β βΒ Β βββ HeartStore.java
βΒ Β βΒ Β βΒ Β βββ Member.java
βΒ Β βΒ Β βββ exception
βΒ Β βΒ Β βΒ Β βββ handler
βΒ Β βΒ Β βΒ Β βββ MemberHandler.java
βΒ Β βΒ Β βββ repository
βΒ Β βΒ Β βββ HeartStoreRepository.java
βΒ Β βΒ Β βββ MemberRepository.java
βΒ Β βββ review
βΒ Β βΒ Β βββ api
βΒ Β βΒ Β βΒ Β βββ ReviewController.java
βΒ Β βΒ Β βββ application
βΒ Β βΒ Β βΒ Β βββ ReviewCommandService.java
βΒ Β βΒ Β βΒ Β βββ ReviewCommandServiceImpl.java
βΒ Β βΒ Β βββ dto
βΒ Β βΒ Β βΒ Β βββ MyPageReviewResponseDTO.java
βΒ Β βΒ Β βΒ Β βββ ReviewRegisterRequestDTO.java
βΒ Β βΒ Β βΒ Β βββ ReviewRegisterResponseDTO.java
βΒ Β βΒ Β βββ entity
βΒ Β βΒ Β βΒ Β βββ Review.java
βΒ Β βΒ Β βΒ Β βββ ReviewStatus.java
βΒ Β βΒ Β βββ exception
βΒ Β βΒ Β βΒ Β βββ handler
βΒ Β βΒ Β βΒ Β βββ ReviewHandler.java
βΒ Β βΒ Β βββ repository
βΒ Β βΒ Β βββ ReviewRepository.java
βΒ Β βββ store
βΒ Β βββ api
βΒ Β βΒ Β βββ StoreController.java
βΒ Β βββ application
βΒ Β βΒ Β βββ StoreCommandService.java
βΒ Β βΒ Β βββ StoreCommandServiceImpl.java
βΒ Β βΒ Β βββ StoreQueryService.java
βΒ Β βΒ Β βββ StoreQueryServiceImpl.java
βΒ Β βββ dto
βΒ Β βΒ Β βββ HeartStoreResponseDto.java
βΒ Β βΒ Β βββ HomeResponseDto.java
βΒ Β βΒ Β βββ MyPageStoreResponseDto.java
βΒ Β βΒ Β βββ StoreFindResponseDto.java
βΒ Β βΒ Β βββ StoreRequestDto.java
βΒ Β βΒ Β βββ StoreResponseDto.java
βΒ Β βΒ Β βββ StoreResultResponseDto.java
βΒ Β βΒ Β βββ converter
βΒ Β βΒ Β βββ StoreConverter.java
βΒ Β βββ entity
βΒ Β βΒ Β βββ Menu.java
βΒ Β βΒ Β βββ Region.java
βΒ Β βΒ Β βββ Store.java
βΒ Β βββ exception
βΒ Β βΒ Β βββ handler
βΒ Β βΒ Β βββ StoreHandler.java
βΒ Β βββ repository
βΒ Β βββ MenuRepository.java
βΒ Β βββ RegionRepository.java
βΒ Β βββ StoreRepository.java
βββ global
βββ auth
βΒ Β βββ WebSecurityConfiguration.java
βΒ Β βββ dto
βΒ Β βΒ Β βββ KakaoAccessTokenInfoResponseDto.java
βΒ Β βΒ Β βββ NaverAccessTokenInfoResponseDto.java
βΒ Β βββ handler
βΒ Β βΒ Β βββ OAuth2SuccessHandler.java
βΒ Β βββ jwt
βΒ Β βββ JwtAuthenticationFilter.java
βΒ Β βββ JwtProvider.java
βΒ Β βββ TokenParser.java
βββ common
βΒ Β βββ AwsS3.java
βΒ Β βββ BaseResponseDto.java
βΒ Β βββ ResponseCode.java
βββ config
βΒ Β βββ AwsS3Config.java
βββ error
βΒ Β βββ GeneralException.java
βΒ Β βββ handler
βΒ Β βββ AwsS3Handler.java
βΒ Β βββ MasterExceptionHandler.java
βββ infra
βΒ Β βββ infra.java
βββ util
βββ AwsS3Service.java
βββ Time.java