Skip to content

Backend APIs

Hamsini Sivalenka edited this page Apr 21, 2025 · 1 revision

Sportify Backend API Documentation

Authentication Endpoints

1. User Registration

  • Endpoint: POST /v1/auth/signup
  • Description: Register a new user
  • Request Body:
    {
      "email": "user@example.com",
      "password": "securepassword123"
    }
  • Response:
    {
      "id": 1,
      "email": "user@example.com",
      "created_at": "2024-03-25T10:00:00Z"
    }

2. User Login

  • Endpoint: POST /v1/auth/login
  • Description: Authenticate a user and get JWT token
  • Request Body:
    {
      "email": "user@example.com",
      "password": "securepassword123"
    }
  • Response:
    {
      "token": "eyJhbGciOiJIUzI1NiIs..."
    }

3. Google OAuth

  • Endpoint: GET /v1/auth/google
  • Description: Initiate Google OAuth flow
  • Response: Redirects to Google login page

4. Google OAuth Callback

  • Endpoint: GET /v1/auth/google/callback
  • Description: Handle Google OAuth callback
  • Response: Redirects to frontend with JWT token

Profile Endpoints

1. Get User Profile

  • Endpoint: GET /v1/profile/{userID}
  • Description: Get user profile by ID
  • Authentication: Required
  • Response:
    {
      "id": 1,
      "user_id": 1,
      "first_name": "John",
      "last_name": "Doe",
      "bio": "Sports enthusiast",
      "created_at": "2024-03-25T10:00:00Z",
      "updated_at": "2024-03-25T10:00:00Z"
    }

2. Create User Profile

  • Endpoint: POST /v1/profile
  • Description: Create a new user profile
  • Authentication: Required
  • Request Body:
    {
      "first_name": "John",
      "last_name": "Doe",
      "bio": "Sports enthusiast"
    }
  • Response:
    {
      "id": 1,
      "user_id": 1,
      "first_name": "John",
      "last_name": "Doe",
      "bio": "Sports enthusiast",
      "created_at": "2024-03-25T10:00:00Z",
      "updated_at": "2024-03-25T10:00:00Z"
    }

3. Update User Profile

  • Endpoint: PUT /v1/profile
  • Description: Update existing user profile
  • Authentication: Required
  • Request Body:
    {
      "first_name": "John",
      "last_name": "Doe",
      "bio": "Sports enthusiast"
    }
  • Response:
    {
      "id": 1,
      "user_id": 1,
      "first_name": "John",
      "last_name": "Doe",
      "bio": "Sports enthusiast",
      "created_at": "2024-03-25T10:00:00Z",
      "updated_at": "2024-03-25T10:00:00Z"
    }

Event Endpoints

1. Create Event

  • Endpoint: POST /v1/events
  • Description: Create a new sports event
  • Authentication: Required
  • Request Body:
    {
      "sport": "Football",
      "event_datetime": "2024-03-25T15:00:00Z",
      "max_players": 20,
      "location_name": "Central Park, NY",
      "latitude": 40.785091,
      "longitude": -73.968285,
      "description": "Friendly football match",
      "title": "Lets football!"
    }
  • Response:
    {
      "id": 1,
      "event_owner": 1,
      "sport": "Football",
      "event_datetime": "2024-03-25T15:00:00Z",
      "max_players": 20,
      "location_name": "Central Park, NY",
      "latitude": 40.785091,
      "longitude": -73.968285,
      "description": "Friendly football match",
      "title": "Lets football!",
      "created_at": "2024-03-25T10:00:00Z",
      "updated_at": "2024-03-25T10:00:00Z",
      "is_full": false,
      "registered_count": 0
    }

2. Get All Events

  • Endpoint: GET /v1/events
  • Description: Get all events with optional filters
  • Authentication: Required
  • Query Parameters:
    • sport: Filter by sport type
    • date: Filter by date
    • location: Filter by location
  • Response:
    {
      "data": [
        {
          "id": 1,
          "event_owner": 1,
          "sport": "Football",
          "event_datetime": "2024-03-25T15:00:00Z",
          "max_players": 20,
          "location_name": "Central Park, NY",
          "latitude": 40.785091,
          "longitude": -73.968285,
          "description": "Friendly football match",
          "title": "Lets football!",
          "created_at": "2024-03-25T10:00:00Z",
          "updated_at": "2024-03-25T10:00:00Z",
          "is_full": false,
          "registered_count": 0,
          "participants": []
        }
      ]
    }

3. Get Event by ID

  • Endpoint: GET /v1/events/{id}
  • Description: Get a specific event by ID
  • Authentication: Required
  • Response:
    {
      "id": 1,
      "event_owner": 1,
      "sport": "Football",
      "event_datetime": "2024-03-25T15:00:00Z",
      "max_players": 20,
      "location_name": "Central Park, NY",
      "latitude": 40.785091,
      "longitude": -73.968285,
      "description": "Friendly football match",
      "title": "Lets football!",
      "created_at": "2024-03-25T10:00:00Z",
      "updated_at": "2024-03-25T10:00:00Z",
      "is_full": false,
      "registered_count": 0,
      "participants": [
        {
          "user_id": 2,
          "joined_at": "2024-03-25T11:00:00Z"
        }
      ]
    }

4. Update Event

  • Endpoint: PUT /v1/events/{id}
  • Description: Update an existing event
  • Authentication: Required (must be event owner)
  • Request Body:
    {
      "sport": "Football",
      "event_datetime": "2024-03-25T15:00:00Z",
      "max_players": 20,
      "location_name": "Central Park, NY",
      "latitude": 40.785091,
      "longitude": -73.968285,
      "description": "Friendly football match",
      "title": "Lets football!"
    }
  • Response:
    {
      "id": 1,
      "event_owner": 1,
      "sport": "Football",
      "event_datetime": "2024-03-25T15:00:00Z",
      "max_players": 20,
      "location_name": "Central Park, NY",
      "latitude": 40.785091,
      "longitude": -73.968285,
      "description": "Friendly football match",
      "title": "Lets football!",
      "created_at": "2024-03-25T10:00:00Z",
      "updated_at": "2024-03-25T12:00:00Z",
      "is_full": false,
      "registered_count": 1
    }

5. Delete Event

  • Endpoint: DELETE /v1/events/{id}
  • Description: Delete an event
  • Authentication: Required (must be event owner)
  • Response: Status 204 No Content

6. Join Event

  • Endpoint: POST /v1/events/{id}/join
  • Description: Join an event as a participant
  • Authentication: Required
  • Response:
    {
      "message": "Successfully joined the event",
      "event_id": 1,
      "user_id": 1
    }

7. Leave Event

  • Endpoint: DELETE /v1/events/{id}/leave
  • Description: Leave an event as a participant
  • Authentication: Required
  • Response: Status 204 No Content

8. Event Chat WebSocket

  • Endpoint: GET /v1/events/{id}/chat
  • Description: WebSocket connection for event chat
  • Authentication: Required (via token query parameter)
  • Query Parameters:
    • token: JWT token
  • WebSocket Messages:
    // Incoming message format
    {
      "type": "message",
      "content": "Hello everyone!"
    }
    
    // Outgoing message format
    {
      "type": "message",
      "content": "Hello everyone!",
      "sender": "John Doe",
      "timestamp": "2024-03-25T10:00:00Z"
    }

Health Check

1. Health Check

  • Endpoint: GET /v1/health
  • Description: Check API health status
  • Response:
    {
      "status": "ok",
      "system_info": {
        "environment": "development",
        "version": "1.0.0"
      }
    }

API Documentation

1. Swagger Documentation

  • Endpoint: GET /v1/swagger/*
  • Description: Swagger/OpenAPI documentation
  • Response: Swagger UI and API documentation