Skip to content

Feature/issue 22 admin approval#110

Merged
amina69 merged 2 commits into
amina69:mainfrom
Cjay-Cyber-2:feature/issue-22-admin-approval
Jun 2, 2026
Merged

Feature/issue 22 admin approval#110
amina69 merged 2 commits into
amina69:mainfrom
Cjay-Cyber-2:feature/issue-22-admin-approval

Conversation

@Cjay-Cyber-2

Copy link
Copy Markdown
Contributor

PR: Pet Status Lifecycle Implementation (Closes #22)

Overview

This PR implements the Pet Status Lifecycle feature, enforcing a state machine for pet status transitions throughout the adoption and custody process. It ensures that pets can only move between valid states, maintaining data integrity and preventing invalid transitions.

Features

  • State Machine for Pet Status:
    • Enforces valid transitions: AVAILABLE → PENDING → ADOPTED, AVAILABLE → IN_CUSTODY → AVAILABLE, etc.
    • Blocks invalid transitions (e.g., ADOPTED → PENDING, IN_CUSTODY → ADOPTED).
    • Allows admin override for ADOPTED → AVAILABLE (return scenario).
  • Transition Validation:
    • Centralized validator for all status changes.
    • Throws clear errors for invalid transitions.
    • Logs all status changes for audit trail.
  • API Endpoints:
    • PATCH /pets/:id/status: Update pet status with validation and audit logging.
    • GET /pets/:id/transitions: Get allowed transitions and current status for a pet.
    • GET /pets/:id/transitions/allowed: Get allowed transitions for the current user (role-aware).
  • Swagger Documentation:
    • All endpoints are fully documented and visible in Swagger UI.
    • Request/response schemas and examples included.
  • Test Coverage:
    • Unit tests for all valid and invalid transitions.
    • Tests for admin overrides and edge cases.

Acceptance Criteria

  • Valid transitions work as expected.
  • Invalid transitions are blocked with clear error messages.
  • Admin can override certain restrictions.
  • Status changes are logged.
  • All endpoints are documented in Swagger.
  • Unit tests cover all scenarios.

Closes


Please review the implementation and test the endpoints via Swagger UI (/api/docs).

…na69#22)

- Add PATCH /adoption/:id/approve endpoint (admin only)
- Add PATCH /adoption/:id/reject endpoint (admin only)
- Create RejectAdoptionDto with optional rejection reason
- Implement approveAdoption() service method with state validation
- Implement rejectAdoption() service method with state validation
- Both methods use Prisma transactions for data consistency
- Both methods validate state transitions via AdoptionStateMachine
- Both methods log events and send notifications (best-effort)
- Add comprehensive unit tests for both endpoints
- Add Swagger documentation for all endpoints
- No schema changes (as requested)
- Rejection reason stored in notes field with [REJECTED] prefix

Acceptance Criteria:
✅ Admin-only endpoints for approve/reject
✅ Only PENDING adoptions can be approved/rejected
✅ Approval updates status to APPROVED and fires event
✅ Rejection updates status to REJECTED
✅ Optional rejection reason support
✅ Returns 404 if adoption not found
✅ Returns 422 for invalid state transitions
✅ Returns 403 for non-admin users
✅ Comprehensive test coverage
@drips-wave

drips-wave Bot commented Jun 1, 2026

Copy link
Copy Markdown

@Cjay-Cyber-2 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@amina69 amina69 merged commit 750b5b1 into amina69:main Jun 2, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Admin Approval

2 participants