Add admin user endpoints

This commit is contained in:
litoral05
2026-06-03 12:09:51 +01:00
parent 20299f46a0
commit 6659140440
6 changed files with 123 additions and 0 deletions
@@ -3,6 +3,8 @@ package com.litoralregas.backend_gateway.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@@ -17,4 +19,9 @@ public class SecurityConfig {
)
.build();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
@@ -0,0 +1,28 @@
package com.litoralregas.backend_gateway.user;
import com.litoralregas.backend_gateway.user.dto.CreateUserRequest;
import com.litoralregas.backend_gateway.user.dto.UserResponse;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/admin/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@PostMapping
public UserResponse create(@RequestBody CreateUserRequest request) {
return userService.create(request);
}
@GetMapping
public List<UserResponse> findAll() {
return userService.findAll();
}
}
@@ -0,0 +1,63 @@
package com.litoralregas.backend_gateway.user;
import com.litoralregas.backend_gateway.client.ClientEntity;
import com.litoralregas.backend_gateway.client.ClientRepository;
import com.litoralregas.backend_gateway.user.dto.CreateUserRequest;
import com.litoralregas.backend_gateway.user.dto.UserResponse;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
private final UserRepository userRepository;
private final ClientRepository clientRepository;
private final PasswordEncoder passwordEncoder;
public UserService(
UserRepository userRepository,
ClientRepository clientRepository,
PasswordEncoder passwordEncoder
) {
this.userRepository = userRepository;
this.clientRepository = clientRepository;
this.passwordEncoder = passwordEncoder;
}
public UserResponse create(CreateUserRequest request) {
ClientEntity client = clientRepository.findById(request.clientId())
.orElseThrow(() -> new RuntimeException("Client not found"));
UserEntity user = new UserEntity();
user.setClient(client);
user.setUsername(request.username());
user.setPasswordHash(passwordEncoder.encode(request.password()));
user.setRole(request.role());
user.setEnabled(true);
UserEntity saved = userRepository.save(user);
return toResponse(saved);
}
public List<UserResponse> findAll() {
return userRepository.findAll()
.stream()
.map(this::toResponse)
.toList();
}
private UserResponse toResponse(UserEntity user) {
return new UserResponse(
user.getId(),
user.getClient().getId(),
user.getClient().getName(),
user.getUsername(),
user.getRole(),
user.isEnabled(),
user.getCreatedAt()
);
}
}
@@ -0,0 +1,11 @@
package com.litoralregas.backend_gateway.user.dto;
import com.litoralregas.backend_gateway.user.UserRole;
public record CreateUserRequest(
Long clientId,
String username,
String password,
UserRole role
) {
}
@@ -0,0 +1,14 @@
package com.litoralregas.backend_gateway.user.dto;
import com.litoralregas.backend_gateway.user.UserRole;
public record UserResponse(
Long id,
Long clientId,
String clientName,
String username,
UserRole role,
boolean enabled,
String createdAt
) {
}