Skip to content

List Adoption Requests #21

@amina69

Description

@amina69

📋 Description

Create an API endpoint to list adoption requests with proper filtering based on user role. Regular users see only their own requests, shelters see requests for their pets, and admins see all requests.

📝 What You'll Build

GET /adoptions Endpoint

User Perspective:

  • Regular USER → See only their own adoption requests
  • SHELTER → See requests for their pets
  • ADMIN → See all adoption requests

Response Format:

{
  "data": [
    {
      "id": "adoption-123",
      "status": "PENDING",
      "reason": "I love dogs",
      "createdAt": "2026-02-19T10:00:00Z",
      "pet": {
        "id": "pet-456",
        "name": "Buddy",
        "species": "Dog"
      },
      "user": {
        "id": "user-789",
        "name": "John Doe",
        "email": "john@example.com"
      }
    }
  ]
}

Query Parameters (Optional)

  • status - Filter by status (PENDING, APPROVED, etc.)
  • petId - Filter by specific pet
  • Example: GET /adoptions?status=PENDING&petId=123

🔧 Implementation Checklist

Files to Create/Modify

  • src/adoption/adoption.controller.ts - Add GET endpoint
  • src/adoption/adoption.service.ts - Add findAll() method
  • src/adoption/dto/filter-adoptions.dto.ts - Optional filter DTO
  • Update Swagger documentation
  • Add unit tests

What to Build

Create Controller Endpoint:

  • GET /adoptions route
  • Apply JwtAuthGuard (authentication required)
  • Extract user from JWT token
  • Pass user info to service
  • Return array of adoptions with related data

✅ Acceptance Criteria

  • GET /adoptions requires authentication
  • Regular users see only their own adoption requests
  • Shelters see requests for pets they own
  • Admins see all adoption requests
  • Response includes pet details (name, species, images)
  • Response includes user details (name, email, not password)
  • Adoptions ordered by newest first
  • Optional status filter works (?status=PENDING)
  • Optional petId filter works (?petId=123)
  • Returns empty array if no adoptions found (not 404)

🧪 How to Test

Setup:

  1. Create 3 users (User A, User B, Shelter C)
  2. Shelter C creates 2 pets
  3. User A submits adoption for Pet 1
  4. User B submits adoption for Pet 2

Test Scenarios:

  1. User sees own requests:

    • Login as User A
    • GET /adoptions
    • Should see only User A's request for Pet 1 ✅
    • Should NOT see User B's request ❌
  2. Shelter sees requests for their pets:

    • Login as Shelter C
    • GET /adoptions
    • Should see both requests (Pet 1 and Pet 2) ✅
  3. Admin sees all requests:

    • Login as Admin
    • GET /adoptions
    • Should see all adoption requests ✅
  4. Filter by status:

    • GET /adoptions?status=PENDING
    • Should return only PENDING adoptions ✅
  5. Filter by petId:

    • GET /adoptions?petId=pet-1
    • Should return only adoptions for that pet ✅
  6. No adoptions:

    • New user with no requests
    • GET /adoptions
    • Should return empty array []
  7. Unauthorized access:

    • GET /adoptions without token
    • Should return 401 Unauthorized ❌

Security Reminder:

  • Never return all adoptions for regular users
  • Always validate user has permission to see the data
  • Exclude sensitive information (passwords, secrets)
Role What They See Query Filter
USER Only their requests userId: currentUserId
SHELTER Requests for their pets pet.shelterId: currentUserId
ADMIN All requests No filter

Metadata

Metadata

Assignees

Labels

Stellar WaveIssues in the Stellar wave program

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions