Raid Instance Creator working
This commit is contained in:
18
db/1.0.0/18. createRaidInstancePersonCharacterXref.sql
Normal file
18
db/1.0.0/18. createRaidInstancePersonCharacterXref.sql
Normal file
@@ -0,0 +1,18 @@
|
||||
CREATE TABLE raid_builder.raid_instance_person_character_xref(
|
||||
raid_instance_person_character_xref_id uuid PRIMARY KEY,
|
||||
raid_instance_id uuid REFERENCES raid_builder.raid_instance(raid_instance_id) NOT NULL,
|
||||
person_character_id uuid REFERENCES raid_builder.person_character(person_character_id) NOT NULL,
|
||||
group_number int NOT NULL,
|
||||
position_number int NOT NULL,
|
||||
|
||||
--Auditing
|
||||
modified_by uuid,
|
||||
modified_date timestamptz,
|
||||
created_by uuid NOT NULL,
|
||||
created_date timestamptz NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX idx_raid_instance_person_character_xref_raid_instance_id ON raid_builder.raid_instance_person_character_xref(raid_instance_id);
|
||||
CREATE INDEX idx_raid_instance_person_character_xref_person_character_id ON raid_builder.raid_instance_person_character_xref(person_character_id);
|
||||
|
||||
GRANT ALL ON TABLE raid_builder.raid_instance_person_character_xref TO raid_builder;
|
||||
@@ -99,6 +99,7 @@ public class ClassGroupController{
|
||||
return classGroupService.getClassGroupsByRaidLayoutId(raidLayoutId);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping
|
||||
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
|
||||
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER})
|
||||
|
||||
@@ -18,7 +18,9 @@ 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.PersonCharacter;
|
||||
import com.mattrixwv.raidbuilder.entity.RaidGroup;
|
||||
import com.mattrixwv.raidbuilder.service.PersonCharacterService;
|
||||
import com.mattrixwv.raidbuilder.service.RaidGroupService;
|
||||
import com.mattrixwv.raidbuilder.util.DatabaseTypeUtil.AccountPermissionType;
|
||||
import com.mattrixwv.raidbuilder.util.DatabaseTypeUtil.RaidGroupPermissionType;
|
||||
@@ -34,6 +36,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
public class RaidGroupController{
|
||||
private final ObjectMapper mapper;
|
||||
private final RaidGroupService raidGroupService;
|
||||
private final PersonCharacterService personCharacterService;
|
||||
|
||||
|
||||
@GetMapping
|
||||
@@ -234,4 +237,19 @@ public class RaidGroupController{
|
||||
|
||||
return countNode;
|
||||
}
|
||||
|
||||
|
||||
//!Person Character
|
||||
@GetMapping("/{raidGroupId}/person/character")
|
||||
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
|
||||
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER, RaidGroupPermissionType.RAIDER})
|
||||
public List<PersonCharacter> getPersonCharactersByRaidGroup(@PathVariable("raidGroupId") UUID raidGroupId){
|
||||
log.info("Getting person characters for raid group {}", raidGroupId);
|
||||
|
||||
|
||||
List<PersonCharacter> personCharacters = personCharacterService.getPersonCharactersByRaidGroupId(raidGroupId);
|
||||
|
||||
|
||||
return personCharacters;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +80,16 @@ public class RaidInstanceController{
|
||||
return returnNode;
|
||||
}
|
||||
|
||||
@GetMapping("/{raidInstanceId}")
|
||||
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
|
||||
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER, RaidGroupPermissionType.RAIDER})
|
||||
public RaidInstance getRaidInstance(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("raidInstanceId") UUID raidInstanceId){
|
||||
log.info("Getting raid instance {} for raid group {}", raidInstanceId, raidGroupId);
|
||||
|
||||
|
||||
return raidInstanceService.findById(raidInstanceId);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping
|
||||
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
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.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.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;
|
||||
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
@@ -71,6 +71,16 @@ public class RaidLayoutController{
|
||||
return returnNode;
|
||||
}
|
||||
|
||||
@GetMapping("/{raidLayoutId}")
|
||||
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
|
||||
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER, RaidGroupPermissionType.RAIDER})
|
||||
public RaidLayout getRaidLayout(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("raidLayoutId") UUID raidLayoutId){
|
||||
log.info("Getting Raid Layout {} for Raid Group {}", raidLayoutId, raidGroupId);
|
||||
|
||||
|
||||
return raidLayoutService.getRaidLayout(raidLayoutId, raidGroupId);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping
|
||||
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.mattrixwv.raidbuilder.entity;
|
||||
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.GenerationType;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Table;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
|
||||
@Entity
|
||||
@Table(name = "raid_instance_person_character_xref", schema = "raid_builder")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@NoArgsConstructor
|
||||
public class RaidInstancePersonCharacterXref extends AuditableEntity{
|
||||
@Id
|
||||
@Column(name = "raid_instance_person_character_xref_id")
|
||||
@GeneratedValue(strategy = GenerationType.UUID)
|
||||
private UUID raidInstancePersonCharacterXrefId;
|
||||
@Column(name = "raid_instance_id")
|
||||
private UUID raidInstanceId;
|
||||
@Column(name = "person_character_id")
|
||||
private UUID personCharacterId;
|
||||
@Column(name = "group_number")
|
||||
private int groupNumber;
|
||||
@Column(name = "position_number")
|
||||
private int positionNumber;
|
||||
}
|
||||
@@ -1,5 +1,12 @@
|
||||
package com.mattrixwv.raidbuilder.repository.person_character;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.mattrixwv.raidbuilder.entity.PersonCharacter;
|
||||
|
||||
|
||||
public interface PersonCharacterCustomRepository{
|
||||
public List<PersonCharacter> findAllByRaidGroupId(UUID raidGroupId);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,32 @@
|
||||
package com.mattrixwv.raidbuilder.repository.person_character;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import com.mattrixwv.raidbuilder.entity.PersonCharacter;
|
||||
|
||||
import jakarta.persistence.EntityManager;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
|
||||
@Repository
|
||||
@RequiredArgsConstructor
|
||||
public class PersonCharacterRepositoryImpl implements PersonCharacterCustomRepository{
|
||||
private final EntityManager entityManager;
|
||||
|
||||
|
||||
@Override
|
||||
public List<PersonCharacter> findAllByRaidGroupId(UUID raidGroupId){
|
||||
return entityManager.createQuery("""
|
||||
SELECT pc FROM PersonCharacter pc
|
||||
INNER JOIN Person p ON pc.personId = p.personId
|
||||
WHERE p.raidGroupId = :raidGroupId
|
||||
ORDER BY pc.characterName ASC
|
||||
""", PersonCharacter.class)
|
||||
.setParameter("raidGroupId", raidGroupId)
|
||||
.getResultList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.mattrixwv.raidbuilder.repository.raid_instance_person_character_xref_repository;
|
||||
|
||||
|
||||
public interface RaidInstancePersonCharacterXrefCustomRepository{
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.mattrixwv.raidbuilder.repository.raid_instance_person_character_xref_repository;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import com.mattrixwv.raidbuilder.entity.RaidInstancePersonCharacterXref;
|
||||
|
||||
|
||||
public interface RaidInstancePersonCharacterXrefRepository extends RaidInstancePersonCharacterXrefCustomRepository, JpaRepository<RaidInstancePersonCharacterXref, UUID>{
|
||||
public void deleteAllByRaidInstanceId(UUID raidInstanceId);
|
||||
public void deleteAllByRaidInstanceIdIn(Iterable<UUID> raidInstanceIds);
|
||||
|
||||
|
||||
public List<RaidInstancePersonCharacterXref> findAllByPersonCharacterId(UUID personCharacterId);
|
||||
public List<RaidInstancePersonCharacterXref> findAllByPersonCharacterIdIn(Iterable<UUID> personCharacterIds);
|
||||
public List<RaidInstancePersonCharacterXref> findAllByRaidInstanceId(UUID raidInstanceId);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.mattrixwv.raidbuilder.repository.raid_instance_person_character_xref_repository;
|
||||
|
||||
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
|
||||
@Repository
|
||||
public class RaidInstancePersonCharacterXrefRepositoryImpl implements RaidInstancePersonCharacterXrefCustomRepository{
|
||||
}
|
||||
@@ -58,6 +58,10 @@ public class PersonCharacterService{
|
||||
return personCharacterRepository.findAllByPersonIdAndCharacterNameContainingIgnoreCase(personId, searchTerm, PageRequest.of(page, pageSize, Sort.by("characterName").ascending()));
|
||||
}
|
||||
|
||||
public List<PersonCharacter> getPersonCharactersByRaidGroupId(UUID raidGroupId){
|
||||
return personCharacterRepository.findAllByRaidGroupId(raidGroupId);
|
||||
}
|
||||
|
||||
public long getCountByPersonId(UUID personId){
|
||||
return personCharacterRepository.countByPersonId(personId);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
package com.mattrixwv.raidbuilder.service;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.mattrixwv.raidbuilder.entity.RaidInstancePersonCharacterXref;
|
||||
import com.mattrixwv.raidbuilder.repository.raid_instance_person_character_xref_repository.RaidInstancePersonCharacterXrefRepository;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@RequiredArgsConstructor
|
||||
public class RaidInstancePersonCharacterXrefService{
|
||||
private final RaidInstancePersonCharacterXrefRepository raidInstancePersonCharacterXrefRepository;
|
||||
|
||||
|
||||
//Write
|
||||
public List<RaidInstancePersonCharacterXref> create(Iterable<RaidInstancePersonCharacterXref> xrefs){
|
||||
return raidInstancePersonCharacterXrefRepository.saveAll(xrefs);
|
||||
}
|
||||
|
||||
public List<RaidInstancePersonCharacterXref> update(Iterable<RaidInstancePersonCharacterXref> xrefs, Iterable<RaidInstancePersonCharacterXref> xrefsToDelete){
|
||||
raidInstancePersonCharacterXrefRepository.deleteAll(xrefsToDelete);
|
||||
|
||||
return raidInstancePersonCharacterXrefRepository.saveAll(xrefs);
|
||||
}
|
||||
|
||||
public void deleteByRaidInstanceId(UUID raidInstanceId){
|
||||
raidInstancePersonCharacterXrefRepository.deleteAllByRaidInstanceId(raidInstanceId);
|
||||
}
|
||||
|
||||
public void deleteByRaidInstanceIds(Iterable<UUID> raidInstanceIds){
|
||||
raidInstancePersonCharacterXrefRepository.deleteAllByRaidInstanceIdIn(raidInstanceIds);
|
||||
}
|
||||
|
||||
public void deleteByPersonCharacterId(UUID personCharacterId){
|
||||
List<RaidInstancePersonCharacterXref> xrefs = raidInstancePersonCharacterXrefRepository.findAllByPersonCharacterId(personCharacterId);
|
||||
xrefs.forEach(xref -> xref.setPersonCharacterId(null));
|
||||
raidInstancePersonCharacterXrefRepository.saveAll(xrefs);
|
||||
}
|
||||
|
||||
public void deleteByPersonCharacterIds(Iterable<UUID> personCharacterIds){
|
||||
List<RaidInstancePersonCharacterXref> xrefs = raidInstancePersonCharacterXrefRepository.findAllByPersonCharacterIdIn(personCharacterIds);
|
||||
xrefs.forEach(xref -> xref.setPersonCharacterId(null));
|
||||
raidInstancePersonCharacterXrefRepository.saveAll(xrefs);
|
||||
}
|
||||
|
||||
|
||||
//Read
|
||||
public List<RaidInstancePersonCharacterXref> getByRaidInstanceId(UUID raidInstanceId){
|
||||
return raidInstancePersonCharacterXrefRepository.findAllByRaidInstanceId(raidInstanceId);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user