From 84d1f4b2c4c96cc6c12c4f3c5b64b0535320aef7 Mon Sep 17 00:00:00 2001 From: rlarlgnszx Date: Sat, 13 Jul 2024 04:48:31 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[feat]=20DTO=EB=9E=91=20Controller=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20-=20#90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dateroad/course/api/CourseController.java | 4 +++- .../course/dto/request/PointUseReq.java | 19 ++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/dateroad-api/src/main/java/org/dateroad/course/api/CourseController.java b/dateroad-api/src/main/java/org/dateroad/course/api/CourseController.java index 4a0b13ad..4ba0c4c2 100644 --- a/dateroad-api/src/main/java/org/dateroad/course/api/CourseController.java +++ b/dateroad-api/src/main/java/org/dateroad/course/api/CourseController.java @@ -16,6 +16,7 @@ import org.dateroad.course.service.CourseService; import org.dateroad.date.domain.Course; import org.dateroad.date.dto.response.CourseGetDetailRes; +import org.dateroad.point.domain.TransactionType; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -53,7 +54,7 @@ public ResponseEntity getAllDataAccessCourse( @PostMapping(consumes = {MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity createCourse( - @UserId final Long userId, + @RequestHeader final Long userId, @RequestPart("course") final CourseCreateReq courseCreateReq, @RequestPart("tags") final List tags, @RequestPart("places") final List places, @@ -62,6 +63,7 @@ public ResponseEntity createCourse( Course course = courseService.createCourse(userId, courseCreateReq, places, images); asyncService.createCoursePlace(places, course); asyncService.createCourseTags(tags, course); + asyncService.publishEvenUserPoint(userId, PointUseReq.of(100, TransactionType.POINT_GAINED,"코스 생성")); return ResponseEntity.status( HttpStatus.CREATED ).body(CourseCreateRes.of(course.getId())); diff --git a/dateroad-api/src/main/java/org/dateroad/course/dto/request/PointUseReq.java b/dateroad-api/src/main/java/org/dateroad/course/dto/request/PointUseReq.java index 3581a04b..2009a575 100644 --- a/dateroad-api/src/main/java/org/dateroad/course/dto/request/PointUseReq.java +++ b/dateroad-api/src/main/java/org/dateroad/course/dto/request/PointUseReq.java @@ -1,15 +1,24 @@ package org.dateroad.course.dto.request; import lombok.AccessLevel; +import lombok.AllArgsConstructor; import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; import org.dateroad.point.domain.TransactionType; +@Getter @Builder(access = AccessLevel.PROTECTED) -public record PointUseReq( - int point, - TransactionType type, - String description -) { +@AllArgsConstructor(access = AccessLevel.PROTECTED) +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class PointUseReq { + @Builder.Default + private final int point = 100; + @Builder.Default + private final TransactionType type = TransactionType.POINT_GAINED; + @Builder.Default + private final String description = "포인트획득"; + public static PointUseReq of(int point, TransactionType type, String description) { return PointUseReq.builder() .point(point) From 898476f3257dac13e338ba403194edcde54c35ec Mon Sep 17 00:00:00 2001 From: rlarlgnszx Date: Sat, 13 Jul 2024 04:49:37 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[feat]=20PointListner=20Type=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?-=20#90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dateroad/course/facade/AsyncService.java | 12 ++++++------ .../dateroad/course/service/CourseService.java | 13 ++++++------- .../dateroad/point/event/pointEventListener.java | 16 ++++++++++++++-- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/dateroad-api/src/main/java/org/dateroad/course/facade/AsyncService.java b/dateroad-api/src/main/java/org/dateroad/course/facade/AsyncService.java index d3d3c3b8..d5e875db 100644 --- a/dateroad-api/src/main/java/org/dateroad/course/facade/AsyncService.java +++ b/dateroad-api/src/main/java/org/dateroad/course/facade/AsyncService.java @@ -53,17 +53,17 @@ public void createCoursePlace(final List places, final Course coursePlaceService.createCoursePlace(places, course); } - public void publishEvenUserPoint(User user, PointUseReq pointUseReq) { + public void publishEvenUserPoint(final Long userId, PointUseReq pointUseReq) { Map fieldMap = new HashMap<>(); - fieldMap.put("userId", user.getId().toString()); - fieldMap.put("point", Integer.toString(pointUseReq.point())); - fieldMap.put("type", pointUseReq.type().toString()); + fieldMap.put("userId", userId.toString()); + fieldMap.put("point", Integer.toString(pointUseReq.getPoint())); + fieldMap.put("type", pointUseReq.getType().toString()); redisTemplate.opsForStream().add("coursePoint", fieldMap); } - public void publishEventUserFree(User user) { + public void publishEventUserFree(final Long userId) { Map fieldMap = new HashMap<>(); - fieldMap.put("userId", user.getId().toString()); + fieldMap.put("userId", userId.toString()); redisTemplate.opsForStream().add("courseFree", fieldMap); } } diff --git a/dateroad-api/src/main/java/org/dateroad/course/service/CourseService.java b/dateroad-api/src/main/java/org/dateroad/course/service/CourseService.java index 3a718951..5b244cae 100644 --- a/dateroad-api/src/main/java/org/dateroad/course/service/CourseService.java +++ b/dateroad-api/src/main/java/org/dateroad/course/service/CourseService.java @@ -16,7 +16,6 @@ import org.dateroad.course.dto.response.DateAccessGetAllRes; import org.dateroad.course.facade.AsyncService; import org.dateroad.date.domain.Course; -import org.dateroad.date.domain.Date; import org.dateroad.date.dto.response.CourseGetDetailRes; import org.dateroad.date.repository.CourseRepository; import org.dateroad.dateAccess.domain.DateAccess; @@ -194,9 +193,9 @@ public Course createCourse(final Long userId, final CourseCreateReq courseRegist public void openCourse(final Long userId, final Long courseId, final PointUseReq pointUseReq) { User user = getUser(userId); Course course = getCourse(courseId); - Point point = Point.create(user, pointUseReq.point(), pointUseReq.type(), pointUseReq.description()); - CoursePaymentType coursePaymentType = validateUserFreeOrPoint(user, pointUseReq.point()); - processCoursePayment(coursePaymentType, user, point, pointUseReq); + Point point = Point.create(user, pointUseReq.getPoint(), pointUseReq.getType(), pointUseReq.getDescription()); + CoursePaymentType coursePaymentType = validateUserFreeOrPoint(user, pointUseReq.getPoint()); + processCoursePayment(coursePaymentType, userId, point, pointUseReq); dateAccessRepository.save(DateAccess.create(course, user)); } @@ -209,15 +208,15 @@ private CoursePaymentType validateUserFreeOrPoint(final User user, final int req return CoursePaymentType.POINT; } - public void processCoursePayment(final CoursePaymentType coursePaymentType, final User user, final Point point, + public void processCoursePayment(final CoursePaymentType coursePaymentType, final Long userId, final Point point, final PointUseReq pointUseReq) { switch (coursePaymentType) { case FREE -> { - asyncService.publishEventUserFree(user); + asyncService.publishEventUserFree(userId); } case POINT -> { pointRepository.save(point); - asyncService.publishEvenUserPoint(user, pointUseReq); + asyncService.publishEvenUserPoint(userId, pointUseReq); } } } diff --git a/dateroad-api/src/main/java/org/dateroad/point/event/pointEventListener.java b/dateroad-api/src/main/java/org/dateroad/point/event/pointEventListener.java index ddff2aff..478ef356 100644 --- a/dateroad-api/src/main/java/org/dateroad/point/event/pointEventListener.java +++ b/dateroad-api/src/main/java/org/dateroad/point/event/pointEventListener.java @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import org.dateroad.code.FailureCode; import org.dateroad.exception.DateRoadException; +import org.dateroad.point.domain.TransactionType; import org.dateroad.user.domain.User; import org.dateroad.user.repository.UserRepository; import org.springframework.data.redis.connection.stream.MapRecord; @@ -22,12 +23,23 @@ public class pointEventListener implements StreamListener message) { Map map = message.getValue(); Long userId = Long.valueOf(map.get("userId")); + TransactionType type = TransactionType.valueOf(map.get("type")); User user = getUser(userId); - int point = Integer.parseInt(map.get("point")); // 감소시킬 포인트 - user.setTotalPoint(user.getTotalPoint() - point); + int point = Integer.parseInt(map.get("point")); + switch (type) { + case POINT_GAINED: + user.setTotalPoint(user.getTotalPoint() + point); + break; + case POINT_USED: + user.setTotalPoint(user.getTotalPoint() - point); + break; + default: + throw new IllegalArgumentException("잘못된 TransactionType: " + type); + } userRepository.save(user); } + private User getUser(Long userId) { return userRepository.findById(userId).orElseThrow( () -> new DateRoadException(FailureCode.USER_NOT_FOUND) From 1df1ad1209d58cf2368b62419d0634acdf66d3db Mon Sep 17 00:00:00 2001 From: rlarlgnszx Date: Sat, 13 Jul 2024 05:04:42 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[feat]=20UserId=20=EB=B3=80=EA=B2=BD=20-=20?= =?UTF-8?q?#90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/dateroad/course/api/CourseController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dateroad-api/src/main/java/org/dateroad/course/api/CourseController.java b/dateroad-api/src/main/java/org/dateroad/course/api/CourseController.java index 4ba0c4c2..bc141d2b 100644 --- a/dateroad-api/src/main/java/org/dateroad/course/api/CourseController.java +++ b/dateroad-api/src/main/java/org/dateroad/course/api/CourseController.java @@ -54,7 +54,7 @@ public ResponseEntity getAllDataAccessCourse( @PostMapping(consumes = {MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity createCourse( - @RequestHeader final Long userId, + @UserId final Long userId, @RequestPart("course") final CourseCreateReq courseCreateReq, @RequestPart("tags") final List tags, @RequestPart("places") final List places, @@ -100,7 +100,7 @@ public ResponseEntity createCourseLike(@UserId final Long userId, } @DeleteMapping("/{courseId}/likes") - public ResponseEntity deleteCourseLike(@RequestHeader final Long userId, + public ResponseEntity deleteCourseLike(@UserId final Long userId, @PathVariable final Long courseId) { courseService.deleteCourseLike(userId, courseId); return ResponseEntity.ok().build();