implemented instance controller
This commit is contained in:
parent
5c0b157414
commit
fbda9c1675
@ -4,49 +4,79 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import ru.dragonestia.picker.controller.response.ResponseObject;
|
import ru.dragonestia.picker.controller.response.ResponseObject;
|
||||||
|
import ru.dragonestia.picker.exception.DoesNotExistsException;
|
||||||
|
import ru.dragonestia.picker.model.entity.EntityId;
|
||||||
|
import ru.dragonestia.picker.model.instance.Instance;
|
||||||
|
import ru.dragonestia.picker.model.instance.InstanceId;
|
||||||
import ru.dragonestia.picker.model.instance.type.PickingMethod;
|
import ru.dragonestia.picker.model.instance.type.PickingMethod;
|
||||||
|
import ru.dragonestia.picker.service.EntityService;
|
||||||
|
import ru.dragonestia.picker.service.InstanceService;
|
||||||
|
import ru.dragonestia.picker.service.RoomService;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/instances")
|
@RequestMapping("/instances")
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class InstanceController {
|
public class InstanceController {
|
||||||
|
|
||||||
|
private final InstanceService instanceService;
|
||||||
|
private final RoomService roomService;
|
||||||
|
private final EntityService entityService;
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
List<String> listInstances() {
|
List<String> listInstances() {
|
||||||
throw new UnsupportedOperationException("Not implemented");
|
return instanceService.all().stream().map(instance -> instance.getId().getValue()).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/target/{instanceId}")
|
@GetMapping("/target/{instanceId}")
|
||||||
ResponseObject.Instance targetInstanceDetails(@PathVariable String instanceId) {
|
ResponseObject.Instance targetInstanceDetails(@PathVariable String instanceId) {
|
||||||
throw new UnsupportedOperationException("Not implemented");
|
var id = InstanceId.of(instanceId);
|
||||||
|
return instanceService.find(id)
|
||||||
|
.map(ResponseObject.Instance::of)
|
||||||
|
.orElseThrow(() -> DoesNotExistsException.forInstance(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
List<ResponseObject.Instance> listInstancesDetails(@RequestParam List<String> id) {
|
List<ResponseObject.Instance> listInstancesDetails(@RequestParam List<String> id) {
|
||||||
throw new UnsupportedOperationException("Not implemented");
|
return id.stream().map(this::targetInstanceDetails).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping
|
@PostMapping
|
||||||
ResponseEntity<Void> createInstance(@RequestParam String instanceId,
|
ResponseEntity<Void> createInstance(@RequestParam String instanceId,
|
||||||
@RequestParam PickingMethod method,
|
@RequestParam PickingMethod method,
|
||||||
@RequestParam(defaultValue = "false") boolean persist) {
|
@RequestParam(defaultValue = "false") boolean persist) {
|
||||||
throw new UnsupportedOperationException("Not implemented");
|
instanceService.create(new Instance(InstanceId.of(instanceId), method, persist));
|
||||||
|
return ResponseEntity.ok().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/target/{instanceId}")
|
@DeleteMapping("/target/{instanceId}")
|
||||||
ResponseEntity<Void> deleteInstance(@PathVariable String instanceId) {
|
ResponseEntity<Void> deleteInstance(@PathVariable String instanceId) {
|
||||||
throw new UnsupportedOperationException("Not implemented");
|
instanceService.remove(InstanceId.of(instanceId));
|
||||||
|
return ResponseEntity.ok().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/list")
|
@DeleteMapping("/list")
|
||||||
ResponseEntity<Void> deleteInstances(@RequestParam List<String> id) {
|
ResponseEntity<Void> deleteInstances(@RequestParam List<String> id) {
|
||||||
throw new UnsupportedOperationException("Not implemented");
|
for (var instanceId: id) {
|
||||||
|
deleteInstance(instanceId);
|
||||||
|
}
|
||||||
|
return ResponseEntity.ok().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/target/{instanceId}/pick")
|
@PostMapping("/target/{instanceId}/pick")
|
||||||
ResponseObject.PickedRoom pickRoom(@PathVariable String instanceId, @RequestBody List<String> entities) {
|
ResponseObject.PickedRoom pickRoom(@PathVariable String instanceId,
|
||||||
throw new UnsupportedOperationException("Not implemented");
|
@RequestParam(defaultValue = "false") boolean dontReturnEntities,
|
||||||
|
@RequestBody List<String> entities) {
|
||||||
|
var room = roomService.pick(InstanceId.of(instanceId), entities.stream().map(EntityId::of).collect(Collectors.toSet()));
|
||||||
|
List<String> returnEntities = new ArrayList<>();
|
||||||
|
if (!dontReturnEntities) {
|
||||||
|
for (var entity: entityService.getRoomEntities(room)) {
|
||||||
|
returnEntities.add(entity.getId().getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new ResponseObject.PickedRoom(ResponseObject.Room.of(room), returnEntities);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,11 +9,26 @@ public final class ResponseObject {
|
|||||||
|
|
||||||
private ResponseObject() {}
|
private ResponseObject() {}
|
||||||
|
|
||||||
public record Instance(String id, PickingMethod method, boolean persist) {}
|
public record Instance(String id, PickingMethod method, boolean persist) {
|
||||||
|
|
||||||
public record Room(String id, String nodeId, int slots, boolean locked, boolean persist, String payload) {}
|
public static ResponseObject.Instance of(ru.dragonestia.picker.model.instance.Instance instance) {
|
||||||
|
return new Instance(instance.getId().getValue(), instance.getPickingMethod(), instance.isPersist());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public record PickedRoom(Room room, List<EntityId> entities) {}
|
public record Room(String id, String nodeId, int slots, boolean locked, boolean persist, String payload) {
|
||||||
|
|
||||||
|
public static ResponseObject.Room of(ru.dragonestia.picker.model.room.Room room) {
|
||||||
|
return new Room(room.getId().getValue(),
|
||||||
|
room.getInstance().getId().getValue(),
|
||||||
|
room.getSlots(),
|
||||||
|
room.isLocked(),
|
||||||
|
room.isPersist(),
|
||||||
|
room.getPayload());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public record PickedRoom(Room room, List<String> entities) {}
|
||||||
|
|
||||||
public record Account(String id, List<String> permissions, boolean locked) {}
|
public record Account(String id, List<String> permissions, boolean locked) {}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,7 @@ public interface InstanceService {
|
|||||||
void create(Instance instance) throws InvalidIdentifierException, AlreadyExistsException;
|
void create(Instance instance) throws InvalidIdentifierException, AlreadyExistsException;
|
||||||
|
|
||||||
@PreAuthorize("hasRole('NODE_MANAGEMENT')")
|
@PreAuthorize("hasRole('NODE_MANAGEMENT')")
|
||||||
void remove(Instance instance);
|
void remove(InstanceId id);
|
||||||
|
|
||||||
List<Instance> all();
|
List<Instance> all();
|
||||||
|
|
||||||
|
|||||||
@ -29,13 +29,13 @@ public class InstanceServiceImpl implements InstanceService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void remove(Instance instance) {
|
public void remove(InstanceId id) {
|
||||||
for (var room: roomRepository.all(instance.getId())) {
|
for (var room: roomRepository.all(id)) {
|
||||||
storage.removeRoom(room);
|
storage.removeRoom(room);
|
||||||
}
|
}
|
||||||
|
|
||||||
instanceRepository.delete(instance.getId());
|
instanceRepository.delete(id);
|
||||||
storage.removeInstance(instance);
|
storage.removeInstance(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package ru.dragonestia.picker.storage;
|
package ru.dragonestia.picker.storage;
|
||||||
|
|
||||||
import ru.dragonestia.picker.model.instance.Instance;
|
import ru.dragonestia.picker.model.instance.Instance;
|
||||||
|
import ru.dragonestia.picker.model.instance.InstanceId;
|
||||||
import ru.dragonestia.picker.model.room.Room;
|
import ru.dragonestia.picker.model.room.Room;
|
||||||
|
|
||||||
public interface InstanceAndRoomStorage {
|
public interface InstanceAndRoomStorage {
|
||||||
@ -9,7 +10,7 @@ public interface InstanceAndRoomStorage {
|
|||||||
|
|
||||||
void saveInstance(Instance instance);
|
void saveInstance(Instance instance);
|
||||||
|
|
||||||
void removeInstance(Instance instance);
|
void removeInstance(InstanceId id);
|
||||||
|
|
||||||
void saveRoom(Room room);
|
void saveRoom(Room room);
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Value;
|
|||||||
import org.springframework.context.annotation.Profile;
|
import org.springframework.context.annotation.Profile;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import ru.dragonestia.picker.model.instance.Instance;
|
import ru.dragonestia.picker.model.instance.Instance;
|
||||||
|
import ru.dragonestia.picker.model.instance.InstanceId;
|
||||||
import ru.dragonestia.picker.model.room.Room;
|
import ru.dragonestia.picker.model.room.Room;
|
||||||
import ru.dragonestia.picker.repository.InstanceRepository;
|
import ru.dragonestia.picker.repository.InstanceRepository;
|
||||||
import ru.dragonestia.picker.repository.RoomRepository;
|
import ru.dragonestia.picker.repository.RoomRepository;
|
||||||
@ -77,11 +78,12 @@ public class FileStorageImpl implements InstanceAndRoomStorage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeInstance(Instance instance) {
|
public void removeInstance(InstanceId id) {
|
||||||
if (!instance.isPersist()) return;
|
var file = new File(path + "/nodes/" + id + ".json");
|
||||||
new File(path + "/nodes/" + instance.getId() + ".json").delete();
|
if (!file.exists()) return;
|
||||||
|
file.delete();
|
||||||
|
|
||||||
log.info("Removed instance '%s' from disk storage".formatted(instance.getId()));
|
log.info("Removed instance '%s' from disk storage".formatted(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package ru.dragonestia.picker.storage.impl;
|
|||||||
import org.springframework.context.annotation.Profile;
|
import org.springframework.context.annotation.Profile;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import ru.dragonestia.picker.model.instance.Instance;
|
import ru.dragonestia.picker.model.instance.Instance;
|
||||||
|
import ru.dragonestia.picker.model.instance.InstanceId;
|
||||||
import ru.dragonestia.picker.model.room.Room;
|
import ru.dragonestia.picker.model.room.Room;
|
||||||
import ru.dragonestia.picker.storage.InstanceAndRoomStorage;
|
import ru.dragonestia.picker.storage.InstanceAndRoomStorage;
|
||||||
|
|
||||||
@ -17,7 +18,7 @@ public class NullStorageImpl implements InstanceAndRoomStorage {
|
|||||||
public void saveInstance(Instance instance) {}
|
public void saveInstance(Instance instance) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeInstance(Instance instance) {}
|
public void removeInstance(InstanceId id) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void saveRoom(Room room) {}
|
public void saveRoom(Room room) {}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user