perf(user): cambio a base de datos MongoDB

parent d999d328
Showing with 69 additions and 70 deletions
...@@ -2,6 +2,6 @@ package com.example.apprecetas.user.application; ...@@ -2,6 +2,6 @@ package com.example.apprecetas.user.application;
public interface DeleteUserUseCase { public interface DeleteUserUseCase {
void deleteById(Long id); void deleteById(String id);
} }
...@@ -6,7 +6,7 @@ import java.util.List; ...@@ -6,7 +6,7 @@ import java.util.List;
public interface ReadUserUseCase { public interface ReadUserUseCase {
User readById(Long id); User readById(String id);
List<User> readAll(); List<User> readAll();
......
...@@ -4,6 +4,6 @@ import com.example.apprecetas.user.domain.entity.User; ...@@ -4,6 +4,6 @@ import com.example.apprecetas.user.domain.entity.User;
public interface UpdateUserUseCase { public interface UpdateUserUseCase {
User updateById(Long id, User inputUser); User updateById(String id, User inputUser);
} }
...@@ -4,7 +4,7 @@ import com.example.apprecetas.user.application.CreateUserUseCase; ...@@ -4,7 +4,7 @@ import com.example.apprecetas.user.application.CreateUserUseCase;
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.jpa.UserJpa; 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;
...@@ -21,9 +21,9 @@ public class CreateUserUseCaseImpl implements CreateUserUseCase { ...@@ -21,9 +21,9 @@ public class CreateUserUseCaseImpl implements CreateUserUseCase {
@Override @Override
public User create(User user) { public User create(User user) {
UserJpa userJpa = mapper.mapJpa(user); UserDocument userDocument = mapper.mapDocument(user);
userJpa.setPassword(passwordEncoder.encode(userJpa.getPassword())); userDocument.setPassword(passwordEncoder.encode(userDocument.getPassword()));
UserJpa createdUser = repository.create(userJpa); UserDocument createdUser = repository.create(userDocument);
return mapper.mapJpa(createdUser); return mapper.mapDocument(createdUser);
} }
} }
...@@ -16,7 +16,7 @@ public class DeleteUserUseCaseImpl implements DeleteUserUseCase { ...@@ -16,7 +16,7 @@ public class DeleteUserUseCaseImpl implements DeleteUserUseCase {
private final ReadUserRepository readUserRepository; private final ReadUserRepository readUserRepository;
@Override @Override
public void deleteById(Long id) { public void deleteById(String id) {
readUserRepository.readById(id) readUserRepository.readById(id)
.orElseThrow(() -> new EntityNotFoundException("El usuario con id " + id + " no existe.")); .orElseThrow(() -> new EntityNotFoundException("El usuario con id " + id + " no existe."));
deleteUserRepository.deleteById(id); deleteUserRepository.deleteById(id);
......
...@@ -5,7 +5,7 @@ import com.example.apprecetas.user.application.ReadUserUseCase; ...@@ -5,7 +5,7 @@ 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.mapper.UserMapper;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserJpa; 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.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -21,16 +21,16 @@ public class ReadUserUseCaseImpl implements ReadUserUseCase { ...@@ -21,16 +21,16 @@ public class ReadUserUseCaseImpl implements ReadUserUseCase {
private final UserMapper mapper = Mappers.getMapper(UserMapper.class); private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@Override @Override
public User readById(Long id) { public User readById(String id) {
UserJpa userJpa = repository.readById(id) UserDocument userDocument = repository.readById(id)
.orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado")); .orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado"));
return mapper.mapJpa(userJpa); return mapper.mapDocument(userDocument);
} }
@Override @Override
public List<User> readAll() { public List<User> readAll() {
return repository.readAll().stream() return repository.readAll().stream()
.map(mapper::mapJpa) .map(mapper::mapDocument)
.toList(); .toList();
} }
} }
...@@ -6,7 +6,7 @@ import com.example.apprecetas.user.domain.entity.User; ...@@ -6,7 +6,7 @@ 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.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.mapper.UserMapper;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserJpa; 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.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -21,14 +21,14 @@ public class UpdateUserUseCaseImpl implements UpdateUserUseCase { ...@@ -21,14 +21,14 @@ public class UpdateUserUseCaseImpl implements UpdateUserUseCase {
private final UserMapper mapper = Mappers.getMapper(UserMapper.class); private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@Override @Override
public User updateById(Long id, User inputUser) { public User updateById(String id, User inputUser) {
UserJpa userJpa = readUserRepository.readById(id) UserDocument userDocument = readUserRepository.readById(id)
.orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado")); .orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado"));
UserJpa user = mapper.mapJpa(inputUser); UserDocument user = mapper.mapDocument(inputUser);
UserJpa modifiedUser = updateUserRepository.updateById(id, user).get(); UserDocument modifiedUser = updateUserRepository.updateById(id, user).get();
return mapper.mapJpa(modifiedUser); return mapper.mapDocument(modifiedUser);
} }
} }
...@@ -9,7 +9,7 @@ import lombok.NoArgsConstructor; ...@@ -9,7 +9,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
public class User { public class User {
private Long id; private String id;
private String name; private String name;
private String surname; private String surname;
private String email; private String email;
......
package com.example.apprecetas.user.domain.repository; package com.example.apprecetas.user.domain.repository;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserJpa; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
public interface CreateUserRepository { public interface CreateUserRepository {
UserJpa create(UserJpa userJpa); UserDocument create(UserDocument userDocument);
} }
...@@ -2,6 +2,6 @@ package com.example.apprecetas.user.domain.repository; ...@@ -2,6 +2,6 @@ package com.example.apprecetas.user.domain.repository;
public interface DeleteUserRepository { public interface DeleteUserRepository {
void deleteById(Long id); void deleteById(String id);
} }
package com.example.apprecetas.user.domain.repository; package com.example.apprecetas.user.domain.repository;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserJpa; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
public interface ReadUserRepository { public interface ReadUserRepository {
Optional<UserJpa> readById(Long id); Optional<UserDocument> readById(String id);
List<UserJpa> readAll(); List<UserDocument> readAll();
} }
package com.example.apprecetas.user.domain.repository; package com.example.apprecetas.user.domain.repository;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserJpa; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import java.util.Optional; import java.util.Optional;
public interface UpdateUserRepository { public interface UpdateUserRepository {
Optional<UserJpa> updateById(Long id, UserJpa userJpa); Optional<UserDocument> updateById(String id, UserDocument userDocument);
} }
...@@ -16,7 +16,7 @@ public class DeleteUserController { ...@@ -16,7 +16,7 @@ public class DeleteUserController {
private final DeleteUserUseCase service; private final DeleteUserUseCase service;
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public ResponseEntity<String> deleteById(@PathVariable Long id) { public ResponseEntity<String> deleteById(@PathVariable String id) {
service.deleteById(id); service.deleteById(id);
return ResponseEntity.ok().body("Usuario con id " + id + " eliminado correctamente"); return ResponseEntity.ok().body("Usuario con id " + id + " eliminado correctamente");
} }
......
...@@ -23,7 +23,7 @@ public class ReadUserController { ...@@ -23,7 +23,7 @@ public class ReadUserController {
private final UserMapper mapper = Mappers.getMapper(UserMapper.class); private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@GetMapping("/{id}") @GetMapping("/{id}")
public ResponseEntity<UserOutputDto> readById(@PathVariable Long id) { public ResponseEntity<UserOutputDto> readById(@PathVariable String id) {
return ResponseEntity.ok().body(mapper.map(service.readById(id))); return ResponseEntity.ok().body(mapper.map(service.readById(id)));
} }
......
...@@ -24,7 +24,7 @@ public class UpdateUserController { ...@@ -24,7 +24,7 @@ public class UpdateUserController {
private final UserMapper mapper = Mappers.getMapper(UserMapper.class); private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@PutMapping("/{id}") @PutMapping("/{id}")
public ResponseEntity<UserOutputDto> update(@PathVariable Long id, @Valid @RequestBody UserInputDto userInputDto, BindingResult result) { public ResponseEntity<UserOutputDto> update(@PathVariable String id, @Valid @RequestBody UserInputDto userInputDto, BindingResult result) {
if (result.hasErrors()) { if (result.hasErrors()) {
String errorMsg = result.getFieldErrors().stream() String errorMsg = result.getFieldErrors().stream()
.map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage()) .map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage())
......
...@@ -9,7 +9,7 @@ import lombok.NoArgsConstructor; ...@@ -9,7 +9,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
public class UserOutputDto { public class UserOutputDto {
private Long id; private String id;
private String name; private String name;
private String surname; private String surname;
private String email; private String email;
......
...@@ -3,7 +3,7 @@ package com.example.apprecetas.user.infrastructure.mapper; ...@@ -3,7 +3,7 @@ package com.example.apprecetas.user.infrastructure.mapper;
import com.example.apprecetas.user.domain.entity.User; import com.example.apprecetas.user.domain.entity.User;
import com.example.apprecetas.user.infrastructure.controller.dto.UserInputDto; import com.example.apprecetas.user.infrastructure.controller.dto.UserInputDto;
import com.example.apprecetas.user.infrastructure.controller.dto.UserOutputDto; import com.example.apprecetas.user.infrastructure.controller.dto.UserOutputDto;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserJpa; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
@Mapper @Mapper
...@@ -13,8 +13,8 @@ public interface UserMapper { ...@@ -13,8 +13,8 @@ public interface UserMapper {
UserOutputDto map(User user); UserOutputDto map(User user);
UserJpa mapJpa(User user); UserDocument mapDocument(User user);
User mapJpa(UserJpa userJpa); User mapDocument(UserDocument userDocument);
} }
package com.example.apprecetas.user.infrastructure.repository.impl; package com.example.apprecetas.user.infrastructure.repository.impl;
import com.example.apprecetas.user.domain.repository.CreateUserRepository; import com.example.apprecetas.user.domain.repository.CreateUserRepository;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserJpa; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserRepositoryJpa; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -10,10 +10,10 @@ import org.springframework.stereotype.Repository; ...@@ -10,10 +10,10 @@ import org.springframework.stereotype.Repository;
@RequiredArgsConstructor @RequiredArgsConstructor
public class CreateUserRepositoryImpl implements CreateUserRepository { public class CreateUserRepositoryImpl implements CreateUserRepository {
private final UserRepositoryJpa repositoryJpa; private final UserRepository repositoryJpa;
@Override @Override
public UserJpa create(UserJpa userJpa) { public UserDocument create(UserDocument userDocument) {
return repositoryJpa.save(userJpa); return repositoryJpa.save(userDocument);
} }
} }
package com.example.apprecetas.user.infrastructure.repository.impl; package com.example.apprecetas.user.infrastructure.repository.impl;
import com.example.apprecetas.user.domain.repository.DeleteUserRepository; import com.example.apprecetas.user.domain.repository.DeleteUserRepository;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserRepositoryJpa; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -9,10 +9,10 @@ import org.springframework.stereotype.Repository; ...@@ -9,10 +9,10 @@ import org.springframework.stereotype.Repository;
@RequiredArgsConstructor @RequiredArgsConstructor
public class DeleteUserRepositoryImpl implements DeleteUserRepository { public class DeleteUserRepositoryImpl implements DeleteUserRepository {
private final UserRepositoryJpa repositoryJpa; private final UserRepository repositoryJpa;
@Override @Override
public void deleteById(Long id) { public void deleteById(String id) {
repositoryJpa.deleteById(id); repositoryJpa.deleteById(id);
} }
} }
package com.example.apprecetas.user.infrastructure.repository.impl; package com.example.apprecetas.user.infrastructure.repository.impl;
import com.example.apprecetas.user.domain.repository.ReadUserRepository; import com.example.apprecetas.user.domain.repository.ReadUserRepository;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserJpa; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserRepositoryJpa; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -13,15 +13,15 @@ import java.util.Optional; ...@@ -13,15 +13,15 @@ import java.util.Optional;
@RequiredArgsConstructor @RequiredArgsConstructor
public class ReadUserRepositoryImpl implements ReadUserRepository { public class ReadUserRepositoryImpl implements ReadUserRepository {
private final UserRepositoryJpa repositoryJpa; private final UserRepository repositoryJpa;
@Override @Override
public Optional<UserJpa> readById(Long id) { public Optional<UserDocument> readById(String id) {
return repositoryJpa.findById(id); return repositoryJpa.findById(id);
} }
@Override @Override
public List<UserJpa> readAll() { public List<UserDocument> readAll() {
return repositoryJpa.findAll(); return repositoryJpa.findAll();
} }
} }
package com.example.apprecetas.user.infrastructure.repository.impl; package com.example.apprecetas.user.infrastructure.repository.impl;
import com.example.apprecetas.user.domain.repository.UpdateUserRepository; import com.example.apprecetas.user.domain.repository.UpdateUserRepository;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserJpa; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserRepositoryJpa; import com.example.apprecetas.user.infrastructure.repository.mongodb.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -13,20 +13,20 @@ import java.util.Optional; ...@@ -13,20 +13,20 @@ import java.util.Optional;
@RequiredArgsConstructor @RequiredArgsConstructor
public class UpdateUserRepositoryImpl implements UpdateUserRepository { public class UpdateUserRepositoryImpl implements UpdateUserRepository {
private final UserRepositoryJpa repositoryJpa; private final UserRepository repositoryJpa;
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;
@Override @Override
public Optional<UserJpa> updateById(Long id, UserJpa userJpa) { public Optional<UserDocument> updateById(String id, UserDocument userDocument) {
Optional<UserJpa> userJpaOptional = repositoryJpa.findById(id); Optional<UserDocument> userJpaOptional = repositoryJpa.findById(id);
userJpaOptional.ifPresent(jpa -> { userJpaOptional.ifPresent(jpa -> {
jpa.setId(id); jpa.setId(id);
jpa.setName(userJpa.getName()); jpa.setName(userDocument.getName());
jpa.setSurname(userJpa.getSurname()); jpa.setSurname(userDocument.getSurname());
jpa.setEmail(userJpa.getEmail()); jpa.setEmail(userDocument.getEmail());
jpa.setPassword(passwordEncoder.encode(userJpa.getPassword())); jpa.setPassword(passwordEncoder.encode(userDocument.getPassword()));
}); });
return userJpaOptional.map(repositoryJpa::save); return userJpaOptional.map(repositoryJpa::save);
......
package com.example.apprecetas.user.infrastructure.repository.jpa;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepositoryJpa extends JpaRepository<UserJpa, Long> {
}
package com.example.apprecetas.user.infrastructure.repository.jpa; package com.example.apprecetas.user.infrastructure.repository.mongodb;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.springframework.data.mongodb.core.mapping.Document;
@Entity @Document(collection = "users")
@Table(name = "users")
@Getter @Getter
@Setter @Setter
public class UserJpa { public class UserDocument {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_usuario") @Column(name = "id_usuario")
private Long id; private String id;
@Column(name = "nombre") @Column(name = "nombre")
private String name; private String name;
......
package com.example.apprecetas.user.infrastructure.repository.mongodb;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserRepository extends MongoRepository<UserDocument, String> {
}
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