bugfix(user): eliminado uso de UserDocument en las interfaces CRUD de usuario

parent a204d002
...@@ -16,11 +16,15 @@ public class CustomUserDetailsServiceImpl implements UserDetailsService { ...@@ -16,11 +16,15 @@ public class CustomUserDetailsServiceImpl implements UserDetailsService {
@Override @Override
public UserDetails loadUserByUsername(String id) throws UsernameNotFoundException { public UserDetails loadUserByUsername(String id) throws UsernameNotFoundException {
return userRepository.readById(id) com.example.apprecetas.user.domain.entity.User user = userRepository.readById(id);
.map(user -> User.withUsername(user.getId())
.password(user.getPassword()) if (user == null) {
.roles(user.getRole().name()) throw new UsernameNotFoundException("Usuario con id " + id + " no encontrado");
.build()) }
.orElseThrow(() -> new UsernameNotFoundException("Usuario con id " + id + " no encontrado"));
return User.withUsername(user.getId())
.password(user.getPassword())
.roles(user.getRole().name())
.build();
} }
} }
package com.example.apprecetas.user.application.impl; package com.example.apprecetas.user.application.impl;
import com.example.apprecetas.user.application.CreateUserUseCase; import com.example.apprecetas.user.application.CreateUserUseCase;
import com.example.apprecetas.user.domain.entity.Role;
import com.example.apprecetas.user.domain.entity.User; import com.example.apprecetas.user.domain.entity.User;
import com.example.apprecetas.user.domain.repository.CreateUserRepository; import com.example.apprecetas.user.domain.repository.CreateUserRepository;
import com.example.apprecetas.user.infrastructure.mapper.UserMapper; import com.example.apprecetas.user.infrastructure.mapper.UserMapper;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
...@@ -22,11 +20,6 @@ public class CreateUserUseCaseImpl implements CreateUserUseCase { ...@@ -22,11 +20,6 @@ public class CreateUserUseCaseImpl implements CreateUserUseCase {
@Override @Override
public User create(User user) { public User create(User user) {
UserDocument userDocument = mapper.mapDocument(user); return repository.create(user);
userDocument.setPassword(passwordEncoder.encode(userDocument.getPassword()));
userDocument.setRole(Role.USER);
UserDocument createdUser = repository.create(userDocument);
return mapper.mapDocument(createdUser);
} }
} }
package com.example.apprecetas.user.application.impl; package com.example.apprecetas.user.application.impl;
import com.example.apprecetas.exception.EntityNotFoundException;
import com.example.apprecetas.user.application.DeleteUserUseCase; import com.example.apprecetas.user.application.DeleteUserUseCase;
import com.example.apprecetas.user.domain.repository.DeleteUserRepository; import com.example.apprecetas.user.domain.repository.DeleteUserRepository;
import com.example.apprecetas.user.domain.repository.ReadUserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -13,12 +11,8 @@ public class DeleteUserUseCaseImpl implements DeleteUserUseCase { ...@@ -13,12 +11,8 @@ public class DeleteUserUseCaseImpl implements DeleteUserUseCase {
private final DeleteUserRepository deleteUserRepository; private final DeleteUserRepository deleteUserRepository;
private final ReadUserRepository readUserRepository;
@Override @Override
public void deleteById(String id) { public void deleteById(String id) {
readUserRepository.readById(id)
.orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado"));
deleteUserRepository.deleteById(id); deleteUserRepository.deleteById(id);
} }
} }
package com.example.apprecetas.user.application.impl; package com.example.apprecetas.user.application.impl;
import com.example.apprecetas.exception.EntityNotFoundException;
import com.example.apprecetas.user.application.ReadUserUseCase; import com.example.apprecetas.user.application.ReadUserUseCase;
import com.example.apprecetas.user.domain.entity.User; import com.example.apprecetas.user.domain.entity.User;
import com.example.apprecetas.user.domain.repository.ReadUserRepository; import com.example.apprecetas.user.domain.repository.ReadUserRepository;
import com.example.apprecetas.user.infrastructure.mapper.UserMapper;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -18,30 +14,23 @@ public class ReadUserUseCaseImpl implements ReadUserUseCase { ...@@ -18,30 +14,23 @@ public class ReadUserUseCaseImpl implements ReadUserUseCase {
private final ReadUserRepository repository; private final ReadUserRepository repository;
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@Override @Override
public User readById(String id) { public User readById(String id) {
UserDocument userDocument = repository.readById(id) return repository.readById(id);
.orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado"));
return mapper.mapDocument(userDocument);
} }
@Override @Override
public User readByEmail(String email) { public User readByEmail(String email) {
return repository.readByEmail(email).map(mapper::mapDocument) return repository.readByEmail(email);
.orElseThrow(() -> new EntityNotFoundException("Usuario con email " + email + " no encontrado"));
} }
@Override @Override
public Page<User> readByNameOrEmail(String query, Pageable pageable) { public Page<User> readByNameOrEmail(String query, Pageable pageable) {
return repository.readByNameOrEmail(query, query, pageable) return repository.readByNameOrEmail(query, query, pageable);
.map(mapper::mapDocument);
} }
@Override @Override
public Page<User> readAll(Pageable pageable) { public Page<User> readAll(Pageable pageable) {
return repository.readAll(pageable) return repository.readAll(pageable);
.map(mapper::mapDocument);
} }
} }
...@@ -4,10 +4,7 @@ import com.example.apprecetas.user.application.UpdateUserUseCase; ...@@ -4,10 +4,7 @@ import com.example.apprecetas.user.application.UpdateUserUseCase;
import com.example.apprecetas.user.domain.entity.Role; import com.example.apprecetas.user.domain.entity.Role;
import com.example.apprecetas.user.domain.entity.User; import com.example.apprecetas.user.domain.entity.User;
import com.example.apprecetas.user.domain.repository.UpdateUserRepository; import com.example.apprecetas.user.domain.repository.UpdateUserRepository;
import com.example.apprecetas.user.infrastructure.mapper.UserMapper;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
...@@ -16,13 +13,9 @@ public class UpdateUserUseCaseImpl implements UpdateUserUseCase { ...@@ -16,13 +13,9 @@ public class UpdateUserUseCaseImpl implements UpdateUserUseCase {
private final UpdateUserRepository updateUserRepository; private final UpdateUserRepository updateUserRepository;
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@Override @Override
public User updateById(String id, User inputUser) { public User updateById(String id, User inputUser) {
UserDocument userDocument = mapper.mapDocument(inputUser); return updateUserRepository.updateById(id, inputUser);
UserDocument modifiedUser = updateUserRepository.updateById(id, userDocument);
return mapper.mapDocument(modifiedUser);
} }
@Override @Override
......
package com.example.apprecetas.user.domain.repository; package com.example.apprecetas.user.domain.repository;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument; import com.example.apprecetas.user.domain.entity.User;
public interface CreateUserRepository { public interface CreateUserRepository {
UserDocument create(UserDocument userDocument); User create(User user);
} }
package com.example.apprecetas.user.domain.repository; package com.example.apprecetas.user.domain.repository;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument; import com.example.apprecetas.user.domain.entity.User;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import java.util.Optional;
public interface ReadUserRepository { public interface ReadUserRepository {
Optional<UserDocument> readById(String id); User readById(String id);
Optional<UserDocument> readByEmail(String email); User readByEmail(String email);
Page<UserDocument> readByNameOrEmail(String name, String email, Pageable pageable); Page<User> readByNameOrEmail(String name, String email, Pageable pageable);
Page<UserDocument> readAll(Pageable pageable); Page<User> readAll(Pageable pageable);
} }
package com.example.apprecetas.user.domain.repository; package com.example.apprecetas.user.domain.repository;
import com.example.apprecetas.user.domain.entity.Role; import com.example.apprecetas.user.domain.entity.Role;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument; import com.example.apprecetas.user.domain.entity.User;
public interface UpdateUserRepository { public interface UpdateUserRepository {
UserDocument updateById(String id, UserDocument userDocument); User updateById(String id, User user);
boolean changePassword(String id, String oldPassword, String newPassword); boolean changePassword(String id, String oldPassword, String newPassword);
......
package com.example.apprecetas.user.infrastructure.repository.impl; package com.example.apprecetas.user.infrastructure.repository.impl;
import com.example.apprecetas.user.domain.entity.Role;
import com.example.apprecetas.user.domain.entity.User;
import com.example.apprecetas.user.domain.repository.CreateUserRepository; import com.example.apprecetas.user.domain.repository.CreateUserRepository;
import com.example.apprecetas.user.infrastructure.mapper.UserMapper;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserRepository; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@Repository @Repository
...@@ -12,8 +17,17 @@ public class CreateUserRepositoryImpl implements CreateUserRepository { ...@@ -12,8 +17,17 @@ public class CreateUserRepositoryImpl implements CreateUserRepository {
private final UserRepository userRepository; private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@Override @Override
public UserDocument create(UserDocument userDocument) { public User create(User user) {
return userRepository.save(userDocument); UserDocument userDocument = mapper.mapDocument(user);
userDocument.setPassword(passwordEncoder.encode(userDocument.getPassword()));
userDocument.setRole(Role.USER);
UserDocument savedUser = userRepository.save(userDocument);
return mapper.mapDocument(savedUser);
} }
} }
package com.example.apprecetas.user.infrastructure.repository.impl; package com.example.apprecetas.user.infrastructure.repository.impl;
import com.example.apprecetas.exception.EntityNotFoundException;
import com.example.apprecetas.user.domain.repository.DeleteUserRepository; import com.example.apprecetas.user.domain.repository.DeleteUserRepository;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserRepository; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -13,6 +14,8 @@ public class DeleteUserRepositoryImpl implements DeleteUserRepository { ...@@ -13,6 +14,8 @@ public class DeleteUserRepositoryImpl implements DeleteUserRepository {
@Override @Override
public void deleteById(String id) { public void deleteById(String id) {
userRepository.findById(id)
.orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado"));
userRepository.deleteById(id); userRepository.deleteById(id);
} }
} }
package com.example.apprecetas.user.infrastructure.repository.impl; package com.example.apprecetas.user.infrastructure.repository.impl;
import com.example.apprecetas.exception.EntityNotFoundException;
import com.example.apprecetas.user.domain.entity.User;
import com.example.apprecetas.user.domain.repository.ReadUserRepository; import com.example.apprecetas.user.domain.repository.ReadUserRepository;
import com.example.apprecetas.user.infrastructure.mapper.UserMapper;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserRepository; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository @Repository
@RequiredArgsConstructor @RequiredArgsConstructor
public class ReadUserRepositoryImpl implements ReadUserRepository { public class ReadUserRepositoryImpl implements ReadUserRepository {
private final UserRepository userRepository; private final UserRepository userRepository;
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@Override @Override
public Optional<UserDocument> readById(String id) { public User readById(String id) {
return userRepository.findById(id); UserDocument userDocument = userRepository.findById(id)
.orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado"));
return mapper.mapDocument(userDocument);
} }
@Override @Override
public Optional<UserDocument> readByEmail(String email) { public User readByEmail(String email) {
return userRepository.findByEmail(email); UserDocument userDocument = userRepository.findByEmail(email)
.orElseThrow(() -> new EntityNotFoundException("Usuario con email " + email + " no encontrado"));
return mapper.mapDocument(userDocument);
} }
@Override @Override
public Page<UserDocument> readByNameOrEmail(String name, String email, Pageable pageable) { public Page<User> readByNameOrEmail(String name, String email, Pageable pageable) {
return userRepository.findByNameIgnoreCaseContainingOrEmailIgnoreCaseContaining(name, email, pageable); return userRepository.findByNameIgnoreCaseContainingOrEmailIgnoreCaseContaining(name, email, pageable)
.map(mapper::mapDocument);
} }
@Override @Override
public Page<UserDocument> readAll(Pageable pageable) { public Page<User> readAll(Pageable pageable) {
return userRepository.findAll(pageable); return userRepository.findAll(pageable)
.map(mapper::mapDocument);
} }
} }
...@@ -2,10 +2,13 @@ package com.example.apprecetas.user.infrastructure.repository.impl; ...@@ -2,10 +2,13 @@ package com.example.apprecetas.user.infrastructure.repository.impl;
import com.example.apprecetas.exception.EntityNotFoundException; import com.example.apprecetas.exception.EntityNotFoundException;
import com.example.apprecetas.user.domain.entity.Role; import com.example.apprecetas.user.domain.entity.Role;
import com.example.apprecetas.user.domain.entity.User;
import com.example.apprecetas.user.domain.repository.UpdateUserRepository; import com.example.apprecetas.user.domain.repository.UpdateUserRepository;
import com.example.apprecetas.user.infrastructure.mapper.UserMapper;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserRepository; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -19,15 +22,18 @@ public class UpdateUserRepositoryImpl implements UpdateUserRepository { ...@@ -19,15 +22,18 @@ public class UpdateUserRepositoryImpl implements UpdateUserRepository {
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@Override @Override
public UserDocument updateById(String id, UserDocument userDocument) { public User updateById(String id, User user) {
UserDocument user = userRepository.findById(id) UserDocument userDocument = userRepository.findById(id)
.orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado")); .orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado"));
user.setName(userDocument.getName()); userDocument.setName(user.getName());
user.setSurname(userDocument.getSurname()); userDocument.setSurname(user.getSurname());
return userRepository.save(user); UserDocument updatedUser = userRepository.save(userDocument);
return mapper.mapDocument(updatedUser);
} }
@Override @Override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment