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

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