-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
8e312c0
commit 5a4cf9d
Showing
6 changed files
with
236 additions
and
0 deletions.
There are no files selected for viewing
82 changes: 82 additions & 0 deletions
82
src/main/java/com/t3t/bookstoreapi/member/controller/MemberGradeController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
package com.t3t.bookstoreapi.member.controller; | ||
|
||
import com.t3t.bookstoreapi.member.model.dto.MemberGradeDto; | ||
import com.t3t.bookstoreapi.member.model.request.MemberGradeCreationRequest; | ||
import com.t3t.bookstoreapi.member.service.MemberGradeService; | ||
import com.t3t.bookstoreapi.model.response.BaseResponse; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
import java.math.BigDecimal; | ||
import java.util.List; | ||
|
||
@RestController | ||
@RequiredArgsConstructor | ||
public class MemberGradeController { | ||
private final MemberGradeService memberGradeService; | ||
@GetMapping("/admin/member-grades") | ||
public ResponseEntity<BaseResponse<List<MemberGradeDto>>> getMemberGradeList() { | ||
List<MemberGradeDto> memberGradePolicyList = memberGradeService.getMemberGradeList(); | ||
return ResponseEntity.ok(new BaseResponse<List<MemberGradeDto>>().data(memberGradePolicyList)); | ||
} | ||
|
||
/** | ||
* 특정 ID를 기반으로 한 회원 등급 정책 조회 | ||
* @param policyId 조회할 회원 등급 정책의 ID | ||
* @return 조회된 회원 등급 정책을 포함한 BaseResponse 객체 반환 | ||
* | ||
* @author hydrationn(박수화) | ||
*/ | ||
@GetMapping("/admin/member-grade-policies/{policyId}") | ||
public ResponseEntity<BaseResponse<MemberGradeDto>> getMemberGrade(@PathVariable("policyId") Long policyId) { | ||
MemberGradeDto memberGrade = memberGradeService.getMemberGrade(policyId); | ||
return ResponseEntity.ok(new BaseResponse<MemberGradeDto>().data(memberGrade)); | ||
} | ||
|
||
/** | ||
* 새로운 회원 등급 정책 생성 | ||
* @param request 생성할 회원 등급 정책의 정보를 담은 요청 객체 | ||
* @return 생성된 회원 등급 정책을 포함한 BaseResponse 객체 반환 | ||
* | ||
* @author hydrationn(박수화) | ||
*/ | ||
@PostMapping("/admin/member-grade-policy") | ||
public ResponseEntity<BaseResponse<MemberGradeDto>> createMemberGrade(@RequestBody MemberGradeCreationRequest request) { | ||
MemberGradeDto memberGrade = memberGradeService.createMemberGrade(request); | ||
return ResponseEntity.ok(new BaseResponse<MemberGradeDto>().data(memberGrade)); | ||
} | ||
|
||
/** | ||
* 기존의 회원 등급 정책 업데이트 | ||
* @param policyId 업데이트할 회원 등급 정책의 ID | ||
* @param startAmount 기준 시작 금액 | ||
* @param endAmount 기준 종료 금액 | ||
* @param rate 포인트 적립 비율 | ||
* @return 업데이트된 회원 등급 정책을 포함한 BaseResponse 객체 반환 | ||
* | ||
* @author hydrationn(박수화) | ||
*/ | ||
@PutMapping("/admin/member-grade-policy/{policyId}/default") | ||
public ResponseEntity<BaseResponse<Void>> updateMemberGrade(@PathVariable("policyId") Long policyId, | ||
@RequestParam("startAmount") BigDecimal startAmount, | ||
@RequestParam("endAmount") BigDecimal endAmount, | ||
@RequestParam("rate") int rate) { | ||
memberGradeService.updateMemberGrade(policyId, startAmount, endAmount, rate); | ||
return ResponseEntity.ok(new BaseResponse<Void>().message("회원 등급 정책 업데이트 요청이 정상적으로 처리되었습니다. ")); | ||
} | ||
|
||
/** | ||
* 특정 ID를 가진 회원 등급 정책 삭제 | ||
* @param policyId 삭제할 회원 등급 정책의 ID | ||
* @return 삭제 성공 메시지를 포함한 BaseResponse 객체 반환 | ||
* | ||
* @author hydrationn(박수화) | ||
*/ | ||
@DeleteMapping("/admin/member-grade-policy/{policyId}") | ||
public ResponseEntity<BaseResponse<Void>> deleteMemberGradePolicy(@PathVariable("policyId") Long policyId) { | ||
memberGradeService.deleteMemberGrade(policyId); | ||
return ResponseEntity.status(HttpStatus.NO_CONTENT).body(new BaseResponse<Void>().message("회원 등급 정책 삭제 요청이 성공적으로 처리되었습니다. ")); | ||
} | ||
} |
22 changes: 22 additions & 0 deletions
22
src/main/java/com/t3t/bookstoreapi/member/model/dto/MemberGradeDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package com.t3t.bookstoreapi.member.model.dto; | ||
|
||
import com.t3t.bookstoreapi.member.model.entity.MemberGrade; | ||
import com.t3t.bookstoreapi.member.model.entity.MemberGradePolicy; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
@Builder | ||
public class MemberGradeDto { | ||
private int gradeId; | ||
private String name; | ||
private MemberGradePolicy policy; | ||
|
||
public static MemberGradeDto of(MemberGrade memberGrade) { | ||
return MemberGradeDto.builder() | ||
.gradeId(memberGrade.getGradeId()) | ||
.name(memberGrade.getName()) | ||
.policy(memberGrade.getPolicy()) | ||
.build(); | ||
} | ||
} |
18 changes: 18 additions & 0 deletions
18
src/main/java/com/t3t/bookstoreapi/member/model/request/MemberGradeCreationRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package com.t3t.bookstoreapi.member.model.request; | ||
|
||
import com.t3t.bookstoreapi.member.model.entity.MemberGradePolicy; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Builder; | ||
import lombok.Data; | ||
import lombok.NoArgsConstructor; | ||
|
||
@Data | ||
@NoArgsConstructor | ||
@AllArgsConstructor | ||
@Builder | ||
public class MemberGradeCreationRequest { | ||
|
||
private int gradeId; | ||
private String name; | ||
private MemberGradePolicy policy; | ||
} |
17 changes: 17 additions & 0 deletions
17
src/main/java/com/t3t/bookstoreapi/member/model/response/MemberGradeResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package com.t3t.bookstoreapi.member.model.response; | ||
|
||
import com.t3t.bookstoreapi.member.model.entity.MemberGradePolicy; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Builder; | ||
import lombok.Data; | ||
import lombok.NoArgsConstructor; | ||
|
||
@Data | ||
@Builder | ||
@NoArgsConstructor | ||
@AllArgsConstructor | ||
public class MemberGradeResponse { | ||
|
||
private String name; | ||
private MemberGradePolicy policy; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
89 changes: 89 additions & 0 deletions
89
src/main/java/com/t3t/bookstoreapi/member/service/MemberGradeService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
package com.t3t.bookstoreapi.member.service; | ||
|
||
import com.t3t.bookstoreapi.member.exception.MemberGradeNotFoundException; | ||
import com.t3t.bookstoreapi.member.exception.MemberGradePolicyNotFoundException; | ||
import com.t3t.bookstoreapi.member.model.dto.MemberGradeDto; | ||
import com.t3t.bookstoreapi.member.model.entity.MemberGrade; | ||
import com.t3t.bookstoreapi.member.model.request.MemberGradeCreationRequest; | ||
import com.t3t.bookstoreapi.member.repository.MemberGradeRepository; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
import java.math.BigDecimal; | ||
import java.util.List; | ||
import java.util.stream.Collectors; | ||
|
||
@Service | ||
@Transactional | ||
@RequiredArgsConstructor | ||
public class MemberGradeService { | ||
private final MemberGradeRepository memberGradeRepository; | ||
|
||
@Transactional(readOnly = true) | ||
public List<MemberGradeDto> getMemberGradeList() { | ||
List<MemberGrade> memberGrades = memberGradeRepository.findAll(); | ||
|
||
return memberGrades.stream() | ||
.map(MemberGradeDto::of) | ||
.collect(Collectors.toList()); | ||
} | ||
|
||
/** | ||
* 특정 ID를 가진 회원 등급 정책 조회 | ||
* @param gradeId 조회할 회원 등급 정책 ID | ||
* @return 조회된 회원 등급 정책 DTO | ||
* @throws MemberGradePolicyNotFoundException 해당 ID의 정책을 찾을 수 없을 경우 예외 발생 | ||
* | ||
* @author hydrationn(박수화) | ||
*/ | ||
@Transactional(readOnly = true) | ||
public MemberGradeDto getMemberGrade(Long gradeId) { | ||
return MemberGradeDto.of(memberGradeRepository.findByPolicyId(gradeId) | ||
.orElseThrow(() -> new MemberGradeNotFoundException(gradeId))); | ||
} | ||
|
||
/** | ||
* 새로운 회원 등급 정책 생성 | ||
* @param request 회원 등급 정책 생성 요청 정보 | ||
* @return 생성된 회원 등급 정책의 DTO | ||
* | ||
* @author hydrationn(박수화) | ||
*/ | ||
public MemberGradeDto createMemberGrade(MemberGradeCreationRequest request) { | ||
MemberGrade newMemberGrade = MemberGrade.builder() | ||
.name(request.getName()) | ||
.policy(request.getPolicy()) | ||
.build(); | ||
|
||
return MemberGradeDto.of(memberGradeRepository.save(newMemberGrade)); | ||
} | ||
|
||
/** | ||
* 기존의 회원 등급 정책 수정 | ||
* @param policyId 수정할 회원 등급 정책의 ID | ||
* @param startAmount 기준 시작 금액 | ||
* @param endAmount 기준 종료 금액 | ||
* @param rate 포인트 적립 비율 | ||
* @return 수정된 회원 등급 정책의 DTO | ||
* @throws MemberGradePolicyNotFoundException 해당 ID의 정책을 찾을 수 없을 경우 예외 발생 | ||
*/ | ||
public void updateMemberGrade(Long policyId, BigDecimal startAmount, BigDecimal endAmount, int rate) { | ||
MemberGrade policy = memberGradeRepository.findByPolicyId(policyId) | ||
.orElseThrow(() -> new MemberGradeNotFoundException(policyId)); | ||
|
||
policy.getPolicy().updateStartAmount(startAmount); | ||
policy.getPolicy().updateEndAmount(endAmount); | ||
policy.getPolicy().updateRate(rate); | ||
} | ||
|
||
/** | ||
* 특정 ID를 가진 회원 등급 정책 삭제 | ||
* @param policyId 삭제할 회원 등급 정책의 ID | ||
* @throws MemberGradePolicyNotFoundException 해당 ID의 정책을 찾을 수 없을 경우 예외 발생 | ||
*/ | ||
public void deleteMemberGrade(Long policyId) { | ||
memberGradeRepository.delete(memberGradeRepository.findByPolicyId(policyId) | ||
.orElseThrow(() -> new MemberGradeNotFoundException(policyId))); | ||
} | ||
} |