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/responses/UserResponse.class
main/java/models/enums/ProfileEnum.class main/java/models/enums/ProfileEnum.class
main/java/models/exceptions/StandardError.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/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/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/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 /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; package br.com.rayankonecny.userserviceapi.controller;
import org.springframework.http.MediaType;
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;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; 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.Operation;
import io.swagger.v3.oas.annotations.Parameter; 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.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import main.java.models.exceptions.StandardError; import main.java.models.exceptions.StandardError;
import main.java.models.requests.CreateUserRequest;
import main.java.models.responses.UserResponse; import main.java.models.responses.UserResponse;
@Tag(name = "User Controller", description = "Controller responsible for user operations") @Tag(name = "User Controller", description = "Controller responsible for user operations")
@RequestMapping("/api/users") @RequestMapping("/api/users")
public interface UserController { public interface UserController {
@Operation(summary = "Find User by ID", description = "Retrieve user information by user ID") @Operation(summary = "Find User by ID", description = "Retrieve user information by user ID")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "User found successfully"), @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 = "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 = "application/json", 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}") @GetMapping("/{id}")
ResponseEntity<UserResponse> findById( ResponseEntity<UserResponse> findById(
@Parameter(description = "User id", required = true, example = "6927c8c75efcfda14c3ea570") @Parameter(description = "User id", required = true, example = "6927c8c75efcfda14c3ea570") @PathVariable(name = "id") final String id);
@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.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import br.com.rayankonecny.userserviceapi.controller.UserController; import br.com.rayankonecny.userserviceapi.controller.UserController;
import br.com.rayankonecny.userserviceapi.service.UserService; import br.com.rayankonecny.userserviceapi.service.UserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import main.java.models.requests.CreateUserRequest;
import main.java.models.responses.UserResponse; import main.java.models.responses.UserResponse;
import static org.springframework.http.HttpStatus.CREATED;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
public class UserControllerImpl implements UserController { public class UserControllerImpl implements UserController {
@ -16,8 +18,14 @@ public class UserControllerImpl implements UserController {
private final UserService userService; private final UserService userService;
@Override @Override
public ResponseEntity<UserResponse> findById(String id) { public ResponseEntity<UserResponse> findById(final String id) {
return ResponseEntity.ok().body(userService.findById(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; package br.com.rayankonecny.userserviceapi.mapper;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import br.com.rayankonecny.userserviceapi.entity.User; import br.com.rayankonecny.userserviceapi.entity.User;
import main.java.models.requests.CreateUserRequest;
import main.java.models.responses.UserResponse; import main.java.models.responses.UserResponse;
import static org.mapstruct.NullValuePropertyMappingStrategy.IGNORE; import static org.mapstruct.NullValuePropertyMappingStrategy.IGNORE;
@ -12,4 +14,7 @@ import static org.mapstruct.NullValueCheckStrategy.ALWAYS;
public interface UserMapper { public interface UserMapper {
UserResponse fromEntity(final User entity); 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 lombok.RequiredArgsConstructor;
import main.java.models.responses.UserResponse; import main.java.models.responses.UserResponse;
import main.java.models.exceptions.ResourceNotFoundException; import main.java.models.exceptions.ResourceNotFoundException;
import main.java.models.requests.CreateUserRequest;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@ -21,4 +22,8 @@ public class UserService {
"Object not found! Id: " + id + ", Type: " + UserResponse.class.getSimpleName()))); "Object not found! Id: " + id + ", Type: " + UserResponse.class.getSimpleName())));
} }
public void save(CreateUserRequest createUserRequest) {
userRepository.save(userMapper.fromRequest(createUserRequest));
}
} }