Raid Instance tab working
This commit is contained in:
23
db/1.0.0/17. createRaidInstance.sql
Normal file
23
db/1.0.0/17. createRaidInstance.sql
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
CREATE TABLE raid_builder.raid_instance (
|
||||||
|
raid_instance_id uuid PRIMARY KEY,
|
||||||
|
raid_group_id uuid REFERENCES raid_builder.raid_group(raid_group_id),
|
||||||
|
raid_layout_id uuid REFERENCES raid_builder.raid_layout(raid_layout_id),
|
||||||
|
raid_instance_name text,
|
||||||
|
raid_size int,
|
||||||
|
number_runs int NOT NULL,
|
||||||
|
raid_start_date timestamptz NOT NULL,
|
||||||
|
raid_end_date timestamptz NOT NULL,
|
||||||
|
|
||||||
|
--Auditing
|
||||||
|
modified_by uuid,
|
||||||
|
modified_date timestamptz,
|
||||||
|
created_by uuid NOT NULL,
|
||||||
|
created_date timestamptz NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX idx_raid_instance_raid_group_id ON raid_builder.raid_instance(raid_group_id);
|
||||||
|
CREATE INDEX idx_raid_instance_raid_layout_id ON raid_builder.raid_instance(raid_layout_id);
|
||||||
|
CREATE INDEX idx_raid_instance_raid_instance_name ON raid_builder.raid_instance(raid_instance_name);
|
||||||
|
CREATE INDEX idx_raid_instance_raid_start_date ON raid_builder.raid_instance(raid_start_date);
|
||||||
|
|
||||||
|
GRANT ALL ON TABLE raid_builder.raid_instance TO raid_builder;
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
package com.mattrixwv.raidbuilder.controller;
|
||||||
|
|
||||||
|
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
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.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.RaidInstance;
|
||||||
|
import com.mattrixwv.raidbuilder.service.RaidInstanceService;
|
||||||
|
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")
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class RaidInstanceController{
|
||||||
|
private final ObjectMapper mapper;
|
||||||
|
private final RaidInstanceService raidInstanceService;
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
|
||||||
|
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER, RaidGroupPermissionType.RAIDER})
|
||||||
|
public List<RaidInstance> getRaidInstances(@PathVariable("raidGroupId") UUID raidGroupId, @RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam(name = "searchTerm", required = false) String searchTerm){
|
||||||
|
log.info("Getting future raid instance for raid group {} on page {} of size {} with search term {}", raidGroupId, page, pageSize, searchTerm);
|
||||||
|
|
||||||
|
|
||||||
|
List<RaidInstance> raidInstances;
|
||||||
|
if(searchTerm == null || searchTerm.isEmpty()){
|
||||||
|
raidInstances = raidInstanceService.findAllByRaidGroupIdAndEndDate(raidGroupId, ZonedDateTime.now(), page, pageSize);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
raidInstances = raidInstanceService.findAllByRaidGroupIdAndEndDate(raidGroupId, ZonedDateTime.now(), page, pageSize, searchTerm);
|
||||||
|
}
|
||||||
|
log.debug("Found {} raid instances", raidInstances.size());
|
||||||
|
|
||||||
|
|
||||||
|
return raidInstances;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/count")
|
||||||
|
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
|
||||||
|
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER, RaidGroupPermissionType.RAIDER})
|
||||||
|
public ObjectNode getRaidInstanceCount(@PathVariable("raidGroupId") UUID raidGroupId, @RequestParam(name = "searchTerm", required = false) String searchTerm){
|
||||||
|
log.info("Getting raid instance count for raid group {} with search term {}", raidGroupId, searchTerm);
|
||||||
|
|
||||||
|
|
||||||
|
long count;
|
||||||
|
if(searchTerm == null || searchTerm.isEmpty()){
|
||||||
|
count = raidInstanceService.countByRaidGroupIdAndEndDate(raidGroupId, ZonedDateTime.now());
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
count = raidInstanceService.countByRaidGroupIdAndEndDate(raidGroupId, ZonedDateTime.now(), searchTerm);
|
||||||
|
}
|
||||||
|
log.debug("Found count {}", count);
|
||||||
|
ObjectNode returnNode = mapper.createObjectNode();
|
||||||
|
returnNode.put("count", count);
|
||||||
|
returnNode.put("status", "success");
|
||||||
|
|
||||||
|
|
||||||
|
return returnNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
|
||||||
|
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER})
|
||||||
|
public RaidInstance createRaidInstance(@PathVariable("raidGroupId") UUID raidGroupId, @RequestBody RaidInstance raidInstance){
|
||||||
|
log.info("Creating raid instance for raid group {}", raidGroupId);
|
||||||
|
|
||||||
|
|
||||||
|
raidInstance.setRaidGroupId(raidGroupId);
|
||||||
|
RaidInstance createdRaidInstance = raidInstanceService.createRaidInstance(raidInstance);
|
||||||
|
log.debug("Created raid instance {}", createdRaidInstance);
|
||||||
|
|
||||||
|
|
||||||
|
return createdRaidInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{raidInstanceId}")
|
||||||
|
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
|
||||||
|
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER})
|
||||||
|
public RaidInstance updateRaidInstance(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("raidInstanceId") UUID raidInstanceId, @RequestBody RaidInstance raidInstance){
|
||||||
|
log.info("Updating raid instance {} for raid group {}", raidInstanceId, raidGroupId);
|
||||||
|
|
||||||
|
|
||||||
|
raidInstance.setRaidInstanceId(raidInstanceId);
|
||||||
|
raidInstance.setRaidGroupId(raidGroupId);
|
||||||
|
RaidInstance updatedRaidInstance = raidInstanceService.updateRaidInstance(raidInstance);
|
||||||
|
log.debug("Updated raid instance {}", updatedRaidInstance);
|
||||||
|
|
||||||
|
|
||||||
|
return updatedRaidInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{raidInstanceId}")
|
||||||
|
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
|
||||||
|
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER})
|
||||||
|
public ObjectNode deleteRaidInstance(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("raidInstanceId") UUID raidInstanceId){
|
||||||
|
log.info("Deleting raid instance {} for raid group {}", raidInstanceId, raidGroupId);
|
||||||
|
|
||||||
|
|
||||||
|
raidInstanceService.deleteById(raidInstanceId);
|
||||||
|
|
||||||
|
ObjectNode returnNode = mapper.createObjectNode();
|
||||||
|
returnNode.put("status", "success");
|
||||||
|
|
||||||
|
|
||||||
|
return returnNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package com.mattrixwv.raidbuilder.entity;
|
||||||
|
|
||||||
|
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
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", schema = "raid_builder")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class RaidInstance extends AuditableEntity{
|
||||||
|
@Id
|
||||||
|
@Column(name = "raid_instance_id")
|
||||||
|
@GeneratedValue(strategy = GenerationType.UUID)
|
||||||
|
private UUID raidInstanceId;
|
||||||
|
@Column(name = "raid_group_id")
|
||||||
|
private UUID raidGroupId;
|
||||||
|
@Column(name = "raid_layout_id")
|
||||||
|
private UUID raidLayoutId;
|
||||||
|
@Column(name = "raid_instance_name")
|
||||||
|
private String raidInstanceName;
|
||||||
|
@Column(name = "raid_size")
|
||||||
|
private Integer raidSize;
|
||||||
|
@Column(name = "number_runs")
|
||||||
|
private Integer numberRuns;
|
||||||
|
@Column(name = "raid_start_date")
|
||||||
|
private ZonedDateTime raidStartDate;
|
||||||
|
@Column(name = "raid_end_date")
|
||||||
|
private ZonedDateTime raidEndDate;
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package com.mattrixwv.raidbuilder.repository.raid_instance;
|
||||||
|
|
||||||
|
|
||||||
|
public interface RaidInstanceCustomRepository{
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package com.mattrixwv.raidbuilder.repository.raid_instance;
|
||||||
|
|
||||||
|
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
|
import com.mattrixwv.raidbuilder.entity.RaidInstance;
|
||||||
|
|
||||||
|
|
||||||
|
public interface RaidInstanceRepository extends RaidInstanceCustomRepository, JpaRepository<RaidInstance, UUID>{
|
||||||
|
public void deleteAllByRaidGroupId(UUID raidGroupId);
|
||||||
|
public void deleteAllByRaidGroupIdIn(Iterable<UUID> raidGroupIds);
|
||||||
|
public void deleteAllByRaidLayoutId(UUID raidLayoutId);
|
||||||
|
public void deleteAllByRaidLayoutIdIn(Iterable<UUID> raidLayoutIds);
|
||||||
|
|
||||||
|
|
||||||
|
public List<RaidInstance> findAllByRaidGroupId(UUID raidGroupId, PageRequest pageRequest);
|
||||||
|
public List<RaidInstance> findAllByRaidGroupIdAndRaidInstanceNameContainingIgnoreCase(UUID raidGroupId, String searchTerm, PageRequest pageRequest);
|
||||||
|
public List<RaidInstance> findAllByRaidGroupIdAndRaidEndDateAfter(UUID raidGroupId, ZonedDateTime raidEndDate, PageRequest pageRequest);
|
||||||
|
public List<RaidInstance> findAllByRaidGroupIdAndRaidEndDateAfterAndRaidInstanceNameContainingIgnoreCase(UUID raidGroupId, ZonedDateTime raidEndDate, String searchTerm, PageRequest pageRequest);
|
||||||
|
|
||||||
|
public long countByRaidGroupId(UUID raidGroupId);
|
||||||
|
public long countByRaidGroupIdAndRaidInstanceNameContainingIgnoreCase(UUID raidGroupId, String searchTerm);
|
||||||
|
public long countByRaidGroupIdAndRaidEndDateAfter(UUID raidGroupId, ZonedDateTime raidEndDate);
|
||||||
|
public long countByRaidGroupIdAndRaidEndDateAfterAndRaidInstanceNameContainingIgnoreCase(UUID raidGroupId, ZonedDateTime raidEndDate, String searchTerm);
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.mattrixwv.raidbuilder.repository.raid_instance;
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public class RaidInstanceRepositoryImpl implements RaidInstanceCustomRepository{
|
||||||
|
}
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
package com.mattrixwv.raidbuilder.service;
|
||||||
|
|
||||||
|
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
import org.springframework.data.domain.Sort;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import com.mattrixwv.raidbuilder.entity.RaidInstance;
|
||||||
|
import com.mattrixwv.raidbuilder.repository.raid_instance.RaidInstanceRepository;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class RaidInstanceService{
|
||||||
|
private final RaidInstanceRepository raidInstanceRepository;
|
||||||
|
|
||||||
|
|
||||||
|
//Write
|
||||||
|
public RaidInstance createRaidInstance(RaidInstance raidInstance){
|
||||||
|
return raidInstanceRepository.save(raidInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RaidInstance updateRaidInstance(RaidInstance raidInstance){
|
||||||
|
return raidInstanceRepository.save(raidInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteById(UUID raidInstanceId){
|
||||||
|
raidInstanceRepository.deleteById(raidInstanceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteByRaidGroupId(UUID raidGroupId){
|
||||||
|
raidInstanceRepository.deleteAllByRaidGroupId(raidGroupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteByRaidGroupIds(Iterable<UUID> raidGroupIds){
|
||||||
|
raidInstanceRepository.deleteAllByRaidGroupIdIn(raidGroupIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteByRaidLayoutId(UUID raidLayoutId){
|
||||||
|
raidInstanceRepository.deleteAllByRaidLayoutId(raidLayoutId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteByRaidLayoutIds(Iterable<UUID> raidLayoutIds){
|
||||||
|
raidInstanceRepository.deleteAllByRaidLayoutIdIn(raidLayoutIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Read
|
||||||
|
public RaidInstance findById(UUID raidInstanceId){
|
||||||
|
return raidInstanceRepository.findById(raidInstanceId).orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<RaidInstance> findAllByRaidGroupId(UUID raidGroupId, int page, int pageSize){
|
||||||
|
return raidInstanceRepository.findAllByRaidGroupId(raidGroupId, PageRequest.of(page, pageSize, Sort.by("raidInstanceName").ascending()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<RaidInstance> findAllByRaidGroupId(UUID raidGroupId, int page, int pageSize, String searchTerm){
|
||||||
|
return raidInstanceRepository.findAllByRaidGroupIdAndRaidInstanceNameContainingIgnoreCase(raidGroupId, searchTerm, PageRequest.of(page, pageSize, Sort.by("raidInstanceName").ascending()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<RaidInstance> findAllByRaidGroupIdAndEndDate(UUID raidGroupId, ZonedDateTime endDate, int page, int pageSize){
|
||||||
|
return raidInstanceRepository.findAllByRaidGroupIdAndRaidEndDateAfter(raidGroupId, endDate, PageRequest.of(page, pageSize, Sort.by("raidInstanceName").ascending()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<RaidInstance> findAllByRaidGroupIdAndEndDate(UUID raidGroupId, ZonedDateTime endDate, int page, int pageSize, String searchTerm){
|
||||||
|
return raidInstanceRepository.findAllByRaidGroupIdAndRaidEndDateAfterAndRaidInstanceNameContainingIgnoreCase(raidGroupId, endDate, searchTerm, PageRequest.of(page, pageSize, Sort.by("raidInstanceName").ascending()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public long countByRaidGroupId(UUID raidGroupId){
|
||||||
|
return raidInstanceRepository.countByRaidGroupId(raidGroupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long countByRaidGroupId(UUID raidGroupId, String searchTerm){
|
||||||
|
return raidInstanceRepository.countByRaidGroupIdAndRaidInstanceNameContainingIgnoreCase(raidGroupId, searchTerm);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long countByRaidGroupIdAndEndDate(UUID raidGroupId, ZonedDateTime endDate){
|
||||||
|
return raidInstanceRepository.countByRaidGroupIdAndRaidEndDateAfter(raidGroupId, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long countByRaidGroupIdAndEndDate(UUID raidGroupId, ZonedDateTime endDate, String searchTerm){
|
||||||
|
return raidInstanceRepository.countByRaidGroupIdAndRaidEndDateAfterAndRaidInstanceNameContainingIgnoreCase(raidGroupId, endDate, searchTerm);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user