Back to API Reference

User Visits API

Track and retrieve user visits to chess openings with intelligent deduplication.

Authentication Required

All endpoints in this API require valid user authentication. Unauthenticated requests will receive 401 Unauthorized.

POST
/api/user/visits

Records a visit to a specific opening. Implements intelligent deduplication by updating existing visits rather than creating duplicates.

Request Body

{
  "openingId": "string (required)"
}

Example Request

const response = await fetch('/api/user/visits', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    openingId: 'clk9x8d4q0001vq2o6q7q8r9s'
  })
});

Responses

200 OK - Success
{
  "success": true
}
400 Bad Request - Validation Error
{
  "error": "Missing openingId"
}
GET
/api/user/visits

Retrieves a paginated list of the authenticated user's opening visits, ordered by most recent first.

Query Parameters

page
number (optional, default: 1)
limit
number (optional, default: 20)

Example Request

// Fetch visit history with pagination
const response = await fetch('/api/user/visits?page=1&limit=15');
const data = await response.json();

console.log(data.visits);    // Array of visit objects with opening details
console.log(data.total);     // Total number of unique visited openings
console.log(data.page);      // Current page number
console.log(data.totalPages); // Total number of pages

Success Response

{
  "visits": [
    {
      "id": "string",
      "userId": "string",
      "openingId": "string",
      "count": 5,
      "visitedAt": "2024-01-15T10:30:00.000Z",
      "opening": {
        "id": "string",
        "name": "Ruy Lopez",
        "eco": "C60",
        "fen": "string",
        "pgn": "string",
        "totalVisits": 300,
        "totalFavorites": 25,
        "totalPracticeSessions": 150,
        "aliases": [
          {
            "id": "string",
            "name": "Spanish Opening",
            "openingId": "string"
          }
        ]
      }
    }
  ],
  "total": 45,
  "page": 1,
  "totalPages": 3
}

Business Logic

Visit Recording (POST)

  • Deduplication: Uses composite unique key to prevent duplicates
  • Visit Counting: Increments count for existing visits
  • Timestamp Updates: Updates visitedAt to most recent access
  • Global Statistics: Increments opening's totalVisits counter

Visit Retrieval (GET)

  • Pagination: Efficient handling of large visit histories
  • Chronological Order: Most recent visits first
  • Comprehensive Data: Includes complete opening details
  • Visit Metrics: Shows frequency of visits to each opening