패스트캠퍼스 환급챌린지 11일차 : 9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online 강의 후기]
이태우(1990년)2025. 3. 15. 22:43
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
공부 시작 시각 인증
공부 시작 시각 인증
수강 인증 사진
수강 인증 사진
User.java
package org.fastcampus.user.domain;
import java.util.Objects;
import org.fastcampus.common.domain.*;
public class User {
private final Long id;
private final UserInfo info;
private final PositiveIntegerCounter followingCount;
private final PositiveIntegerCounter followerCount;
public User(Long id, UserInfo userInfo) {
if (userInfo == null) {
throw new IllegalArgumentException();
}
this.id = id;
this.info = userInfo;
this.followingCount = new PositiveIntegerCounter();
this.followerCount = new PositiveIntegerCounter();
}
public void follow(User targetUser) {
if (targetUser.equals(this)) {
throw new IllegalArgumentException();
}
followingCount.increase();
targetUser.increaseFollowerCount();
}
public void unfollow(User targetUser) {
if (targetUser.equals(this)) {
throw new IllegalArgumentException();
}
followingCount.decrease();
targetUser.decreaseFollowerCount();
}
private void increaseFollowerCount() {
followerCount.increase();
}
private void decreaseFollowerCount() {
followerCount.decrease();
}
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) {
return false;
}
User user = (User) o;
return Objects.equals(id, user.id);
}
@Override
public int hashCode() {
return Objects.hashCode(id);
}
public Long getId() {
return id;
}
public UserInfo getInfo() {
return info;
}
public int followerCount() {
return followerCount.getCount();
}
public int followingCount() {
return followingCount.getCount();
}
}
UserInfo.java
package org.fastcampus.user.domain;
public class UserInfo {
private final String name;
private final String profileImageUrl;
public UserInfo(String name, String profileImageUrl) {
if (name == null || name.isEmpty()) {
throw new IllegalArgumentException();
}
this.name = name;
this.profileImageUrl = profileImageUrl;
}
public String getName() {
return name;
}
}
FakeUserRepository.java
package org.fastcampus.user.application.repository;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import org.fastcampus.user.application.Interfaces.*;
import org.fastcampus.user.domain.*;
public class FakeUserRepository implements UserRepository {
private final Map<Long, User> store = new HashMap<>();
@Override
public User save(User user) {
if (user.getId() != null) {
store.put(user.getId(), user);
}
Long id = store.size() + 1L;
User newUser = new User(id, user.getInfo());
store.put(id, newUser);
return newUser;
}
@Override
public Optional<User> findById(Long id) {
return Optional.ofNullable(store.get(id));
}
}
UserServiceTest.java
package org.fastcampus.user.application;
import org.fastcampus.user.application.Interfaces.*;
import org.fastcampus.user.application.dto.*;
import org.fastcampus.user.application.repository.*;
import org.fastcampus.user.domain.*;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class UserServiceTest {
private final UserRepository userRepository = new FakeUserRepository();
private final UserService userService = new UserService(userRepository);
@Test
void givenUserInfoDto_whenCreateUser_thenCanFindUser() {
// given
CreateUserRequestDto dto = new CreateUserRequestDto("test", "");
// when
User savedUser = userService.createUser(dto);
// then
User foundUser = userService.getUser(savedUser.getId());
UserInfo userInfo = foundUser.getInfo();
assertEquals(foundUser.getId(), savedUser.getId());
assertEquals("test", userInfo.getName());
}
}