feat: add multi-ID delete support with per-ID results
- Add delete_bounties method to BountyService that returns individual results per bounty ID (deleted, not_found, permission_denied) - Update cmd_delete to accept multiple IDs and show per-ID messages - Add tests for delete_bounties Example output: /delete 1 2 3 ✅ Bounty #1 deleted. ✅ Bounty #2 deleted. ⛔ Bounty #3 not found. Fixes #47
This commit is contained in:
@@ -210,6 +210,31 @@ class BountyService:
|
||||
self._storage.update_bounty(room_id, bounty)
|
||||
return True
|
||||
|
||||
def delete_bounties(
|
||||
self, room_id: int, bounty_ids: list[int], user_id: int
|
||||
) -> dict[int, str]:
|
||||
"""Soft delete multiple bounties. Only admins can delete.
|
||||
|
||||
Returns a dict mapping bounty_id to result:
|
||||
- "deleted": Successfully soft-deleted
|
||||
- "not_found": Bounty does not exist
|
||||
- "permission_denied": User is not admin
|
||||
"""
|
||||
results = {}
|
||||
for bounty_id in bounty_ids:
|
||||
bounty = self._storage.get_bounty(room_id, bounty_id)
|
||||
if not bounty:
|
||||
results[bounty_id] = "not_found"
|
||||
continue
|
||||
if not self.is_admin(room_id, user_id):
|
||||
results[bounty_id] = "permission_denied"
|
||||
continue
|
||||
|
||||
bounty.deleted_at = int(time.time())
|
||||
self._storage.update_bounty(room_id, bounty)
|
||||
results[bounty_id] = "deleted"
|
||||
return results
|
||||
|
||||
|
||||
class TrackingService:
|
||||
"""Service for tracking bounty operations."""
|
||||
|
||||
Reference in New Issue
Block a user