diff --git a/src/main/java/com/siliconvalley/domain/canvas/domain/Canvas.java b/src/main/java/com/siliconvalley/domain/canvas/domain/Canvas.java index 0928614..7b0a571 100644 --- a/src/main/java/com/siliconvalley/domain/canvas/domain/Canvas.java +++ b/src/main/java/com/siliconvalley/domain/canvas/domain/Canvas.java @@ -1,8 +1,8 @@ package com.siliconvalley.domain.canvas.domain; +import com.siliconvalley.domain.item.subject.domain.Subject; import com.siliconvalley.domain.post.domain.Post; import com.siliconvalley.domain.profile.domain.Profile; -import com.siliconvalley.domain.subject.domain.Subject; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/com/siliconvalley/domain/item/avatar/dao/AvatarItemFindDao.java b/src/main/java/com/siliconvalley/domain/item/avatar/dao/AvatarItemFindDao.java index def928b..82506c6 100644 --- a/src/main/java/com/siliconvalley/domain/item/avatar/dao/AvatarItemFindDao.java +++ b/src/main/java/com/siliconvalley/domain/item/avatar/dao/AvatarItemFindDao.java @@ -4,7 +4,7 @@ import com.siliconvalley.domain.item.item.domain.Item; import com.siliconvalley.domain.item.avatar.dto.AvatarItemResponse; import com.siliconvalley.domain.item.item.exception.ItemNotFoundException; -import com.siliconvalley.global.common.dto.Page.PageResponse; +import com.siliconvalley.global.common.dto.page.PageResponse; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/com/siliconvalley/domain/item/myitem/dao/MyItemFindDao.java b/src/main/java/com/siliconvalley/domain/item/myitem/dao/MyItemFindDao.java index 51c7ff4..0b4bc99 100644 --- a/src/main/java/com/siliconvalley/domain/item/myitem/dao/MyItemFindDao.java +++ b/src/main/java/com/siliconvalley/domain/item/myitem/dao/MyItemFindDao.java @@ -3,7 +3,7 @@ import com.siliconvalley.domain.item.myitem.domain.MyItem; import com.siliconvalley.domain.item.myitem.dto.MyAvatarItemResponse; import com.siliconvalley.domain.item.myitem.dto.MySubjectItemResponse; -import com.siliconvalley.global.common.dto.Page.PageResponse; +import com.siliconvalley.global.common.dto.page.PageResponse; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/com/siliconvalley/domain/item/subject/dao/SubjectItemFindDao.java b/src/main/java/com/siliconvalley/domain/item/subject/dao/SubjectItemFindDao.java index fd4ddac..dfee6e5 100644 --- a/src/main/java/com/siliconvalley/domain/item/subject/dao/SubjectItemFindDao.java +++ b/src/main/java/com/siliconvalley/domain/item/subject/dao/SubjectItemFindDao.java @@ -4,7 +4,7 @@ import com.siliconvalley.domain.item.item.dao.ItemRepository; import com.siliconvalley.domain.item.item.domain.Item; import com.siliconvalley.domain.item.subject.dto.SubjectItemResponse; -import com.siliconvalley.global.common.dto.Page.PageResponse; +import com.siliconvalley.global.common.dto.page.PageResponse; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/com/siliconvalley/domain/member/domain/Member.java b/src/main/java/com/siliconvalley/domain/member/domain/Member.java index a9a24aa..511336f 100644 --- a/src/main/java/com/siliconvalley/domain/member/domain/Member.java +++ b/src/main/java/com/siliconvalley/domain/member/domain/Member.java @@ -34,7 +34,7 @@ public class Member { @Column(name = "create_at", nullable = false, updatable = false) private LocalDateTime createAt; - @OneToMany(mappedBy = "member") + @OneToMany(mappedBy = "member", orphanRemoval = true) private List profileList = new ArrayList<>(); @Builder diff --git a/src/main/java/com/siliconvalley/domain/point/application/PointManagementService.java b/src/main/java/com/siliconvalley/domain/point/application/PointManagementService.java new file mode 100644 index 0000000..73d9a35 --- /dev/null +++ b/src/main/java/com/siliconvalley/domain/point/application/PointManagementService.java @@ -0,0 +1,28 @@ +package com.siliconvalley.domain.point.application; + +import com.siliconvalley.domain.point.domain.Point; +import com.siliconvalley.domain.point.dto.PointResponse; +import com.siliconvalley.domain.profile.dao.ProfileFindDao; +import com.siliconvalley.domain.profile.domain.Profile; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional +@RequiredArgsConstructor +public class PointManagementService { + + private final ProfileFindDao profileFindDao; + + public PointResponse getPoint(Long profileId) { + Profile profile = profileFindDao.findById(profileId); + return new PointResponse(profile.getPoint()); + } + + public void updatePoint(Long profileId, Long newPointValue) { + Profile profile = profileFindDao.findById(profileId); + Point point = profile.getPoint(); + point.updatePoint(newPointValue); + } +} diff --git a/src/main/java/com/siliconvalley/domain/point/domain/Point.java b/src/main/java/com/siliconvalley/domain/point/domain/Point.java new file mode 100644 index 0000000..a3fef01 --- /dev/null +++ b/src/main/java/com/siliconvalley/domain/point/domain/Point.java @@ -0,0 +1,43 @@ +package com.siliconvalley.domain.point.domain; + +import com.siliconvalley.domain.profile.domain.Profile; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Entity +@Table(name = "point") +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Point { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "point") + private Long point; + + @OneToOne + @JoinColumn(name = "profile_id") + private Profile profile; + + @Builder + public Point(Long point, Profile profile) { + this.point = point; + this.profile = profile; + } + + public void setProfile(Profile profile) { + this.profile = profile; + } + + public void updatePoint(Long newPointValue) { + if (newPointValue != null) { + this.point = newPointValue; + } + } +} diff --git a/src/main/java/com/siliconvalley/domain/point/dto/PointResponse.java b/src/main/java/com/siliconvalley/domain/point/dto/PointResponse.java new file mode 100644 index 0000000..871321e --- /dev/null +++ b/src/main/java/com/siliconvalley/domain/point/dto/PointResponse.java @@ -0,0 +1,19 @@ +package com.siliconvalley.domain.point.dto; + +import com.siliconvalley.domain.point.domain.Point; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class PointResponse { + + private Long id; + private Long point; + + public PointResponse(Point point) { + this.id = point.getId(); + this.point = point.getPoint(); + } +} diff --git a/src/main/java/com/siliconvalley/domain/profile/api/ProfileApi.java b/src/main/java/com/siliconvalley/domain/profile/api/ProfileApi.java index 9129fc0..c1c8b7b 100644 --- a/src/main/java/com/siliconvalley/domain/profile/api/ProfileApi.java +++ b/src/main/java/com/siliconvalley/domain/profile/api/ProfileApi.java @@ -2,6 +2,7 @@ import com.siliconvalley.domain.item.myitem.application.MyItemCreateService; import com.siliconvalley.domain.item.myitem.dao.MyItemFindDao; +import com.siliconvalley.domain.point.application.PointManagementService; import com.siliconvalley.domain.profile.application.ProfileManagementService; import com.siliconvalley.domain.profile.dao.ProfileFindDao; import com.siliconvalley.domain.profile.dto.ProfileCreateOrUpdate; @@ -25,6 +26,7 @@ public class ProfileApi { private final ProfileManagementService profileManagementService; private final MyItemFindDao myItemFindDao; private final MyItemCreateService myItemCreateService; + private final PointManagementService pointManagementService; @PostMapping public Response createProfile( @@ -74,4 +76,20 @@ public Response purchaseSubjectItem( ) { return Response.of(CommonCode.SUCCESS_CREATE, myItemCreateService.createMyItem(profileId, itemId, category)); } + + @GetMapping("/{profileId}/points") + public Response getPoint( + @PathVariable(name = "profileId") Long profileId + ) { + return Response.of(CommonCode.GOOD_REQUEST, pointManagementService.getPoint(profileId)); + } + + @PatchMapping("/{profileId}/points/{newPointValue}") + public Response updatePoint( + @PathVariable(name = "profileId") Long profileId, + @PathVariable(name = "newPointValue") Long newPointValue + ) { + pointManagementService.updatePoint(profileId, newPointValue); + return Response.of(CommonCode.SUCCESS_UPDATE); + } } diff --git a/src/main/java/com/siliconvalley/domain/profile/application/ProfileManagementService.java b/src/main/java/com/siliconvalley/domain/profile/application/ProfileManagementService.java index 79c8ce0..143bf12 100644 --- a/src/main/java/com/siliconvalley/domain/profile/application/ProfileManagementService.java +++ b/src/main/java/com/siliconvalley/domain/profile/application/ProfileManagementService.java @@ -1,7 +1,6 @@ package com.siliconvalley.domain.profile.application; import com.siliconvalley.domain.member.dao.MemberFindDao; -import com.siliconvalley.domain.member.domain.Member; import com.siliconvalley.domain.profile.dao.ProfileFindDao; import com.siliconvalley.domain.profile.dao.ProfileRepository; import com.siliconvalley.domain.profile.domain.Profile; @@ -22,7 +21,9 @@ public class ProfileManagementService { private final ProfileFindDao profileFindDao; public Profile createProfile(final String memberId, final ProfileCreateOrUpdate dto) { - return profileRepository.save(dto.toEntity(memberFindDao.findById(memberId))); + Profile profile = dto.toEntity(memberFindDao.findById(memberId)); + profile.setPoint(profile.buildPoint()); + return profileRepository.save(profile); } public ProfileResponse updateProfile(final Long profileId, final ProfileCreateOrUpdate dto) { diff --git a/src/main/java/com/siliconvalley/domain/profile/domain/Profile.java b/src/main/java/com/siliconvalley/domain/profile/domain/Profile.java index b35bfb1..d23b3f0 100644 --- a/src/main/java/com/siliconvalley/domain/profile/domain/Profile.java +++ b/src/main/java/com/siliconvalley/domain/profile/domain/Profile.java @@ -2,6 +2,7 @@ import com.siliconvalley.domain.canvas.domain.Canvas; import com.siliconvalley.domain.member.domain.Member; +import com.siliconvalley.domain.point.domain.Point; import com.siliconvalley.domain.post.domain.Post; import lombok.AccessLevel; import lombok.Builder; @@ -39,6 +40,9 @@ public class Profile { @OneToMany(mappedBy = "profile", orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) private List postList = new ArrayList<>(); + @OneToOne(mappedBy = "profile", orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) + private Point point; + @Builder public Profile(String profileName, String profileImage,Member member) { this.profileName = profileName; @@ -54,6 +58,17 @@ public void addPost(Post post){ this.postList.add(post); } + public void setPoint(Point point) { + this.point = point; + point.setProfile(this); + } + + public Point buildPoint() { + return Point.builder() + .point(0L) + .build(); + } + public void updateProfile( final String profileName, final String profileImage) { diff --git a/src/main/java/com/siliconvalley/domain/subject/domain/Subject.java b/src/main/java/com/siliconvalley/domain/subject/domain/Subject.java deleted file mode 100644 index e94f4a4..0000000 --- a/src/main/java/com/siliconvalley/domain/subject/domain/Subject.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.siliconvalley.domain.subject.domain; - -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -import javax.persistence.*; - -@Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@Slf4j -@Entity -@Table(name = "subject") -public class Subject { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id") - private Long id; - - @Column(name = "subject_name", nullable = false) - private String subjectName; - - @Column(name = "subject_image") - private String subjectImage; - -} diff --git a/src/main/java/com/siliconvalley/global/common/code/CommonCode.java b/src/main/java/com/siliconvalley/global/common/code/CommonCode.java index ce289d3..a8476e5 100644 --- a/src/main/java/com/siliconvalley/global/common/code/CommonCode.java +++ b/src/main/java/com/siliconvalley/global/common/code/CommonCode.java @@ -5,6 +5,8 @@ public enum CommonCode implements ResponseCode{ GOOD_REQUEST(200, "올바른 요청입니다.", HttpStatus.OK), SUCCESS_CREATE(201, "생성 성공했습니다.", HttpStatus.CREATED), + SUCCESS_UPDATE(204, "수정 완료했습니다.", HttpStatus.NO_CONTENT), + SUCCESS_DELETE(204, "삭제 완료했습니다.", HttpStatus.NO_CONTENT), VALIDATION_FAIL(400, "입력값 검증이 실패하였습니다.", HttpStatus.BAD_REQUEST), BAD_REQUEST(400, "잘못된 요청입니다.", HttpStatus.BAD_REQUEST), ILLEGAL_REQUEST(422, "잘못된 데이터가 포함된 요청입니다.", HttpStatus.UNPROCESSABLE_ENTITY); diff --git a/src/main/java/com/siliconvalley/global/common/dto/Response.java b/src/main/java/com/siliconvalley/global/common/dto/Response.java index d548a8a..d0ab82b 100644 --- a/src/main/java/com/siliconvalley/global/common/dto/Response.java +++ b/src/main/java/com/siliconvalley/global/common/dto/Response.java @@ -42,5 +42,19 @@ public static Response of(ResponseCode responseCode, T content) { return response; } + + public static Response of(ResponseCode responseCode) { + Response response = new Response<>(); + + Status status = new Status(); + status.setCode(responseCode.getCode()); + status.setMessage(responseCode.getMessage()); + status.setHttpStatus(responseCode.getHttpStatus()); + + response.setStatus(status); + response.setContent(null); + + return response; + } } diff --git a/src/main/java/com/siliconvalley/global/common/dto/Page/PageInfoResponse.java b/src/main/java/com/siliconvalley/global/common/dto/page/PageInfoResponse.java similarity index 84% rename from src/main/java/com/siliconvalley/global/common/dto/Page/PageInfoResponse.java rename to src/main/java/com/siliconvalley/global/common/dto/page/PageInfoResponse.java index 45645d5..b62f53a 100644 --- a/src/main/java/com/siliconvalley/global/common/dto/Page/PageInfoResponse.java +++ b/src/main/java/com/siliconvalley/global/common/dto/page/PageInfoResponse.java @@ -1,10 +1,9 @@ -package com.siliconvalley.global.common.dto.Page; +package com.siliconvalley.global.common.dto.page; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; @Getter @NoArgsConstructor(access = AccessLevel.PRIVATE) diff --git a/src/main/java/com/siliconvalley/global/common/dto/Page/PageResponse.java b/src/main/java/com/siliconvalley/global/common/dto/page/PageResponse.java similarity index 87% rename from src/main/java/com/siliconvalley/global/common/dto/Page/PageResponse.java rename to src/main/java/com/siliconvalley/global/common/dto/page/PageResponse.java index 8aa6fe2..b0f783e 100644 --- a/src/main/java/com/siliconvalley/global/common/dto/Page/PageResponse.java +++ b/src/main/java/com/siliconvalley/global/common/dto/page/PageResponse.java @@ -1,4 +1,4 @@ -package com.siliconvalley.global.common.dto.Page; +package com.siliconvalley.global.common.dto.page; import lombok.Getter; import org.springframework.data.domain.Page;