
com.opencredo.concourse.spring.demo.controllers.UserController Maven / Gradle / Ivy
The newest version!
package com.opencredo.concourse.spring.demo.controllers;
import com.opencredo.concourse.domain.events.views.EventView;
import com.opencredo.concourse.domain.time.StreamTimestamp;
import com.opencredo.concourse.mapping.commands.methods.proxying.CommandProxyFactory;
import com.opencredo.concourse.spring.demo.commands.UserCommands;
import com.opencredo.concourse.spring.demo.services.UserService;
import com.opencredo.concourse.spring.demo.views.CreateUserRequest;
import com.opencredo.concourse.spring.demo.views.UserView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.net.URI;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.time.Instant;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@RestController
@RequestMapping(path = "/api/v1/acl/users")
public class UserController {
private final UserCommands userCommands;
private final UserService userService;
@Autowired
public UserController(CommandProxyFactory commandBus, UserService userService) {
userCommands = commandBus.getProxy(UserCommands.class);
this.userService = userService;
}
@RequestMapping(path = "", method = RequestMethod.GET)
public Map getUsers() {
return userService.getUsers();
}
@RequestMapping(path = "{userId}", method = RequestMethod.GET)
public UserView getUser(@PathVariable("userId") UUID userId) {
return userService.getUser(userId).orElseThrow(UserNotFoundException::new);
}
@RequestMapping(path = "{userId}/history", method = RequestMethod.GET)
public List getHistory(@PathVariable("userId") UUID userId) {
return userService.getHistory(userId);
}
@RequestMapping(path = "", method = RequestMethod.POST)
public CompletableFuture> createUser(@RequestBody CreateUserRequest createUserRequest) throws NoSuchAlgorithmException {
UUID id = UUID.randomUUID();
return userCommands.create(
StreamTimestamp.of("admin", Instant.now()),
id,
createUserRequest.getName(),
MessageDigest.getInstance("MD5").digest(createUserRequest.getPassword().getBytes()))
.thenApply(userId -> ResponseEntity.created(URI.create("/users/" + userId)).build());
}
@RequestMapping(path = "{userId}/name", method = RequestMethod.POST)
public CompletableFuture updateUsername(@PathVariable("userId") UUID userId,
@RequestBody String name) {
return userCommands.updateName(
StreamTimestamp.of("admin", Instant.now()),
userId,
name);
}
@RequestMapping(path = "{userId}/groups", method = RequestMethod.POST)
public CompletableFuture addUserToGroup(@PathVariable("userId") UUID userId,
@RequestBody UUID groupId) {
return userCommands.addToGroup(
StreamTimestamp.of("admin", Instant.now()),
userId,
groupId);
}
@RequestMapping(path = "{userId}/groups/{groupId}", method = RequestMethod.DELETE)
public CompletableFuture removeUserFromGroup(@PathVariable("userId") UUID userId,
@PathVariable("groupId") UUID groupId) {
return userCommands.removeFromGroup(
StreamTimestamp.of("admin", Instant.now()),
userId,
groupId);
}
@RequestMapping(path = "{userId}", method = RequestMethod.DELETE)
public CompletableFuture> deleteUser(@PathVariable("userId") UUID userId) {
return userCommands.delete(
StreamTimestamp.of("admin", Instant.now()),
userId)
.thenApply(v -> ResponseEntity.ok().build());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy