perf(User): eliminado uso de DTOs en el servicio

parent be2b6204
package com.example.apprecetas.user.application; package com.example.apprecetas.user.application;
import com.example.apprecetas.user.infrastructure.controller.dto.UserInputDto; import com.example.apprecetas.user.domain.entity.User;
import com.example.apprecetas.user.infrastructure.controller.dto.UserOutputDto;
public interface CreateUserUseCase { public interface CreateUserUseCase {
UserOutputDto create(UserInputDto userInputDto); User create(User user);
} }
package com.example.apprecetas.user.application; package com.example.apprecetas.user.application;
import com.example.apprecetas.user.infrastructure.controller.dto.UserOutputDto; import com.example.apprecetas.user.domain.entity.User;
import java.util.List; import java.util.List;
public interface ReadUserUseCase { public interface ReadUserUseCase {
UserOutputDto readById(Long id); User readById(Long id);
List<UserOutputDto> readAll(); List<User> readAll();
} }
package com.example.apprecetas.user.application; package com.example.apprecetas.user.application;
import com.example.apprecetas.user.infrastructure.controller.dto.UserInputDto; import com.example.apprecetas.user.domain.entity.User;
import com.example.apprecetas.user.infrastructure.controller.dto.UserOutputDto;
public interface UpdateUserUseCase { public interface UpdateUserUseCase {
UserOutputDto updateById(Long id, UserInputDto userInputDto); User updateById(Long id, User inputUser);
} }
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.User;
import com.example.apprecetas.user.domain.repository.CreateUserRepository; import com.example.apprecetas.user.domain.repository.CreateUserRepository;
import com.example.apprecetas.user.infrastructure.controller.dto.UserInputDto;
import com.example.apprecetas.user.infrastructure.controller.dto.UserOutputDto;
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.jpa.UserJpa;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -21,10 +20,10 @@ public class CreateUserUseCaseImpl implements CreateUserUseCase { ...@@ -21,10 +20,10 @@ public class CreateUserUseCaseImpl implements CreateUserUseCase {
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;
@Override @Override
public UserOutputDto create(UserInputDto userInputDto) { public User create(User user) {
UserJpa userJpa = mapper.mapJpa(mapper.map(userInputDto)); UserJpa userJpa = mapper.mapJpa(user);
userJpa.setPassword(passwordEncoder.encode(userJpa.getPassword())); userJpa.setPassword(passwordEncoder.encode(userJpa.getPassword()));
UserJpa createdUser = repository.create(userJpa); UserJpa createdUser = repository.create(userJpa);
return mapper.map(mapper.mapJpa(createdUser)); return mapper.mapJpa(createdUser);
} }
} }
...@@ -2,8 +2,8 @@ package com.example.apprecetas.user.application.impl; ...@@ -2,8 +2,8 @@ package com.example.apprecetas.user.application.impl;
import com.example.apprecetas.exception.EntityNotFoundException; 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.repository.ReadUserRepository; import com.example.apprecetas.user.domain.repository.ReadUserRepository;
import com.example.apprecetas.user.infrastructure.controller.dto.UserOutputDto;
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.jpa.UserJpa;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -17,21 +17,20 @@ import java.util.List; ...@@ -17,21 +17,20 @@ import java.util.List;
public class ReadUserUseCaseImpl implements ReadUserUseCase { public class ReadUserUseCaseImpl implements ReadUserUseCase {
private final ReadUserRepository repository; private final ReadUserRepository repository;
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@Override @Override
public UserOutputDto readById(Long id) { public User readById(Long id) {
UserJpa userJpa = repository.readById(id) UserJpa userJpa = repository.readById(id)
.orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado")); .orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado"));
return mapper.map(mapper.mapJpa(userJpa)); return mapper.mapJpa(userJpa);
} }
@Override @Override
public List<UserOutputDto> readAll() { public List<User> readAll() {
return repository.readAll().stream() return repository.readAll().stream()
.map(mapper::mapJpa) .map(mapper::mapJpa)
.map(mapper::map)
.toList(); .toList();
} }
} }
...@@ -2,10 +2,9 @@ package com.example.apprecetas.user.application.impl; ...@@ -2,10 +2,9 @@ package com.example.apprecetas.user.application.impl;
import com.example.apprecetas.exception.EntityNotFoundException; import com.example.apprecetas.exception.EntityNotFoundException;
import com.example.apprecetas.user.application.UpdateUserUseCase; import com.example.apprecetas.user.application.UpdateUserUseCase;
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.controller.dto.UserInputDto;
import com.example.apprecetas.user.infrastructure.controller.dto.UserOutputDto;
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.jpa.UserJpa;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -22,14 +21,14 @@ public class UpdateUserUseCaseImpl implements UpdateUserUseCase { ...@@ -22,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 UserOutputDto updateById(Long id, UserInputDto userInputDto) { public User updateById(Long id, User inputUser) {
UserJpa userJpa = readUserRepository.readById(id) UserJpa userJpa = 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(mapper.map(userInputDto)); UserJpa user = mapper.mapJpa(inputUser);
UserJpa modifiedUser = updateUserRepository.updateById(id, user).get(); UserJpa modifiedUser = updateUserRepository.updateById(id, user).get();
return mapper.map(mapper.mapJpa(modifiedUser)); return mapper.mapJpa(modifiedUser);
} }
} }
...@@ -4,8 +4,10 @@ import com.example.apprecetas.exception.UnprocessableEntityException; ...@@ -4,8 +4,10 @@ import com.example.apprecetas.exception.UnprocessableEntityException;
import com.example.apprecetas.user.application.CreateUserUseCase; import com.example.apprecetas.user.application.CreateUserUseCase;
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.mapper.UserMapper;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
...@@ -23,6 +25,8 @@ public class CreateUserController { ...@@ -23,6 +25,8 @@ public class CreateUserController {
private final CreateUserUseCase service; private final CreateUserUseCase service;
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@PostMapping @PostMapping
public ResponseEntity<UserOutputDto> create(@Valid @RequestBody UserInputDto userInputDto, BindingResult result) { public ResponseEntity<UserOutputDto> create(@Valid @RequestBody UserInputDto userInputDto, BindingResult result) {
if (result.hasErrors()) { if (result.hasErrors()) {
...@@ -33,7 +37,7 @@ public class CreateUserController { ...@@ -33,7 +37,7 @@ public class CreateUserController {
} }
try { try {
URI location = URI.create("/user"); URI location = URI.create("/user");
return ResponseEntity.created(location).body(service.create(userInputDto)); return ResponseEntity.created(location).body(mapper.map(service.create(mapper.map(userInputDto))));
} catch (Exception e) { } catch (Exception e) {
throw new UnprocessableEntityException("Usuario ya registrado. Cambie sus credenciales."); throw new UnprocessableEntityException("Usuario ya registrado. Cambie sus credenciales.");
} }
......
...@@ -2,7 +2,9 @@ package com.example.apprecetas.user.infrastructure.controller; ...@@ -2,7 +2,9 @@ package com.example.apprecetas.user.infrastructure.controller;
import com.example.apprecetas.user.application.ReadUserUseCase; import com.example.apprecetas.user.application.ReadUserUseCase;
import com.example.apprecetas.user.infrastructure.controller.dto.UserOutputDto; import com.example.apprecetas.user.infrastructure.controller.dto.UserOutputDto;
import com.example.apprecetas.user.infrastructure.mapper.UserMapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
...@@ -18,16 +20,21 @@ public class ReadUserController { ...@@ -18,16 +20,21 @@ public class ReadUserController {
private final ReadUserUseCase service; private final ReadUserUseCase service;
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@GetMapping("/{id}") @GetMapping("/{id}")
public ResponseEntity<UserOutputDto> readById(@PathVariable Long id) { public ResponseEntity<UserOutputDto> readById(@PathVariable Long id) {
return ResponseEntity.ok().body(service.readById(id)); return ResponseEntity.ok().body(mapper.map(service.readById(id)));
} }
@GetMapping @GetMapping
public ResponseEntity<List<UserOutputDto>> readAll() { public ResponseEntity<List<UserOutputDto>> readAll() {
if (service.readAll().isEmpty()) if (service.readAll().isEmpty())
return ResponseEntity.noContent().build(); return ResponseEntity.noContent().build();
return ResponseEntity.ok().body(service.readAll()); return ResponseEntity.ok().body(service.readAll().stream()
.map(mapper::map)
.toList()
);
} }
} }
...@@ -4,8 +4,10 @@ import com.example.apprecetas.exception.UnprocessableEntityException; ...@@ -4,8 +4,10 @@ import com.example.apprecetas.exception.UnprocessableEntityException;
import com.example.apprecetas.user.application.UpdateUserUseCase; import com.example.apprecetas.user.application.UpdateUserUseCase;
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.mapper.UserMapper;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -19,6 +21,8 @@ public class UpdateUserController { ...@@ -19,6 +21,8 @@ public class UpdateUserController {
private final UpdateUserUseCase service; private final UpdateUserUseCase service;
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 Long id, @Valid @RequestBody UserInputDto userInputDto, BindingResult result) {
if (result.hasErrors()) { if (result.hasErrors()) {
...@@ -27,7 +31,7 @@ public class UpdateUserController { ...@@ -27,7 +31,7 @@ public class UpdateUserController {
.collect(Collectors.joining("; ")); .collect(Collectors.joining("; "));
throw new UnprocessableEntityException(errorMsg); throw new UnprocessableEntityException(errorMsg);
} }
return ResponseEntity.ok().body(service.updateById(id, userInputDto)); return ResponseEntity.ok().body(mapper.map(service.updateById(id, mapper.map(userInputDto))));
} }
} }
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