feat(CreateUser): implementada funcionalidad de creación de usuarios

parent 7fde8cf1
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 CreateUserUseCase {
UserOutputDto create(UserInputDto userInputDto);
}
package com.example.apprecetas.user.application.impl;
import com.example.apprecetas.user.application.CreateUserUseCase;
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;
import org.mapstruct.factory.Mappers;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class CreateUserUseCaseImpl implements CreateUserUseCase {
private final CreateUserRepository repository;
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@Override
public UserOutputDto create(UserInputDto userInputDto) {
UserJpa userJpa = mapper.mapJpa(mapper.map(userInputDto));
UserJpa createdUser = repository.create(userJpa);
return mapper.map(mapper.mapJpa(createdUser));
}
}
package com.example.apprecetas.user.domain.repository;
import com.example.apprecetas.user.infrastructure.repository.jpa.UserJpa;
public interface CreateUserRepository {
UserJpa create(UserJpa userJpa);
}
package com.example.apprecetas.user.infrastructure.controller;
import com.example.apprecetas.exceptions.UnvalidInputEntityException;
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 jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.net.URI;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
public class CreateUserController {
private final CreateUserUseCase service;
@PostMapping
public ResponseEntity<UserOutputDto> create(@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);
}
URI location = URI.create("/user");
return ResponseEntity.created(location).body(service.create(userInputDto));
}
}
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 lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
@Repository
@RequiredArgsConstructor
public class CreateUserRepositoryImpl implements CreateUserRepository {
private final UserRepositoryJpa repositoryJpa;
@Override
public UserJpa create(UserJpa userJpa) {
return repositoryJpa.save(userJpa);
}
}
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