Requests tab working

This commit is contained in:
2025-03-10 19:19:53 -04:00
parent 5dc0ab1e10
commit c58df66e75
11 changed files with 396 additions and 0 deletions

View File

@@ -0,0 +1,145 @@
package com.mattrixwv.raidbuilder.controller;
import java.util.List;
import java.util.UUID;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.mattrixwv.raidbuilder.annotation.AccountAuthorization;
import com.mattrixwv.raidbuilder.annotation.RaidGroupAuthorization;
import com.mattrixwv.raidbuilder.entity.Account;
import com.mattrixwv.raidbuilder.entity.RaidGroupRequest;
import com.mattrixwv.raidbuilder.service.AccountService;
import com.mattrixwv.raidbuilder.service.RaidGroupRequestService;
import com.mattrixwv.raidbuilder.util.DatabaseTypeUtil.AccountPermissionType;
import com.mattrixwv.raidbuilder.util.DatabaseTypeUtil.RaidGroupPermissionType;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestController
@RequestMapping("/raidGroup/{raidGroupId}/raidGroupRequest")
@RequiredArgsConstructor
public class RaidGroupRequestController{
private final ObjectMapper mapper;
private final AccountService accountService;
private final RaidGroupRequestService rgrService;
@GetMapping
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN})
public List<RaidGroupRequest> getRaidGroupRequests(@PathVariable("raidGroupId") UUID raidGroupId, @RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam(name = "searchTerm", required = false) String searchTerm){
log.info("Getting raid group requests for raid group id: {}", raidGroupId);
List<RaidGroupRequest> raidGroupRequests = searchTerm == null ?
rgrService.getByRaidGroupId(raidGroupId, page, pageSize) :
rgrService.getByRaidGroupId(raidGroupId, page, pageSize, searchTerm);
return raidGroupRequests;
}
@GetMapping("/count")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
public ObjectNode getRaidGroupRequestCount(@PathVariable("raidGroupId") UUID raidGroupId, @RequestParam(name = "searchTerm", required = false) String searchTerm){
log.info("Getting Raid Group Request Count for Raid Group {} with search {}", raidGroupId, searchTerm);
long count = searchTerm == null ?
rgrService.getCountByRaidGroupId(raidGroupId) :
rgrService.getCountByRaidGroupId(raidGroupId, searchTerm);
ObjectNode returnNode = mapper.createObjectNode();
returnNode.put("count", count);
returnNode.put("status", "success");
return returnNode;
}
@PutMapping("/{raidGroupRequestId}/resolve")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN})
public ObjectNode resolveRaidGroupRequest(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("raidGroupRequestId") UUID raidGroupRequestId, @RequestBody ObjectNode bodyNode){
log.info("Resolving raid group request for raid group id: {}", raidGroupId);
String resolution = bodyNode.get("resolution").asText();
if(resolution.equals("denied")){
rgrService.deleteRaidGroupRequest(raidGroupRequestId);
}
else{
RaidGroupPermissionType permissionType = RaidGroupPermissionType.valueOf(resolution);
rgrService.resolveRaidGroupRequest(raidGroupRequestId, permissionType);
}
ObjectNode returnNode = mapper.createObjectNode();
returnNode.put("status", "success");
return returnNode;
}
@PostMapping
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
public RaidGroupRequest createRaidGroupRequest(@PathVariable("raidGroupId") UUID raidGroupId, @RequestBody RaidGroupRequest raidGroupRequest, Authentication authentication){
log.info("Creating raid group request for raid group id: {}", raidGroupId);
Account account = accountService.getByUsername(authentication.getName());
raidGroupRequest.setAccountId(account.getAccountId());
raidGroupRequest.setRaidGroupId(raidGroupId);
raidGroupRequest = rgrService.createRaidGroupRequest(raidGroupRequest);
return raidGroupRequest;
}
@PutMapping("/{raidGroupRequestId}")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
public ObjectNode updateRaidGroupRequest(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("raidGroupRequestId") UUID raidGroupRequestId, @RequestBody RaidGroupRequest raidGroupRequest){
log.info("Updating raid group request for raid group id: {}", raidGroupId);
raidGroupRequest.setRaidGroupRequestId(raidGroupRequestId);
raidGroupRequest.setRaidGroupId(raidGroupId);
raidGroupRequest = rgrService.updateRaidGroupRequest(raidGroupRequest);
ObjectNode returnNode = mapper.createObjectNode();
returnNode.put("status", "success");
return returnNode;
}
@DeleteMapping("/{raidGroupRequestId}")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
public ObjectNode deleteRaidGroupRequest(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("raidGroupRequestId") UUID raidGroupRequestId){
log.info("Deleting raid group request for raid group id: {}", raidGroupId);
rgrService.deleteRaidGroupRequest(raidGroupRequestId);
ObjectNode returnNode = mapper.createObjectNode();
returnNode.put("status", "success");
return returnNode;
}
}