๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ’ป๐Ÿ’ญ๐ŸŽง๐ŸŒ

[์›น ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ] 6. ๊ฒฝ๊ธฐ ์ฐธ๊ฐ€ ์‹ ์ฒญ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ๋ชจ์ง‘๊ธ€ ํƒœ๊ทธ๋ณ„ ํ•„ํ„ฐ๋ง ๊ตฌํ˜„ ๋ณธ๋ฌธ

์›น ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ

[์›น ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ] 6. ๊ฒฝ๊ธฐ ์ฐธ๊ฐ€ ์‹ ์ฒญ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ๋ชจ์ง‘๊ธ€ ํƒœ๊ทธ๋ณ„ ํ•„ํ„ฐ๋ง ๊ตฌํ˜„

adorableco 2024. 1. 18. 21:20
๋ฐ˜์‘ํ˜•

์‚ฌ์‹ค ์ƒ ๋ฉ”์ธ ๊ธฐ๋Šฅ์ธ ์ฐธ๊ฐ€ ์‹ ์ฒญ ๊ธฐ๋Šฅ์ด๋‹ค. ์ฒ ์ €ํžˆ ๊ตฌ๋ถ„ํ•ด์„œ ๊ตฌํ˜„ํ•˜๋˜ ๊ธฐ๋Šฅ๋“ค์ด ์ด์ œ๋Š” ์ด๊ฒƒ์ €๊ฒƒ ์„ž์ด๊ธฐ ์‹œ์ž‘ํ•˜๋‹ˆ๊นŒ ์ด ๋ฉ”์„œ๋“œ๋Š” ์—ฌ๊ธฐ๋‹ค๊ฐ€ ๋‘๋Š”๊ฒŒ ๋‚˜์„๊นŒ ์ €๊ธฐ๋‹ค๊ฐ€ ๋‘๋Š”๊ฒŒ ๋‚˜์„๊นŒ.. ํ•˜๋Š” ๊ณ ๋ฏผ์ด ์ƒ๊ธฐ๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ ์  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฐจ์›์—์„œ ๋‹ค๋ค„์•ผํ•  ์ œ์•ฝ ์กฐ๊ฑด๋“ค์ด ์ƒ๊ธฐ๋‹ˆ ์ œ๋ฒ• ์žฌ๋ฐŒ๋‹ค !! ๐Ÿฅน๐Ÿ‘

 

๊ฒฝ๊ธฐ ์ฐธ๊ฐ€ ์‹ ์ฒญ ๊ธฐ๋Šฅ์˜ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

<์ฐธ๊ฐ€ ์‹ ์ฒญ ๊ธฐ๋Šฅ ์กฐ๊ฑด>

  • โŒ user์˜ ์กฐ๊ฑด์ด ํ•ด๋‹น ๋งค์น˜ ํƒœ๊ทธ๋“ค์˜ ์กฐ๊ฑด๊ณผ ๋ถ€ํ•ฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ฐธ๊ฐ€ ์‹ ์ฒญ ๋ถˆ๊ฐ€
  • โŒ match์˜ ํ˜„์žฌ ์ฐธ๊ฐ€ ์‹ ์ฒญ ์ธ์›์ด ์ „์ฒด ๋ชจ์ง‘ ์ธ์›๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ, (์ฐธ๊ฐ€ ์ธ์›์„ ๋ชจ๋‘ ๋ชจ์ง‘ํ–ˆ์„ ๊ฒฝ์šฐ) ์ฐธ๊ฐ€ ์‹ ์ฒญ ๋ถˆ๊ฐ€
  • โŒ user ๊ฐ€ ์ด๋ฏธ ์ฐธ๊ฐ€ ์‹ ์ฒญํ•œ ๋งค์น˜๋“ค๊ณผ ์‹œ๊ฐ„์ด ๊ฒน์น˜๋ฉด ์ฐธ๊ฐ€ ์‹ ์ฒญ ๋ถˆ๊ฐ€
  • โœ… ์ด์™ธ๋Š” ์ฐธ๊ฐ€ ์‹ ์ฒญ ์™„๋ฃŒ ํ›„์— ํ•ด๋‹น ๋งค์น˜์˜ ํ˜„์žฌ ์ฐธ๊ฐ€ ์‹ ์ฒญ ์ธ์› ์ˆ˜ 1 ์ฆ๊ฐ€

์ด ์กฐ๊ฑด ์ค‘์—์„œ๋„ ๋ถ„๋ช… ํ”„๋กœ์ ํŠธ ์ดˆ๋ฐ˜์— ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ๋ฅผ ์ƒ์„ธํ•˜๊ฒŒ ํ•ด๋‘๊ณ  ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋‹ˆ ์ƒ๊ฐ๋‚˜์„œ ๋‚˜์ค‘์— ์ˆ˜์ •ํ•œ ๊ฒƒ๋“ค์ด ๋งŽ๋‹ค...^^

 


 

1. ParticipationService ์˜ save() method

    @Transactional
    public String save(Long matchId, String userEmail){
        Match match = matchRepository.findById(matchId).get();
        Tag tag = match.getTag();
        User user = userRepository.findByEmail(userEmail).get();

        if (!(tag.getAgeType().equals(user.getAge())) || (tag.getGenderType() != user.getGender()) || !(tag.getLevelType().equals(user.getLevel()))
        ){

           return "์ฐธ๊ฐ€ ์กฐ๊ฑด ๋ฏธ์ถฉ์กฑ" ;
        }else if (match.getCurrentHeadCnt() == match.getHeadCnt()) {
            return "์ฐธ๊ฐ€ ์ธ์› ๋งˆ๊ฐ";
        }
        else if (matchRepository.findDuplicateMatch(user.getUserId(),match.getStartTime(),match.getEndTime()) > 0) {
            System.out.println("num = " + matchRepository.findDuplicateMatch(user.getUserId(),match.getStartTime(),match.getEndTime()));
            return "์‹œ๊ฐ„์ด ๊ฒน์น˜๋Š” ์‹ ์ฒญ ๋งค์น˜ ์กด์žฌ" ;
        } else{
            Participation build = Participation.builder()
                    .user(user)
                    .match(match)
                    .build();
            participationRespository.save(build);
            match.setCurrentHeadCnt(match.getCurrentHeadCnt()+1);
            return "์ฐธ๊ฐ€ ์‹ ์ฒญ ์™„๋ฃŒ";
        }
    }

 

if ๋ฌธ์—์„œ ์ด 3๋ฒˆ์˜ ๋ถ„๊ธฐ๊ฐ€ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋‘ ์œ„์—์„œ ๋ช…์‹œํ•œ ์ฐธ๊ฐ€ ์‹ ์ฒญ ์กฐ๊ฑด ์— ๋”ฐ๋ผ ๋ถ„๊ธฐํ•œ ๊ฒƒ์œผ๋กœ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ฐธ๊ฐ€ ์‹ ์ฒญ์ด ์Šน์ธ๋˜๊ฑฐ๋‚˜, ๊ฑฐ์ ˆ๋  ๊ฒƒ์ด๋‹ค.

 

        if (!(tag.getAgeType().equals(user.getAge())) || (tag.getGenderType() != user.getGender()) || !(tag.getLevelType().equals(user.getLevel()))
        )

 

โžก๏ธ ๋งค์น˜ ํƒœ๊ทธ์™€ ์œ ์ €์˜ ์กฐ๊ฑด์ด ๋ถ€ํ•ฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ฐธ๊ฐ€ ์‹ ์ฒญ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

  • ๊ทผ๋ฐ ์ง€๊ธˆ ๊ธ€์„ ์“ฐ๊ณ  ์žˆ๋‹ค๊ฐ€ ์ƒ๊ฐ๋‚œ๊ฑด๋ฐ tag์˜ ๊ฐ ์„ธ ๊ฐœ์˜ ํ•„๋“œ๋“ค์€ null ์ด ๊ฐ€๋Šฅํ•ด์„œ.. null ์ธ ๊ฒฝ์šฐ์—๋Š” ๋น„๊ตํ•  ํ•„์š”๋„ ์—†์–ด์•ผํ•˜๋Š”๊ฑด๋ฐ ์ด ์ฝ”๋“œ์—์„  ๋‹ค๋ฅด๋‹ค๊ณ  ํŒ๋‹จ์„ ํ•˜๊ฒ ๊ตฌ๋‚˜... ๊ณง ํ”ฝ์Šคํ•ด๋‘ฌ์•ผ๊ฒ ๋‹ค......

 

else if (match.getCurrentHeadCnt() == match.getHeadCnt())

 

โžก๏ธ ๋งค์น˜์˜ ํ˜„์žฌ ์ฐธ๊ฐ€ ์ธ์› ์ˆ˜์™€ ์ „์ฒด ์ฐธ๊ฐ€ ์ธ์› ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ฐธ๊ฐ€ ์‹ ์ฒญ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

  • ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋ชจ์ง‘ ์ธ์›์ด ๋‹ค ๋งˆ๊ฐ๋œ ๋งค์น˜์˜ ๊ฒฝ์šฐ์—๋Š” ์ฐธ๊ฐ€ ์‹ ์ฒญ์„ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋‹ค.

 

else if (matchRepository.findDuplicateMatch(user.getUserId(),match.getStartTime(),match.getEndTime()) > 0)

 

โžก๏ธ ์‹ ์ฒญํ•˜๊ณ ์ž ํ•˜๋Š” ๋งค์น˜์˜ ์‹œ์ž‘ ์‹œ๊ฐ„, ์ข…๋ฃŒ ์‹œ๊ฐ„, ๊ทธ๋ฆฌ๊ณ  userId๋ฅผ ์ „๋‹ฌ ์ธ์ž๋กœ ๋ฐ›๋Š” findDuplicateMatch ๋ฉ”์„œ๋“œ์˜ ๋ฆฌํ„ด๊ฐ’์ด 0 ์ด์ƒ, ์ฆ‰ ํ•ด๋‹น ์œ ์ €๊ฐ€ ์ด๋ฏธ ์ฐธ๊ฐ€ ์‹ ์ฒญํ•œ ๋งค์น˜๋“ค ์ค‘์— ์‹œ๊ฐ„์ด ๊ฒน์น˜๋Š” ๋งค์น˜๊ฐ€ ์กด์žฌํ•˜๋ฉด ์ฐธ๊ฐ€ ์‹ ์ฒญ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

 

findDuplicateMatch() ๋Š” MatchRepository ์—์„œ ๋‹ค๋ฃฐ๊นŒ, ParticipationRepository ์—์„œ ๋‹ค๋ฃฐ๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€, Participation ๊ณผ ์—ฐ๊ด€์ด ์žˆ๋Š” ๋ฉ”์„œ๋“œ์ด๊ธดํ•˜๋‚˜ ์–ด์จŒ๋“  ๋งค์น˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด๋‹ˆ ์ „์ž์—์„œ ๋‹ค๋ฃจ๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

 

public interface MatchRepository extends JpaRepository<Match, Long> {

    @Query("select count(m.matchId) from Match m join Participation p on m = p.match join User u on p.user = u  where u.userId = :userId and m.startTime <= :endTime and m.endTime >= :startTime")
    int findDuplicateMatch(Long userId, Date startTime, Date endTime);

}

 

โžก๏ธ Match, Participation, User ์„ join์œผ๋กœ ๋ฌถ์–ด์„œ ํ•ด๋‹น ์œ ์ €์˜ ์ฐธ๊ฐ€ ์‹ ์ฒญ ๋งค์น˜ ์ค‘ ์‹œ๊ฐ„์ด ๊ฒน์น˜๋Š” ๋งค์น˜์˜ ์ˆ˜๋ฅผ ์นด์šดํŠธํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•œ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„์ด (์ฐธ๊ฐ€ ์‹ ์ฒญํ• ) ๋งค์น˜์˜ ์ข…๋ฃŒ ์‹œ๊ฐ„๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ๋จผ์ €์ด๊ณ  , ์ข…๋ฃŒ ์‹œ๊ฐ„์ด (์ฐธ๊ฐ€ ์‹ ์ฒญํ• ) ๋งค์น˜์˜ ์‹œ์ž‘ ์‹œ๊ฐ„๋ณด๋‹ค ๋‚˜์ค‘ ์ด๋ผ๋Š” ์กฐ๊ฑด์œผ๋กœ ์‹œ๊ฐ„์ด ๊ฒน์น˜๋Š” ๋งค์น˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

 

 


2. ParticipationController

@RequiredArgsConstructor
@RestController
public class ParticipationController {
    private final ParticipationService participationService;
    @PostMapping("/api/participation/{matchId}")
    ResponseEntity<String> applyMatch(@PathVariable Long matchId, @RequestBody AddParticipationRequest request){
        return ResponseEntity.ok()
                .body(participationService.save(matchId, request.getUserEmail()));
    }
}

 


 

3. AddParticipationRequest dto

@Setter
@Getter
@NoArgsConstructor
public class AddParticipationRequest {
    String userEmail;
}

 

์œ ์ € ํ™•์ธ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•  userEmail ์„ ๋ฐ›๋Š”๋‹ค. ์ด๊ฒƒ๋„ ๋นจ๋ฆฌ ํ† ํฐ์œผ๋กœ ๋ฐ”๊ฟ”์•ผํ•˜๋Š”๋ฐ..
๊ทธ๋ฆฌ๊ณ  ์ด๊ฑฐ ํ•˜๋‚˜๋งŒ ๋ฐ›์•„๋„ ๋˜๋Š”๋ฐ dto๊นŒ์ง€ ๋งŒ๋“ค์–ด์•ผํ•˜๋‚˜ ๋ผ๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค. ๋ญ”๊ฐ€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ ... ์ฐพ์•„๋ด์•ผ์ง€

 

 

 

์ œ๋Œ€๋กœ ์ž‘๋™๋จ๋„ ํ™•์ธ ์™„๋ฃŒ! ๐Ÿ‘

 


๋‹ค์Œ ํ•  ์ผ

  • ์ด์ œ๋Š” ๋ฏธ๋ฃจ๊ณ  ๋ฏธ๋ค„๋’€๋˜ jwt ํ† ํฐ์„ ๋‹ค๋ค„์•ผ ํ•  ๋•Œ
๋ฐ˜์‘ํ˜•