refactored location patching

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2025-10-22 22:45:14 +02:00
parent eafa7a5b5f
commit 8bf0790fca
3 changed files with 42 additions and 22 deletions

View File

@@ -114,7 +114,15 @@ public class StockModule extends BaseHandler implements StockService {
if (user.isEmpty()) return unauthorized(ex);
return switch (path.pop()){
case MOVE_ITEM -> patchMoveItem(user.get(), path,ex);
case MOVE_LOCATION -> patchMoveLocation(user.get(), path, ex);
case LOCATION -> {
try {
var id = Long.parseLong(path.pop());
yield patchLocation(id, user.get(), ex);
} catch (NumberFormatException nfe){
yield super.doPatch(path,ex);
}
}
case null -> patchItem(user.get(),ex);
default -> super.doPatch(path,ex);
};
@@ -233,21 +241,20 @@ public class StockModule extends BaseHandler implements StockService {
return sendContent(ex,item);
}
private boolean patchMoveLocation(UmbrellaUser user, Path path, HttpExchange ex) throws IOException {
private boolean patchLocation(long locationId, UmbrellaUser user, HttpExchange ex) throws IOException {
var json = json(ex);
if (!(json.get(LOCATION) instanceof Number locationId)) throw missingFieldException(LOCATION);
if (!(json.get(TARGET) instanceof Number destLocationId)) throw missingFieldException(TARGET);
var location = stockDb.loadLocation(locationId.longValue());
var location = stockDb.loadLocation(locationId);
var owner = location.owner().resolve();
if (!assigned(owner,user)) throw forbidden("You are not allowed to alter the location of \"{0}\"!",location.name());
if (!assigned(owner,user)) throw forbidden("You are not allowed to edit \"{0}\"!",location.name());
var target = stockDb.loadLocation(destLocationId.longValue());
var locOwner = target.resolve().owner().resolve();
if (!assigned(locOwner,user)) throw forbidden("You are not allowed to modify \"{0}\"!",target.name());
if (json.has(PARENT_LOCATION_ID) && json.get(PARENT_LOCATION_ID) instanceof Number parentId){
var target = stockDb.loadLocation(parentId.longValue());
var targetOwner = target.owner().resolve();
if (!assigned(targetOwner,user)) throw forbidden("You are not allowed to edit \"{0}\"!",target.name());
if (!targetOwner.equals(owner)) throw unprocessable("You may not move locations from one owner ({0}) to another ({1})",owner,targetOwner);
}
if (!locOwner.equals(owner)) throw unprocessable("You may not move locations from one owner ({0}) to another ({1})",owner,locOwner);
location = stockDb.save(location.parent(target));
location = stockDb.save(location.patch(json));
return sendContent(ex,location);
}