package com.mattrixwv.raidbuilder.controller; import java.util.List; import java.util.UUID; 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.RestController; import com.mattrixwv.raidbuilder.annotation.AccountAuthorization; import com.mattrixwv.raidbuilder.annotation.RaidGroupAuthorization; import com.mattrixwv.raidbuilder.entity.PersonCharacter; import com.mattrixwv.raidbuilder.service.PersonCharacterService; 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}/person/{personId}/character") @RequiredArgsConstructor public class PersonCharacterController{ private final PersonCharacterService personCharacterService; @GetMapping @AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER}) @RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER, RaidGroupPermissionType.RAIDER}) public List getPersonCharactersForPerson(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("personId") UUID personId){ log.info("Getting person characters for person {}", personId); return personCharacterService.getByPersonId(personId); } @PostMapping @AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER}) @RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER}) public PersonCharacter createPersonCharacter(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("personId") UUID personId, @RequestBody PersonCharacter personCharacter){ log.info("Creating person character {} for person {}", personCharacter.getCharacterName(), personId); personCharacter.setPersonId(personId); personCharacter = personCharacterService.createPersonCharacter(personCharacter); return personCharacter; } @PutMapping("/{characterId}") @AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER}) @RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER}) public PersonCharacter updatePersonCharacter(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("personId") UUID personId, @PathVariable("characterId") UUID characterId, @RequestBody PersonCharacter personCharacter){ log.info("Updating person character {} for person {}", personCharacter.getCharacterName(), personId); personCharacter.setPersonCharacterId(characterId); personCharacter.setPersonId(personId); personCharacter = personCharacterService.updatePersonCharacter(personCharacter); return personCharacter; } @DeleteMapping("/{characterId}") @AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER}) @RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER}) public void deletePersonCharacter(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("personId") UUID personId, @PathVariable("characterId") UUID characterId){ log.info("Deleting person character {} for person {}", characterId, personId); personCharacterService.deletePersonCharacter(characterId); } }