268 lines
11 KiB
Java
268 lines
11 KiB
Java
package ru.soune.nocopy.adminpanel.handler;
|
|||
|
|
|
||
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||
|
|
import lombok.RequiredArgsConstructor;
|
||
|
|
import lombok.extern.slf4j.Slf4j;
|
||
|
|
import org.springframework.stereotype.Component;
|
||
|
|
import ru.soune.nocopy.adminpanel.dto.*;
|
||
|
|
import ru.soune.nocopy.adminpanel.entity.AdminUser;
|
||
|
|
import ru.soune.nocopy.adminpanel.exceptions.AdminUserNotFoundException;
|
||
|
|
import ru.soune.nocopy.adminpanel.exceptions.EmailAlreadyExistsException;
|
||
|
|
import ru.soune.nocopy.adminpanel.permission.AdminPermission;
|
||
|
|
import ru.soune.nocopy.adminpanel.service.AdminUserService;
|
||
|
|
import ru.soune.nocopy.adminpanel.util.JwtUtil;
|
||
|
|
import ru.soune.nocopy.adminpanel.util.MessageCode;
|
||
|
|
|
||
|
|
import java.util.Arrays;
|
||
|
|
import java.util.List;
|
||
|
|
import java.util.stream.Collectors;
|
||
|
|
|
||
|
|
@Component
|
||
|
|
@RequiredArgsConstructor
|
||
|
|
@Slf4j
|
||
|
|
public class AdminUserHandler implements RequestHandler {
|
||
|
|
|
||
|
|
private final ObjectMapper objectMapper;
|
||
|
|
|
||
|
|
private final AdminUserService adminUserService;
|
||
|
|
|
||
|
|
private final JwtUtil jwtUtil;
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public BaseResponse handle(BaseRequest request) throws Exception {
|
||
|
|
AdminUserRequest adminRequest = objectMapper.convertValue(request.getMessageBody(), AdminUserRequest.class);
|
||
|
|
String action = adminRequest.getAction();
|
||
|
|
|
||
|
|
return switch (action) {
|
||
|
|
case "login" -> handleLogin(request, adminRequest);
|
||
|
|
case "create" -> handleCreate(request, adminRequest);
|
||
|
|
case "get_all" -> handleGetAll(request);
|
||
|
|
case "get_by_id" -> handleGetById(request, adminRequest);
|
||
|
|
case "update" -> handleUpdate(request, adminRequest);
|
||
|
|
case "set_super_admin" -> handleSetSuperAdmin(request, adminRequest);
|
||
|
|
case "toggle_active" -> handleToggleActive(request, adminRequest);
|
||
|
|
case "delete" -> handleDelete(request, adminRequest);
|
||
|
|
default -> handleInvalidAction(request, action);
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
private BaseResponse handleLogin(BaseRequest request, AdminUserRequest adminRequest) {
|
||
|
|
String email = adminRequest.getEmail();
|
||
|
|
String password = adminRequest.getPassword();
|
||
|
|
|
||
|
|
boolean authenticated = adminUserService.authenticate(email, password);
|
||
|
|
|
||
|
|
if (!authenticated) {
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.INVALID_CREDENTIALS.getCode())
|
||
|
|
.messageDesc(MessageCode.INVALID_CREDENTIALS.getDescription())
|
||
|
|
.build();
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
AdminUser admin = adminUserService.findByEmail(email);
|
||
|
|
|
||
|
|
if (!admin.getIsActive()) {
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.ADMIN_INACTIVE.getCode())
|
||
|
|
.messageDesc(MessageCode.ADMIN_INACTIVE.getDescription())
|
||
|
|
.build();
|
||
|
|
}
|
||
|
|
|
||
|
|
String token = jwtUtil.generateToken(admin.getEmail(), admin.getId());
|
||
|
|
|
||
|
|
LoginResponse loginResponse = LoginResponse.builder()
|
||
|
|
.success(true)
|
||
|
|
.token(token)
|
||
|
|
.admin(convertToResponse(admin))
|
||
|
|
.build();
|
||
|
|
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.SUCCESS.getCode())
|
||
|
|
.messageDesc(MessageCode.SUCCESS.getDescription())
|
||
|
|
.messageBody(loginResponse)
|
||
|
|
.build();
|
||
|
|
} catch (AdminUserNotFoundException e) {
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.ADMIN_NOT_FOUND.getCode())
|
||
|
|
.messageDesc(MessageCode.ADMIN_NOT_FOUND.getDescription())
|
||
|
|
.build();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private BaseResponse handleCreate(BaseRequest request, AdminUserRequest adminRequest) {
|
||
|
|
try {
|
||
|
|
boolean superAdmin = adminRequest.getIsSuperAdmin() != null && adminRequest.getIsSuperAdmin();
|
||
|
|
AdminUser admin = adminUserService.create(
|
||
|
|
adminRequest.getFullName(),
|
||
|
|
adminRequest.getEmail(),
|
||
|
|
adminRequest.getPassword(),
|
||
|
|
superAdmin
|
||
|
|
);
|
||
|
|
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.SUCCESS.getCode())
|
||
|
|
.messageDesc(MessageCode.SUCCESS.getDescription())
|
||
|
|
.messageBody(convertToResponse(admin))
|
||
|
|
.build();
|
||
|
|
} catch (EmailAlreadyExistsException e) {
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.EMAIL_ALREADY_EXISTS.getCode())
|
||
|
|
.messageDesc(MessageCode.EMAIL_ALREADY_EXISTS.getDescription())
|
||
|
|
.build();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private BaseResponse handleGetAll(BaseRequest request) {
|
||
|
|
List<AdminUserResponse> admins = adminUserService.findAll().stream()
|
||
|
|
.map(this::convertToResponse)
|
||
|
|
.collect(Collectors.toList());
|
||
|
|
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.SUCCESS.getCode())
|
||
|
|
.messageDesc(MessageCode.SUCCESS.getDescription())
|
||
|
|
.messageBody(admins)
|
||
|
|
.build();
|
||
|
|
}
|
||
|
|
|
||
|
|
private BaseResponse handleGetById(BaseRequest request, AdminUserRequest adminRequest) {
|
||
|
|
try {
|
||
|
|
AdminUser admin = adminUserService.findById(adminRequest.getAdminId());
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.SUCCESS.getCode())
|
||
|
|
.messageDesc(MessageCode.SUCCESS.getDescription())
|
||
|
|
.messageBody(convertToResponse(admin))
|
||
|
|
.build();
|
||
|
|
} catch (AdminUserNotFoundException e) {
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.ADMIN_NOT_FOUND.getCode())
|
||
|
|
.messageDesc(MessageCode.ADMIN_NOT_FOUND.getDescription())
|
||
|
|
.build();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private BaseResponse handleUpdate(BaseRequest request, AdminUserRequest adminRequest) {
|
||
|
|
try {
|
||
|
|
AdminUser admin = adminUserService.update(
|
||
|
|
adminRequest.getAdminId(),
|
||
|
|
adminRequest.getFullName(),
|
||
|
|
adminRequest.getEmail(),
|
||
|
|
adminRequest.getPassword()
|
||
|
|
);
|
||
|
|
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.SUCCESS.getCode())
|
||
|
|
.messageDesc(MessageCode.SUCCESS.getDescription())
|
||
|
|
.messageBody(convertToResponse(admin))
|
||
|
|
.build();
|
||
|
|
} catch (AdminUserNotFoundException e) {
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.ADMIN_NOT_FOUND.getCode())
|
||
|
|
.messageDesc(MessageCode.ADMIN_NOT_FOUND.getDescription())
|
||
|
|
.build();
|
||
|
|
} catch (EmailAlreadyExistsException e) {
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.EMAIL_ALREADY_EXISTS.getCode())
|
||
|
|
.messageDesc(MessageCode.EMAIL_ALREADY_EXISTS.getDescription())
|
||
|
|
.build();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private BaseResponse handleSetSuperAdmin(BaseRequest request, AdminUserRequest adminRequest) {
|
||
|
|
try {
|
||
|
|
AdminUser admin = adminUserService.setSuperAdmin(adminRequest.getAdminId(), adminRequest.getIsSuperAdmin());
|
||
|
|
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.SUCCESS.getCode())
|
||
|
|
.messageDesc(MessageCode.SUCCESS.getDescription())
|
||
|
|
.messageBody(convertToResponse(admin))
|
||
|
|
.build();
|
||
|
|
} catch (AdminUserNotFoundException e) {
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.ADMIN_NOT_FOUND.getCode())
|
||
|
|
.messageDesc(MessageCode.ADMIN_NOT_FOUND.getDescription())
|
||
|
|
.build();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private BaseResponse handleToggleActive(BaseRequest request, AdminUserRequest adminRequest) {
|
||
|
|
try {
|
||
|
|
adminUserService.toggleActive(adminRequest.getAdminId(), adminRequest.getIsActive());
|
||
|
|
AdminUser admin = adminUserService.findById(adminRequest.getAdminId());
|
||
|
|
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.SUCCESS.getCode())
|
||
|
|
.messageDesc(MessageCode.SUCCESS.getDescription())
|
||
|
|
.messageBody(convertToResponse(admin))
|
||
|
|
.build();
|
||
|
|
} catch (AdminUserNotFoundException e) {
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.ADMIN_NOT_FOUND.getCode())
|
||
|
|
.messageDesc(MessageCode.ADMIN_NOT_FOUND.getDescription())
|
||
|
|
.build();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private BaseResponse handleDelete(BaseRequest request, AdminUserRequest adminRequest) {
|
||
|
|
try {
|
||
|
|
adminUserService.delete(adminRequest.getAdminId());
|
||
|
|
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.SUCCESS.getCode())
|
||
|
|
.messageDesc(MessageCode.SUCCESS.getDescription())
|
||
|
|
.messageBody("Admin deleted successfully")
|
||
|
|
.build();
|
||
|
|
} catch (AdminUserNotFoundException e) {
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.ADMIN_NOT_FOUND.getCode())
|
||
|
|
.messageDesc(MessageCode.ADMIN_NOT_FOUND.getDescription())
|
||
|
|
.build();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private BaseResponse handleInvalidAction(BaseRequest request, String action) {
|
||
|
|
ActionResponse response = ActionResponse.builder()
|
||
|
|
.action(action)
|
||
|
|
.availableActions(Arrays.asList(
|
||
|
|
"login", "create", "get_all", "get_by_id",
|
||
|
|
"update", "set_super_admin", "toggle_active", "delete"))
|
||
|
|
.build();
|
||
|
|
|
||
|
|
return BaseResponse.builder()
|
||
|
|
.msgId(request.getMsgId())
|
||
|
|
.messageCode(MessageCode.INVALID_ACTION.getCode())
|
||
|
|
.messageDesc(MessageCode.INVALID_ACTION.getDescription())
|
||
|
|
.messageBody(response)
|
||
|
|
.build();
|
||
|
|
}
|
||
|
|
|
||
|
|
private AdminUserResponse convertToResponse(AdminUser admin) {
|
||
|
|
return AdminUserResponse.builder()
|
||
|
|
.id(admin.getId())
|
||
|
|
.fullName(admin.getFullName())
|
||
|
|
.email(admin.getEmail())
|
||
|
|
.isActive(admin.getIsActive())
|
||
|
|
.isSuperAdmin(AdminPermission.isSuperAdmin(admin.getPermissions()))
|
||
|
|
.createdAt(admin.getCreatedAt().toString())
|
||
|
|
.build();
|
||
|
|
}
|
||
|
|
}
|