Skip to content

Commit

Permalink
refactor(follow): 팔로우 영속화 (#7)
Browse files Browse the repository at this point in the history
* refactor(follow): Follow 객체 생성

* refactor(follow): Follow 영속화

* refactor(follow): Followers 제거

* refactor(follow): 트랜잭션 지정
  • Loading branch information
0chil authored Nov 3, 2024
1 parent af74740 commit a03790e
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 113 deletions.
27 changes: 27 additions & 0 deletions src/main/java/com/demo/feedsystemdesign/follow/domain/Follow.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.demo.feedsystemdesign.follow.domain;

import com.demo.feedsystemdesign.common.BaseTimeEntity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@NoArgsConstructor
public class Follow extends BaseTimeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "follow_id")
private Long id;

private long sourceId;
private long targetId;

public Follow(long sourceId, long targetId) {
this.sourceId = sourceId;
this.targetId = targetId;
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.demo.feedsystemdesign.follow.domain;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface FollowRepository extends JpaRepository<Follow, Long> {
List<Follow> findAllByTargetId(Long targetId);

List<Follow> findAllBySourceId(Long sourceId);
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,45 +1,43 @@
package com.demo.feedsystemdesign.follow.service;

import com.demo.feedsystemdesign.common.exception.NotFoundException;
import com.demo.feedsystemdesign.follow.domain.Followers;
import com.demo.feedsystemdesign.follow.domain.Follow;
import com.demo.feedsystemdesign.follow.domain.FollowRepository;
import com.demo.feedsystemdesign.user.domain.UserRepository;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static com.demo.feedsystemdesign.common.exception.ErrorCode.USER_NOT_FOUND;

@RequiredArgsConstructor
@Service
public class FollowService {

private final UserRepository userRepository;
private final Map<Long, Followers> followersRepository = new HashMap<>();
private final FollowRepository followRepository;

public FollowService(UserRepository userRepository) {
this.userRepository = userRepository;
}

public void follow(long userId, long subjectId) {
validateExists(userId);
validateExists(subjectId);
@Transactional
public void follow(long sourceId, long targetId) {
validateExists(sourceId);
validateExists(targetId);

if (followersRepository.get(subjectId) == null) {
followersRepository.put(subjectId, new Followers(subjectId));
}
Followers followers = followersRepository.get(subjectId);
followers.add(userId);
followRepository.save(new Follow(sourceId, targetId));
}

public List<Long> getFollowers(long userId) {
return followersRepository.get(userId).findAll();
return followRepository.findAllByTargetId(userId)
.stream()
.map(Follow::getSourceId)
.toList();
}

public List<Long> getFollowings(long userId) {
return followersRepository.values().stream()
.filter(followers -> followers.contains(userId))
.map(Followers::getOwnerId)
return followRepository.findAllBySourceId(userId)
.stream()
.map(Follow::getTargetId)
.toList();
}

Expand Down

This file was deleted.

0 comments on commit a03790e

Please sign in to comment.