feat(UpdateUser): implementada funcionalidad para actualizar usuarios

parent fd50d66b
package com.example.apprecetas.user.application;
import com.example.apprecetas.user.infrastructure.controller.dto.UserInputDto;
import com.example.apprecetas.user.infrastructure.controller.dto.UserOutputDto;
public interface UpdateUserUseCase {
UserOutputDto updateById(Long id, UserInputDto userInputDto);
}
package com.example.apprecetas.user.application.impl;
import com.example.apprecetas.exceptions.EntityNotFoundException;
import com.example.apprecetas.user.application.UpdateUserUseCase;
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;
import org.mapstruct.factory.Mappers;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class UpdateUserUseCaseImpl implements UpdateUserUseCase {
private final UpdateUserRepository updateUserRepository;
private final ReadUserRepository readUserRepository;
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@Override
public UserOutputDto updateById(Long id, UserInputDto userInputDto) {
UserJpa userJpa = readUserRepository.readById(id)
.orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado"));
UserJpa user = mapper.mapJpa(mapper.map(userInputDto));
UserJpa modifiedUser = updateUserRepository.updateById(id, user).get();
return mapper.map(mapper.mapJpa(modifiedUser));
}
}
package com.example.apprecetas.user.domain.repository;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserJpa;
import java.util.Optional;
public interface UpdateUserRepository {
Optional<UserJpa> updateById(Long id, UserJpa userJpa);
}
package com.example.apprecetas.user.infrastructure.controller;
import com.example.apprecetas.exceptions.UnvalidInputEntityException;
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 jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
public class UpdateUserController {
private final UpdateUserUseCase service;
@PutMapping("/{id}")
public ResponseEntity<UserOutputDto> update(@PathVariable Long id, @Valid @RequestBody UserInputDto userInputDto, BindingResult result) {
if (result.hasErrors()) {
String errorMsg = result.getFieldErrors().stream()
.map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage())
.collect(Collectors.joining("; "));
throw new UnvalidInputEntityException(errorMsg);
}
return ResponseEntity.ok().body(service.updateById(id, userInputDto));
}
}
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 lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
@RequiredArgsConstructor
public class UpdateUserRepositoryImpl implements UpdateUserRepository {
private final UserRepositoryJpa repositoryJpa;
@Override
public Optional<UserJpa> updateById(Long id, UserJpa userJpa) {
Optional<UserJpa> userJpaOptional = repositoryJpa.findById(id);
userJpaOptional.ifPresent(jpa -> {
jpa.setId(id);
jpa.setName(userJpa.getName());
jpa.setSurname(userJpa.getSurname());
jpa.setEmail(userJpa.getEmail());
jpa.setPassword(userJpa.getPassword());
});
return userJpaOptional.map(repositoryJpa::save);
}
}
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