-
Notifications
You must be signed in to change notification settings - Fork 2
추첨 및 포인트
TodayIsYolo edited this page May 20, 2022
·
6 revisions
게시글, 댓글 작성 수에는 제한이 없음
- 게시글 작성 500p : 하루 1회만 획득 가능
- 댓글 작성 100p : 하루 5회만 획득 가능
- 추첨 -1000p : 하루 1회 제한
포인트 지급 및 카운트 감소는 하나의 메서드에 모아 state에 따라 분리함
@Transactional
public int pointChange(Point point, String state){
int myPoint = point.getMyPoint();
int postCount = point.getPostCount();
int commentCount = point.getCommentCount();
int lottoCount = point.getLottoCount();
if(state=="POST_POINT"){
myPoint+=500;
postCount--;
} else if(state=="COMMENT_POINT"){
myPoint+=100;
commentCount--;
} else if(state=="LOTTO_POINT"){
myPoint-=1000;
lottoCount--;
}
point.update(myPoint, postCount,commentCount,lottoCount);
return myPoint;
}
하루에 5개씩 약 10%의 확률로 당첨 되도록 구현 랜덤한 수를 100까지 나오도록 설정하고 그 중 10%의 범위인 0~9의 숫자가 나오면 당첨 되도록 함
public boolean getLotResult(User user) {
System.out.println(bananaCount);
if(bananaCount>0){
Random r = new Random();
boolean result = false;
int temp = 0;
temp = r.nextInt(100);
System.out.println(temp);
//당첨 시:당첨 확률 10%
if (temp >= 0 && temp < 10) {
result = true;
bananaCount--;
Lot lot = new Lot(user);
lotRepository.save(lot);
}
return result;
} else {
System.out.println("바나나 없음");
return false;
}
}
스케쥴러를 이용해 매일 저녁 12시에 추첨 카운트 및 포인트 획득할 수 있는 횟수를 초기화
// 초, 분, 시, 일, 월, 주 순서
@Scheduled(cron = "0 0 0 * * *")
public void updateCount(){
System.out.println("횟수 리셋");
//TimeUnit.SECONDS.sleep(1);
// 저장된 모든 유저 포인트 조회
LotService.bananaCount =5;
pointService.countReset();
}
추천인 입력시 추천인에게는 1000p, 회원가입자에게는 500p 지급
//추천인 입력
@Transactional
public NicknameSignupResponseDto getEventPoint(NicknameSignupRequestDto nicknameSignupRequestDto, User user) {
//추천인을 적었다면
if (nicknameSignupRequestDto.getRecommender() != null && !Objects.equals(nicknameSignupRequestDto.getRecommender().trim(), "")) {
User recommender = userRepository.findByNickname(nicknameSignupRequestDto.getRecommender()).orElseThrow(
() -> new CustomException(NOT_FOUND_RECOMMENDER)
);
if(nicknameSignupRequestDto.getRecommender().equals(user.getNickname())){
throw new CustomException(CANNOT_RECOMMEND_YOURSELF);
}
Point userPoint = user.getPoint();
Point recommenderPoint = recommender.getPoint();
userPoint.eventPoint(userPoint.getMyPoint() + 500);
recommenderPoint.eventPoint(recommenderPoint.getMyPoint() + 1000);
}
return new NicknameSignupResponseDto(user.getPoint());
}
닉네임과 추천인을 입력하는 부분에서 로컬에서는 닉네임 입력시 추천인을 넣지 않아도 잘 되던 것이 프론트와 연동하니 추천인을 넣지 않으면 닉네임 등록이 되지 않는 문제 발생.
회원가입 후 닉네임을 입력하다보니 닉네임 입력 전에는 유저가 모두 ""라는 동일한 닉네임을 가지고 있음. 이로인해 추천인 입력부분에서 ""라는 추천인을 찾게 되어 에러 발생.
아래의 코드를 추가하여 ""인 경우 추천인을 찾지 않도록 변경함.
if (nicknameSignupRequestDto.getRecommender() != null && !Objects.equals(nicknameSignupRequestDto.getRecommender().trim(), "")) {
User recommender = userRepository.findByNickname(nicknameSignupRequestDto.getRecommender()).orElseThrow(
() -> new CustomException(NOT_FOUND_RECOMMENDER)
);