add endpoint save user

This commit is contained in:
rayankonecny 2025-11-30 22:54:25 +00:00
parent d9f93f42c3
commit 280400ceea
9 changed files with 59 additions and 13 deletions

View file

@ -0,0 +1,13 @@
package main.java.models.requests;
import java.util.Set;
import main.java.models.enums.ProfileEnum;
import lombok.With;
@With
public record CreateUserRequest(
String name,
String email,
String password,
Set<ProfileEnum> profiles) {
}

View file

@ -3,3 +3,4 @@ main/java/models/exceptions/StandardError$StandardErrorBuilder.class
main/java/models/responses/UserResponse.class
main/java/models/enums/ProfileEnum.class
main/java/models/exceptions/StandardError.class
main/java/models/requests/CreateUserRequest.class

View file

@ -1,4 +1,5 @@
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/enums/ProfileEnum.java
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/exceptions/ResourceNotFoundException.java
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/exceptions/StandardError.java
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/requests/CreateUserRequest.java
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/responses/UserResponse.java

View file

@ -1,9 +1,12 @@
package br.com.rayankonecny.userserviceapi.controller;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestBody;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -12,21 +15,31 @@ import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import main.java.models.exceptions.StandardError;
import main.java.models.requests.CreateUserRequest;
import main.java.models.responses.UserResponse;
@Tag(name = "User Controller", description = "Controller responsible for user operations")
@RequestMapping("/api/users")
public interface UserController {
@Operation(summary = "Find User by ID", description = "Retrieve user information by user ID")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "User found successfully"),
@ApiResponse(responseCode = "404", description = "User not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = StandardError.class))),
@ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = StandardError.class))),
})
@GetMapping("/{id}")
ResponseEntity<UserResponse> findById(
@Parameter(description = "User id", required = true, example = "6927c8c75efcfda14c3ea570")
@PathVariable(name = "id") final String id);
@Operation(summary = "Find User by ID", description = "Retrieve user information by user ID")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "User found successfully"),
@ApiResponse(responseCode = "404", description = "User not found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = StandardError.class))),
@ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = StandardError.class))),
})
@GetMapping("/{id}")
ResponseEntity<UserResponse> findById(
@Parameter(description = "User id", required = true, example = "6927c8c75efcfda14c3ea570") @PathVariable(name = "id") final String id);
@Operation(summary = "Save new user")
@ApiResponses(value = {
@ApiResponse(responseCode = "201", description = "User created successfully"),
@ApiResponse(responseCode = "400", description = "Invalid request data", content = @Content(mediaType = "application/json", schema = @Schema(implementation = StandardError.class))),
@ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = StandardError.class)))
})
@PostMapping
ResponseEntity<Void> save(@RequestBody final CreateUserRequest createUserRequest);
}

View file

@ -2,13 +2,15 @@ package br.com.rayankonecny.userserviceapi.controller.impl;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;
import br.com.rayankonecny.userserviceapi.controller.UserController;
import br.com.rayankonecny.userserviceapi.service.UserService;
import lombok.RequiredArgsConstructor;
import main.java.models.requests.CreateUserRequest;
import main.java.models.responses.UserResponse;
import static org.springframework.http.HttpStatus.CREATED;
@RestController
@RequiredArgsConstructor
public class UserControllerImpl implements UserController {
@ -16,8 +18,14 @@ public class UserControllerImpl implements UserController {
private final UserService userService;
@Override
public ResponseEntity<UserResponse> findById(String id) {
public ResponseEntity<UserResponse> findById(final String id) {
return ResponseEntity.ok().body(userService.findById(id));
}
@Override
public ResponseEntity<Void> save(final CreateUserRequest createUserRequest) {
userService.save(createUserRequest);
return ResponseEntity.status(CREATED.value()).build();
}
}

View file

@ -1,8 +1,10 @@
package br.com.rayankonecny.userserviceapi.mapper;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import br.com.rayankonecny.userserviceapi.entity.User;
import main.java.models.requests.CreateUserRequest;
import main.java.models.responses.UserResponse;
import static org.mapstruct.NullValuePropertyMappingStrategy.IGNORE;
@ -12,4 +14,7 @@ import static org.mapstruct.NullValueCheckStrategy.ALWAYS;
public interface UserMapper {
UserResponse fromEntity(final User entity);
@Mapping(target = "id", ignore = true)
User fromRequest(CreateUserRequest createUserRequest);
}

View file

@ -7,6 +7,7 @@ import br.com.rayankonecny.userserviceapi.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import main.java.models.responses.UserResponse;
import main.java.models.exceptions.ResourceNotFoundException;
import main.java.models.requests.CreateUserRequest;
@Service
@RequiredArgsConstructor
@ -21,4 +22,8 @@ public class UserService {
"Object not found! Id: " + id + ", Type: " + UserResponse.class.getSimpleName())));
}
public void save(CreateUserRequest createUserRequest) {
userRepository.save(userMapper.fromRequest(createUserRequest));
}
}