feat: Implemented droping items

This commit is contained in:
2025-01-04 12:11:35 +01:00
parent fc432caa58
commit 5c5058f6c5
5 changed files with 63 additions and 5 deletions

View File

@ -83,10 +83,10 @@ public class CharacterController {
var characterOptional = characterRepository.findById(interactionRequest.getCharacterId());
if (characterOptional.isEmpty()) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(UnifiedResponse.failure(null));
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(UnifiedResponse.empty(false));
}
if (!characterOptional.get().getRoom().equals(player.getCurrentRoom())) {
return ResponseEntity.badRequest().body(UnifiedResponse.failure(null));
return ResponseEntity.badRequest().body(UnifiedResponse.empty(false));
}
if (characterOptional.get().isInteractedWith()) {
return ResponseEntity.noContent().build();
@ -133,4 +133,4 @@ public class CharacterController {
return ResponseEntity.ok(UnifiedResponse.success(TakeItemsResponse.DONE));
}
}
}

View File

@ -176,4 +176,27 @@ public class PlayerController {
throw new RuntimeException(e);
}
}
@PostMapping("/drop_item")
@CheckUser
public ResponseEntity<UnifiedResponse<Object, Error>> dropItem(@RequestParam String playerKey, @RequestParam Long itemId) {
var player = playerRepository.findByPlayerKey(playerKey).get();
var itemOptional = itemRepository.findById(itemId);
if (itemOptional.isEmpty()) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(UnifiedResponse.failure(new NotFoundError("Item with id " + itemId + " was not found!")));
}
var item = itemOptional.get();
if (!item.getOwner().getId().equals(player.getId())) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(UnifiedResponse.failure(new Error("You do not own this item!")));
}
var room = player.getCurrentRoom();
item.setOwner(null);
item.setRoom(room);
itemRepository.save(item);
return ResponseEntity.ok(UnifiedResponse.empty(true));
}
}

View File

@ -29,7 +29,7 @@ public class UnifiedResponse<T, U> {
}
// Static factory method for empty response
public static <T, U> UnifiedResponse<T, U> empty() {
return new UnifiedResponse<>(Optional.empty(), Optional.empty(), false);
public static <T, U> UnifiedResponse<T, U> empty(boolean success) {
return new UnifiedResponse<>(Optional.empty(), Optional.empty(), success);
}
}