Skip to content

Commit

Permalink
Merge pull request #215 from team-winey/feat/#210
Browse files Browse the repository at this point in the history
[Feat] 바뀐 λͺ©ν‘œμ²΄κ³„λ₯Ό λ°˜μ˜ν•œ κ³Όμ†ŒλΉ„ API κ΅¬ν˜„
  • Loading branch information
alpha-kwhn authored Jan 11, 2024
2 parents be94ae1 + 728baa7 commit a5e78d3
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 20 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ out/

### application.yml ###
application.yaml
application.yml

### DS_Store
.DS_Store
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import lombok.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Nullable;
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.NotNull;

Expand All @@ -16,4 +17,10 @@ public class CreateFeedRequestDto {
private MultipartFile feedImage;
@NotNull @DecimalMax(value = "9999999")
private Long feedMoney;
@Nullable
private String feedType = null;

public void setFeedType(String type) {
this.feedType = type;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public class GetFeedResponseDto {
private String nickName;
private int writerLevel;
// μ—¬κΈ°κΉŒμ₯
private String feedType;
private String feedTitle;
private String feedImage;
private Long feedMoney;
Expand All @@ -28,8 +29,8 @@ public class GetFeedResponseDto {
private LocalDateTime createdAt;


public static GetFeedResponseDto of(Long feedId, Long userId, String nickName, int writerLevel, String feedTitle, String feedImage,
public static GetFeedResponseDto of(Long feedId, Long userId, String nickName, int writerLevel, String feedType, String feedTitle, String feedImage,
Long feedMoney, Boolean isLiked, Long likes, Long comments, String timeAgo, LocalDateTime createdAt) {
return new GetFeedResponseDto(feedId, userId, nickName, writerLevel, feedTitle, feedImage, feedMoney, isLiked, likes, comments, timeAgo, createdAt);
return new GetFeedResponseDto(feedId, userId, nickName, writerLevel, feedType, feedTitle, feedImage, feedMoney, isLiked, likes, comments, timeAgo, createdAt);
}
}
19 changes: 8 additions & 11 deletions src/main/java/org/winey/server/domain/feed/Feed.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,8 @@
package org.winey.server.domain.feed;

import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.*;

import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
Expand Down Expand Up @@ -40,6 +32,10 @@ public class Feed extends AuditingTimeEntity {
@Column(nullable = false)
private String feedImage;

@Column
@Enumerated(EnumType.STRING)
private FeedType feedType;

@Column(nullable = false)
private Long feedMoney;

Expand All @@ -54,11 +50,12 @@ public class Feed extends AuditingTimeEntity {
private List<Comment> comments;

@Builder
public Feed(User user, String feedTitle, String feedImage, Long feedMoney) {
public Feed(User user, String feedTitle, String feedImage, Long feedMoney, FeedType feedType) {
this.user = user;
this.feedTitle = feedTitle;
this.feedImage = feedImage;
this.feedMoney = feedMoney;
this.feedType = feedType;
this.goal = null;
}
}
23 changes: 23 additions & 0 deletions src/main/java/org/winey/server/domain/feed/FeedType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.winey.server.domain.feed;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Objects;

@Getter
@AllArgsConstructor
public enum FeedType {

SAVE("SAVE"),
CONSUME("CONSUME");

private final String stringVal;

public static boolean isValidFeedType(String type) {
for (FeedType feed : FeedType.values()) {
if (Objects.equals(feed.getStringVal(), type)) return true;
}
return false;
}
}
2 changes: 1 addition & 1 deletion src/main/java/org/winey/server/domain/user/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,8 @@ public void increaseSavedAmountAndCount(Long money) {
}

public void decreaseSavedAmountAndCount(Long money) {
this.savedCount -= money;
this.savedCount -= 1;
this.savedAmount -= money;
}

public String getFcmToken() {
Expand Down
1 change: 1 addition & 0 deletions src/main/java/org/winey/server/exception/Error.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public enum Error {
LOGIN_SUCCESS(HttpStatus.OK, "λ‘œκ·ΈμΈμ— μ„±κ³΅ν–ˆμŠ΅λ‹ˆλ‹€."),
INVALID_PASSWORD_EXCEPTION(HttpStatus.BAD_REQUEST, "잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έκ°€ μž…λ ₯λμŠ΅λ‹ˆλ‹€."),
NOT_FOUND_IMAGE_EXCEPTION(HttpStatus.BAD_REQUEST, "잘λͺ»λœ 이미지 νŒŒμΌμž…λ‹ˆλ‹€"),
INVALID_FEEDTYPE(HttpStatus.BAD_REQUEST, "잘λͺ»λœ ν”Όλ“œμœ ν˜• μž…λ‹ˆλ‹€"),
VALIDATION_REQUEST_MISSING_EXCEPTION(HttpStatus.BAD_REQUEST, "μš”μ²­κ°’μ΄ μž…λ ₯λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€."),
VALIDATION_REQUEST_HEADER_MISSING_EXCEPTION(HttpStatus.BAD_REQUEST, "μš”μ²­ 헀더값이 μž…λ ₯λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€."),
VALIDATION_REQUEST_PARAMETER_MISSING_EXCEPTION(HttpStatus.BAD_REQUEST, "μš”μ²­ νŒŒλΌλ―Έν„°κ°’μ΄ μž…λ ₯λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€."),
Expand Down
26 changes: 20 additions & 6 deletions src/main/java/org/winey/server/service/FeedService.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,13 @@
import org.winey.server.controller.response.feed.GetFeedResponseDto;
import org.winey.server.domain.block.BlockUser;
import org.winey.server.domain.feed.Feed;
import org.winey.server.domain.feed.FeedType;
import org.winey.server.domain.notification.NotiType;
import org.winey.server.domain.notification.Notification;
import org.winey.server.domain.user.User;
import org.winey.server.domain.user.UserLevel;
import org.winey.server.exception.Error;
import org.winey.server.exception.model.BadRequestException;
import org.winey.server.exception.model.NotFoundException;
import org.winey.server.exception.model.UnauthorizedException;
import org.winey.server.infrastructure.BlockUserRepository;
Expand All @@ -50,19 +52,26 @@ public CreateFeedResponseDto createFeed(CreateFeedRequestDto request, Long userI
User presentUser = userRepository.findByUserId(userId)
.orElseThrow(() -> new NotFoundException(Error.NOT_FOUND_USER_EXCEPTION, Error.NOT_FOUND_USER_EXCEPTION.getMessage()));

// 2. ν”Όλ“œλ₯Ό μƒμ„±ν•œλ‹€.
// 2. ν”Όλ“œ νƒ€μž… 값을 받아와 μ˜¬λ°”λ₯Έ ν”Όλ“œμœ ν˜•μΈκ°€ νŒλ³„
String feedType = request.getFeedType();
// if (!FeedType.isValidFeedType(feedType))
// throw new BadRequestException(Error.INVALID_FEEDTYPE, Error.INVALID_FEEDTYPE.getMessage());

// 3. ν”Όλ“œλ₯Ό μƒμ„±ν•œλ‹€.
Feed feed = Feed.builder()
.feedImage(imageUrl)
.feedType(feedType == null || feedType.isEmpty() ? null : FeedType.valueOf(feedType))
.feedMoney(request.getFeedMoney())
.feedTitle(request.getFeedTitle())
.user(presentUser)
.build();

feedRepository.save(feed);

// 3. μœ μ €μ˜ λˆ„μ  μ ˆμ•½ κΈˆμ•‘, λˆ„μ  μ ˆμ•½ 횟수λ₯Ό μ—…λ°μ΄νŠΈν•œλ‹€.
presentUser.increaseSavedAmountAndCount(feed.getFeedMoney());
// 4. μœ μ €μ˜ ν”Όλ“œ μœ ν˜•μ΄ μ ˆμ•½μΈ 경우 λˆ„μ  μ ˆμ•½ κΈˆμ•‘κ³Ό λˆ„μ  μ ˆμ•½ ν”Όλ“œ 개수 μ—…λ°μ΄νŠΈν•œλ‹€.
if (Objects.equals(feedType, "SAVE")) presentUser.increaseSavedAmountAndCount(feed.getFeedMoney());

// 4. λ ˆλ²¨μ—…μ„ μ²΄ν¬ν•œλ‹€.
// 5. λ ˆλ²¨μ—…μ„ μ²΄ν¬ν•œλ‹€.
UserLevel newUserLevel = UserLevel.calculateUserLevel(presentUser.getSavedAmount(), presentUser.getSavedCount());

if (presentUser.getUserLevel() != newUserLevel) {
Expand Down Expand Up @@ -103,8 +112,10 @@ public String deleteFeed(Long userId, Long feedId) {
throw new UnauthorizedException(Error.DELETE_UNAUTHORIZED, Error.DELETE_UNAUTHORIZED.getMessage()); // μ‚­μ œν•˜λŠ” μ‚¬λžŒ μ•„λ‹ˆλ©΄ μ‚­μ œ λͺ»ν•¨ 처리.
}

// 4. μœ μ €μ˜ λˆ„μ  μ ˆμ•½ κΈˆμ•‘, λˆ„μ  μ ˆμ•½ 횟수λ₯Ό μ—…λ°μ΄νŠΈν•œλ‹€.
presentUser.decreaseSavedAmountAndCount(wantDeleteFeed.getFeedMoney());
// 4. μ ˆμ•½ ν”Όλ“œκ°€ μ‚­μ œλ˜λ©΄ μœ μ €μ˜ λˆ„μ  μ ˆμ•½ κΈˆμ•‘κ³Ό λˆ„μ  μ ˆμ•½ ν”Όλ“œ 개수 κ°μ†Œ
if (wantDeleteFeed.getFeedType() == FeedType.SAVE) {
presentUser.decreaseSavedAmountAndCount(wantDeleteFeed.getFeedMoney());
}

// 5. λ ˆλ²¨λ‹€μš΄μ„ μ²΄ν¬ν•œλ‹€.
UserLevel newUserLevel = UserLevel.calculateUserLevel(presentUser.getSavedAmount(), presentUser.getSavedCount());
Expand Down Expand Up @@ -161,6 +172,7 @@ public GetAllFeedResponseDto getAllFeed(int page, Long userId) {
feed.getUser().getUserId(),
feed.getUser().getNickname(),
feed.getUser().getUserLevel().getLevelNumber(),
feed.getFeedType() == null ? null : feed.getFeedType().getStringVal(),
feed.getFeedTitle(),
feed.getFeedImage(),
feed.getFeedMoney(),
Expand All @@ -185,6 +197,7 @@ public GetAllFeedResponseDto getMyFeed(int page, Long userId) {
myFeed.getUser().getUserId(),
myFeed.getUser().getNickname(),
myFeed.getUser().getUserLevel().getLevelNumber(),
myFeed.getFeedType() == null ? null : myFeed.getFeedType().getStringVal(),
myFeed.getFeedTitle(),
myFeed.getFeedImage(),
myFeed.getFeedMoney(),
Expand Down Expand Up @@ -218,6 +231,7 @@ public GetFeedDetailResponseDto getFeedDetail(Long feedId, Long userId) {
detailFeed.getUser().getUserId(),
detailFeed.getUser().getNickname(),
detailFeed.getUser().getUserLevel().getLevelNumber(),
detailFeed.getFeedType() == null ? null : detailFeed.getFeedType().getStringVal(),
detailFeed.getFeedTitle(),
detailFeed.getFeedImage(),
detailFeed.getFeedMoney(),
Expand Down

0 comments on commit a5e78d3

Please sign in to comment.