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