Skip to content

Commit

Permalink
Feat/#95/경품 확률 및 상품에 관한 어드민 관리 추가 (#96)
Browse files Browse the repository at this point in the history
* [feat] drawReward생성을 위한 생성자 추가

* [feat] DrawRewardInfoResponse를 List로 반환해주는 응답 클래스 생성

* [feat] DrawRewardInfoResponse를 List로 요청하는 요청 클래스 생성

* [feat] DrawRewardInfo에 대한 요청을 처리하는 서비스 클래스 및 메서드 생성

조회 수정 메서드 생성

* [feat] DrawProbabilityResponse를 List로 반환해주는 응답 클래스 생성

* [feat] DrawProbabilityResponse를 List로 요청하는 요청 클래스 생성

* [feat] DrawProbability를 수정 조회하는 서비스 클래스 생성

수정, 조회 메서드 생성

* [fix] 병합 오류 해결
  • Loading branch information
gichan222 authored Aug 16, 2024
1 parent 0a8e91b commit ddf666c
Show file tree
Hide file tree
Showing 8 changed files with 232 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,15 @@
import softeer.team_pineapple_be.domain.draw.request.DrawDailyMessageModifyRequest;
import softeer.team_pineapple_be.domain.draw.request.DrawPrizeRequest;
import softeer.team_pineapple_be.domain.draw.response.DrawDailyMessageResponse;
import softeer.team_pineapple_be.domain.draw.request.DrawProbabilityRequest;
import softeer.team_pineapple_be.domain.draw.request.DrawRewardInfoListRequest;
import softeer.team_pineapple_be.domain.draw.response.DrawProbabilityResponse;
import softeer.team_pineapple_be.domain.draw.response.DrawRewardInfoListResponse;
import softeer.team_pineapple_be.domain.draw.service.DrawPrizeService;
import softeer.team_pineapple_be.domain.draw.service.DrawService;
import softeer.team_pineapple_be.domain.draw.service.DrawProbabilityService;
import softeer.team_pineapple_be.domain.draw.service.DrawRewardInfoService;
import softeer.team_pineapple_be.domain.draw.service.DrawService;
import softeer.team_pineapple_be.domain.quiz.dao.QuizDao;
import softeer.team_pineapple_be.domain.quiz.domain.QuizInfo;
import softeer.team_pineapple_be.domain.quiz.exception.QuizErrorCode;
Expand All @@ -47,6 +54,8 @@ public class AdminController {
private final QuizDao quizDao;
private final DrawPrizeService drawPrizeService;
private final DrawService drawService;
private final DrawProbabilityService drawProbabilityService;
private final DrawRewardInfoService drawRewardInfoService;

@Operation(summary = "날짜에 해당하는 퀴즈 정보 가져오기")
@GetMapping("/quiz/{day}")
Expand Down Expand Up @@ -108,4 +117,30 @@ public ResponseEntity<SuccessResponse> uploadQuizReward(
quizService.uploadQuizRewardZipFile(quizRewardUploadRequest.getFile(), quizRewardUploadRequest.getQuizDate());
return ResponseEntity.ok(new SuccessResponse());
}

@Operation(summary = "응모 당첨 확률 조회")
@GetMapping("/drawProbability")
public ResponseEntity<DrawProbabilityResponse> getDrawProbability() {
return ResponseEntity.ok(drawProbabilityService.getDrawProbability());
}

@Operation(summary = "응모 당첨 확률 수정")
@PutMapping("/drawProbability")
public ResponseEntity<SuccessResponse> setDrawProbability(@RequestBody DrawProbabilityRequest request) {
drawProbabilityService.setDrawProbability(request);
return ResponseEntity.ok(new SuccessResponse());
}

@Operation(summary = "응모 상품 조회")
@GetMapping("/drawRewardInfo")
public ResponseEntity<DrawRewardInfoListResponse> getAllDrawRewardInfo() {
return ResponseEntity.ok(drawRewardInfoService.getAllDrawRewardInfo());
}

@Operation(summary = "응모 상품 수정")
@PutMapping("/drawRewardInfo")
public ResponseEntity<SuccessResponse> addDrawRewardInfoList(@RequestBody DrawRewardInfoListRequest drawRewardInfoListRequest) {
drawRewardInfoService.setDrawRewardInfoList(drawRewardInfoListRequest);
return ResponseEntity.ok(new SuccessResponse());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,11 @@ public class DrawRewardInfo {
public void decreaseStock() {
stock--;
}

public DrawRewardInfo(Byte ranking, String name, Integer stock, String image) {
this.ranking = ranking;
this.name = name;
this.stock = stock;
this.image = image;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package softeer.team_pineapple_be.domain.draw.request;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.Map;

/**
* 당첨 확률 수정 요청을 위한 Request 클래스
*/
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class DrawProbabilityRequest {
private Map<Byte, Integer> probabilities; // 랭킹과 확률을 포함하는 맵
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package softeer.team_pineapple_be.domain.draw.request;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.List;

/**
* 당첨 상품 수정을 위한 Request 클래스
*/
@Getter
@Setter
@NoArgsConstructor
public class DrawRewardInfoListRequest {
private List<DrawRewardInfoRequest> rewards;

@Getter
@Setter
@AllArgsConstructor
public static class DrawRewardInfoRequest {
private Byte ranking;
private String name;
private Integer stock;
private String image;

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package softeer.team_pineapple_be.domain.draw.response;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Map;

/**
* 모든 랭킹과 확률을 맵 형태로 반환하는 Response 클래스
*/
@Getter
@AllArgsConstructor
public class DrawProbabilityResponse {
private Map<Byte, Integer> probabilities;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package softeer.team_pineapple_be.domain.draw.response;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.List;

/**
* 당첨 상품 리스트 조회를 위한 Response 클래스
*/
@Getter
@AllArgsConstructor
public class DrawRewardInfoListResponse {
private List<DrawRewardInfoResponse> rewards;

@Getter
@AllArgsConstructor
public static class DrawRewardInfoResponse {
private Byte ranking;
private String name;
private Integer stock;
private String image;
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package softeer.team_pineapple_be.domain.draw.service;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import softeer.team_pineapple_be.domain.draw.domain.DrawProbability;
import softeer.team_pineapple_be.domain.draw.repository.DrawProbabilityRepository;
import softeer.team_pineapple_be.domain.draw.request.DrawProbabilityRequest;
import softeer.team_pineapple_be.domain.draw.response.DrawProbabilityResponse;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
* 경품 확률 서비스
*/
@Service
@RequiredArgsConstructor
public class DrawProbabilityService {

private final DrawProbabilityRepository drawProbabilityRepository;

/**
* 경품 확률을 조회하는 메서드
* @return 경품 확률 리스트
*/
@Transactional(readOnly = true)
public DrawProbabilityResponse getDrawProbability(){
List<DrawProbability> probabilities = drawProbabilityRepository.findAll();
Map<Byte, Integer> probabilitiesMap = probabilities.stream()
.collect(Collectors.toMap(DrawProbability::getRanking, DrawProbability::getProbability));

return new DrawProbabilityResponse(probabilitiesMap);
}

/**
* 경품 확률을 수정하는 메서드
* @param request 수정하고자 하는 경품 확률
*/
@Transactional
public void setDrawProbability(DrawProbabilityRequest request) {
Map<Byte, Integer> probabilities = request.getProbabilities();

List<DrawProbability> drawProbabilities = probabilities.entrySet().stream()
.map(entry -> new DrawProbability(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());

drawProbabilityRepository.saveAll(drawProbabilities);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package softeer.team_pineapple_be.domain.draw.service;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import softeer.team_pineapple_be.domain.draw.domain.DrawRewardInfo;
import softeer.team_pineapple_be.domain.draw.repository.DrawRewardInfoRepository;
import softeer.team_pineapple_be.domain.draw.request.DrawRewardInfoListRequest;
import softeer.team_pineapple_be.domain.draw.response.DrawRewardInfoListResponse;

import java.util.List;
import java.util.stream.Collectors;

/**
* 경품 상품 서비스
*/
@Service
@RequiredArgsConstructor
public class DrawRewardInfoService {
private final DrawRewardInfoRepository drawRewardInfoRepository;

/**
* 모든 경품에 대한 조회를 하는 메서드
* @return 경품 리스트
*/
@Transactional(readOnly = true)
public DrawRewardInfoListResponse getAllDrawRewardInfo() {
List<DrawRewardInfo> rewardInfos = drawRewardInfoRepository.findAll();
List<DrawRewardInfoListResponse.DrawRewardInfoResponse> rewardInfoResponses = rewardInfos.stream()
.map(rewardInfo -> new DrawRewardInfoListResponse.DrawRewardInfoResponse(rewardInfo.getRanking(), rewardInfo.getName(), rewardInfo.getStock(), rewardInfo.getImage()))
.collect(Collectors.toList());

return new DrawRewardInfoListResponse(rewardInfoResponses);
}

/**
* 모든 경품에 대한 수정을 하는 메서드
* @param request drawRewardInfo에 대한 리스트
*/
@Transactional
public void setDrawRewardInfoList(DrawRewardInfoListRequest request) {
List<DrawRewardInfo> rewardInfoList = request.getRewards().stream()
.map(rewardInfoRequest -> new DrawRewardInfo(
rewardInfoRequest.getRanking(),
rewardInfoRequest.getName(),
rewardInfoRequest.getStock(),
rewardInfoRequest.getImage()
))
.collect(Collectors.toList());

drawRewardInfoRepository.saveAll(rewardInfoList);
}
}

0 comments on commit ddf666c

Please sign in to comment.