@Audit
    @Operation(summary = "login", description = "User Login")
    @PostMapping(value = "/login")
    public ResponseEntity<LoginVO> login(@RequestBody LoginReq loginReq) {
        if (!StringUtils.hasText(loginReq.getUsername()) || !StringUtils.hasText(loginReq.getPassword())) {
            throw new ApiException(ApiExceptionEnum.USERNAME_OR_PASSWORD_REQUIRED);
        }

        LoginDTO loginDTO = LoginConverter.INSTANCE.fromReq2DTO(loginReq);
        return ResponseEntity.success(loginService.login(loginDTO));
    }
@Test
    void loginThrowsExceptionForMissingUsernameAndPassword() {
        LoginReq loginReq = new LoginReq();
        loginReq.setUsername("");
        loginReq.setPassword("");

        ApiException exception = assertThrows(ApiException.class, () -> loginController.login(loginReq));

        assertEquals(ApiExceptionEnum.USERNAME_OR_PASSWORD_REQUIRED, exception.getEx());
    }