Files
RaidBuilderAPI/src/main/java/com/mattrixwv/raidbuilder/controller/RaidInstancePersonCharacterXrefController.java
2026-01-07 12:13:47 -05:00

67 lines
3.0 KiB
Java

package com.mattrixwv.raidbuilder.controller;
import java.util.List;
import java.util.UUID;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.mattrixwv.raidbuilder.annotation.AccountAuthorization;
import com.mattrixwv.raidbuilder.annotation.RaidGroupAuthorization;
import com.mattrixwv.raidbuilder.entity.RaidInstancePersonCharacterXref;
import com.mattrixwv.raidbuilder.service.RaidInstancePersonCharacterXrefService;
import com.mattrixwv.raidbuilder.util.DatabaseTypeUtil.AccountPermissionType;
import com.mattrixwv.raidbuilder.util.DatabaseTypeUtil.RaidGroupPermissionType;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.node.ObjectNode;
@Slf4j
@RestController
@RequestMapping("/raidGroup/{raidGroupId}/raidInstance/{raidInstanceId}/personCharacterXref")
@RequiredArgsConstructor
public class RaidInstancePersonCharacterXrefController{
private final ObjectMapper mapper;
private final RaidInstancePersonCharacterXrefService ripcXrefService;
@GetMapping
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER, RaidGroupPermissionType.RAIDER})
public List<RaidInstancePersonCharacterXref> getXrefsForRaidInstance(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("raidInstanceId") UUID raidInstanceId){
log.info("Getting xrefs for raid instance {} for raid group {}", raidInstanceId, raidGroupId);
return ripcXrefService.getByRaidInstanceId(raidInstanceId);
}
@PostMapping
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER})
public ObjectNode createXrefsForRaidInstance(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("raidInstanceId") UUID raidInstanceId, @RequestBody List<RaidInstancePersonCharacterXref> xrefs){
log.info("Creating xrefs for raid instance {} for raid group {}", raidInstanceId, raidGroupId);
xrefs.forEach(xref -> xref.setRaidInstanceId(raidInstanceId));
List<RaidInstancePersonCharacterXref> existingXrefs = ripcXrefService.getByRaidInstanceId(raidInstanceId);
List<RaidInstancePersonCharacterXref> xrefsToDelete = existingXrefs.stream().filter(xref -> xrefs.stream().noneMatch(xref2 -> xref2.getPersonCharacterId().equals(xref.getPersonCharacterId()))).toList();
ripcXrefService.update(xrefs, xrefsToDelete);
ObjectNode returnNode = mapper.createObjectNode();
returnNode.put("status", "success");
return returnNode;
}
}