Skip to content

Commit

Permalink
[feat] DateAccess Create 응답 객체 변경 (For Amplitude) - #279
Browse files Browse the repository at this point in the history
  • Loading branch information
gardening-y committed Sep 22, 2024
1 parent e91ed2d commit 3531174
Show file tree
Hide file tree
Showing 8 changed files with 47 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ public abstract class Constants {
public static final String BEARER = "Bearer ";
public static final String CHARACTER_TYPE = "utf-8";
public static final int COURSE_CREATE_POINT = 100;
public static final int COURSE_OPEN_POINT = 50;
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.dateroad.course.dto.response.CourseCreateRes;
import org.dateroad.course.dto.response.CourseGetAllRes;
import org.dateroad.course.dto.response.CourseAccessGetAllRes;
import org.dateroad.course.dto.response.DateAccessCreateRes;
import org.dateroad.date.dto.response.CourseGetDetailRes;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
Expand Down Expand Up @@ -348,7 +349,7 @@ ResponseEntity<CourseAccessGetAllRes> getAllDataAccessCourse(
responseCode = "500",
description = "서버 내부 오류입니다.",
content = @Content)})
public ResponseEntity<CourseCreateRes> createCourse(
ResponseEntity<CourseCreateRes> createCourse(
@UserId final Long userId,
@RequestPart("course") @Valid final CourseCreateReq courseCreateReq,
@RequestPart("tags") @Validated @Size(min = 1, max = 3) final List<TagCreateReq> tags,
Expand Down Expand Up @@ -467,7 +468,7 @@ ResponseEntity<CourseAccessGetAllRes> getMyCourses(
responseCode = "500",
description = "서버 내부 오류입니다.",
content = @Content)})
ResponseEntity<Void> openCourse(
ResponseEntity<DateAccessCreateRes> openCourse(
@Parameter(hidden = true)
@UserId final Long userId,
@PathVariable final Long courseId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.dateroad.course.dto.response.CourseCreateRes;
import org.dateroad.course.dto.response.CourseGetAllRes;
import org.dateroad.course.dto.response.CourseAccessGetAllRes;
import org.dateroad.course.dto.response.DateAccessCreateRes;
import org.dateroad.course.service.AsyncService;
import org.dateroad.course.service.CourseService;
import org.dateroad.date.dto.response.CourseGetDetailRes;
Expand All @@ -33,7 +34,6 @@
@RequiredArgsConstructor
public class CourseController implements CourseApi {
private final CourseService courseService;
private final AsyncService asyncService;

@GetMapping
public ResponseEntity<CourseGetAllRes> getAllCourses(
Expand Down Expand Up @@ -81,13 +81,13 @@ public ResponseEntity<CourseAccessGetAllRes> getMyCourses(final @UserId Long use
}

@PostMapping("/{courseId}/date-access")
public ResponseEntity<Void> openCourse(
public ResponseEntity<DateAccessCreateRes> openCourse(
@UserId final Long userId,
@PathVariable final Long courseId,
@RequestBody @Valid final PointUseReq pointUseReq
) {
courseService.openCourse(userId, courseId, pointUseReq);
return ResponseEntity.ok().build();
DateAccessCreateRes dateAccessCreateRes = courseService.openCourse(userId, courseId, pointUseReq);
return ResponseEntity.ok(dateAccessCreateRes);
}

@GetMapping("/{courseId}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.dateroad.common.Constants;
import org.dateroad.point.domain.TransactionType;

@Getter
Expand All @@ -15,7 +16,7 @@
public class PointUseReq {
@Builder.Default
@Min(0)
private final int point = 100;
private final int point = Constants.COURSE_CREATE_POINT;
@Builder.Default
private final TransactionType type = TransactionType.POINT_GAINED;
@Builder.Default
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import lombok.AccessLevel;
import lombok.Builder;

@Builder(access = AccessLevel.PROTECTED)
@Builder(access = AccessLevel.PRIVATE)
public record CourseCreateRes(
Long courseId,
int userPoint,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.dateroad.course.dto.response;

import lombok.AccessLevel;
import lombok.Builder;

@Builder(access = AccessLevel.PRIVATE)
public record DateAccessCreateRes(
int userPoint,
int userFreeRemained,
Long userPurchaseCount
) {
public static DateAccessCreateRes of(final int userPoint, final int userFreeRemained, final Long userPurchaseCount) {
return DateAccessCreateRes.builder()
.userPoint(userPoint)
.userFreeRemained(userFreeRemained)
.userPurchaseCount(userPurchaseCount)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,7 @@
import org.dateroad.course.dto.request.CoursePlaceGetReq;
import org.dateroad.course.dto.request.PointUseReq;
import org.dateroad.course.dto.request.TagCreateReq;
import org.dateroad.course.dto.response.CourseCreateRes;
import org.dateroad.course.dto.response.CourseDtoGetRes;
import org.dateroad.course.dto.response.CourseGetAllRes;
import org.dateroad.course.dto.response.CourseAccessGetAllRes;
import org.dateroad.course.dto.response.*;
import org.dateroad.date.domain.Course;
import org.dateroad.date.dto.response.CourseGetDetailRes;
import org.dateroad.date.repository.CourseRepository;
Expand Down Expand Up @@ -222,13 +219,25 @@ public void handleCourseCreatedEvent(CourseCreateEvent event) {
}

@Transactional
public void openCourse(final Long userId, final Long courseId, final PointUseReq pointUseReq) {
public DateAccessCreateRes openCourse(final Long userId, final Long courseId, final PointUseReq pointUseReq) {
Course course = getCourse(courseId);
User user = getUser(userId);
validateUserAndCourse(user, course);
CoursePaymentType coursePaymentType = validateUserFreeOrPoint(user, pointUseReq.getPoint());
processCoursePayment(coursePaymentType, userId, pointUseReq);
dateAccessRepository.save(DateAccess.create(course, user));
Long userPurchaseCount = dateAccessRepository.countCoursesByUserId(userId);
return calculateUserInfo(coursePaymentType, user.getTotalPoint(), user.getFree(), userPurchaseCount);
}

private DateAccessCreateRes calculateUserInfo(CoursePaymentType coursePaymentType, int userTotalPoint, int userFree, Long userPurchaseCount) {
if (coursePaymentType == CoursePaymentType.FREE) {
return DateAccessCreateRes.of(userTotalPoint, userFree-1, userPurchaseCount);

} else if (coursePaymentType == CoursePaymentType.POINT) {
return DateAccessCreateRes.of(userTotalPoint - Constants.COURSE_OPEN_POINT, userFree, userPurchaseCount);
}
return DateAccessCreateRes.of(userTotalPoint - Constants.COURSE_OPEN_POINT, userFree, userPurchaseCount);
}

private CoursePaymentType validateUserFreeOrPoint(final User user, final int requiredPoints) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import java.util.List;
import org.dateroad.date.domain.Course;
import org.dateroad.dateAccess.domain.DateAccess;
import org.dateroad.user.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
Expand All @@ -26,4 +25,7 @@ public interface DateAccessRepository extends JpaRepository<DateAccess,Long> {
@Modifying
@Query("DELETE FROM UserTag ut WHERE ut.user.id = :userId")
void deleteAllByUserId(@Param("userId") Long userId);

@Query("SELECT COUNT(da.course) FROM DateAccess da WHERE da.user.id = :userId")
Long countCoursesByUserId(@Param("userId") Long userId);
}

0 comments on commit 3531174

Please sign in to comment.