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

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