Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Refactor] UserRepository에서 default method를 제거한다 #26

Merged
merged 2 commits into from
Oct 23, 2023
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
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,29 @@
import daybyquest.image.vo.Image;
import daybyquest.user.domain.User;
import daybyquest.user.domain.UserImages;
import daybyquest.user.domain.UserRepository;
import daybyquest.user.domain.Users;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class DeleteUserImageService {

private final UserRepository userRepository;
private final Users users;

private final UserImages userImages;

private final BaseImageProperties baseImageProperties;

public DeleteUserImageService(final UserRepository userRepository, final UserImages userImages,
public DeleteUserImageService(final Users users, final UserImages userImages,
final BaseImageProperties baseImageProperties) {
this.userRepository = userRepository;
this.users = users;
this.userImages = userImages;
this.baseImageProperties = baseImageProperties;
}

@Transactional
public void invoke(final Long loginId) {
final User user = userRepository.getById(loginId);
final User user = users.getById(loginId);
userImages.remove(user.getImageIdentifier());
user.updateImage(new Image(baseImageProperties.getUserIdentifier()));
}
Expand Down
17 changes: 6 additions & 11 deletions src/main/java/daybyquest/user/application/SaveUserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,28 @@
import daybyquest.image.vo.BaseImageProperties;
import daybyquest.image.vo.Image;
import daybyquest.user.domain.User;
import daybyquest.user.domain.UserRepository;
import daybyquest.user.domain.Users;
import daybyquest.user.dto.request.SaveUserRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class SaveUserService {

private final UserRepository userRepository;

private final UserValidator validator;
private final Users users;

private final BaseImageProperties baseImageProperties;


public SaveUserService(final UserRepository userRepository,
final UserValidator validator, final BaseImageProperties baseImageProperties) {
this.userRepository = userRepository;
this.validator = validator;
public SaveUserService(final Users users, final BaseImageProperties baseImageProperties) {
this.users = users;
this.baseImageProperties = baseImageProperties;
}

@Transactional
public Long invoke(final SaveUserRequest request) {
final User user = toEntity(request);
validator.validateUniqueness(user);
final User savedUser = userRepository.save(user);
users.validateUniqueness(user);
final User savedUser = users.save(user);
return savedUser.getId();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import daybyquest.image.vo.Image;
import daybyquest.user.domain.User;
import daybyquest.user.domain.UserImages;
import daybyquest.user.domain.UserRepository;
import daybyquest.user.domain.Users;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
Expand All @@ -17,19 +17,18 @@
@Slf4j
public class UpdateUserImageService {

private final UserRepository userRepository;
private final Users users;

private final UserImages userImages;

public UpdateUserImageService(final UserRepository userRepository,
final UserImages userImages) {
this.userRepository = userRepository;
public UpdateUserImageService(final Users users, final UserImages userImages) {
this.users = users;
this.userImages = userImages;
}

@Transactional
public void invoke(final Long loginId, final MultipartFile file) {
final User user = userRepository.getById(loginId);
final User user = users.getById(loginId);
final String oldIdentifier = user.getImageIdentifier();
final String identifier = createIdentifier(file.getOriginalFilename());
userImages.upload(identifier, getInputStream(file));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import daybyquest.interest.domain.InterestValidator;
import daybyquest.user.domain.User;
import daybyquest.user.domain.UserRepository;
import daybyquest.user.domain.Users;
import daybyquest.user.dto.request.UpdateUserInterestRequest;
import java.util.Collection;
import org.springframework.stereotype.Service;
Expand All @@ -11,20 +11,19 @@
@Service
public class UpdateUserInterestService {

private final UserRepository userRepository;
private final Users users;


private final InterestValidator interestValidator;

public UpdateUserInterestService(final UserRepository userRepository,
final InterestValidator interestValidator) {
this.userRepository = userRepository;
public UpdateUserInterestService(final Users users, final InterestValidator interestValidator) {
this.users = users;
this.interestValidator = interestValidator;
}

@Transactional
public void invoke(final Long loginId, final UpdateUserInterestRequest request) {
final User user = userRepository.getById(loginId);
final User user = users.getById(loginId);
final Collection<String> interests = request.getInterests();
interestValidator.validateInterests(interests);
user.updateInterests(interests);
Expand Down
15 changes: 6 additions & 9 deletions src/main/java/daybyquest/user/application/UpdateUserService.java
Original file line number Diff line number Diff line change
@@ -1,28 +1,25 @@
package daybyquest.user.application;

import daybyquest.user.domain.User;
import daybyquest.user.domain.UserRepository;
import daybyquest.user.domain.Users;
import daybyquest.user.dto.request.UpdateUserRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UpdateUserService {

private final UserRepository userRepository;
private final Users users;

private final UserValidator validator;

public UpdateUserService(final UserRepository userRepository, final UserValidator validator) {
this.userRepository = userRepository;
this.validator = validator;
public UpdateUserService(final Users users) {
this.users = users;
}

@Transactional
public void invoke(final Long loginId, final UpdateUserRequest request) {
final User user = userRepository.getById(loginId);
final User user = users.getById(loginId);
if (request.getUsername() != null) {
validator.validateUniqueUsername(request.getUsername());
users.validateUniqueUsername(request.getUsername());
user.updateUsername(request.getUsername());
}
if (request.getName() != null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
package daybyquest.user.application;

import daybyquest.user.domain.User;
import daybyquest.user.domain.UserRepository;
import daybyquest.user.domain.UserVisibility;
import daybyquest.user.domain.Users;
import daybyquest.user.dto.request.UpdateUserVisibilityRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UpdateVisibilityService {

private final UserRepository userRepository;
private final Users users;

public UpdateVisibilityService(final UserRepository userRepository) {
this.userRepository = userRepository;
public UpdateVisibilityService(final Users users) {
this.users = users;
}

@Transactional
public void invoke(final Long loginId, final UpdateUserVisibilityRequest visibility) {
final User user = userRepository.getById(loginId);
final User user = users.getById(loginId);
user.updateVisibility(UserVisibility.valueOf(visibility.getVisibility()));
}
}
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/daybyquest/user/domain/UserRepository.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package daybyquest.user.domain;

import daybyquest.global.error.exception.NotExistUserException;
import java.util.Optional;
import org.springframework.data.repository.Repository;

public interface UserRepository extends Repository<User, Long> {
interface UserRepository extends Repository<User, Long> {

User save(User user);

Optional<User> findById(Long id);

Optional<User> findByUsername(String username);

boolean existsById(Long id);

boolean existsByUsername(String username);

boolean existsByEmail(String email);

default User getById(Long id) {
return this.findById(id).orElseThrow(NotExistUserException::new);
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,39 @@
package daybyquest.user.application;
package daybyquest.user.domain;

import static daybyquest.global.error.ExceptionCode.DUPLICATED_EMAIL;
import static daybyquest.global.error.ExceptionCode.DUPLICATED_USERNAME;

import daybyquest.global.error.exception.BadRequestException;
import daybyquest.user.domain.User;
import daybyquest.user.domain.UserRepository;
import daybyquest.global.error.exception.NotExistUserException;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@Component
@Transactional(readOnly = true)
public class UserValidator {
public class Users {

private final UserRepository userRepository;

public UserValidator(final UserRepository userRepository) {
public Users(final UserRepository userRepository) {
this.userRepository = userRepository;
}

public User save(final User user) {
return userRepository.save(user);
}

public User getById(final Long id) {
return userRepository.findById(id).orElseThrow(NotExistUserException::new);
}

public User getByUsername(final String username) {
return userRepository.findByUsername(username).orElseThrow(NotExistUserException::new);
}

void validateExistentById(Long id) {
if (!userRepository.existsById(id)) {
throw new NotExistUserException();
}
}

public void validateUniqueness(final User user) {
validateUniqueUsername(user.getUsername());
validateUniqueEmail(user.getEmail());
Expand Down