Skip to content

Commit e2f93d2

Browse files
authored
[Feat]: 단체 송금 최소, 여부 가입 api 개발 (#115)
* Feat: 단체 송금 최소, 여부 가입 api 개발 - 단체 송금 취소를 /check/info로 개발 - 딘체 송금 여부 가입 /check/info로 개발 * Feat: 단체 송금 최소, 여부 가입 api 개발 - 단체 송금 취소를 /check/info로 개발 - 딘체 송금 여부 가입 /check/info로 개발
1 parent cd2ee52 commit e2f93d2

6 files changed

Lines changed: 143 additions & 1 deletion

File tree

src/main/java/org/scoula/domain/remittancegroup/controller/RemittanceGroupController.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77

88
import org.scoula.domain.remittancegroup.dto.request.JoinRemittanceGroupRequest;
99
import org.scoula.domain.remittancegroup.dto.request.RemittanceGroupMemberCountRequest;
10+
import org.scoula.domain.remittancegroup.dto.response.RemittanceGroupCheckResponse;
1011
import org.scoula.domain.remittancegroup.dto.response.RemittanceGroupCommissionResponse;
1112
import org.scoula.domain.remittancegroup.dto.response.RemittanceGroupMemberCountResponse;
1213
import org.scoula.domain.remittancegroup.service.RemittanceService;
1314
import org.scoula.global.response.SuccessResponse;
1415
import org.scoula.global.security.dto.CustomUserDetails;
1516
import org.springframework.security.core.annotation.AuthenticationPrincipal;
17+
import org.springframework.web.bind.annotation.DeleteMapping;
1618
import org.springframework.web.bind.annotation.GetMapping;
1719
import org.springframework.web.bind.annotation.PostMapping;
1820
import org.springframework.web.bind.annotation.RequestBody;
@@ -56,4 +58,24 @@ public SuccessResponse<List<RemittanceGroupMemberCountResponse>> getRemittanceGr
5658
return SuccessResponse.ok(
5759
remittanceService.getRemittanceGroupMemberCount(remittanceGroupMemberCountRequest.currency(), request));
5860
}
61+
62+
@GetMapping("/check/info")
63+
@ApiOperation(value = "단체 송금 상품 가입 정보 확인", notes = "단체 송금 상품에 가입한 사용자 정보를 확인하는 api.")
64+
public SuccessResponse<RemittanceGroupCheckResponse> checkRemittanceGroupExist(
65+
@AuthenticationPrincipal CustomUserDetails customUserDetails) {
66+
return SuccessResponse.ok(
67+
remittanceService.checkRemittanceGroupExist(customUserDetails.getMember())
68+
);
69+
}
70+
71+
@DeleteMapping("/cancel")
72+
@ApiOperation(value = "단체 송금 상품 해지", notes = "단체 송금 상품을 해지하는 api.")
73+
public SuccessResponse<Void> cancelRemittanceGroup(
74+
@AuthenticationPrincipal CustomUserDetails customUserDetails,
75+
HttpServletRequest request) {
76+
remittanceService.cancelRemittanceGroup(customUserDetails.getMember(),request);
77+
return SuccessResponse.noContent();
78+
}
79+
80+
5981
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.scoula.domain.remittancegroup.dto.response;
2+
3+
import lombok.Builder;
4+
5+
@Builder
6+
public record RemittanceGroupCheckResponse (
7+
Boolean groupExists,
8+
Long remittanceGroupId,
9+
String groupCurrency,
10+
Integer remittance_date,
11+
Integer memberCount
12+
){
13+
14+
}

src/main/java/org/scoula/domain/remittancegroup/exception/RemittanceGroupErrorCode.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
public enum RemittanceGroupErrorCode implements ErrorCode {
1212

1313
ALREADY_JOINED_GROUP(HttpStatus.BAD_REQUEST, "RG-001", "이미 다른 단체 송금 그룹에 가입되어있는 회원입니다."),
14-
14+
NOT_EXIST_GROUP(HttpStatus.NOT_FOUND, "RG-002", "존재하지 않는 단체 송금 그룹입니다."),
15+
CAN_NOT_GROUP_NUMBER_ZERO(HttpStatus.BAD_REQUEST, "RG-003", "단체 송금 그룹의 인원 수는 0명이 될 수 없습니다."),
16+
MEMBER_COUNT_NUMBER_ZERO(HttpStatus.BAD_REQUEST, "RG-004", "단체 송금 그룹의 인원 수는 0명이 될 수 없습니다."),
1517
;
1618

1719
private final HttpStatus httpStatus;

src/main/java/org/scoula/domain/remittancegroup/mapper/RemittanceGroupMapper.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.List;
44
import java.util.Optional;
55

6+
import org.apache.ibatis.annotations.Delete;
67
import org.apache.ibatis.annotations.Insert;
78
import org.apache.ibatis.annotations.Mapper;
89
import org.apache.ibatis.annotations.Options;
@@ -155,4 +156,17 @@ int decreaseMemberCountById(@Param("remittanceGroupId") Long remittanceGroupId,
155156
int increaseMemberCountById(@Param("remittanceGroupId") Long remittanceGroupId,
156157
@Param("memberCount") Integer memberCount);
157158

159+
@Select("""
160+
SELECT *
161+
FROM remittance_group
162+
WHERE remittance_group_id = #{remittanceGroupId}
163+
""")
164+
RemittanceGroup findById(@Param("remittanceGroupId") Long remittanceGroupId);
165+
166+
@Delete("""
167+
DELETE FROM remittance_group
168+
WHERE remittance_group_id = #{remittanceGroupId}
169+
""")
170+
int deleteById(@Param("remittanceGroupId") Long remittanceGroupId);
171+
158172
}

src/main/java/org/scoula/domain/remittancegroup/service/RemittanceService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import org.scoula.domain.member.entity.Member;
88
import org.scoula.domain.remittancegroup.dto.request.JoinRemittanceGroupRequest;
9+
import org.scoula.domain.remittancegroup.dto.response.RemittanceGroupCheckResponse;
910
import org.scoula.domain.remittancegroup.dto.response.RemittanceGroupCommissionResponse;
1011
import org.scoula.domain.remittancegroup.dto.response.RemittanceGroupMemberCountResponse;
1112
import org.scoula.domain.remittancegroup.entity.RemittanceGroup;
@@ -24,4 +25,8 @@ List<RemittanceGroupMemberCountResponse> getRemittanceGroupMemberCount(Currency
2425
void RemittanceGroupAlarm();
2526

2627
void changeRemittanceGroup(RemittanceGroup remittanceGroup);
28+
29+
RemittanceGroupCheckResponse checkRemittanceGroupExist(Member member);
30+
31+
void cancelRemittanceGroup(Member member, HttpServletRequest request);
2732
}

src/main/java/org/scoula/domain/remittancegroup/service/RemittanceServiceImpl.java

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.scoula.domain.member.service.MemberService;
2424
import org.scoula.domain.remittancegroup.batch.dto.MemberWithInformationDto;
2525
import org.scoula.domain.remittancegroup.dto.request.JoinRemittanceGroupRequest;
26+
import org.scoula.domain.remittancegroup.dto.response.RemittanceGroupCheckResponse;
2627
import org.scoula.domain.remittancegroup.dto.response.RemittanceGroupCommissionResponse;
2728
import org.scoula.domain.remittancegroup.dto.response.RemittanceGroupMemberCountResponse;
2829
import org.scoula.domain.remittancegroup.entity.BenefitStatus;
@@ -228,6 +229,90 @@ public void changeRemittanceGroup(RemittanceGroup remittanceGroup) {
228229
eventPublisher.publishEvent(new RemittanceGroupChangedEvent(changedMemberIds));
229230
}
230231

232+
@Override
233+
public RemittanceGroupCheckResponse checkRemittanceGroupExist(Member member) {
234+
235+
if (member.getRemittanceGroupId() == null) {
236+
return RemittanceGroupCheckResponse.builder()
237+
.groupExists(false)
238+
.remittance_date(null)
239+
.remittanceGroupId(null)
240+
.groupCurrency(null)
241+
.memberCount(0)
242+
.build();
243+
}
244+
245+
RemittanceGroup remittanceGroup = remittanceGroupMapper.findById(member.getRemittanceGroupId());
246+
247+
if (remittanceGroup == null) {
248+
return RemittanceGroupCheckResponse.builder()
249+
.groupExists(false)
250+
.remittance_date(null)
251+
.remittanceGroupId(null)
252+
.groupCurrency(null)
253+
.memberCount(0)
254+
.build();
255+
}
256+
257+
258+
return RemittanceGroupCheckResponse.builder()
259+
.groupExists(true)
260+
.remittanceGroupId(remittanceGroup.getRemittanceGroupId())
261+
.remittance_date(remittanceGroup.getRemittanceDate())
262+
.groupCurrency(remittanceGroup.getCurrency().name())
263+
.memberCount(remittanceGroup.getMemberCount())
264+
.build();
265+
}
266+
267+
@Override
268+
public void cancelRemittanceGroup(Member member, HttpServletRequest request) {
269+
if (member.getRemittanceGroupId() == null) {
270+
throw new CustomException(NOT_EXIST_GROUP,
271+
LogLevel.WARNING, null,
272+
Common.builder()
273+
.deviceInfo(request.getHeader("user-agent"))
274+
.srcIp(request.getRemoteAddr())
275+
.apiMethod(request.getMethod())
276+
.callApiPath(request.getRequestURI())
277+
.memberId(member.getMemberId().toString())
278+
.build());
279+
}
280+
281+
// 그룹이 존재할 경우
282+
RemittanceGroup remittanceGroup = remittanceGroupMapper.findById(member.getRemittanceGroupId());
283+
if (remittanceGroup == null) {
284+
throw new CustomException(NOT_EXIST_GROUP,
285+
LogLevel.WARNING, null,
286+
Common.builder()
287+
.deviceInfo(request.getHeader("user-agent"))
288+
.srcIp(request.getRemoteAddr())
289+
.apiMethod(request.getMethod())
290+
.callApiPath(request.getRequestURI())
291+
.memberId(member.getMemberId().toString())
292+
.build());
293+
}
294+
295+
int memberCount = remittanceGroup.getMemberCount();
296+
297+
if (memberCount <= 0) {
298+
throw new CustomException(MEMBER_COUNT_NUMBER_ZERO, LogLevel.WARNING, null,
299+
Common.builder()
300+
.deviceInfo(request.getHeader("user-agent"))
301+
.srcIp(request.getRemoteAddr())
302+
.apiMethod(request.getMethod())
303+
.callApiPath(request.getRequestURI())
304+
.memberId(member.getMemberId().toString())
305+
.build());
306+
}
307+
308+
remittanceGroupMapper.decreaseMemberCountById(remittanceGroup.getRemittanceGroupId(), 1);
309+
310+
remittanceInformationMapper.deleteById(member.getRemittanceInformationId());
311+
312+
memberMapper.updateRemittanceRefsStrict(member.getMemberId(), null, null);
313+
314+
}
315+
231316
private void validateRemittanceGroup(Member member, HttpServletRequest request) {
232317
if (member.getRemittanceGroupId() != null) {
233318
throw new CustomException(ALREADY_JOINED_GROUP, LogLevel.WARNING, null,

0 commit comments

Comments
 (0)