Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 7e4d7bed authored by Flavio Ferraioli's avatar Flavio Ferraioli
Browse files

Document UserController

parent 7366ddc9
No related branches found
No related tags found
2 merge requests!106Release,!100Feature/open api
package com.aruba.simpl.usersroles.configurations;
import java.util.Arrays;
import org.springdoc.core.customizers.OpenApiCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OpenApiConfig {
@Bean
public OpenApiCustomizer customGlobalResponses() {
var statusCodesToClear = Arrays.asList("400", "401", "403", "404", "409");
return openApi -> openApi.getPaths()
.forEach((path, pathItem) -> pathItem.readOperations().forEach(operation -> {
operation.getResponses().remove("409");
for (String statusCode : statusCodesToClear) {
var response = operation.getResponses().get(statusCode);
if (response != null) {
response.setContent(null);
}
}
}));
}
}
......@@ -6,6 +6,12 @@ import com.aruba.simpl.common.model.dto.KeycloakUserDTO;
import com.aruba.simpl.usersroles.model.filters.KeycloakUserFilter;
import com.aruba.simpl.usersroles.services.KeycloakUserService;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Email;
import java.util.List;
......@@ -34,49 +40,199 @@ public class UserController implements UserExchange {
@PostMapping("as-t1user")
@ResponseStatus(HttpStatus.CREATED)
public String createUserAsT1(@RequestBody @Valid KeycloakUserDTO userDTO) {
@Operation(
summary = "Create a user",
description = "Creates a new tier-one user",
responses = {
@ApiResponse(
responseCode = "201",
description = "User created successfully",
content =
@Content(
mediaType = "text/plain",
schema =
@Schema(
description = "The Id of the newly created user",
example = "01929051-2adb-7ee5-994a-b36f64fbb4dd"))),
@ApiResponse(responseCode = "400", description = "Invalid input data"),
@ApiResponse(responseCode = "401", description = "Access denied"),
@ApiResponse(responseCode = "403", description = "Forbidden: User does not have the required role")
})
public String createUserAsT1(
@Parameter(description = "The user details", required = true) @RequestBody @Valid KeycloakUserDTO userDTO) {
log.info("Received POST request for user with email [{}]", userDTO);
return userService.createUser(userDTO);
}
@GetMapping("{uuid}/roles")
public List<KeycloakRoleDTO> getRoles(@PathVariable String uuid) {
@Operation(
summary = "Get user roles",
description = "Retrieves the roles associated with a user by its UUID",
responses = {
@ApiResponse(
responseCode = "200",
description = "Successfully retrieved user roles",
content =
@Content(
mediaType = "application/json",
array =
@ArraySchema(
schema = @Schema(implementation = KeycloakRoleDTO.class)))),
@ApiResponse(responseCode = "400", description = "Invalid input data"),
@ApiResponse(responseCode = "401", description = "Access denied"),
@ApiResponse(responseCode = "403", description = "Forbidden: User does not have the required role"),
@ApiResponse(responseCode = "404", description = "User not found"),
})
public List<KeycloakRoleDTO> getRoles(
@Parameter(description = "The UUID of the user", required = true) @PathVariable String uuid) {
log.info("Received GET request for roles of user with uuid [{}]", uuid);
return userService.getUserRoles(uuid);
}
@GetMapping
public KeycloakUserDTO getUser(@RequestParam @Valid @Email String email) {
@Operation(
summary = "Get user by email",
description = "Retrieves a user by its email address",
responses = {
@ApiResponse(
responseCode = "200",
description = "Successfully retrieved user",
content =
@Content(
mediaType = "application/json",
schema = @Schema(implementation = KeycloakUserDTO.class))),
@ApiResponse(responseCode = "400", description = "Invalid email format"),
@ApiResponse(responseCode = "401", description = "Access denied"),
@ApiResponse(responseCode = "403", description = "Forbidden: User does not have the required role"),
@ApiResponse(responseCode = "404", description = "User not found"),
})
public KeycloakUserDTO getUser(
@Parameter(description = "The email of the user", required = true, example = "user@example.com")
@RequestParam
@Valid
@Email
String email) {
log.info("Received GET request for user with userId [{}]", email);
return userService.getUserByEmail(email);
}
@GetMapping("{uuid}")
public KeycloakUserDTO getUserByUuid(@PathVariable String uuid) {
@Operation(
summary = "Get user by UUID",
description = "Retrieves a user by its UUID",
responses = {
@ApiResponse(
responseCode = "200",
description = "Successfully retrieved user",
content =
@Content(
mediaType = "application/json",
schema = @Schema(implementation = KeycloakUserDTO.class))),
@ApiResponse(responseCode = "400", description = "Invalid UUID format"),
@ApiResponse(responseCode = "401", description = "Access denied"),
@ApiResponse(responseCode = "403", description = "Forbidden: User does not have the required role"),
@ApiResponse(responseCode = "404", description = "User not found"),
})
public KeycloakUserDTO getUserByUuid(
@Parameter(
description = "The UUID of the user",
required = true,
example = "01929051-2adb-7ee5-994a-b36f64fbb4dd")
@PathVariable
String uuid) {
log.info("Received GET request for user with uuid [{}]", uuid);
return userService.getUserByUuid(uuid);
}
@PutMapping("{uuid}")
public void updateUser(@PathVariable String uuid, @RequestBody @Valid KeycloakUserDTO userDTO) {
@Operation(
summary = "Update user",
description = "Updates the details of an existing user by its UUID",
responses = {
@ApiResponse(responseCode = "200", description = "User updated successfully"),
@ApiResponse(responseCode = "400", description = "Invalid input data"),
@ApiResponse(responseCode = "401", description = "Access denied"),
@ApiResponse(responseCode = "403", description = "Forbidden: User does not have the required role"),
@ApiResponse(responseCode = "404", description = "User not found"),
})
public void updateUser(
@Parameter(
description = "The UUID of the user",
required = true,
example = "01929051-2adb-7ee5-994a-b36f64fbb4dd")
@PathVariable
String uuid,
@Parameter(description = "The updating user details", required = true) @RequestBody @Valid
KeycloakUserDTO userDTO) {
log.info("Received PUT request for user with uuid [{}]", uuid);
userService.updateUser(uuid, userDTO);
}
@PutMapping("{uuid}/roles")
public void updateUserRoles(@PathVariable String uuid, @RequestBody List<String> userRoles) {
@Operation(
summary = "Update user roles",
description = "Updates the roles associated with a user by its UUID",
responses = {
@ApiResponse(responseCode = "200", description = "User roles updated successfully"),
@ApiResponse(responseCode = "400", description = "Invalid input data"),
@ApiResponse(responseCode = "401", description = "Access denied"),
@ApiResponse(responseCode = "403", description = "Forbidden: User does not have the required role"),
@ApiResponse(responseCode = "404", description = "User not found"),
})
public void updateUserRoles(
@Parameter(
description = "The UUID of the user",
required = true,
example = "01929051-2adb-7ee5-994a-b36f64fbb4dd")
@PathVariable
String uuid,
@Parameter(description = "The list of roles to be assigned to the user", required = true) @RequestBody
List<String> userRoles) {
log.info("Received PUT request for user-roles of user with uuid [{}]", uuid);
userService.updateUserRoles(uuid, userRoles);
}
@DeleteMapping("{uuid}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteUser(@PathVariable String uuid) {
@Operation(
summary = "Delete user",
description = "Deletes a user by its UUID",
responses = {
@ApiResponse(responseCode = "204", description = "User deleted successfully"),
@ApiResponse(responseCode = "400", description = "Invalid UUID format"),
@ApiResponse(responseCode = "401", description = "Access denied"),
@ApiResponse(responseCode = "403", description = "Forbidden: User does not have the required role"),
@ApiResponse(responseCode = "404", description = "User not found"),
})
public void deleteUser(
@Parameter(
description = "The UUID of the user",
required = true,
example = "01929051-2adb-7ee5-994a-b36f64fbb4dd")
@PathVariable
String uuid) {
log.info("Received DELETE request for user with uuid [{}]", uuid);
userService.deleteUser(uuid);
}
@GetMapping("search")
@Operation(
summary = "Search users",
description = "Searches for users based on various filter criteria",
responses = {
@ApiResponse(
responseCode = "200",
description = "Successfully retrieved list of users",
content =
@Content(
mediaType = "application/json",
array =
@ArraySchema(
schema = @Schema(implementation = KeycloakUserDTO.class)))),
@ApiResponse(responseCode = "400", description = "Invalid filter criteria"),
@ApiResponse(responseCode = "401", description = "Access denied"),
@ApiResponse(responseCode = "403", description = "Forbidden: User does not have the required role"),
})
public List<KeycloakUserDTO> search(@ParameterObject KeycloakUserFilter filter) {
return userService.search(filter);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment