feat:Init project
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
package com.sjmresorts.opsapp;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.web.servlet.ServletComponentScan;
|
||||
import org.springframework.data.web.config.EnableSpringDataWebSupport;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
@SpringBootApplication
|
||||
@ServletComponentScan
|
||||
@EnableScheduling
|
||||
@EnableAsync
|
||||
@EnableSpringDataWebSupport(pageSerializationMode = EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO)
|
||||
public class MainApplication{
|
||||
|
||||
public static void main( String[] args ) {
|
||||
SpringApplication.run(MainApplication.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package com.sjmresorts.opsapp.admin.controllers;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.appsetting.AdminDevicesInfoPageRequest;
|
||||
import com.sjmresorts.opsapp.admin.dtos.appsetting.AdminDevicesInfoPageResponse;
|
||||
import com.sjmresorts.opsapp.admin.dtos.appsetting.AdminGetClientInfosResponse;
|
||||
import com.sjmresorts.opsapp.admin.dtos.appsetting.ClientInfosDto;
|
||||
import com.sjmresorts.opsapp.admin.services.AdminDevicesService;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import com.sjmresorts.opsapp.common.dtos.DataTableResult;
|
||||
import com.sjmresorts.opsapp.common.utils.JwtTokenUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Tag(name = "CMS", description = "APIs for Admin Devices functions")
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/admin")
|
||||
public class AdminDevicesController {
|
||||
|
||||
@Resource
|
||||
private AdminDevicesService adminDeviceService;
|
||||
|
||||
@Operation(
|
||||
summary = "Query CMS devices info page",
|
||||
description = "API for query CMS devices info page"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "CMS devices info page queried successful"),
|
||||
@ApiResponse(responseCode = "400", description = "Invalid request data")
|
||||
})
|
||||
@PostMapping(value = "/devices/queryPage", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<AdminDevicesInfoPageResponse> getAppDevicesByPage(HttpServletRequest request,
|
||||
|
||||
@RequestBody(required = true) AdminDevicesInfoPageRequest pageRequest) {
|
||||
|
||||
DataTableResult<ClientInfosDto> devicesInfoList = adminDeviceService.getDevicesInfoListByPage(pageRequest);
|
||||
AdminDevicesInfoPageResponse devicesInfoResponse = new AdminDevicesInfoPageResponse();
|
||||
devicesInfoResponse.setCode("200");
|
||||
devicesInfoResponse.setSuccess(true);
|
||||
devicesInfoResponse.setMessage("Query Successfully");
|
||||
devicesInfoResponse.setData(devicesInfoList);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(devicesInfoResponse);
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "Update CMS devices info",
|
||||
description = "API for CMS devices info update"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "CMS devices info updated successful"),
|
||||
@ApiResponse(responseCode = "400", description = "Invalid request data")
|
||||
})
|
||||
@PostMapping(value = "/devices/update", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<BaseApiResponse> updateDevice(
|
||||
HttpServletRequest request,
|
||||
@RequestBody ClientInfosDto requestData) {
|
||||
LoginUserInfo loginUserInfo = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if (loginUserInfo == null) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
} else {
|
||||
BaseApiResponse responseData = adminDeviceService.updateDevice(requestData, loginUserInfo);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "Get one CMS devices info",
|
||||
description = "API for get one CMS devices info"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "CMS devices info got successful"),
|
||||
@ApiResponse(responseCode = "400", description = "Invalid request data")
|
||||
})
|
||||
@GetMapping(value = "/devices/{deviceId}", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<AdminGetClientInfosResponse> getAppDeviceById(
|
||||
@PathVariable(name = "deviceId", required = true) @NotNull Long deviceId) {
|
||||
|
||||
AdminGetClientInfosResponse responseData = new AdminGetClientInfosResponse();
|
||||
ClientInfosDto deviceDto = adminDeviceService.queryDeviceById(deviceId);
|
||||
responseData.setCode("200");
|
||||
responseData.setSuccess(deviceDto != null);
|
||||
responseData.setMessage(deviceDto != null ? "Query Successfully" : "Device does not exists");
|
||||
responseData.setData(deviceDto);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
package com.sjmresorts.opsapp.admin.controllers;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.login.AdminLoginRequest;
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.login.AdminLoginResponse;
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.login.AdminLogoutResponse;
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.login.CmsLoginInfo;
|
||||
import com.sjmresorts.opsapp.admin.services.AdminLoginService;
|
||||
import com.sjmresorts.opsapp.common.constants.AppConstants;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.RefreshTokenResponse;
|
||||
import com.sjmresorts.opsapp.authentication.models.UserToken;
|
||||
import com.sjmresorts.opsapp.authentication.services.UserTokenService;
|
||||
import com.sjmresorts.opsapp.common.utils.JwtTokenUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.Valid;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Base64;
|
||||
|
||||
@Tag(name = "CMS", description = "APIs for CMS administration")
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/admin")
|
||||
@CrossOrigin(origins = "*")
|
||||
public class AdminLoginController {
|
||||
|
||||
@Resource
|
||||
private AdminLoginService adminLoginService;
|
||||
@Resource
|
||||
private UserTokenService userTokenService;
|
||||
|
||||
@Operation(
|
||||
summary = "CMS Login",
|
||||
description = "API for CMS login with input ad account and password"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "Check ad login success")
|
||||
})
|
||||
@PostMapping(value="/login",produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<AdminLoginResponse> cmsLogin(
|
||||
HttpServletRequest request,
|
||||
@Parameter(description = "login request info", required = true) @Valid @RequestBody AdminLoginRequest requestData){
|
||||
AdminLoginResponse result = new AdminLoginResponse();
|
||||
String passwordVal = requestData.getPassword();
|
||||
if(StringUtils.isNotBlank(passwordVal)) {
|
||||
passwordVal =new String(Base64.getDecoder().decode(passwordVal.getBytes()));
|
||||
}
|
||||
int isCheckLogin;
|
||||
try{
|
||||
isCheckLogin = adminLoginService.checkLoginByLoginIdAndPassword(requestData.getUserCode(), passwordVal);
|
||||
} catch (Exception e) {
|
||||
result.setSuccess(false);
|
||||
result.setCode("500");
|
||||
result.setMessage(e.getCause().toString());
|
||||
return ResponseEntity.status(HttpStatus.OK).body(result);
|
||||
}
|
||||
|
||||
if (isCheckLogin >= 1) {
|
||||
CmsLoginInfo loginInfo;
|
||||
try{
|
||||
loginInfo = adminLoginService.getLoginUserInfoByEmployeeId(requestData.getUserCode());
|
||||
} catch (Exception e) {
|
||||
result.setSuccess(false);
|
||||
result.setCode("500");
|
||||
result.setMessage(e.getCause().toString());
|
||||
return ResponseEntity.status(HttpStatus.OK).body(result);
|
||||
}
|
||||
if (loginInfo != null && loginInfo.getLoginUser()!=null) {
|
||||
userTokenService.clearUserTokenByType(AppConstants.CMS_API_ACCESS_TOKEN_TYPE,requestData.getUserCode());
|
||||
userTokenService.clearUserTokenByType(AppConstants.CMS_REFRESH_TOKEN_TYPE,requestData.getUserCode());
|
||||
LoginUserInfo loginUser = loginInfo.getLoginUser();
|
||||
loginUser.setLoginSource("cms_login");
|
||||
UserToken accessToken = JwtTokenUtil.generateTokenByLoginUser(AppConstants.CMS_API_ACCESS_TOKEN_TYPE,loginUser);
|
||||
userTokenService.saveUserToken(accessToken);
|
||||
UserToken refreshToken = JwtTokenUtil.generateTokenByLoginUser(AppConstants.CMS_REFRESH_TOKEN_TYPE,loginUser);
|
||||
userTokenService.saveUserToken(refreshToken);
|
||||
loginInfo.setAccessToken(accessToken.getTokenValue());
|
||||
loginInfo.setRefreshToken(refreshToken.getTokenValue());
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
result.setMessage("User "+requestData.getUserCode() + " login CMS successful.");
|
||||
result.setLoginInfo(loginInfo);
|
||||
} else {
|
||||
result.setSuccess(false);
|
||||
result.setMessage("User "+requestData.getUserCode()+" not found.");
|
||||
}
|
||||
} else if (isCheckLogin == -2) {
|
||||
result.setSuccess(false);
|
||||
result.setMessage(requestData.getUserCode() + " has been locked.");
|
||||
} else if (isCheckLogin == -3) {
|
||||
result.setSuccess(false);
|
||||
result.setMessage(requestData.getUserCode() + " has been disabled.");
|
||||
} else {
|
||||
result.setSuccess(false);
|
||||
result.setMessage("Incorrect login ID or password.");
|
||||
}
|
||||
return ResponseEntity.status(HttpStatus.OK).body(result);
|
||||
}
|
||||
|
||||
@PostMapping(value="/verifyToken",produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<String> verifyToken(
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response) {
|
||||
return ResponseEntity.status(HttpStatus.OK).body("Token Verified");
|
||||
}
|
||||
|
||||
@PostMapping(value="/logout",produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<AdminLogoutResponse> processLogout(
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response) {
|
||||
AdminLogoutResponse result = new AdminLogoutResponse();
|
||||
LoginUserInfo loginUser = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if(loginUser!=null){
|
||||
adminLoginService.processLogout(loginUser);
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
result.setMessage("Logout successful.");
|
||||
}else{
|
||||
result.setSuccess(false);
|
||||
result.setCode("401");
|
||||
result.setMessage("Unauthorized logout");
|
||||
}
|
||||
return ResponseEntity.status(HttpStatus.OK).body(result);
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "Renew API token by refresh token",
|
||||
description = "API to renew access token"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "Access Token refreshed successful")
|
||||
})
|
||||
@PostMapping(value="/refreshToken",produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<RefreshTokenResponse> refreshToken(
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response) {
|
||||
RefreshTokenResponse responseData = new RefreshTokenResponse();
|
||||
LoginUserInfo loginUser = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if(loginUser!=null){
|
||||
responseData = adminLoginService.refreshToken(loginUser);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}else{
|
||||
responseData.setSuccess(false);
|
||||
responseData.setCode("401");
|
||||
responseData.setMessage("Unauthorized operation");
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(responseData);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.sjmresorts.opsapp.admin.controllers;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.menus.AdminMenuStatusRequest;
|
||||
import com.sjmresorts.opsapp.admin.dtos.menus.AdminMenuStatusResponse;
|
||||
import com.sjmresorts.opsapp.admin.dtos.menus.AdminMenusListResponse;
|
||||
import com.sjmresorts.opsapp.admin.services.AdminMenusService;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import com.sjmresorts.opsapp.common.utils.JwtTokenUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Tag(name = "CMS", description = "APIs for CMS sidebar menus")
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/admin")
|
||||
@CrossOrigin(origins = "*")
|
||||
public class AdminMenusController {
|
||||
|
||||
@Resource
|
||||
private AdminMenusService adminMenusService;
|
||||
|
||||
@Operation(summary = "List CMS sidebar menus with visibility status")
|
||||
@PostMapping(value = "/menu/list", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<AdminMenusListResponse> listMenus(HttpServletRequest request) {
|
||||
LoginUserInfo loginUserInfo = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if (loginUserInfo == null) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
}
|
||||
return ResponseEntity.ok(adminMenusService.listMenus());
|
||||
}
|
||||
|
||||
@Operation(summary = "Update CMS sidebar menu visibility (sys_routers.status)")
|
||||
@PostMapping(value = "/menu/update_status", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<AdminMenuStatusResponse> updateStatus(
|
||||
HttpServletRequest request,
|
||||
@Valid @RequestBody AdminMenuStatusRequest body) {
|
||||
LoginUserInfo loginUserInfo = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if (loginUserInfo == null) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
}
|
||||
return ResponseEntity.ok(adminMenusService.updateStatus(body, loginUserInfo));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
package com.sjmresorts.opsapp.admin.controllers;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.permissions.AdminAssignGroupPermissionRequest;
|
||||
import com.sjmresorts.opsapp.admin.dtos.permissions.AdminAssignGroupPermissionResponse;
|
||||
import com.sjmresorts.opsapp.admin.dtos.roleUsers.AdminGetRoleUsersRequest;
|
||||
import com.sjmresorts.opsapp.admin.dtos.roleUsers.AdminGetRoleUsersResponse;
|
||||
import com.sjmresorts.opsapp.admin.services.AdminPermissionService;
|
||||
import com.sjmresorts.opsapp.admin.services.AdminUserService;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import com.sjmresorts.opsapp.authentication.models.User;
|
||||
import com.sjmresorts.opsapp.common.utils.JwtTokenUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Tag(name = "CMS", description = "APIs for CMS RoleUser")
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/admin")
|
||||
@CrossOrigin(origins = "*")
|
||||
public class AdminRoleUsersController {
|
||||
|
||||
@Resource
|
||||
private AdminUserService adminUserService;
|
||||
|
||||
@Resource
|
||||
private AdminPermissionService adminPermissionService;
|
||||
|
||||
@Operation(
|
||||
summary = "CMS Get Role And User Status",
|
||||
description = "API for CMS Get Role And User Status"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "Check CMS Get Role And User Status Success")
|
||||
})
|
||||
@PostMapping(value = "/role/get_role_user_status", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<AdminGetRoleUsersResponse> cmsGetRoleUserStatus(
|
||||
HttpServletRequest request,
|
||||
@RequestBody(required = true) AdminGetRoleUsersRequest pageRequest) {
|
||||
AdminGetRoleUsersResponse Requestresult = new AdminGetRoleUsersResponse();
|
||||
Map<String, List<User>> serviceResult = new HashMap<>();
|
||||
List<User> assignUsers = adminUserService.listUser(pageRequest,"USER_ROLE");
|
||||
List<User> unassignUsers = adminUserService.listUser(pageRequest,"UNASSIGN_USER");
|
||||
serviceResult.put("assignUser", assignUsers);
|
||||
serviceResult.put("unassignUser", unassignUsers);
|
||||
|
||||
if (serviceResult != null) {
|
||||
Requestresult.setSuccess(true);
|
||||
Requestresult.setMessage("CMS Get Roles Success");
|
||||
Requestresult.setData(serviceResult);
|
||||
Requestresult.setCode("200");
|
||||
}else{
|
||||
Requestresult.setCode("401");
|
||||
Requestresult.setMessage("CMS Get Roles Failed");
|
||||
Requestresult.setSuccess(false);
|
||||
}
|
||||
return ResponseEntity.status(HttpStatus.OK).body(Requestresult);
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "CMS Assign Role Permissions",
|
||||
description = "API for CMS Assign Role Permissions"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "CMS Assign Role Permissions")
|
||||
})
|
||||
@PostMapping(value = "/role/assign_permission", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<AdminAssignGroupPermissionResponse> cmsAssignRolePermissions(
|
||||
HttpServletRequest request,
|
||||
@Parameter(description = "CMS Assign Role Permissions", required = true) @Valid @RequestBody AdminAssignGroupPermissionRequest requestData) {
|
||||
LoginUserInfo loginUserInfo = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if(loginUserInfo==null) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
}else{
|
||||
boolean success = adminPermissionService.assginPermission(requestData);
|
||||
AdminAssignGroupPermissionResponse responseData = new AdminAssignGroupPermissionResponse();
|
||||
if(success) {
|
||||
responseData.setCode("200");
|
||||
responseData.setSuccess(true);
|
||||
responseData.setMessage("CMS Assign Role Permissions Success");
|
||||
}else{
|
||||
responseData.setSuccess(false);
|
||||
responseData.setMessage("CMS Assign Role Permissions Failed");
|
||||
}
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
package com.sjmresorts.opsapp.admin.controllers;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.permissions.AdminListPermissionSettingRequest;
|
||||
import com.sjmresorts.opsapp.admin.dtos.permissions.AdminListPermissionSettingResponse;
|
||||
import com.sjmresorts.opsapp.admin.dtos.roles.*;
|
||||
import com.sjmresorts.opsapp.admin.services.AdminPermissionService;
|
||||
import com.sjmresorts.opsapp.admin.services.AdminRolesService;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import com.sjmresorts.opsapp.common.dtos.DataTableResult;
|
||||
import com.sjmresorts.opsapp.common.utils.JwtTokenUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Tag(name = "CMS", description = "APIs for CMS Roles")
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/admin")
|
||||
@CrossOrigin(origins = "*")
|
||||
public class AdminRolesController {
|
||||
@Resource
|
||||
private AdminRolesService adminRolesService;
|
||||
@Resource
|
||||
private AdminPermissionService adminPermissionService;
|
||||
|
||||
@Operation(
|
||||
summary = "CMS Get Roles",
|
||||
description = "API for CMS Get Roles"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "Check CMS Get Roles success")
|
||||
})
|
||||
@PostMapping(value = "/role/get_roles", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<AdminGetRolesResponse> cmsGetRoles(
|
||||
HttpServletRequest request,
|
||||
@RequestBody(required = true) AdminGetRolesRequest pageRequest) {
|
||||
AdminGetRolesResponse Requestresult = new AdminGetRolesResponse();
|
||||
DataTableResult<AdminRoleDto> serviceResult = adminRolesService.getRoleInfoListByPage(pageRequest);
|
||||
|
||||
if (serviceResult != null) {
|
||||
Requestresult.setSuccess(true);
|
||||
Requestresult.setMessage("CMS Get Roles Success");
|
||||
Requestresult.setData(serviceResult);
|
||||
Requestresult.setCode("200");
|
||||
}else{
|
||||
Requestresult.setCode("401");
|
||||
Requestresult.setMessage("CMS Get Roles Failed");
|
||||
Requestresult.setSuccess(false);
|
||||
}
|
||||
return ResponseEntity.status(HttpStatus.OK).body(Requestresult);
|
||||
}
|
||||
|
||||
|
||||
@Operation(
|
||||
summary = "CMS Create Role",
|
||||
description = "API for CMS Create Role"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "Check CMS Create Role success")
|
||||
})
|
||||
@PostMapping(value = "/role/create_role", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<BaseApiResponse> cmsCreateRole(
|
||||
HttpServletRequest request,
|
||||
@Parameter(description = "CMS Create Role info", required = true) @Valid @RequestBody AdminCreateRoleRequest requestData) {
|
||||
LoginUserInfo loginUserInfo = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if(loginUserInfo==null) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
}else{
|
||||
BaseApiResponse responseData = adminRolesService.createRole(requestData, loginUserInfo);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Operation(
|
||||
summary = "CMS Delete Role",
|
||||
description = "API for CMS Delete Role"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "Check CMS Delete Role success")
|
||||
})
|
||||
@PostMapping(value = "/role/delete_role", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<BaseApiResponse> cmsDeleteRole(
|
||||
HttpServletRequest request,
|
||||
@Parameter(description = "CMS Delete Role info", required = true) @Valid @RequestBody AdminDeleteRoleRequest requestData) {
|
||||
LoginUserInfo loginUserInfo = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if(loginUserInfo==null) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
}else{
|
||||
BaseApiResponse responseData = adminRolesService.deleteRole(requestData, loginUserInfo);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Operation(
|
||||
summary = "CMS Modify Role",
|
||||
description = "API for CMS Modify Role"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "Check CMS Modify Role success")
|
||||
})
|
||||
@PostMapping(value = "/role/modify_role", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<BaseApiResponse> cmsmodifyRole(
|
||||
HttpServletRequest request,
|
||||
@Parameter(description = "CMS modify Role info", required = true) @Valid @RequestBody AdminModifyRoleRequest requestData) {
|
||||
LoginUserInfo loginUserInfo = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if(loginUserInfo==null) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
}else{
|
||||
BaseApiResponse responseData = adminRolesService.modifyRole(requestData, loginUserInfo);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "CMS Get Role By Id",
|
||||
description = "API for CMS Get Role By Id"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "Check CMS Get Role success")
|
||||
})
|
||||
@PostMapping(value = "/role/get_role_by_id", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<AdminGetRoleByIdResponse> cmsGetRoleById(
|
||||
HttpServletRequest request,
|
||||
@Parameter(description = "CMS modify Role info", required = true) @Valid @RequestBody AdminGetRoleByIdRequest requestData) {
|
||||
LoginUserInfo loginUserInfo = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if(loginUserInfo==null) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
}else{
|
||||
AdminGetRoleByIdResponse responseData = adminRolesService.getRoleById(requestData);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Operation(
|
||||
summary = "CMS Set Assign Users",
|
||||
description = "API for CMS Set Assign Users"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "CMS Set Assign Users")
|
||||
})
|
||||
@PostMapping(value = "/role/assign_users", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<AdminRoleAssignUsersResponse> cmsSetAssignUsers(
|
||||
HttpServletRequest request,
|
||||
@Parameter(description = "CMS modify Role info", required = true) @Valid @RequestBody AdminRoleAssignUsersRequest requestData) {
|
||||
LoginUserInfo loginUserInfo = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if(loginUserInfo==null) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
}else{
|
||||
AdminRoleAssignUsersResponse responseData = new AdminRoleAssignUsersResponse();
|
||||
Boolean serviceResult = adminRolesService.updateGroupAssignUser(requestData,loginUserInfo);
|
||||
if(serviceResult) {
|
||||
responseData.setCode("200");
|
||||
responseData.setSuccess(true);
|
||||
responseData.setMessage("CMS Set Assign Users Success");
|
||||
}else{
|
||||
responseData.setSuccess(false);
|
||||
responseData.setMessage("CMS Set Assign Users Failed");
|
||||
}
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "CMS Get Permission",
|
||||
description = "API for CMS Get Permission"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "CMS Get Permission")
|
||||
})
|
||||
@PostMapping(value = "/role/list_permission_setting", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<AdminListPermissionSettingResponse> cmsGetListPermission(
|
||||
HttpServletRequest request,
|
||||
@Parameter(description = "CMS Get Permission", required = true) @Valid @RequestBody AdminListPermissionSettingRequest requestData) {
|
||||
LoginUserInfo loginUserInfo = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if(loginUserInfo==null) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
}else{
|
||||
AdminListPermissionSettingResponse responseData = adminPermissionService.getPermissionById(requestData);
|
||||
if(responseData!=null) {
|
||||
responseData.setCode("200");
|
||||
responseData.setSuccess(true);
|
||||
responseData.setMessage("CMS Get Permission Success");
|
||||
}else{
|
||||
responseData.setSuccess(false);
|
||||
responseData.setMessage("CMS Get Permission Failed");
|
||||
}
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
package com.sjmresorts.opsapp.admin.controllers;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.user.CmsAppUserPageRequest;
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.user.CmsUserDto;
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.user.CmsUserInfoResponse;
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.user.GetCmsUserResponse;
|
||||
import com.sjmresorts.opsapp.admin.services.AdminUserService;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import com.sjmresorts.opsapp.common.dtos.DataTableResult;
|
||||
import com.sjmresorts.opsapp.common.utils.JwtTokenUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Tag(name = "CMS", description = "APIs for Admin User functions")
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/admin")
|
||||
public class AdminUserController {
|
||||
|
||||
@Resource
|
||||
private AdminUserService adminUserService;
|
||||
|
||||
@Operation(
|
||||
summary = "Query CMS user info page",
|
||||
description = "API for query CMS user info page"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "CMS user info page queried successful"),
|
||||
@ApiResponse(responseCode = "400", description = "Invalid request data")
|
||||
})
|
||||
@PostMapping(value = "/user/queryPage", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<CmsUserInfoResponse> getAppUserByPage(
|
||||
HttpServletRequest request,
|
||||
@RequestBody(required = true) CmsAppUserPageRequest pageRequest) {
|
||||
|
||||
DataTableResult<CmsUserDto> userInfoList = adminUserService.getUserInfoListByPage(pageRequest);
|
||||
CmsUserInfoResponse cmsUserInfoResponse = new CmsUserInfoResponse();
|
||||
cmsUserInfoResponse.setCode("200");
|
||||
cmsUserInfoResponse.setSuccess(true);
|
||||
cmsUserInfoResponse.setMessage("Query Successfully");
|
||||
cmsUserInfoResponse.setData(userInfoList);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(cmsUserInfoResponse);
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "Create CMS user",
|
||||
description = "API for CMS user creation"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "CMS user created successful"),
|
||||
@ApiResponse(responseCode = "400", description = "Invalid request data")
|
||||
})
|
||||
@PostMapping(value = "/user/create", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<BaseApiResponse> createUser(
|
||||
HttpServletRequest request,
|
||||
@RequestBody CmsUserDto requestData) {
|
||||
LoginUserInfo loginUserInfo = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if (loginUserInfo == null) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
} else {
|
||||
BaseApiResponse responseData = adminUserService.createUser(requestData, loginUserInfo);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "Update CMS user status",
|
||||
description = "API for CMS user status update"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "CMS user status updated successful"),
|
||||
@ApiResponse(responseCode = "400", description = "Invalid request data")
|
||||
})
|
||||
@PostMapping(value = "/user/updateStatus", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<BaseApiResponse> updateStatus(
|
||||
HttpServletRequest request,
|
||||
@RequestBody CmsUserDto requestData) {
|
||||
|
||||
LoginUserInfo loginUserInfo = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if (loginUserInfo == null) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
} else {
|
||||
BaseApiResponse responseData = adminUserService.updateStatus(requestData, loginUserInfo);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "Update CMS user info",
|
||||
description = "API for CMS user info update"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "CMS user info updated successful"),
|
||||
@ApiResponse(responseCode = "400", description = "Invalid request data")
|
||||
})
|
||||
@PostMapping(value = "/user/update", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<BaseApiResponse> updateUser(
|
||||
HttpServletRequest request,
|
||||
@RequestBody CmsUserDto requestData) {
|
||||
LoginUserInfo loginUserInfo = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if (loginUserInfo == null) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
} else {
|
||||
BaseApiResponse responseData = adminUserService.updateUser(requestData, loginUserInfo);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "Get one CMS user info",
|
||||
description = "API for get one CMS user info"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "CMS user info got successful"),
|
||||
@ApiResponse(responseCode = "400", description = "Invalid request data")
|
||||
})
|
||||
@GetMapping(value = "/user/{userId}", produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<GetCmsUserResponse> getUserById(
|
||||
@PathVariable(name = "userId", required = true) @NotNull Long userId) {
|
||||
|
||||
GetCmsUserResponse responseData = new GetCmsUserResponse();
|
||||
CmsUserDto userDto = adminUserService.queryCmsUserById(userId);
|
||||
responseData.setCode("200");
|
||||
responseData.setSuccess(userDto != null);
|
||||
responseData.setMessage(userDto != null ? "Query Successfully" : "User does not exists");
|
||||
responseData.setData(userDto);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.appsetting;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.BasePageRequest;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Get Admin Devices Info Page Request")
|
||||
public class AdminDevicesInfoPageRequest extends BasePageRequest {
|
||||
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.appsetting;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import com.sjmresorts.opsapp.common.dtos.DataTableResult;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Get Admin Devices Info Page Response")
|
||||
public class AdminDevicesInfoPageResponse extends BaseApiResponse {
|
||||
|
||||
@Schema(description = "Match Devices Info items")
|
||||
private DataTableResult<ClientInfosDto> data;
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.appsetting;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "CMS get device Request")
|
||||
public class AdminGetClientInfosRequest {
|
||||
@Schema(description = "Device ID of Clients Info")
|
||||
@NotBlank(message = "Device Id must not be blank")
|
||||
private String deviceId;
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.appsetting;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "CMS get device Response")
|
||||
public class AdminGetClientInfosResponse extends BaseApiResponse {
|
||||
|
||||
@Schema(description = "Match Device items")
|
||||
private ClientInfosDto data;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.appsetting;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
@Data
|
||||
public class ClientInfosDto {
|
||||
|
||||
private Long id;
|
||||
|
||||
private Boolean isLatest;
|
||||
|
||||
private Boolean isActive;
|
||||
|
||||
private String clientName;
|
||||
|
||||
private String clientVersion;
|
||||
|
||||
private String deviceFuid;
|
||||
|
||||
private String casinoCode;
|
||||
|
||||
private Instant updatedAt;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.appsetting;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "CMS get App Setting Request")
|
||||
public class GetAppSettingRequest {
|
||||
@Schema(description = "App setting keys to retrieve")
|
||||
@NotNull(message = "App setting keys must not be empty")
|
||||
private List<String> appSettingKeys;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.menus;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class AdminMenuItemDto {
|
||||
private String id;
|
||||
private String parentId;
|
||||
private String heading;
|
||||
private String sectionTitle;
|
||||
private String route;
|
||||
private String fontIcon;
|
||||
private Integer sortNo;
|
||||
/** 1=显示,0=隐藏 */
|
||||
private Integer status;
|
||||
/** 不可关闭(避免锁死后台) */
|
||||
private boolean locked;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.menus;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class AdminMenuStatusRequest {
|
||||
@NotBlank
|
||||
private String routerId;
|
||||
/** 1=显示,0=隐藏 */
|
||||
@NotNull
|
||||
private Integer status;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.menus;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.router.UserRouterDto;
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
public class AdminMenuStatusResponse extends BaseApiResponse {
|
||||
/** 更新后当前登录用户侧栏菜单(可立刻刷新) */
|
||||
private List<UserRouterDto> userRouters = new ArrayList<>();
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.menus;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
public class AdminMenusListResponse extends BaseApiResponse {
|
||||
private List<AdminMenuItemDto> data = new ArrayList<>();
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.permissions;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.RouterPermission;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = " Assign Role Permission Request")
|
||||
public class AdminAssignGroupPermissionRequest {
|
||||
@Schema(description = "Role Id",example="200")
|
||||
private Long roleId;
|
||||
@Schema(description = "Router Operation",example="200")
|
||||
private List<RouterPermission> assignRouterOperation;
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.permissions;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.models.GroupPermissionObject;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of CMS Delete Role")
|
||||
public class AdminAssignGroupPermissionResponse {
|
||||
@Schema(description = "Indicate CMS delete roles success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Get roles successfully")
|
||||
private String message;
|
||||
|
||||
@Schema(description = "data of result")
|
||||
private GroupPermissionObject data;
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.permissions;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = " Delete Role Request")
|
||||
public class AdminListPermissionSettingRequest {
|
||||
@Schema(description = "Role Id",example="200")
|
||||
private Long roleId;
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.permissions;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.models.GroupPermissionObject;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of CMS Delete Role")
|
||||
public class AdminListPermissionSettingResponse {
|
||||
@Schema(description = "Indicate CMS delete roles success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Get roles successfully")
|
||||
private String message;
|
||||
|
||||
@Schema(description = "data of result")
|
||||
private GroupPermissionObject data;
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roleUsers;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.BasePageRequest;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "CMS Get Role Uers Status Request")
|
||||
public class AdminGetRoleUsersRequest extends BasePageRequest {
|
||||
|
||||
private Long searchRoleId;
|
||||
|
||||
private String searchRoleName;
|
||||
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roleUsers;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.User;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of CMS Role Users Status")
|
||||
public class AdminGetRoleUsersResponse {
|
||||
@Schema(description = "Indicate CMS get roles success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Get roles successfully")
|
||||
private String message;
|
||||
|
||||
@Schema(description = "data of result")
|
||||
private Map<String, List<User>> data;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roleUsers;
|
||||
|
||||
import lombok.Data;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
@Data
|
||||
@Mapper(componentModel = "spring")
|
||||
public class AdminRoleUsersDto {
|
||||
|
||||
private Long id;
|
||||
private Long roleId;
|
||||
private Long userId;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roles;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = " Create Role Request")
|
||||
public class AdminCreateRoleRequest {
|
||||
@Schema(description = "Role Name",example="200")
|
||||
private String roleName;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roles;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.Role;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of CMS Create Role")
|
||||
public class AdminCreateRoleResponse {
|
||||
@Schema(description = "Indicate CMS create roles success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Get roles successfully")
|
||||
private String message;
|
||||
|
||||
@Schema(description = "data of result")
|
||||
private Role data;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roles;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = " Delete Role Request")
|
||||
public class AdminDeleteRoleRequest {
|
||||
@Schema(description = "Role Id",example="200")
|
||||
private Long roleId;
|
||||
@Schema(description = "Role Name",example="200")
|
||||
private String roleName;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roles;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.Role;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of CMS Delete Role")
|
||||
public class AdminDeleteRoleResponse {
|
||||
@Schema(description = "Indicate CMS delete roles success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Get roles successfully")
|
||||
private String message;
|
||||
|
||||
@Schema(description = "data of result")
|
||||
private Role data;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roles;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = " Modify Role Request")
|
||||
public class AdminGetRoleByIdRequest {
|
||||
@Schema(description = "Role Id",example="200")
|
||||
private Long roleId;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roles;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.Role;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of CMS Get Role By Id")
|
||||
public class AdminGetRoleByIdResponse {
|
||||
@Schema(description = "Indicate CMS get roles by id success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Get roles successfully")
|
||||
private String message;
|
||||
|
||||
@Schema(description = "data of result")
|
||||
private Role data;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roles;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.BasePageRequest;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "CMS Roles Request")
|
||||
public class AdminGetRolesRequest extends BasePageRequest {
|
||||
|
||||
private String searchRoleName;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roles;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.DataTableResult;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of CMS Roles")
|
||||
public class AdminGetRolesResponse {
|
||||
@Schema(description = "Indicate CMS get roles success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Get roles successfully")
|
||||
private String message;
|
||||
|
||||
@Schema(description = "data of result")
|
||||
private DataTableResult<AdminRoleDto> data;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roles;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = " Modify Role Request")
|
||||
public class AdminModifyRoleRequest {
|
||||
@Schema(description = "Role Id",example="200")
|
||||
private Long roleId;
|
||||
@Schema(description = "Role Name",example="200")
|
||||
private String roleName;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roles;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.Role;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of CMS Modify Role")
|
||||
public class AdminModifyRoleResponse {
|
||||
@Schema(description = "Indicate CMS modify roles success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Get roles successfully")
|
||||
private String message;
|
||||
|
||||
@Schema(description = "data of result")
|
||||
private Role data;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roles;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = " Delete Role Request")
|
||||
public class AdminRoleAssignUsersRequest {
|
||||
@Schema(description = "Role Id",example="200")
|
||||
private Long roleId;
|
||||
@Schema(description = "Role Name",example="200")
|
||||
private List<String> employeeIds;
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roles;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.Role;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of CMS Delete Role")
|
||||
public class AdminRoleAssignUsersResponse {
|
||||
@Schema(description = "Indicate CMS delete roles success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Get roles successfully")
|
||||
private String message;
|
||||
|
||||
@Schema(description = "data of result")
|
||||
private Role data;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.roles;
|
||||
|
||||
import lombok.Data;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
@Data
|
||||
@Mapper(componentModel = "spring")
|
||||
public class AdminRoleDto {
|
||||
private Long roleId;
|
||||
private String roleName;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.system.login;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "CMS LoginRequest")
|
||||
public class AdminLoginRequest {
|
||||
|
||||
@Schema(description = "AD Account of Employee")
|
||||
@NotBlank(message = "Employee Id must not be blank")
|
||||
private String userCode;
|
||||
|
||||
@Schema(description = "Password of AD Account")
|
||||
@NotBlank(message = "Password must not be blank")
|
||||
private String password;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.system.login;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of CMS login with AD")
|
||||
public class AdminLoginResponse {
|
||||
|
||||
@Schema(description = "Indicate CMS login authorization success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Login successfully")
|
||||
private String message;
|
||||
|
||||
@Schema(description = "Login Info of response")
|
||||
private CmsLoginInfo loginInfo;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.system.login;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of CMS logout")
|
||||
public class AdminLogoutResponse {
|
||||
|
||||
@Schema(description = "Indicate CMS logout success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Logout successfully")
|
||||
private String message;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.system.login;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.router.RouterPermissionDto;
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.router.UserRouterDto;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class CmsLoginInfo {
|
||||
private String accessToken;
|
||||
private String refreshToken;
|
||||
private String defaultRouter;
|
||||
private LoginUserInfo loginUser;
|
||||
private List<UserRouterDto> userRouters;
|
||||
private Map<String, List<RouterPermissionDto>> userPermissions;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.system.router;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class RouterPermissionDto {
|
||||
private String id;
|
||||
private String routerId;
|
||||
private String permissionName;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.system.router;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class UserRouterDto {
|
||||
private String parentId;
|
||||
private String heading;
|
||||
private String sectionTitle;
|
||||
private String route;
|
||||
private String svgIcon;
|
||||
private String fontIcon;
|
||||
private Integer sortNo;
|
||||
private Integer status;
|
||||
private List<UserRouterDto> sub;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.system.user;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.BasePageRequest;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
public class CmsAppUserPageRequest extends BasePageRequest {
|
||||
|
||||
private String searchAccount;
|
||||
private String searchUserName;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.system.user;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class CmsUserDto {
|
||||
|
||||
private Long userId;
|
||||
private String userCode;
|
||||
private String userName;
|
||||
private String email;
|
||||
private Integer status;
|
||||
private Instant updatedAt;
|
||||
private Instant createdAt;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.system.user;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import com.sjmresorts.opsapp.common.dtos.DataTableResult;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "User Info List")
|
||||
public class CmsUserInfoResponse extends BaseApiResponse {
|
||||
private DataTableResult<CmsUserDto> data;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.sjmresorts.opsapp.admin.dtos.system.user;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of getting CMS User")
|
||||
public class GetCmsUserResponse extends BaseApiResponse {
|
||||
private CmsUserDto data;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.sjmresorts.opsapp.admin.mappers;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.appsetting.ClientInfosDto;
|
||||
import com.sjmresorts.opsapp.authentication.models.ClientInfo;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface ClientInfosMapper {
|
||||
|
||||
ClientInfosDto toClientInfosDto(ClientInfo device);
|
||||
|
||||
List<ClientInfosDto> toClientInfosDtoList(List<ClientInfo> content);
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.sjmresorts.opsapp.admin.mappers;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.router.RouterPermissionDto;
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.router.UserRouterDto;
|
||||
import com.sjmresorts.opsapp.authentication.models.RouterPermission;
|
||||
import com.sjmresorts.opsapp.authentication.models.SysRouter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class CmsLoginRouterMapper {
|
||||
private final SysRouterMapper routerMapper;
|
||||
private final RouterPermissionMapper routerPermissionMapper;
|
||||
|
||||
public List<UserRouterDto> toRouterDtoListWithChildren(List<SysRouter> sysRouters) {
|
||||
List<UserRouterDto> routerDtos = new ArrayList<UserRouterDto>();
|
||||
routerMapper.toUserRouterDtoList(sysRouters);
|
||||
for(SysRouter sysRouter:sysRouters){
|
||||
UserRouterDto routerDto = routerMapper.toUserRouterDto(sysRouter);
|
||||
if(sysRouter.getSub()!=null && !sysRouter.getSub().isEmpty()){
|
||||
routerDto.setSub(toRouterDtoListWithChildren(sysRouter.getSub()));
|
||||
}
|
||||
routerDtos.add(routerDto);
|
||||
}
|
||||
return routerDtos;
|
||||
}
|
||||
|
||||
public Map<String, List<RouterPermissionDto>> toRouterPermissionMap(Map<String, List<RouterPermission>> userPermissions) {
|
||||
Map<String, List<RouterPermissionDto>> permissionMap = new HashMap<String, List<RouterPermissionDto>>();
|
||||
userPermissions.forEach((key, value) -> {
|
||||
permissionMap.put(key, routerPermissionMapper.toRouterPermissionDtoList(value));
|
||||
});
|
||||
return permissionMap;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.sjmresorts.opsapp.admin.mappers;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.router.RouterPermissionDto;
|
||||
import com.sjmresorts.opsapp.authentication.models.RouterPermission;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface RouterPermissionMapper {
|
||||
|
||||
RouterPermissionDto toRouterPermissionDto(RouterPermission entity);
|
||||
|
||||
List<RouterPermissionDto> toRouterPermissionDtoList(List<RouterPermission> routerPermissions);
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.sjmresorts.opsapp.admin.mappers;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.router.UserRouterDto;
|
||||
import com.sjmresorts.opsapp.authentication.models.SysRouter;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface SysRouterMapper {
|
||||
|
||||
@Mapping(target = "sub", ignore = true)
|
||||
UserRouterDto toUserRouterDto(SysRouter sysRouter);
|
||||
|
||||
List<UserRouterDto> toUserRouterDtoList(List<SysRouter> sysRouters);
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.sjmresorts.opsapp.admin.models;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.SysRouter;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class GroupPermissionObject {
|
||||
private Long groupId;
|
||||
private String groupName;
|
||||
private List<SysRouter> groupRouterSetting;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.sjmresorts.opsapp.admin.repositories;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.RoleUsers;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface RoleUsersRepository extends JpaRepository<RoleUsers, Long> {
|
||||
|
||||
|
||||
List<RoleUsers> findAllByRoleId(Long roleId);
|
||||
|
||||
@Query(value = "select roleUser.roleId from RoleUsers roleUser where employeeId=?1 ")
|
||||
List<Long> findRoleIdListByEmployeeId(String employeeId);
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.sjmresorts.opsapp.admin.repositories;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.Role;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface RolesRepository extends JpaRepository<Role, Long> {
|
||||
|
||||
Page<Role> findAll(Specification<Role> listSpec, Pageable pageable);
|
||||
|
||||
Role getRoleByRoleId(Long roleId);
|
||||
|
||||
@Query(value="select r.roleId from Role r where r.roleName = ?1")
|
||||
List<Long> queryRoleIdByRoleName(String roleName);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
package com.sjmresorts.opsapp.admin.services;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.appsetting.AdminDevicesInfoPageRequest;
|
||||
import com.sjmresorts.opsapp.admin.dtos.appsetting.ClientInfosDto;
|
||||
import com.sjmresorts.opsapp.admin.mappers.ClientInfosMapper;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import com.sjmresorts.opsapp.authentication.models.ClientInfo;
|
||||
import com.sjmresorts.opsapp.authentication.repositories.DeviceInfoRepository;
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import com.sjmresorts.opsapp.common.dtos.BasePageRequest;
|
||||
import com.sjmresorts.opsapp.common.dtos.DataTableResult;
|
||||
import com.sjmresorts.opsapp.common.utils.DaoUtil;
|
||||
import com.sjmresorts.opsapp.logging.models.AuditLog;
|
||||
import com.sjmresorts.opsapp.logging.services.AuditLogService;
|
||||
import jakarta.persistence.criteria.Predicate;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AdminDevicesService {
|
||||
|
||||
private final DeviceInfoRepository deviceInfoRepository;
|
||||
private final AuditLogService auditLogService;
|
||||
private final ClientInfosMapper clientInfosMapper;
|
||||
private final DeviceInfoRepository deviceRepository;
|
||||
|
||||
public DataTableResult<ClientInfosDto> getDevicesInfoListByPage(AdminDevicesInfoPageRequest pageRequest) {
|
||||
|
||||
Specification<ClientInfo> listSpec = buildSpecificationByPageRequest(pageRequest);
|
||||
int pageSize = pageRequest.getPageSize();
|
||||
int pageStart = pageRequest.getStartRow() / pageSize;
|
||||
Sort sort = DaoUtil.buildSortByString(pageRequest.getSortOrder(), "id");
|
||||
Pageable pageable = PageRequest.of(pageStart, pageSize, sort);
|
||||
Page<ClientInfo> resultPage = deviceInfoRepository.findAll(listSpec, pageable);
|
||||
List<ClientInfosDto> resultList = clientInfosMapper.toClientInfosDtoList(resultPage.getContent());
|
||||
DataTableResult<ClientInfosDto> dataResult = new DataTableResult<>();
|
||||
dataResult.setTotalRecords(resultPage.getTotalElements());
|
||||
dataResult.setPageSize(pageSize);
|
||||
if (resultList == null) {
|
||||
resultList = new ArrayList<>();
|
||||
}
|
||||
dataResult.setRowData(resultList);
|
||||
return dataResult;
|
||||
}
|
||||
|
||||
private Specification<ClientInfo> buildSpecificationByPageRequest(BasePageRequest pageRequest) {
|
||||
|
||||
return ((root, criteriaQuery, cb) -> {
|
||||
List<Predicate> list = new ArrayList<>();
|
||||
// if (StringUtils.isNotBlank(pageRequest.getSearchUserName())) {
|
||||
// list.add(cb.like(cb.upper(root.get("userName")),
|
||||
// "%" + pageRequest.getSearchUserName().toUpperCase() + "%"));
|
||||
// }
|
||||
// if (StringUtils.isNotBlank(pageRequest.getSearchAccount())) {
|
||||
// list.add(cb.like(cb.upper(root.get("employeeId")),
|
||||
// "%" + pageRequest.getSearchAccount().toUpperCase() + "%"));
|
||||
// }
|
||||
Predicate[] predicates = new Predicate[list.size()];
|
||||
criteriaQuery.where(list.toArray(predicates));
|
||||
return cb.and(list.toArray(predicates));
|
||||
});
|
||||
}
|
||||
|
||||
public BaseApiResponse updateDevice(ClientInfosDto deviceDto, LoginUserInfo loginUserInfo) {
|
||||
BaseApiResponse result = new BaseApiResponse();
|
||||
AuditLog auditLog = auditLogService.createAuditLog("Update Device", "Update Device from AdminDevicesService.updateDevice()", loginUserInfo);
|
||||
ClientInfo device = deviceRepository.findById(deviceDto.getId()).orElse(null);
|
||||
Instant currentTime = Instant.now();
|
||||
if (device != null) {
|
||||
auditLogService.setLogOldValue(auditLog, device);
|
||||
device.setCasinoCode(deviceDto.getCasinoCode());
|
||||
device.setUpdatedAt(currentTime);
|
||||
deviceRepository.save(device);
|
||||
auditLogService.setLogNewValue(auditLog, device);
|
||||
auditLogService.saveAuditLog(auditLog);
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
result.setMessage("Updated Successfully");
|
||||
} else {
|
||||
result.setSuccess(false);
|
||||
result.setCode("400");
|
||||
result.setMessage("User does not exists");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public ClientInfosDto queryDeviceById(@NotBlank long deviceId) {
|
||||
ClientInfosDto deviceDto = null;
|
||||
ClientInfo device = deviceRepository.findById(deviceId).orElse(null);
|
||||
|
||||
if (device != null) {
|
||||
deviceDto = clientInfosMapper.toClientInfosDto(device);
|
||||
}
|
||||
return deviceDto;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
package com.sjmresorts.opsapp.admin.services;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.login.CmsLoginInfo;
|
||||
import com.sjmresorts.opsapp.admin.mappers.CmsLoginRouterMapper;
|
||||
import com.sjmresorts.opsapp.admin.repositories.RoleUsersRepository;
|
||||
import com.sjmresorts.opsapp.admin.repositories.RolesRepository;
|
||||
import com.sjmresorts.opsapp.common.constants.AppConstants;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.RefreshTokenResponse;
|
||||
import com.sjmresorts.opsapp.authentication.mappers.UserMapper;
|
||||
import com.sjmresorts.opsapp.authentication.models.RouterPermission;
|
||||
import com.sjmresorts.opsapp.authentication.models.SysRouter;
|
||||
import com.sjmresorts.opsapp.authentication.models.User;
|
||||
import com.sjmresorts.opsapp.authentication.models.UserToken;
|
||||
import com.sjmresorts.opsapp.authentication.repositories.RouterPermissionRepository;
|
||||
import com.sjmresorts.opsapp.authentication.repositories.UserRepository;
|
||||
import com.sjmresorts.opsapp.authentication.services.RolePermissionService;
|
||||
import com.sjmresorts.opsapp.authentication.services.SysRouterService;
|
||||
import com.sjmresorts.opsapp.authentication.services.UserTokenService;
|
||||
import com.sjmresorts.opsapp.common.dtos.LDAP.ADAccountInfo;
|
||||
import com.sjmresorts.opsapp.common.utils.AESUtil;
|
||||
import com.sjmresorts.opsapp.common.utils.JwtTokenUtil;
|
||||
import com.sjmresorts.opsapp.common.utils.LDAPUtil;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.dao.OptimisticLockingFailureException;
|
||||
import org.springframework.retry.annotation.Backoff;
|
||||
import org.springframework.retry.annotation.Retryable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AdminLoginService {
|
||||
|
||||
private final UserRepository userRepository;
|
||||
private final RoleUsersRepository roleUsersRepository;
|
||||
private final UserMapper userMapper;
|
||||
private final CmsLoginRouterMapper cmsLoginRouterMapper;
|
||||
private final SysRouterService sysRouterService;
|
||||
private final RolePermissionService rolePermissionService;
|
||||
private final UserTokenService userTokenService;
|
||||
private final LDAPUtil ldapUtil;
|
||||
private final RolesRepository rolesRepository;
|
||||
private final RouterPermissionRepository routerPermissionRepository;
|
||||
|
||||
// -3=disabled, -2=locked, -1 or 0=incorrect loginId or password, 1=success
|
||||
public int checkLoginByLoginIdAndPassword(String employeeId, String password) {
|
||||
int checkPassed = -1;
|
||||
if(AppConstants.SUPER_ADMIN_ID.equalsIgnoreCase(employeeId)) {
|
||||
User user = userRepository.findByEmployeeId(employeeId).orElse(null);
|
||||
if (user != null) {
|
||||
if(user.getStatus()==null || user.getStatus()==0){
|
||||
return -3; // user disabled by app
|
||||
}else if(user.getStatus()==2) {
|
||||
return -2; // user locked
|
||||
}
|
||||
String encryptPassword = AESUtil.sha256(password);
|
||||
checkPassed = userRepository.countByEmployeeIdAndPassword(employeeId.toUpperCase(), encryptPassword);
|
||||
}
|
||||
}else{
|
||||
//Check AD
|
||||
boolean adResult = ldapUtil.authenticate(employeeId, password);
|
||||
if(adResult) checkPassed = 1;
|
||||
}
|
||||
return checkPassed;
|
||||
}
|
||||
|
||||
@Retryable(retryFor = OptimisticLockingFailureException.class,
|
||||
maxAttempts = 3,
|
||||
backoff = @Backoff(delay = 100))
|
||||
@Transactional
|
||||
public CmsLoginInfo getLoginUserInfoByEmployeeId(@NotBlank(message = "Employee Id must not be blank") String employeeId) {
|
||||
CmsLoginInfo result = null;
|
||||
if(AppConstants.SUPER_ADMIN_ID.equalsIgnoreCase(employeeId)) {
|
||||
User user = userRepository.findByEmployeeId(employeeId).orElse(null);
|
||||
if(user!=null){
|
||||
user.setCmsLastLogin(Instant.now());
|
||||
userRepository.save(user);
|
||||
result = new CmsLoginInfo();
|
||||
LoginUserInfo loginUser = userMapper.toLoginUser(user);
|
||||
result.setLoginUser(loginUser);
|
||||
Map<String, List<RouterPermission>> userPermissions = new HashMap<String, List<RouterPermission>>();
|
||||
userPermissions = rolePermissionService.getFullRouterPermissions();
|
||||
List<SysRouter> routers = sysRouterService.getRoutersByPermission("0",userPermissions);
|
||||
result.setUserRouters(cmsLoginRouterMapper.toRouterDtoListWithChildren(routers));
|
||||
result.setUserPermissions(cmsLoginRouterMapper.toRouterPermissionMap(userPermissions));
|
||||
}
|
||||
}else{
|
||||
ADAccountInfo adResult = ldapUtil.getAccountInfo(employeeId);
|
||||
if(adResult!=null){
|
||||
result = new CmsLoginInfo();
|
||||
LoginUserInfo loginUser = new LoginUserInfo();
|
||||
loginUser.setUserName(adResult.getDisplayName());
|
||||
loginUser.setEmployeeId(employeeId);
|
||||
loginUser.setEmail(adResult.getMail());
|
||||
loginUser.setUserCode(employeeId);
|
||||
result.setLoginUser(loginUser);
|
||||
Map<String, List<RouterPermission>> userPermissions = new HashMap<String, List<RouterPermission>>();
|
||||
List<Long> userRoleIds = getUserRoleIds(adResult.getDirectGroups());
|
||||
userPermissions = rolePermissionService.getRouterPermissionsByGroupIds(userRoleIds);
|
||||
List<SysRouter> routers = sysRouterService.getRoutersByPermission("0",userPermissions);
|
||||
result.setUserRouters(cmsLoginRouterMapper.toRouterDtoListWithChildren(routers));
|
||||
result.setUserPermissions(cmsLoginRouterMapper.toRouterPermissionMap(userPermissions));
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public void processLogout(LoginUserInfo loginUser) {
|
||||
if(loginUser!=null){
|
||||
userTokenService.clearUserTokenByType(AppConstants.CMS_API_ACCESS_TOKEN_TYPE,loginUser.getEmployeeId());
|
||||
userTokenService.clearUserTokenByType(AppConstants.CMS_REFRESH_TOKEN_TYPE,loginUser.getEmployeeId());
|
||||
}
|
||||
}
|
||||
|
||||
public RefreshTokenResponse refreshToken(LoginUserInfo loginUser) {
|
||||
RefreshTokenResponse result = new RefreshTokenResponse();
|
||||
UserToken accessToken = null;
|
||||
UserToken refreshToken = null;
|
||||
if(loginUser!=null){
|
||||
accessToken= JwtTokenUtil.generateTokenByLoginUser(AppConstants.CMS_API_ACCESS_TOKEN_TYPE,loginUser);
|
||||
userTokenService.saveUserToken(accessToken);
|
||||
refreshToken=JwtTokenUtil.generateTokenByLoginUser(AppConstants.CMS_REFRESH_TOKEN_TYPE,loginUser);
|
||||
userTokenService.saveUserToken(refreshToken);
|
||||
if(StringUtils.isNotBlank(loginUser.getTokenUuid())){
|
||||
userTokenService.removeTokenByUniqueId(loginUser.getTokenUuid());
|
||||
}
|
||||
}
|
||||
|
||||
if(accessToken!=null){
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
result.setAccessToken(accessToken.getTokenValue());
|
||||
result.setRefreshToken(refreshToken.getTokenValue());
|
||||
result.setMessage("Token renew successful.");
|
||||
}else{
|
||||
result.setSuccess(false);
|
||||
result.setCode("200");
|
||||
result.setMessage("Token failed.");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private List<Long> getUserRoleIds(List<String> groupName) {
|
||||
List<Long> roleIdList = new ArrayList<>();
|
||||
if(groupName!=null&&!groupName.isEmpty()){
|
||||
for(String roleName : groupName){
|
||||
List<Long> roleIds = rolesRepository.queryRoleIdByRoleName(roleName);
|
||||
roleIdList.addAll(roleIds);
|
||||
}
|
||||
}
|
||||
return roleIdList;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
package com.sjmresorts.opsapp.admin.services;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.menus.AdminMenuItemDto;
|
||||
import com.sjmresorts.opsapp.admin.dtos.menus.AdminMenuStatusRequest;
|
||||
import com.sjmresorts.opsapp.admin.dtos.menus.AdminMenuStatusResponse;
|
||||
import com.sjmresorts.opsapp.admin.dtos.menus.AdminMenusListResponse;
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.router.UserRouterDto;
|
||||
import com.sjmresorts.opsapp.admin.mappers.CmsLoginRouterMapper;
|
||||
import com.sjmresorts.opsapp.admin.repositories.RoleUsersRepository;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import com.sjmresorts.opsapp.authentication.models.RouterPermission;
|
||||
import com.sjmresorts.opsapp.authentication.models.SysRouter;
|
||||
import com.sjmresorts.opsapp.authentication.repositories.SysRouterRepository;
|
||||
import com.sjmresorts.opsapp.authentication.services.RolePermissionService;
|
||||
import com.sjmresorts.opsapp.authentication.services.SysRouterService;
|
||||
import com.sjmresorts.opsapp.common.constants.AppConstants;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AdminMenusService {
|
||||
|
||||
private static final Set<String> LOCKED_ROUTER_IDS = Set.of(
|
||||
"ESIGN_DASHBOARD",
|
||||
"ESIGN_SYSTEM",
|
||||
"ESIGN_SYS_USERS",
|
||||
"ESIGN_SYS_ROLES",
|
||||
"ESIGN_SYS_MENUS");
|
||||
|
||||
private final SysRouterRepository sysRouterRepository;
|
||||
private final SysRouterService sysRouterService;
|
||||
private final RolePermissionService rolePermissionService;
|
||||
private final RoleUsersRepository roleUsersRepository;
|
||||
private final CmsLoginRouterMapper cmsLoginRouterMapper;
|
||||
|
||||
public AdminMenusListResponse listMenus() {
|
||||
AdminMenusListResponse response = new AdminMenusListResponse();
|
||||
List<SysRouter> routers = sysRouterRepository.queryAllRoutersOrderBySort();
|
||||
for (SysRouter router : routers) {
|
||||
AdminMenuItemDto item = new AdminMenuItemDto();
|
||||
item.setId(router.getId());
|
||||
item.setParentId(router.getParentId());
|
||||
item.setHeading(router.getHeading());
|
||||
item.setSectionTitle(router.getSectionTitle());
|
||||
item.setRoute(router.getRoute());
|
||||
item.setFontIcon(router.getFontIcon());
|
||||
item.setSortNo(router.getSortNo());
|
||||
item.setStatus(router.getStatus() == null ? 1 : router.getStatus());
|
||||
item.setLocked(LOCKED_ROUTER_IDS.contains(router.getId()));
|
||||
response.getData().add(item);
|
||||
}
|
||||
response.setSuccess(true);
|
||||
response.setCode("200");
|
||||
response.setMessage("ok");
|
||||
return response;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public AdminMenuStatusResponse updateStatus(AdminMenuStatusRequest request, LoginUserInfo loginUser) {
|
||||
AdminMenuStatusResponse response = new AdminMenuStatusResponse();
|
||||
if (request == null || StringUtils.isBlank(request.getRouterId()) || request.getStatus() == null) {
|
||||
response.setSuccess(false);
|
||||
response.setCode("400");
|
||||
response.setMessage("routerId and status required");
|
||||
return response;
|
||||
}
|
||||
int status = request.getStatus() == 0 ? 0 : 1;
|
||||
if (LOCKED_ROUTER_IDS.contains(request.getRouterId()) && status == 0) {
|
||||
response.setSuccess(false);
|
||||
response.setCode("400");
|
||||
response.setMessage("This menu cannot be hidden");
|
||||
return response;
|
||||
}
|
||||
SysRouter router = sysRouterRepository.findById(request.getRouterId()).orElse(null);
|
||||
if (router == null) {
|
||||
response.setSuccess(false);
|
||||
response.setCode("404");
|
||||
response.setMessage("menu not found");
|
||||
return response;
|
||||
}
|
||||
router.setStatus(status);
|
||||
sysRouterRepository.save(router);
|
||||
|
||||
response.setUserRouters(buildUserRouters(loginUser));
|
||||
response.setSuccess(true);
|
||||
response.setCode("200");
|
||||
response.setMessage("saved");
|
||||
return response;
|
||||
}
|
||||
|
||||
private List<UserRouterDto> buildUserRouters(LoginUserInfo loginUser) {
|
||||
if (loginUser == null || StringUtils.isBlank(loginUser.getEmployeeId())) {
|
||||
return List.of();
|
||||
}
|
||||
Map<String, List<RouterPermission>> userPermissions;
|
||||
if (AppConstants.SUPER_ADMIN_ID.equalsIgnoreCase(loginUser.getEmployeeId())) {
|
||||
userPermissions = rolePermissionService.getFullRouterPermissions();
|
||||
} else {
|
||||
List<Long> roleIds = roleUsersRepository.findRoleIdListByEmployeeId(loginUser.getEmployeeId());
|
||||
userPermissions = rolePermissionService.getRouterPermissionsByGroupIds(
|
||||
roleIds != null ? roleIds : List.of());
|
||||
}
|
||||
List<SysRouter> routers = sysRouterService.getRoutersByPermission("0", userPermissions);
|
||||
return cmsLoginRouterMapper.toRouterDtoListWithChildren(routers);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
package com.sjmresorts.opsapp.admin.services;
|
||||
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.permissions.AdminAssignGroupPermissionRequest;
|
||||
import com.sjmresorts.opsapp.admin.dtos.permissions.AdminAssignGroupPermissionResponse;
|
||||
import com.sjmresorts.opsapp.admin.dtos.permissions.AdminListPermissionSettingRequest;
|
||||
import com.sjmresorts.opsapp.admin.dtos.permissions.AdminListPermissionSettingResponse;
|
||||
import com.sjmresorts.opsapp.admin.models.GroupPermissionObject;
|
||||
import com.sjmresorts.opsapp.authentication.models.*;
|
||||
import com.sjmresorts.opsapp.authentication.repositories.RolePermissionRepository;
|
||||
import com.sjmresorts.opsapp.authentication.repositories.RouterPermissionRepository;
|
||||
import com.sjmresorts.opsapp.authentication.repositories.SysRouterRepository;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AdminPermissionService {
|
||||
private final SysRouterRepository sysRouterRepository;
|
||||
private final RouterPermissionRepository routerPermissionRepository;
|
||||
private final RolePermissionRepository rolePermissionRepository;
|
||||
|
||||
|
||||
public AdminListPermissionSettingResponse getPermissionById(AdminListPermissionSettingRequest request) {
|
||||
AdminListPermissionSettingResponse result = new AdminListPermissionSettingResponse();
|
||||
GroupPermissionObject newObject = new GroupPermissionObject();
|
||||
|
||||
// 获取路由信息,路由权限,权限组权限
|
||||
List<SysRouter> listRouter = sysRouterRepository.getAllChildrenRoutes();
|
||||
List<RouterPermission> listPermission = routerPermissionRepository.findAll();
|
||||
List<RolePermission> listRolePermission = rolePermissionRepository.getAllPermissionByRoleId(request.getRoleId());
|
||||
// 判断权限组是否有权限,并将selectAble属性加入返回数据
|
||||
if (listRolePermission.size() > 0) {
|
||||
for(int i=0; i<listPermission.size(); i++) {
|
||||
RouterPermission rolePermission = listPermission.get(i);
|
||||
for (RolePermission permission : listRolePermission) {
|
||||
Long permissionId = permission.getPermissionId();
|
||||
if(permissionId==rolePermission.getId()){
|
||||
// 如果权限组有对应权限将selected设置为true
|
||||
rolePermission.setSelected(true);
|
||||
listRolePermission.remove(permission);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i=0;i<listRouter.size();i++) {
|
||||
SysRouter sysRouter = listRouter.get(i);
|
||||
for (int j=0;j<listPermission.size();j++) {
|
||||
RouterPermission permission = listPermission.get(j);
|
||||
// 将权限信息放入返回数据中
|
||||
if(StringUtils.equals(sysRouter.getId(),permission.getRouterId())) {
|
||||
sysRouter.getRoutePermissions().add(permission);
|
||||
listPermission.remove(j);
|
||||
j--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
newObject.setGroupId(request.getRoleId());
|
||||
newObject.setGroupRouterSetting(listRouter);
|
||||
result.setData(newObject);
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
result.setMessage("Get List Permission By Id Successfully");
|
||||
return result;
|
||||
}
|
||||
|
||||
public Boolean assginPermission(AdminAssignGroupPermissionRequest request) {
|
||||
AdminAssignGroupPermissionResponse result = new AdminAssignGroupPermissionResponse();
|
||||
List<RolePermission> permissionToDelete = rolePermissionRepository.getAllPermissionByRoleId(request.getRoleId());
|
||||
if(request.getAssignRouterOperation()!=null &&request.getAssignRouterOperation().size()>0){
|
||||
List<RouterPermission> assignRouterOperation = request.getAssignRouterOperation();
|
||||
List<RolePermission>saveData = new ArrayList<>();
|
||||
for(int i =0;i<assignRouterOperation.size();i++){
|
||||
RouterPermission permission = assignRouterOperation.get(i);
|
||||
boolean existItem = false;
|
||||
for(int j=0;j<permissionToDelete.size();j++){
|
||||
RolePermission rolePermission = permissionToDelete.get(j);
|
||||
if(permission.getId()==rolePermission.getPermissionId()){
|
||||
existItem = true;
|
||||
permissionToDelete.remove(j);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!existItem){
|
||||
RolePermission rolePermission = new RolePermission();
|
||||
rolePermission.setRoleId(request.getRoleId());
|
||||
rolePermission.setPermissionId(permission.getId());
|
||||
saveData.add(rolePermission);
|
||||
}
|
||||
}
|
||||
if(!saveData.isEmpty()){
|
||||
rolePermissionRepository.saveAll(saveData);
|
||||
}
|
||||
if(!permissionToDelete.isEmpty()){
|
||||
rolePermissionRepository.deleteAll(permissionToDelete);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.sjmresorts.opsapp.admin.services;
|
||||
|
||||
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AdminRoleUsersService {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,174 @@
|
||||
package com.sjmresorts.opsapp.admin.services;
|
||||
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.roles.*;
|
||||
import com.sjmresorts.opsapp.admin.repositories.RoleUsersRepository;
|
||||
import com.sjmresorts.opsapp.admin.repositories.RolesRepository;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import com.sjmresorts.opsapp.authentication.mappers.RoleMapper;
|
||||
import com.sjmresorts.opsapp.authentication.models.*;
|
||||
import com.sjmresorts.opsapp.authentication.repositories.RolePermissionRepository;
|
||||
import com.sjmresorts.opsapp.authentication.repositories.RouterPermissionRepository;
|
||||
import com.sjmresorts.opsapp.authentication.repositories.SysRouterRepository;
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import com.sjmresorts.opsapp.common.dtos.DataTableResult;
|
||||
import com.sjmresorts.opsapp.common.utils.DaoUtil;
|
||||
import com.sjmresorts.opsapp.logging.models.AuditLog;
|
||||
import com.sjmresorts.opsapp.logging.services.AuditLogService;
|
||||
import jakarta.persistence.criteria.Predicate;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AdminRolesService {
|
||||
|
||||
private final RolesRepository rolesRepository;
|
||||
private final AuditLogService auditLogService;
|
||||
private final RoleUsersRepository roleUsersRepository;
|
||||
private final RoleMapper roleMapper;
|
||||
private final SysRouterRepository sysRouterRepository;
|
||||
private final RouterPermissionRepository routerPermissionRepository;
|
||||
private final RolePermissionRepository rolePermissionRepository;
|
||||
|
||||
public List<Role> getAllRoles() {
|
||||
return rolesRepository.findAll();
|
||||
}
|
||||
|
||||
public DataTableResult<AdminRoleDto> getRoleInfoListByPage(AdminGetRolesRequest pageRequest) {
|
||||
|
||||
Specification<Role> listSpec = buildSpecificationByPageRequest(pageRequest);
|
||||
int pageSize = pageRequest.getPageSize();
|
||||
int pageStart = pageRequest.getStartRow() / pageSize;
|
||||
Sort sort = DaoUtil.buildSortByString(pageRequest.getSortOrder(), "roleId");
|
||||
Pageable pageable = PageRequest.of(pageStart, pageSize, sort);
|
||||
Page<Role> resultPage = rolesRepository.findAll(listSpec,pageable);
|
||||
List<AdminRoleDto> resultList = roleMapper.toAdminRoleDto(resultPage.getContent());
|
||||
DataTableResult<AdminRoleDto> dataResult = new DataTableResult<>();
|
||||
dataResult.setTotalRecords(resultPage.getTotalElements());
|
||||
dataResult.setPageSize(pageSize);
|
||||
if (resultList == null) {
|
||||
resultList = new ArrayList<>();
|
||||
}
|
||||
dataResult.setRowData(resultList);
|
||||
return dataResult;
|
||||
}
|
||||
|
||||
|
||||
public BaseApiResponse createRole(AdminCreateRoleRequest request, LoginUserInfo loginUserInfo) {
|
||||
BaseApiResponse result = new BaseApiResponse();
|
||||
AuditLog auditLog = auditLogService.createAuditLog("Create Role", "Create a new Role from AdminRolesService.createRole()", loginUserInfo);
|
||||
Role newRole = new Role();
|
||||
newRole.setRoleName(request.getRoleName());
|
||||
auditLogService.setLogOldValue(auditLog,null);
|
||||
rolesRepository.save(newRole);
|
||||
auditLogService.setLogNewValue(auditLog,newRole);
|
||||
auditLogService.saveAuditLog(auditLog);
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
result.setMessage("Created Successfully");
|
||||
return result;
|
||||
}
|
||||
|
||||
public BaseApiResponse deleteRole(AdminDeleteRoleRequest request, LoginUserInfo loginUserInfo) {
|
||||
BaseApiResponse result = new BaseApiResponse();
|
||||
AuditLog auditLog = auditLogService.createAuditLog("Delete Role", "Delete a Role from AdminRolesService.deleteRole()", loginUserInfo);
|
||||
auditLogService.setLogOldValue(auditLog,request.getRoleName());
|
||||
rolesRepository.deleteById(request.getRoleId());
|
||||
auditLogService.setLogNewValue(auditLog,"");
|
||||
auditLogService.saveAuditLog(auditLog);
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
result.setMessage("Created Successfully");
|
||||
return result;
|
||||
}
|
||||
|
||||
public BaseApiResponse modifyRole(AdminModifyRoleRequest request, LoginUserInfo loginUserInfo) {
|
||||
BaseApiResponse result = new BaseApiResponse();
|
||||
AuditLog auditLog = auditLogService.createAuditLog("Modify Role", "Modify a Role from AdminRolesService.deleteRole()", loginUserInfo);
|
||||
auditLogService.setLogOldValue(auditLog,request.getRoleName());
|
||||
Role oRole = rolesRepository.getRoleByRoleId((request.getRoleId()));
|
||||
oRole.setRoleName(request.getRoleName());
|
||||
rolesRepository.save(oRole);
|
||||
auditLogService.setLogNewValue(auditLog,"");
|
||||
auditLogService.saveAuditLog(auditLog);
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
result.setMessage("Modify Successfully");
|
||||
return result;
|
||||
}
|
||||
|
||||
public AdminGetRoleByIdResponse getRoleById(AdminGetRoleByIdRequest request) {
|
||||
AdminGetRoleByIdResponse result = new AdminGetRoleByIdResponse();
|
||||
Role getRole = rolesRepository.findById(request.getRoleId()).orElse(null);
|
||||
result.setData(getRole);
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
result.setMessage("Get Role By Id Successfully");
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
private Specification<Role> buildSpecificationByPageRequest(AdminGetRolesRequest pageRequest) {
|
||||
|
||||
return ((root, criteriaQuery, cb) -> {
|
||||
List<Predicate> list = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(pageRequest.getSearchRoleName())) {
|
||||
list.add(cb.like(cb.upper(root.get("roleName")),
|
||||
"%" + pageRequest.getSearchRoleName().toUpperCase() + "%"));
|
||||
}
|
||||
Predicate[] predicates = new Predicate[list.size()];
|
||||
criteriaQuery.where(list.toArray(predicates));
|
||||
return cb.and(list.toArray(predicates));
|
||||
});
|
||||
}
|
||||
|
||||
public boolean updateGroupAssignUser(AdminRoleAssignUsersRequest request, LoginUserInfo loginUserInfo) {
|
||||
Long roleId = request.getRoleId();
|
||||
List<String> employeeIdList = request.getEmployeeIds();
|
||||
List<RoleUsers> dataToDelete =roleUsersRepository.findAllByRoleId(roleId);
|
||||
AuditLog auditLog = auditLogService.createAuditLog("Update Group Assign Users", "Update Group Assign Users from AdminRolesService.updateGroupAssignUser()", loginUserInfo);
|
||||
auditLogService.setLogOldValue(auditLog,dataToDelete);
|
||||
if(employeeIdList!=null) {
|
||||
List<RoleUsers> saveData = new ArrayList<>();
|
||||
for(int i=0; i<employeeIdList.size();i++) {
|
||||
String employeeId = employeeIdList.get(i);
|
||||
boolean isExist = false;
|
||||
for(int j=0;j<dataToDelete.size();j++) {
|
||||
RoleUsers existItem = dataToDelete.get(j);
|
||||
if(existItem.getEmployeeId().equals(employeeId)) {
|
||||
isExist = true;
|
||||
dataToDelete.remove(j);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(isExist==false) {
|
||||
RoleUsers userItem = new RoleUsers();
|
||||
userItem.setRoleId(roleId);
|
||||
userItem.setEmployeeId(employeeId);
|
||||
saveData.add(userItem);
|
||||
}
|
||||
}
|
||||
if(saveData.size()>0) {
|
||||
roleUsersRepository.saveAll(saveData);
|
||||
}
|
||||
}
|
||||
if(dataToDelete.size()>0) {
|
||||
roleUsersRepository.deleteAll(dataToDelete);
|
||||
}
|
||||
auditLogService.setLogNewValue(auditLog,request);
|
||||
auditLogService.saveAuditLog(auditLog);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,180 @@
|
||||
package com.sjmresorts.opsapp.admin.services;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.roleUsers.AdminGetRoleUsersRequest;
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.user.CmsAppUserPageRequest;
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.user.CmsUserDto;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import com.sjmresorts.opsapp.authentication.mappers.UserMapper;
|
||||
import com.sjmresorts.opsapp.authentication.models.RoleUsers;
|
||||
import com.sjmresorts.opsapp.authentication.models.User;
|
||||
import com.sjmresorts.opsapp.authentication.repositories.UserRepository;
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import com.sjmresorts.opsapp.common.dtos.DataTableResult;
|
||||
import com.sjmresorts.opsapp.common.utils.DaoUtil;
|
||||
import com.sjmresorts.opsapp.logging.models.AuditLog;
|
||||
import com.sjmresorts.opsapp.logging.services.AuditLogService;
|
||||
import jakarta.persistence.criteria.*;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AdminUserService {
|
||||
|
||||
private final UserRepository userRepository;
|
||||
private final AuditLogService auditLogService;
|
||||
private final UserMapper userMapper;
|
||||
|
||||
public DataTableResult<CmsUserDto> getUserInfoListByPage(CmsAppUserPageRequest pageRequest) {
|
||||
|
||||
Specification<User> listSpec = buildSpecificationByPageRequest(pageRequest);
|
||||
int pageSize = pageRequest.getPageSize();
|
||||
int pageStart = pageRequest.getStartRow() / pageSize;
|
||||
Sort sort = DaoUtil.buildSortByString(pageRequest.getSortOrder(), "userId");
|
||||
Pageable pageable = PageRequest.of(pageStart, pageSize, sort);
|
||||
Page<User> resultPage = userRepository.findAll(listSpec, pageable);
|
||||
List<CmsUserDto> resultList = userMapper.toCmsUserDtoList(resultPage.getContent());
|
||||
DataTableResult<CmsUserDto> dataResult = new DataTableResult<>();
|
||||
dataResult.setTotalRecords(resultPage.getTotalElements());
|
||||
dataResult.setPageSize(pageSize);
|
||||
if (resultList == null) {
|
||||
resultList = new ArrayList<>();
|
||||
}
|
||||
dataResult.setRowData(resultList);
|
||||
return dataResult;
|
||||
}
|
||||
|
||||
private Specification<User> buildSpecificationByPageRequest(CmsAppUserPageRequest pageRequest) {
|
||||
|
||||
return ((root, criteriaQuery, cb) -> {
|
||||
List<Predicate> list = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(pageRequest.getSearchUserName())) {
|
||||
list.add(cb.like(cb.upper(root.get("userName")),
|
||||
"%" + pageRequest.getSearchUserName().toUpperCase() + "%"));
|
||||
}
|
||||
if (StringUtils.isNotBlank(pageRequest.getSearchAccount())) {
|
||||
list.add(cb.like(cb.upper(root.get("employeeId")),
|
||||
"%" + pageRequest.getSearchAccount().toUpperCase() + "%"));
|
||||
}
|
||||
Predicate[] predicates = new Predicate[list.size()];
|
||||
criteriaQuery.where(list.toArray(predicates));
|
||||
return cb.and(list.toArray(predicates));
|
||||
});
|
||||
}
|
||||
|
||||
public List<User> listUser(AdminGetRoleUsersRequest request, String searchType) {
|
||||
Specification<User> listSpec = buildSpecificationByRequest(request,searchType);
|
||||
Sort sort = DaoUtil.buildSortByString(request.getSortOrder(), "employeeId");
|
||||
List<User> resultList = userRepository.findAll(listSpec,sort);
|
||||
return resultList;
|
||||
}
|
||||
|
||||
private Specification<User> buildSpecificationByRequest(AdminGetRoleUsersRequest request, String searchType) {
|
||||
Specification<User> SysUserpec = new Specification<User>() {
|
||||
@Override
|
||||
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
|
||||
List<Predicate> list = new ArrayList<>();
|
||||
if (StringUtils.equals(searchType, "USER_ROLE") && request.getSearchRoleId() != null) {
|
||||
Subquery<String> groupSubQuery = criteriaQuery.subquery(String.class);
|
||||
Root<RoleUsers> subQueryRoot = groupSubQuery.from(RoleUsers.class);
|
||||
groupSubQuery.select(subQueryRoot.get("employeeId"));
|
||||
List<Predicate> subQueryPredicates = new ArrayList<>();
|
||||
subQueryPredicates.add(cb.equal(subQueryRoot.get("roleId"), request.getSearchRoleId()));
|
||||
groupSubQuery.where(subQueryPredicates.toArray(new Predicate[] {}));
|
||||
list.add(cb.in(root.get("employeeId")).value(groupSubQuery));
|
||||
} else if (StringUtils.equals(searchType, "UNASSIGN_USER")) {
|
||||
Subquery<Long> groupSubQuery = criteriaQuery.subquery(Long.class);
|
||||
Root<RoleUsers> subQueryRoot = groupSubQuery.from(RoleUsers.class);
|
||||
groupSubQuery.select(cb.literal(1L));
|
||||
List<Predicate> subQueryPredicates = new ArrayList<>();
|
||||
subQueryPredicates.add(cb.equal(subQueryRoot.get("employeeId"), root.get("employeeId")));
|
||||
groupSubQuery.where(subQueryPredicates.toArray(new Predicate[] {}));
|
||||
list.add(cb.not(cb.exists(groupSubQuery)));
|
||||
}
|
||||
Predicate[] predicates = new Predicate[list.size()];
|
||||
criteriaQuery.where(list.toArray(predicates));
|
||||
return cb.and(list.toArray(predicates));
|
||||
}
|
||||
};
|
||||
return SysUserpec;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public BaseApiResponse createUser(CmsUserDto userDto, LoginUserInfo loginUserInfo) {
|
||||
BaseApiResponse result = new BaseApiResponse();
|
||||
AuditLog auditLog = auditLogService.createAuditLog("Create User", "Create a new User from AdminUserService.createUser()", loginUserInfo);
|
||||
User user = userMapper.toUserEntity(userDto);
|
||||
user.setCasinoCode("");
|
||||
auditLogService.setLogOldValue(auditLog, null);
|
||||
userRepository.save(user);
|
||||
auditLogService.setLogNewValue(auditLog, user);
|
||||
auditLogService.saveAuditLog(auditLog);
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
result.setMessage("Created Successfully");
|
||||
return result;
|
||||
}
|
||||
|
||||
public BaseApiResponse updateUser(CmsUserDto userDto, LoginUserInfo loginUserInfo) {
|
||||
BaseApiResponse result = new BaseApiResponse();
|
||||
AuditLog auditLog = auditLogService.createAuditLog("Update User", "Update User from AdminUserService.updateUser()", loginUserInfo);
|
||||
User user = userRepository.findById(userDto.getUserId()).orElse(null);
|
||||
if (user != null) {
|
||||
auditLogService.setLogOldValue(auditLog, user);
|
||||
userMapper.updateUserFromCmsUserDto(userDto, user);
|
||||
userRepository.save(user);
|
||||
auditLogService.setLogNewValue(auditLog, user);
|
||||
auditLogService.saveAuditLog(auditLog);
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
result.setMessage("Updated Successfully");
|
||||
} else {
|
||||
result.setSuccess(false);
|
||||
result.setCode("400");
|
||||
result.setMessage("User does not exists");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public BaseApiResponse updateStatus(CmsUserDto userDto, LoginUserInfo loginUserInfo) {
|
||||
BaseApiResponse result = new BaseApiResponse();
|
||||
AuditLog auditLog = auditLogService.createAuditLog("Update User Status", "Update User status from AdminUserService.updateStatus()", loginUserInfo);
|
||||
User user = userRepository.findById(userDto.getUserId()).orElse(null);
|
||||
if (user != null) {
|
||||
auditLogService.setLogOldValue(auditLog, user);
|
||||
user.setStatus(userDto.getStatus());
|
||||
userRepository.save(user);
|
||||
auditLogService.setLogNewValue(auditLog, user);
|
||||
auditLogService.saveAuditLog(auditLog);
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
result.setMessage("Status Updated Successfully");
|
||||
} else {
|
||||
result.setSuccess(false);
|
||||
result.setCode("400");
|
||||
result.setMessage("User does not exists");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public CmsUserDto queryCmsUserById(@NotBlank long userId) {
|
||||
CmsUserDto userDto = null;
|
||||
User user = userRepository.findById(userId).orElse(null);
|
||||
|
||||
if (user != null) {
|
||||
userDto = userMapper.toCmsUserDto(user);
|
||||
}
|
||||
return userDto;
|
||||
}
|
||||
}
|
||||
+147
@@ -0,0 +1,147 @@
|
||||
package com.sjmresorts.opsapp.authentication.controllers;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.dtos.*;
|
||||
import com.sjmresorts.opsapp.authentication.services.AdAuthorizeService;
|
||||
import com.sjmresorts.opsapp.authentication.services.LoginService;
|
||||
import com.sjmresorts.opsapp.common.constants.AppConstants;
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import com.sjmresorts.opsapp.common.utils.JwtTokenUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.Valid;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Tag(name = "Authorization", description = "APIs relate with ad login authorization")
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/authorization")
|
||||
@CrossOrigin(origins = "*")
|
||||
public class MobileAuthorizationController {
|
||||
@Resource
|
||||
private LoginService loginService;
|
||||
@Resource
|
||||
private AdAuthorizeService adAuthService;
|
||||
|
||||
@Operation(
|
||||
summary = "appLogout",
|
||||
description = "API for app logout process"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "App logout successful")
|
||||
})
|
||||
@PostMapping(value="/logout",produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<AppLogoutResponse> deviceLogin(
|
||||
HttpServletRequest request) {
|
||||
|
||||
AppLogoutResponse result = new AppLogoutResponse();
|
||||
LoginUserInfo loginUser = JwtTokenUtil.parseUserFromRequest(request);
|
||||
if(loginUser!=null){
|
||||
loginService.processLogout(loginUser);
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
result.setMessage("Logout successful.");
|
||||
return ResponseEntity.status(HttpStatus.OK).body(result);
|
||||
}else{
|
||||
result.setSuccess(false);
|
||||
result.setCode("401");
|
||||
result.setMessage("Unauthorized logout");
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Operation(
|
||||
summary = "Register Pits info for tracking",
|
||||
description = "API for location tracking registration"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "Register Pits successful"),
|
||||
@ApiResponse(responseCode = "400", description = "Invalid request data")
|
||||
})
|
||||
@PostMapping(value="/register_track_pits",produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<RegisterTrackInfoResponse> registerTrackScope(
|
||||
HttpServletRequest request,
|
||||
@Parameter(description = "Register request for pits tracking", required = true) @Valid @RequestBody RegisterTrackInfoRequest requestData) {
|
||||
RegisterTrackInfoResponse responseData = loginService.registerTrackPits(requestData.getData());
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "Third Party Authorization",
|
||||
description = "API to retrieve access token for third party caller, such as Service Button"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "Access Token generated successful"),
|
||||
@ApiResponse(responseCode = "401", description = "Authorization key not math")
|
||||
})
|
||||
@PostMapping(value="/getAccessToken",produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<GetAuthTokenResponse> getApiAccessToken(
|
||||
HttpServletRequest request,
|
||||
@Parameter(description = "Third party requestor info", required = true) @Valid @RequestBody GetAuthTokenRequest requestData) {
|
||||
String authorizationKey = request.getHeader("Authorization");
|
||||
if(authorizationKey!=null && authorizationKey.equals(JwtTokenUtil.getThirdPartySecretKey())){
|
||||
GetAuthTokenResponse responseData = loginService.assignAccessToken(AppConstants.THIRD_PARTY_TOKEN_TYPE,requestData.getData());
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}else{
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "Renew API token by non-expired token",
|
||||
description = "API to renew access token"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "Access Token refreshed successful")
|
||||
})
|
||||
@PostMapping(value="/refreshToken",produces = "application/json;charset=UTF-8")
|
||||
public ResponseEntity<RefreshTokenResponse> refreshToken(
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response) {
|
||||
RefreshTokenResponse responseData = new RefreshTokenResponse();
|
||||
LoginUserInfo loginUser = JwtTokenUtil.parseUserFromRequest(request);
|
||||
boolean isRenewRefreshToken = (!"false".equalsIgnoreCase(request.getParameter("isRenewRefreshToken")));
|
||||
if(loginUser!=null){
|
||||
responseData = loginService.refreshToken(loginUser,isRenewRefreshToken);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}else{
|
||||
responseData.setSuccess(false);
|
||||
responseData.setCode("401");
|
||||
responseData.setMessage("Unauthorized operation");
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(responseData);
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "Heart-beat API",
|
||||
description = "API to register last heart-beat time for login user"
|
||||
)
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "Access Token refreshed successful")
|
||||
})
|
||||
@GetMapping(value="/appHeartBeat")
|
||||
public ResponseEntity<BaseApiResponse> sendHeartBeat(
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response) {
|
||||
LoginUserInfo loginUser = JwtTokenUtil.parseUserFromRequest(request);
|
||||
BaseApiResponse responseData = new BaseApiResponse();
|
||||
if(loginUser!=null){
|
||||
boolean registerSuccess = loginService.registerHeartBeat(loginUser);
|
||||
responseData.setSuccess(registerSuccess);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(responseData);
|
||||
}else{
|
||||
responseData.setSuccess(false);
|
||||
responseData.setCode("401");
|
||||
responseData.setMessage("Unauthorized operation");
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(responseData);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class AdAuthorizeResponse {
|
||||
|
||||
private boolean success=false;
|
||||
private String code;
|
||||
private String message;
|
||||
private AdUserInfo userInfo;
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Data field of AdLoginRequest")
|
||||
public class AdLoginData {
|
||||
@Schema(description = "AD Account of Employee", example = "XXX")
|
||||
@NotBlank(message = "Employee Id must not be blank")
|
||||
private String employeeId;
|
||||
|
||||
@Schema(description = "Password of AD Account", nullable = false)
|
||||
@NotBlank(message = "Password must not be blank")
|
||||
private String password;
|
||||
|
||||
@Schema(description = "UUID of user login device")
|
||||
private String deviceId;
|
||||
|
||||
@Schema(description = "FCM token of current login device")
|
||||
private String deviceToken;
|
||||
|
||||
@Schema(description = "Device name of user login")
|
||||
private String deviceName;
|
||||
|
||||
@Schema(description = "Device version of user login")
|
||||
private String deviceVersion;
|
||||
|
||||
@Schema(description = "App version of current using")
|
||||
private String appVersion;
|
||||
|
||||
@Schema(description = "Is Mockup Login")
|
||||
private Boolean isMock;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.SchemaEntry;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Request info of AD login with password")
|
||||
public class AdLoginRequest {
|
||||
@Schema(description = "Schema field of request")
|
||||
@NotNull(message = "Schema attribute must not be null")
|
||||
private SchemaEntry schema;
|
||||
|
||||
@Schema(description = "Data field of request")
|
||||
@NotNull(message = "Data attribute must not be null")
|
||||
private AdLoginData data;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of AD login with password")
|
||||
public class AdLoginResponse {
|
||||
|
||||
@Schema(description = "Indicate AD authorization success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Login successfully")
|
||||
private String message;
|
||||
|
||||
@Schema(description = "JWT token assign for login user")
|
||||
private String accessToken;
|
||||
|
||||
@Schema(description = "JWT refresh token assign for login user")
|
||||
private String refreshToken;
|
||||
|
||||
@Schema(description = "AD account of login user")
|
||||
private String employeeId;
|
||||
|
||||
@Schema(description = "User name of login user")
|
||||
private String userName;
|
||||
|
||||
@Schema(description = "User Id of login user")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "Available access property of login user")
|
||||
private String casinoCode;
|
||||
|
||||
@Schema(description = "Permission Group of login user")
|
||||
private Set<String> permissionGroup;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdUserInfo {
|
||||
|
||||
private String employeeId;
|
||||
private String userName;
|
||||
private List<String> adGroup;
|
||||
private String role;
|
||||
private String email;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of App logout")
|
||||
public class AppLogoutResponse {
|
||||
|
||||
@Schema(description = "Indicate app logout success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Device logout successfully")
|
||||
private String message;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Data field of DeviceLoginRequest")
|
||||
public class DeviceLoginData {
|
||||
@Schema(description = "Security content provide by SJM launcher")
|
||||
private String securityContent;
|
||||
|
||||
@Schema(description = "UUID of user login device")
|
||||
private String deviceId;
|
||||
|
||||
@Schema(description = "FCM token of current login device")
|
||||
private String deviceToken;
|
||||
|
||||
@Schema(description = "Device name of user login")
|
||||
private String deviceName;
|
||||
|
||||
@Schema(description = "Device version of user login")
|
||||
private String deviceVersion;
|
||||
|
||||
@Schema(description = "Employee ID from Launcher", example = "000001")
|
||||
@NotBlank(message = "Employee Id must not be blank")
|
||||
private String employeeId;
|
||||
|
||||
@Schema(description = "User Name from Launcher", example = "XXX")
|
||||
@NotBlank(message = "User Name must not be blank")
|
||||
private String userName;
|
||||
|
||||
@Schema(description = "Property code from Launcher", example = "GLC")
|
||||
private String casinoCode;
|
||||
|
||||
@Schema(description = "App version of current using")
|
||||
private String appVersion;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.SchemaEntry;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Login request info of SJM launcher")
|
||||
public class DeviceLoginRequest {
|
||||
@Schema(description = "Schema field of request")
|
||||
private SchemaEntry schema;
|
||||
|
||||
@Schema(description = "Data field of request")
|
||||
private DeviceLoginData data;
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of SJM launcher login with AD content")
|
||||
public class DeviceLoginResponse {
|
||||
|
||||
@Schema(description = "Indicate AD authorization success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Device login successfully")
|
||||
private String message;
|
||||
|
||||
@Schema(description = "JWT API token assign for this login")
|
||||
private String accessToken;
|
||||
|
||||
@Schema(description = "JWT Refresh token assign for this login")
|
||||
private String refreshToken;
|
||||
|
||||
@Schema(description = "AD account of login user")
|
||||
private String employeeId;
|
||||
|
||||
@Schema(description = "User name of login user")
|
||||
private String userName;
|
||||
|
||||
@Schema(description = "User Id of login user")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "Available access property of login user")
|
||||
private String casinoCode;
|
||||
|
||||
@Schema(description = "Permission Group of login user")
|
||||
private Set<String> permissionGroup;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Data field of GetAuthToken request")
|
||||
public class GetAuthTokenData {
|
||||
@Schema(description = "Requester ID of notification API caller", example = "ELO_XXXX")
|
||||
@NotBlank(message = "Requester Id must not be blank")
|
||||
private String requesterId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.SchemaEntry;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Request to get notification API access token")
|
||||
public class GetAuthTokenRequest {
|
||||
@Schema(description = "Schema field of request")
|
||||
@NotNull(message = "Schema attribute must not be null")
|
||||
private SchemaEntry schema;
|
||||
|
||||
@Schema(description = "Data field of request")
|
||||
@NotNull(message = "Data attribute must not be null")
|
||||
private GetAuthTokenData data;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of notification API access token")
|
||||
public class GetAuthTokenResponse {
|
||||
|
||||
@Schema(description = "Indicate access token generated success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Access token generated successfully")
|
||||
private String message;
|
||||
|
||||
@Schema(description = "JWT token assign for service button")
|
||||
private String accessToken;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
public class LoginUserInfo {
|
||||
private Long userId;
|
||||
private String employeeId;
|
||||
private String userCode;
|
||||
private String userName;
|
||||
private String adGroup;
|
||||
private String role;
|
||||
private String email;
|
||||
private String loginSource;
|
||||
private String tokenUuid;
|
||||
private String appVersion;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.BaseApiResponse;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of refreshing App access token")
|
||||
public class RefreshTokenResponse extends BaseApiResponse {
|
||||
|
||||
@Schema(description = "New API JWT token generated")
|
||||
private String accessToken;
|
||||
|
||||
@Schema(description = "New Refresh JWT token generated")
|
||||
private String refreshToken;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Data field of RegisterTrackInfoRequest")
|
||||
public class RegisterTrackInfoData {
|
||||
@Schema(description = "Employee ID of current user")
|
||||
private String employeeId;
|
||||
|
||||
@Schema(description = "Casino code of user selected")
|
||||
private String casinoCode;
|
||||
|
||||
@Schema(description = "Pits code of user selected")
|
||||
private List<String> pitCodes;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
import com.sjmresorts.opsapp.common.dtos.SchemaEntry;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Request info of Track pits registeration")
|
||||
public class RegisterTrackInfoRequest {
|
||||
@Schema(description = "Schema field of request")
|
||||
private SchemaEntry schema;
|
||||
|
||||
@Schema(description = "Data field of request")
|
||||
private RegisterTrackInfoData data;
|
||||
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package com.sjmresorts.opsapp.authentication.dtos;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "Response info of Track pits registeration")
|
||||
public class RegisterTrackInfoResponse {
|
||||
|
||||
@Schema(description = "Indicate success status")
|
||||
private boolean success=false;
|
||||
|
||||
@Schema(description = "Status Code of response",example="200")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "Description of result",example="Pits are registered successfully")
|
||||
private String message;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
package com.sjmresorts.opsapp.authentication.filters;
|
||||
|
||||
import com.auth0.jwt.JWTVerifier;
|
||||
import com.auth0.jwt.exceptions.TokenExpiredException;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import com.sjmresorts.opsapp.authentication.services.UserTokenService;
|
||||
import com.sjmresorts.opsapp.common.utils.JwtTokenUtil;
|
||||
import com.sjmresorts.opsapp.common.utils.NetworkUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.NonNull;
|
||||
import lombok.Setter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.util.AntPathMatcher;
|
||||
import org.springframework.web.filter.OncePerRequestFilter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
public class JwtAuthFilter extends OncePerRequestFilter {
|
||||
|
||||
private final AntPathMatcher pathMatcher = new AntPathMatcher();
|
||||
private final Logger logger = LoggerFactory.getLogger(JwtAuthFilter.class);
|
||||
@Setter
|
||||
private List<String> excludePatterns;
|
||||
|
||||
@Setter
|
||||
private List<String> verifyAppVersionList;
|
||||
|
||||
@Setter
|
||||
@Resource
|
||||
private UserTokenService userTokenService;
|
||||
|
||||
@Override
|
||||
protected void doFilterInternal(
|
||||
@NonNull HttpServletRequest request,
|
||||
@NonNull HttpServletResponse response,
|
||||
@NonNull FilterChain filterChain
|
||||
) throws ServletException, IOException{
|
||||
|
||||
NetworkUtil.checkAndSetAllowOrigin(request,response);
|
||||
NetworkUtil.setSecurityHeaders(request,response);
|
||||
String token = request.getHeader("Authorization");
|
||||
String uri = request.getRequestURI();
|
||||
if(StringUtils.isNotBlank(token) && token.startsWith("Bearer ")){
|
||||
token = token.substring(7);
|
||||
}
|
||||
if(StringUtils.isNotBlank(token)) {
|
||||
JWTVerifier jwtVerifier = JwtTokenUtil.getJwtVerifier();
|
||||
try {
|
||||
jwtVerifier.verify(token);
|
||||
}catch (TokenExpiredException e) {
|
||||
sendErrorResponse(response,HttpServletResponse.SC_UNAUTHORIZED,"Token Expired");
|
||||
request.setAttribute("AUTH_EXCEPTION","Token Expired");
|
||||
return;
|
||||
}catch (Exception e) {
|
||||
sendErrorResponse(response,HttpServletResponse.SC_UNAUTHORIZED,"Unauthorized");
|
||||
request.setAttribute("AUTH_EXCEPTION","Unauthorized");
|
||||
return;
|
||||
}
|
||||
LoginUserInfo loginInfo = JwtTokenUtil.parseUserFromToken(token);
|
||||
if(loginInfo==null){
|
||||
sendErrorResponse(response,HttpServletResponse.SC_UNAUTHORIZED,"Unauthorized");
|
||||
request.setAttribute("AUTH_EXCEPTION","Invalid token");
|
||||
return;
|
||||
}else{
|
||||
if(!userTokenService.checkUserTokenValid(loginInfo.getTokenUuid())){
|
||||
sendErrorResponse(response,HttpServletResponse.SC_UNAUTHORIZED,"Not Existing Token");
|
||||
request.setAttribute("AUTH_EXCEPTION","Not Existing Token");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}else if(!"OPTIONS".equals(request.getMethod())) {
|
||||
sendErrorResponse(response,HttpServletResponse.SC_UNAUTHORIZED,"Unauthorized");
|
||||
request.setAttribute("AUTH_EXCEPTION","Unauthorized");
|
||||
return;
|
||||
}
|
||||
filterChain.doFilter(request, response);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected boolean shouldNotFilter(@NonNull HttpServletRequest request) {
|
||||
if (excludePatterns == null) {
|
||||
return false;
|
||||
}
|
||||
return excludePatterns.stream()
|
||||
.anyMatch(pattern -> pathMatcher.match(pattern, request.getRequestURI()));
|
||||
}
|
||||
|
||||
private boolean needCheckAppVersion(@NonNull HttpServletRequest request){
|
||||
if(verifyAppVersionList==null || verifyAppVersionList.isEmpty()){
|
||||
return false;
|
||||
}
|
||||
return verifyAppVersionList.stream()
|
||||
.anyMatch(pattern -> pathMatcher.match(pattern, request.getRequestURI()));
|
||||
}
|
||||
|
||||
private void sendErrorResponse(HttpServletResponse response, int errorCode, String errorMessage) throws IOException {
|
||||
response.setStatus(errorCode);
|
||||
response.setContentType("application/text");
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
response.getWriter().write(errorMessage);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.sjmresorts.opsapp.authentication.mappers;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.roles.AdminRoleDto;
|
||||
import com.sjmresorts.opsapp.authentication.models.Role;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface RoleMapper {
|
||||
@Mapping(source = "roleId", target = "roleName")
|
||||
List<AdminRoleDto> toAdminRoleDto(List<Role> roles);
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.sjmresorts.opsapp.authentication.mappers;
|
||||
|
||||
import com.sjmresorts.opsapp.admin.dtos.system.user.CmsUserDto;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.LoginUserInfo;
|
||||
import com.sjmresorts.opsapp.authentication.models.User;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.MappingTarget;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface UserMapper {
|
||||
|
||||
@Mapping(source = "ldapGroup", target = "adGroup")
|
||||
@Mapping(source = "employeeId", target = "userCode")
|
||||
LoginUserInfo toLoginUser(User user);
|
||||
|
||||
@Mapping(source = "employeeId", target = "userCode")
|
||||
CmsUserDto toCmsUserDto(User user);
|
||||
|
||||
@Mapping(source = "employeeId", target = "userCode")
|
||||
List<CmsUserDto> toCmsUserDtoList(List<User> users);
|
||||
|
||||
@Mapping(source = "userCode", target = "employeeId")
|
||||
User toUserEntity(CmsUserDto userDto);
|
||||
|
||||
@Mapping(target = "userId", ignore = true)
|
||||
@Mapping(source = "userCode", target = "employeeId")
|
||||
void updateUserFromCmsUserDto(CmsUserDto dto, @MappingTarget User entity);
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.sjmresorts.opsapp.authentication.models;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name="client_infos")
|
||||
public class ClientInfo {
|
||||
|
||||
@Id
|
||||
@Column(name = "id",nullable = false)
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@Column(name = "is_latest")
|
||||
private Boolean isLatest;
|
||||
|
||||
@Column(name = "is_active")
|
||||
private Boolean isActive;
|
||||
|
||||
@Column(name = "current_login_user")
|
||||
private String currentLoginUser;
|
||||
|
||||
@Column(name = "client_version")
|
||||
private String clientVersion;
|
||||
|
||||
@Column(name = "device_fuid")
|
||||
private String deviceFuid;
|
||||
|
||||
@Column(name = "client_name")
|
||||
private String clientName;
|
||||
|
||||
@Column(name = "casino_code")
|
||||
private String casinoCode;
|
||||
|
||||
@Column(name = "created_at")
|
||||
private Instant createdAt;
|
||||
|
||||
@Column(name = "updated_at")
|
||||
private Instant updatedAt;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.sjmresorts.opsapp.authentication.models;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name="roles")
|
||||
public class Role {
|
||||
@Id
|
||||
@Column(name = "role_id")
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long roleId;
|
||||
|
||||
@Column(name = "role_name")
|
||||
private String roleName;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.sjmresorts.opsapp.authentication.models;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name="role_permissions")
|
||||
public class RolePermission {
|
||||
@Id
|
||||
@Column(name = "id")
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@Column(name = "role_id")
|
||||
private Long roleId;
|
||||
|
||||
@Column(name = "permission_id")
|
||||
private Long permissionId;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.sjmresorts.opsapp.authentication.models;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name="role_users")
|
||||
public class RoleUsers {
|
||||
@Id
|
||||
@Column(name = "id")
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@Column(name = "role_id")
|
||||
private Long roleId;
|
||||
|
||||
@Column(name = "employee_id")
|
||||
private String employeeId;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.sjmresorts.opsapp.authentication.models;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name="permissions")
|
||||
public class RouterPermission {
|
||||
@Id
|
||||
@Column(name = "permission_id")
|
||||
private Long id;
|
||||
@Column(name = "router_id")
|
||||
private String routerId;
|
||||
@Column(name = "permission_name")
|
||||
private String permissionName;
|
||||
@Transient
|
||||
private boolean selected=false;
|
||||
@Transient
|
||||
private String dataPermissionTag;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.sjmresorts.opsapp.authentication.models;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Table;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name="users")
|
||||
public class SimpleUser {
|
||||
@Id
|
||||
@Column(name = "user_id")
|
||||
private Long userId;
|
||||
|
||||
@Column(name = "employee_id")
|
||||
private String employeeId;
|
||||
|
||||
@Column(name = "username")
|
||||
private String userName;
|
||||
|
||||
@Column(name = "email")
|
||||
private String email;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.sjmresorts.opsapp.authentication.models;
|
||||
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name="sys_routers")
|
||||
public class SysRouter {
|
||||
@Id
|
||||
@Column(name = "id")
|
||||
private String id;
|
||||
@Column(name="parent_id")
|
||||
private String parentId;
|
||||
@Column(name="heading")
|
||||
private String heading;
|
||||
@Column(name="section_title")
|
||||
private String sectionTitle;
|
||||
@Column(name="route")
|
||||
private String route;
|
||||
@Column(name="svg_icon")
|
||||
private String svgIcon;
|
||||
@Column(name="font_icon")
|
||||
private String fontIcon;
|
||||
@Column(name="sort_no")
|
||||
private Integer sortNo;
|
||||
@Column(name="status")
|
||||
private Integer status;
|
||||
|
||||
@Transient
|
||||
private List<SysRouter> sub;
|
||||
|
||||
@Transient
|
||||
private List<RouterPermission> routePermissions=new ArrayList<RouterPermission>();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package com.sjmresorts.opsapp.authentication.models;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import org.hibernate.annotations.SQLDelete;
|
||||
import org.hibernate.annotations.SQLRestriction;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name="users")
|
||||
@SQLDelete(sql = "UPDATE users SET deleted_at = CURRENT_TIMESTAMP WHERE user_id = ?")
|
||||
@SQLRestriction("deleted_at IS NULL")
|
||||
public class User {
|
||||
|
||||
@Id
|
||||
@Column(name = "user_id",nullable = false)
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long userId;
|
||||
|
||||
@Column(name = "employee_id",nullable = false)
|
||||
private String employeeId;
|
||||
|
||||
@Column(name = "username")
|
||||
private String userName;
|
||||
|
||||
@Column(name = "ldap_group")
|
||||
private String ldapGroup;
|
||||
|
||||
@Column(name = "role")
|
||||
private String role;
|
||||
|
||||
@Column(name = "casino_code",nullable = false)
|
||||
private String casinoCode;
|
||||
|
||||
@Column(name = "pits")
|
||||
private String pitCodes;
|
||||
|
||||
@Column(name = "device_id")
|
||||
private String deviceId;
|
||||
|
||||
@Column(name = "device_token")
|
||||
private String deviceToken;
|
||||
|
||||
@Column(name = "online_status")
|
||||
private Boolean onlineStatus;
|
||||
|
||||
@Column(name = "last_heartbeat")
|
||||
private Instant lastHeartbeat;
|
||||
|
||||
@Column(name = "email")
|
||||
private String email;
|
||||
|
||||
@Column(name = "password")
|
||||
private String password;
|
||||
|
||||
@Column(name = "status")
|
||||
private Integer status;
|
||||
|
||||
@Column(name = "last_login")
|
||||
private Instant lastLogin;
|
||||
|
||||
@Column(name = "cms_last_login")
|
||||
private Instant cmsLastLogin;
|
||||
|
||||
@Column(name = "is_deleted")
|
||||
private Boolean deleted;
|
||||
|
||||
@Column(name = "deleted_at")
|
||||
private Instant deletedAt;
|
||||
|
||||
@Version
|
||||
@Column(name="version")
|
||||
private Long version;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.sjmresorts.opsapp.authentication.models;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name="user_roles")
|
||||
public class UserRole {
|
||||
|
||||
@Id
|
||||
@Column(name = "id",nullable = false)
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@Column(name = "user_id")
|
||||
private Long userId;
|
||||
|
||||
@Column(name = "role_id")
|
||||
private Long roleId;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.sjmresorts.opsapp.authentication.models;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Date;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name="user_tokens")
|
||||
public class UserToken {
|
||||
@Id
|
||||
@Column(name = "token_id",nullable = false)
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long tokenId;
|
||||
|
||||
@Column(name = "user_code",nullable = false)
|
||||
private String userCode;
|
||||
|
||||
@Column(name = "token_type",nullable = false)
|
||||
private String tokenType;
|
||||
|
||||
@Column(name = "token_value",nullable = false)
|
||||
private String tokenValue;
|
||||
|
||||
@Column(name = "token_uuid")
|
||||
private String tokenUniqueId;
|
||||
|
||||
@Column(name = "created_at")
|
||||
private Instant createdAt;
|
||||
|
||||
@Column(name = "expiry_time")
|
||||
private Date expiryTime;
|
||||
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package com.sjmresorts.opsapp.authentication.repositories;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.ClientInfo;
|
||||
import jakarta.transaction.Transactional;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface DeviceInfoRepository extends JpaRepository<ClientInfo, Long> {
|
||||
|
||||
List<ClientInfo> findAllByDeviceFuid(String deviceId);
|
||||
|
||||
Page<ClientInfo> findAll(Specification<ClientInfo> listSpec, Pageable pageable);
|
||||
|
||||
@Modifying
|
||||
@Transactional
|
||||
@Query(value="update ClientInfo set currentLoginUser=null, updatedAt=?2 " +
|
||||
"where currentLoginUser=?1 ")
|
||||
void clearLogoutDevice(String employeeId, Instant updateTime);
|
||||
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.sjmresorts.opsapp.authentication.repositories;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.RolePermission;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface RolePermissionRepository extends JpaRepository<RolePermission, Long> {
|
||||
|
||||
@Query("SELECT rp FROM RolePermission rp WHERE rp.roleId = ?1")
|
||||
List<RolePermission> getAllPermissionByRoleId(Long roleId);
|
||||
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.sjmresorts.opsapp.authentication.repositories;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.RouterPermission;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface RouterPermissionRepository extends JpaRepository<RouterPermission, Long> {
|
||||
|
||||
@Query(value="select rp from RouterPermission rp where rp.id in " +
|
||||
" (select rop.permissionId from RolePermission rop where rop.roleId in ?1) ")
|
||||
List<RouterPermission> queryPermissionByRoleIds(List<Long> roleIds);
|
||||
|
||||
@Query(value="select rp from RouterPermission rp where rp.id in " +
|
||||
" (select rop.permissionId from RolePermission rop where rop.roleId in ?1) and rp.routerId in ?2 ")
|
||||
List<RouterPermission> queryPermissionByRoleAndRouterIds(List<Long> roleIds,List<String> routerIds);
|
||||
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package com.sjmresorts.opsapp.authentication.repositories;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.SysRouter;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface SysRouterRepository extends JpaRepository<SysRouter, String> {
|
||||
|
||||
@Query(value="select rte from SysRouter rte where rte.status=1 order by rte.sortNo")
|
||||
List<SysRouter> queryAllActiveRouter();
|
||||
|
||||
@Query(value="select rte from SysRouter rte order by rte.sortNo")
|
||||
List<SysRouter> queryAllRoutersOrderBySort();
|
||||
|
||||
@Query(value="select rte from SysRouter rte where rte.heading is not null and rte.status=1 order by rte.sortNo")
|
||||
List<SysRouter> getAllChildrenRoutes();
|
||||
|
||||
@Query(value="select rte.id from SysRouter rte where heading=?1")
|
||||
List<String> queryIdsByHeading(String appRouterName);
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package com.sjmresorts.opsapp.authentication.repositories;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.User;
|
||||
import jakarta.transaction.Transactional;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@Repository
|
||||
public interface UserRepository extends JpaRepository<User, Long> {
|
||||
Optional<User> findByEmployeeId(String employeeId);
|
||||
|
||||
Optional<User> findByDeviceId(String deviceId);
|
||||
|
||||
List<User> findByEmployeeIdIn(Collection<String> employeeIds);
|
||||
|
||||
Optional<User> findByDeviceToken(String deviceToken);
|
||||
|
||||
Page<User> findAll(Specification<User> listSpec, Pageable pageable);
|
||||
|
||||
List<User> findAll(Specification<User> spec, Sort sort);
|
||||
|
||||
@Query(value="select usr from User usr where casinoCode=?1 and pitCodes like %?2% and lastHeartbeat >= ?3")
|
||||
List<User> queryOnlineUserForPit(String casinoCode, String pitCode, Instant heartbeatAfter);
|
||||
|
||||
int countByEmployeeIdAndPassword(String upperCase, String encryptPassword);
|
||||
|
||||
@Modifying
|
||||
@Transactional
|
||||
@Query(value="update User set casinoCode='', pitCodes='', deviceId=null, deviceToken=null, onlineStatus=false, lastHeartbeat=null " +
|
||||
" where employeeId=?1 ")
|
||||
void clearAppLoginInfoByUser(String employeeId);
|
||||
|
||||
@Modifying
|
||||
@Transactional
|
||||
@Query(value="update User set lastHeartbeat=?2 where employeeId=?1 ")
|
||||
int registerHeartBeat(String employeeId, Instant now);
|
||||
|
||||
@Query(value = "select u.employeeId from User u where u.lastHeartbeat < ?1 order by u.lastHeartbeat asc")
|
||||
List<String> findExpiredSessionEmployeeIds(Instant checkExpiryTime, Pageable pageable);
|
||||
|
||||
@Modifying
|
||||
@Transactional
|
||||
@Query(value="update User set deviceId=null, deviceToken=null where employeeId<>?1 and deviceId=?2")
|
||||
void clearOtherUserDeviceInfo(String employeeId, String deviceId);
|
||||
|
||||
@Modifying
|
||||
@Transactional
|
||||
@Query("update User u set u.deviceToken = null where u.deviceToken = ?1")
|
||||
int clearDeviceTokenByToken(String deviceToken);
|
||||
|
||||
@Modifying
|
||||
@Transactional
|
||||
@Query("update User u set u.deviceToken = null where u.employeeId = ?1")
|
||||
int clearDeviceTokenByEmployeeId(String employeeId);
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package com.sjmresorts.opsapp.authentication.repositories;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.UserRole;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface UserRoleRepository extends JpaRepository<UserRole, Long> {
|
||||
|
||||
@Query(value="select usrRole.id from UserRole usrRole where userId=?1 ")
|
||||
List<Long> findRoleIdListByUserId(Long userId);
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
package com.sjmresorts.opsapp.authentication.repositories;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.models.UserToken;
|
||||
import jakarta.transaction.Transactional;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Repository
|
||||
public interface UserTokenRepository extends JpaRepository<UserToken, Long> {
|
||||
|
||||
int countByTokenUniqueId(String tokenUuid);
|
||||
int countByTokenTypeAndTokenValue(String tokenType, String tokenValue);
|
||||
|
||||
@Modifying
|
||||
@Transactional
|
||||
void deleteAllByTokenTypeAndUserCode(String tokenType, String userCode);
|
||||
|
||||
@Modifying
|
||||
@Transactional
|
||||
void deleteAllByTokenUniqueId(String tokenUuid);
|
||||
|
||||
@Modifying
|
||||
@Transactional
|
||||
@Query(value="delete from UserToken where expiryTime<?1")
|
||||
void deleteAllExpiredBeforeTime(Date expiryTime);
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
package com.sjmresorts.opsapp.authentication.services;
|
||||
|
||||
import com.sjmresorts.opsapp.authentication.dtos.AdAuthorizeResponse;
|
||||
import com.sjmresorts.opsapp.authentication.dtos.AdUserInfo;
|
||||
import com.sjmresorts.opsapp.common.dtos.LDAP.ADAccountInfo;
|
||||
import com.sjmresorts.opsapp.common.utils.LDAPUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class AdAuthorizeService {
|
||||
@Resource
|
||||
private LDAPUtil ldapUtil;
|
||||
|
||||
public AdAuthorizeResponse mockupAdUserLogin(String userCode, String password) {
|
||||
AdAuthorizeResponse result = new AdAuthorizeResponse();
|
||||
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
AdUserInfo adUser = new AdUserInfo();
|
||||
adUser.setEmployeeId(userCode);
|
||||
adUser.setAdGroup(List.of("APP Admin"));
|
||||
adUser.setUserName("chanTaiman");
|
||||
adUser.setRole("ADRole");
|
||||
adUser.setEmail("TestEmail@sjm.com");
|
||||
result.setUserInfo(adUser);
|
||||
return result;
|
||||
}
|
||||
|
||||
public AdAuthorizeResponse verfiyAdUser(String employeeID, String password) {
|
||||
AdAuthorizeResponse result = new AdAuthorizeResponse();
|
||||
|
||||
/*************Check And Get AD Account************/
|
||||
boolean checkPassed = false;
|
||||
checkPassed = ldapUtil.authenticate(employeeID, password);
|
||||
ADAccountInfo account = ldapUtil.getAccountInfo(employeeID);
|
||||
/*************Check And Get AD Account************/
|
||||
|
||||
if (account == null) {
|
||||
// Handle user not found, e.g. throw custom exception or return error
|
||||
throw new RuntimeException("User not found in LDAP: " + employeeID);
|
||||
}
|
||||
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
AdUserInfo adUser = new AdUserInfo();
|
||||
adUser.setEmployeeId(employeeID);
|
||||
adUser.setAdGroup(account.getDirectGroups());
|
||||
adUser.setUserName(account.getDisplayName());
|
||||
adUser.setRole("ADRole");
|
||||
adUser.setEmail(account.getMail());
|
||||
result.setUserInfo(adUser);
|
||||
return result;
|
||||
}
|
||||
|
||||
public AdAuthorizeResponse getAdUser(String userCode) {
|
||||
AdAuthorizeResponse result = new AdAuthorizeResponse();
|
||||
|
||||
ADAccountInfo account = ldapUtil.getAccountInfo(userCode);
|
||||
|
||||
result.setSuccess(true);
|
||||
result.setCode("200");
|
||||
AdUserInfo adUser = new AdUserInfo();
|
||||
adUser.setEmployeeId(userCode);
|
||||
adUser.setAdGroup(account.getDirectGroups());
|
||||
// adUser.setAdGroup(List.of("APP Admin"));
|
||||
adUser.setUserName(account.getDisplayName());
|
||||
adUser.setRole("ADRole");
|
||||
|
||||
adUser.setEmail(account.getMail());
|
||||
result.setUserInfo(adUser);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user