Skip to content

Commit da19207

Browse files
authored
Merge pull request #41 from DMU-NextLevel/follow
feat : follow
2 parents f123552 + c47649c commit da19207

File tree

15 files changed

+145
-19
lines changed

15 files changed

+145
-19
lines changed

src/main/java/NextLevel/demo/exception/ErrorCode.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public enum ErrorCode {
3838

3939
// option
4040

41+
// follow
42+
CAN_NOT_FOLLOW_SELF(HttpStatus.BAD_REQUEST, "07001","can not follow self"),
43+
4144
// 시발 이게 뭐지? error
4245
SIBAL_WHAT_IS_IT(HttpStatus.INTERNAL_SERVER_ERROR, "05001","알지 모르는 error 발생 : %s");
4346

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package NextLevel.demo.follow;
2+
3+
import NextLevel.demo.common.SuccessResponse;
4+
import NextLevel.demo.util.jwt.JWTUtil;
5+
import jakarta.validation.Valid;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.http.ResponseEntity;
8+
import org.springframework.stereotype.Controller;
9+
import org.springframework.web.bind.annotation.PostMapping;
10+
import org.springframework.web.bind.annotation.RequestBody;
11+
12+
@Controller
13+
@RequiredArgsConstructor
14+
public class FollowController {
15+
16+
private final FollowService followService;
17+
18+
@PostMapping("/social/follow")
19+
public ResponseEntity follow(@RequestBody @Valid FollowDto dto) {
20+
followService.follow(JWTUtil.getUserIdFromSecurityContext(), dto.getTargetId(), dto.getFollow());
21+
return ResponseEntity.ok().body(new SuccessResponse("success", null));
22+
}
23+
24+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package NextLevel.demo.follow;
2+
3+
import lombok.Getter;
4+
import lombok.NoArgsConstructor;
5+
import lombok.Setter;
6+
7+
@NoArgsConstructor
8+
@Getter
9+
@Setter
10+
public class FollowDto {
11+
12+
private Long targetId;
13+
private Boolean follow;
14+
15+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package NextLevel.demo.follow;
2+
3+
import NextLevel.demo.user.entity.UserEntity;
4+
import jakarta.persistence.*;
5+
import lombok.*;
6+
7+
@Entity
8+
@Table(name = "follow" , uniqueConstraints = {@UniqueConstraint(name="likeUniqueConstraint", columnNames = {"user_id", "target_id"})})
9+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
10+
@Builder
11+
@AllArgsConstructor(access = AccessLevel.PROTECTED)
12+
@Getter
13+
public class FollowEntity {
14+
15+
@Id
16+
@GeneratedValue(strategy = GenerationType.IDENTITY)
17+
private Long id;
18+
19+
@ManyToOne
20+
@JoinColumn(name = "user_id", nullable = false)
21+
private UserEntity user;
22+
23+
@ManyToOne
24+
@JoinColumn(name = "target_id", nullable = false)
25+
private UserEntity target;
26+
27+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package NextLevel.demo.follow;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
import org.springframework.data.jpa.repository.Query;
5+
import org.springframework.data.repository.query.Param;
6+
7+
import java.util.Optional;
8+
9+
public interface FollowRepository extends JpaRepository<FollowEntity, Long> {
10+
11+
@Query("select f from FollowEntity f where f.user.id = :userId and f.target.id = :targetId")
12+
Optional<FollowEntity> findByUserIdAndTargetId(@Param("userId") Long userId, @Param("targetId") Long targetId);
13+
14+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package NextLevel.demo.follow;
2+
3+
import NextLevel.demo.exception.CustomException;
4+
import NextLevel.demo.exception.ErrorCode;
5+
import NextLevel.demo.user.entity.UserEntity;
6+
import NextLevel.demo.user.service.UserValidateService;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.stereotype.Service;
9+
10+
import java.util.Optional;
11+
12+
@Service
13+
@RequiredArgsConstructor
14+
public class FollowService {
15+
16+
private final FollowRepository followRepository;
17+
private final UserValidateService userValidateService;
18+
19+
public void follow(long userId, long targetId, boolean follow) {
20+
if(userId == targetId)
21+
throw new CustomException(ErrorCode.CAN_NOT_FOLLOW_SELF);
22+
23+
UserEntity user = userValidateService.getUserInfoWithAccessToken(userId);
24+
UserEntity targetUser = userValidateService.findUserWithUserId(targetId);
25+
Optional<FollowEntity> followOpt = followRepository.findByUserIdAndTargetId(user.getId(), targetUser.getId());
26+
27+
if(followOpt.isEmpty() && follow) {
28+
followRepository.save(
29+
FollowEntity
30+
.builder()
31+
.user(user)
32+
.target(targetUser)
33+
.build()
34+
);
35+
}
36+
if(followOpt.isPresent() && !follow) {
37+
followRepository.deleteById(followOpt.get().getId());
38+
}
39+
}
40+
41+
}

src/main/java/NextLevel/demo/funding/service/CouponService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class CouponService {
2323

2424
@Transactional
2525
public void addCoupon(RequestAddCouponDto dto) {
26-
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
26+
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
2727
couponRepository.save(dto.toEntity(user));
2828
}
2929

src/main/java/NextLevel/demo/funding/service/FundingService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public class FundingService {
4343

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

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

6969
@Transactional
7070
public void optionFunding(@Valid RequestOptionFundingDto dto) {
71-
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
71+
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
7272
OptionEntity option = optionValidateService.getOption(dto.getOptionId());
7373

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

9494
@Transactional
9595
public void freeFunding(@Valid RequestFreeFundingDto dto) {
96-
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
96+
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
9797
ProjectEntity project = projectValidateService.getProjectEntity(dto.getProjectId());
9898

9999
if(dto.getFreePrice() > user.getPoint())

src/main/java/NextLevel/demo/project/community/service/ProjectCommunityAnswerService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public void addAnswer(SaveCommunityDto dto) {
3030
ProjectCommunityAskEntity ask = projectCommunityAskRepository.findById(askId).orElseThrow(
3131
()->{return new CustomException(ErrorCode.NOT_FOUND, "community");}
3232
);
33-
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
33+
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
3434

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

@@ -49,7 +49,7 @@ public void updateAnswer(SaveCommunityDto dto) {
4949
ProjectCommunityAnswerEntity answer = projectCommunityAnswerRepository.findById(answerId).orElseThrow(
5050
()->{return new CustomException(ErrorCode.NOT_FOUND, "community");}
5151
);
52-
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
52+
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
5353
projectValidateService.validateAuthor(answer.getAsk().getProject(), user);
5454
answer.update(dto);
5555
}
@@ -59,7 +59,7 @@ public void deleteAnswer(Long answerId, Long userId) {
5959
ProjectCommunityAnswerEntity answer = projectCommunityAnswerRepository.findById(answerId).orElseThrow(
6060
()->{return new CustomException(ErrorCode.NOT_FOUND, "community");}
6161
);
62-
UserEntity user = userValidateService.getUserInfo(userId);
62+
UserEntity user = userValidateService.getUserInfoWithAccessToken(userId);
6363
projectValidateService.validateAuthor(answer.getAsk().getProject(), user);
6464
answer.getAsk().setNoAnswer();
6565
projectCommunityAnswerRepository.deleteById(answerId);

src/main/java/NextLevel/demo/project/project/service/ProjectService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import NextLevel.demo.project.project.entity.ProjectEntity;
1515
import NextLevel.demo.project.project.repository.ProjectDslRepository;
1616
import NextLevel.demo.project.project.repository.ProjectRepository;
17-
import NextLevel.demo.project.story.entity.ProjectStoryEntity;
1817
import NextLevel.demo.project.story.service.ProjectStoryService;
1918
import NextLevel.demo.project.tag.service.TagService;
2019
import NextLevel.demo.project.view.ProjectViewService;
@@ -53,7 +52,7 @@ public class ProjectService {
5352
@Transactional
5453
public void save(CreateProjectDto dto, ArrayList<Path> imgPaths) {
5554
// user 처리
56-
UserEntity user = userValidateService.getUserInfo(dto.getUserId());
55+
UserEntity user = userValidateService.getUserInfoWithAccessToken(dto.getUserId());
5756
validateUser(user);
5857

5958
if(dto.getTitleImg() == null || dto.getTitleImg().isEmpty())

0 commit comments

Comments
 (0)