Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/main/java/NextLevel/demo/exception/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ public enum ErrorCode {

// option

// follow
CAN_NOT_FOLLOW_SELF(HttpStatus.BAD_REQUEST, "07001","can not follow self"),

// 시발 이게 뭐지? error
SIBAL_WHAT_IS_IT(HttpStatus.INTERNAL_SERVER_ERROR, "05001","알지 모르는 error 발생 : %s");

Expand Down
24 changes: 24 additions & 0 deletions src/main/java/NextLevel/demo/follow/FollowController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package NextLevel.demo.follow;

import NextLevel.demo.common.SuccessResponse;
import NextLevel.demo.util.jwt.JWTUtil;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@Controller
@RequiredArgsConstructor
public class FollowController {

private final FollowService followService;

@PostMapping("/social/follow")
public ResponseEntity follow(@RequestBody @Valid FollowDto dto) {
followService.follow(JWTUtil.getUserIdFromSecurityContext(), dto.getTargetId(), dto.getFollow());
return ResponseEntity.ok().body(new SuccessResponse("success", null));
}

}
15 changes: 15 additions & 0 deletions src/main/java/NextLevel/demo/follow/FollowDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package NextLevel.demo.follow;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@NoArgsConstructor
@Getter
@Setter
public class FollowDto {

private Long targetId;
private Boolean follow;

}
27 changes: 27 additions & 0 deletions src/main/java/NextLevel/demo/follow/FollowEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package NextLevel.demo.follow;

import NextLevel.demo.user.entity.UserEntity;
import jakarta.persistence.*;
import lombok.*;

@Entity
@Table(name = "follow" , uniqueConstraints = {@UniqueConstraint(name="likeUniqueConstraint", columnNames = {"user_id", "target_id"})})
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
public class FollowEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private UserEntity user;

@ManyToOne
@JoinColumn(name = "target_id", nullable = false)
private UserEntity target;

}
14 changes: 14 additions & 0 deletions src/main/java/NextLevel/demo/follow/FollowRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package NextLevel.demo.follow;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.Optional;

public interface FollowRepository extends JpaRepository<FollowEntity, Long> {

@Query("select f from FollowEntity f where f.user.id = :userId and f.target.id = :targetId")
Optional<FollowEntity> findByUserIdAndTargetId(@Param("userId") Long userId, @Param("targetId") Long targetId);

}
41 changes: 41 additions & 0 deletions src/main/java/NextLevel/demo/follow/FollowService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package NextLevel.demo.follow;

import NextLevel.demo.exception.CustomException;
import NextLevel.demo.exception.ErrorCode;
import NextLevel.demo.user.entity.UserEntity;
import NextLevel.demo.user.service.UserValidateService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
@RequiredArgsConstructor
public class FollowService {

private final FollowRepository followRepository;
private final UserValidateService userValidateService;

public void follow(long userId, long targetId, boolean follow) {
if(userId == targetId)
throw new CustomException(ErrorCode.CAN_NOT_FOLLOW_SELF);

UserEntity user = userValidateService.getUserInfoWithAccessToken(userId);
UserEntity targetUser = userValidateService.findUserWithUserId(targetId);
Optional<FollowEntity> followOpt = followRepository.findByUserIdAndTargetId(user.getId(), targetUser.getId());

if(followOpt.isEmpty() && follow) {
followRepository.save(
FollowEntity
.builder()
.user(user)
.target(targetUser)
.build()
);
}
if(followOpt.isPresent() && !follow) {
followRepository.deleteById(followOpt.get().getId());
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class CouponService {

@Transactional
public void addCoupon(RequestAddCouponDto dto) {
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
couponRepository.save(dto.toEntity(user));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public class FundingService {

@Transactional
public void cancelFreeFunding(RequestCancelFundingDto dto) {
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
FreeFundingEntity funding = freeFundingRepository.findById(dto.getId()).orElseThrow(
()->{return new CustomException(ErrorCode.NOT_FOUND, "freeFunding");}
);
Expand All @@ -55,7 +55,7 @@ public void cancelFreeFunding(RequestCancelFundingDto dto) {

@Transactional
public void cancelOptionFunding(RequestCancelFundingDto dto) {
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
OptionFundingEntity funding = optionFundingRepository.findById(dto.getId()).orElseThrow(
()->{return new CustomException(ErrorCode.NOT_FOUND, "optionFunding");}
);
Expand All @@ -68,7 +68,7 @@ public void cancelOptionFunding(RequestCancelFundingDto dto) {

@Transactional
public void optionFunding(@Valid RequestOptionFundingDto dto) {
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
OptionEntity option = optionValidateService.getOption(dto.getOptionId());

OptionFundingEntity entity = dto.toEntity(user, option);
Expand All @@ -93,7 +93,7 @@ public void optionFunding(@Valid RequestOptionFundingDto dto) {

@Transactional
public void freeFunding(@Valid RequestFreeFundingDto dto) {
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
ProjectEntity project = projectValidateService.getProjectEntity(dto.getProjectId());

if(dto.getFreePrice() > user.getPoint())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public void addAnswer(SaveCommunityDto dto) {
ProjectCommunityAskEntity ask = projectCommunityAskRepository.findById(askId).orElseThrow(
()->{return new CustomException(ErrorCode.NOT_FOUND, "community");}
);
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());

projectValidateService.validateAuthor(ask.getProject(), user);

Expand All @@ -49,7 +49,7 @@ public void updateAnswer(SaveCommunityDto dto) {
ProjectCommunityAnswerEntity answer = projectCommunityAnswerRepository.findById(answerId).orElseThrow(
()->{return new CustomException(ErrorCode.NOT_FOUND, "community");}
);
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
projectValidateService.validateAuthor(answer.getAsk().getProject(), user);
answer.update(dto);
}
Expand All @@ -59,7 +59,7 @@ public void deleteAnswer(Long answerId, Long userId) {
ProjectCommunityAnswerEntity answer = projectCommunityAnswerRepository.findById(answerId).orElseThrow(
()->{return new CustomException(ErrorCode.NOT_FOUND, "community");}
);
UserEntity user = userValidateService.getUserInfo(userId);
UserEntity user = userValidateService.getUserInfoWithAccessToken(userId);
projectValidateService.validateAuthor(answer.getAsk().getProject(), user);
answer.getAsk().setNoAnswer();
projectCommunityAnswerRepository.deleteById(answerId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import NextLevel.demo.project.project.entity.ProjectEntity;
import NextLevel.demo.project.project.repository.ProjectDslRepository;
import NextLevel.demo.project.project.repository.ProjectRepository;
import NextLevel.demo.project.story.entity.ProjectStoryEntity;
import NextLevel.demo.project.story.service.ProjectStoryService;
import NextLevel.demo.project.tag.service.TagService;
import NextLevel.demo.project.view.ProjectViewService;
Expand Down Expand Up @@ -53,7 +52,7 @@ public class ProjectService {
@Transactional
public void save(CreateProjectDto dto, ArrayList<Path> imgPaths) {
// user 처리
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
validateUser(user);

if(dto.getTitleImg() == null || dto.getTitleImg().isEmpty())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public class SocialService {
@ImgTransaction
@Transactional
public void create(RequestSocialCreateDto dto, ArrayList<Path> imgPaths) {
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
SocialEntity social = socialRepository.save(dto.toEntity(user));

saveImgs(dto.getImgs(), social, imgPaths);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package NextLevel.demo.user.controller;

import NextLevel.demo.common.SuccessResponse;
import NextLevel.demo.project.project.dto.request.RequestMainPageProjectListDto;
import NextLevel.demo.project.project.service.ProjectService;
import NextLevel.demo.user.dto.LikeDto;
import NextLevel.demo.user.dto.user.request.RequestMyPageProjectListDto;
import NextLevel.demo.user.dto.user.request.RequestUpdatePasswordDto;
Expand Down Expand Up @@ -42,7 +40,7 @@ public class UserController {
public ResponseEntity<?> getUserInfo() {
Long userId = JWTUtil.getUserIdFromSecurityContext();

UserEntity user = userValidateService.getUserInfo(userId);
UserEntity user = userValidateService.getUserInfoWithAccessToken(userId);

ResponseUserInfoDetailDto dto = ResponseUserInfoDetailDto.of(user);

Expand All @@ -57,7 +55,7 @@ public ResponseEntity<?> logout(HttpServletResponse response) {

@GetMapping("/my-point")
public ResponseEntity<?> getUser() {
UserEntity user = userValidateService.getUserInfo(JWTUtil.getUserIdFromSecurityContext());
UserEntity user = userValidateService.getUserInfoWithAccessToken(JWTUtil.getUserIdFromSecurityContext());
return ResponseEntity.status(HttpStatus.OK).body(new SuccessResponse("success", Map.of("point",user.getPoint())));
}

Expand Down
3 changes: 1 addition & 2 deletions src/main/java/NextLevel/demo/user/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import NextLevel.demo.exception.ErrorCode;
import NextLevel.demo.img.service.ImgService;
import NextLevel.demo.img.service.ImgTransaction;
import NextLevel.demo.project.project.dto.response.ResponseProjectListDetailDto;
import NextLevel.demo.project.project.dto.response.ResponseProjectListDto;
import NextLevel.demo.user.dto.user.request.RequestMyPageProjectListDto;
import NextLevel.demo.user.dto.user.request.RequestUpdatePasswordDto;
Expand Down Expand Up @@ -47,7 +46,7 @@ public class UserService {

@Transactional
public UserEntity updateUserInfo(RequestUpdateUserInfoDto dto, HttpServletRequest request, HttpServletResponse response) {
UserEntity oldUser = userValidateService.getUserInfo(dto.getId());
UserEntity oldUser = userValidateService.getUserInfoWithAccessToken(dto.getId());

switch(dto.getName()){
case "email":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,18 @@ public class UserValidateService {
private final UserRepository userRepository;
private final UserDetailRepository userDetailRepository;

public UserEntity getUserInfo(Long userId) {
public UserEntity getUserInfoWithAccessToken(Long userId) {
return userRepository.findUserFullInfoByUserId(userId).orElseThrow(
()->{throw new CustomException(ErrorCode.ACCESS_TOKEN_ERROR);}
);
}

public UserEntity findUserWithUserId(Long userId) {
return userRepository.findUserFullInfoByUserId(userId).orElseThrow(
()->{throw new CustomException(ErrorCode.NOT_FOUND, "user");}
);
}

public Optional<UserDetailEntity> findBySocialProviderAndSocialId(String socialProvider, String socialId) {
return userDetailRepository.findBySocialProviderAndSocialId(socialProvider, socialId);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public void setUp() {
.build();
mockImg = ImgEntity.builder().id(1L).build();

Mockito.lenient().when(userValidateService.getUserInfo(Mockito.anyLong())).thenReturn(mockUser);
Mockito.lenient().when(userValidateService.getUserInfoWithAccessToken(Mockito.anyLong())).thenReturn(mockUser);
Mockito.lenient().when(imgService.saveImg(Mockito.any(), Mockito.any())).thenReturn(mockImg);
Mockito.lenient().when(imgService.updateImg(Mockito.any(),Mockito.any(),Mockito.any())).thenReturn(mockImg);
}
Expand Down
Loading