{
  "openapi": "3.0.3",
  "info": {
    "title": "example-data.com REST API",
    "version": "1.0.0",
    "description": "Free, public mock JSON API across 122 collections. POST/PUT/PATCH/DELETE are accepted but do not persist (JSONPlaceholder-style fakes)."
  },
  "servers": [{ "url": "https://example-data.com" }],
  "paths": {
    "/api/v1/users": {
      "get": {
        "summary": "List users",
        "operationId": "list-users",
        "tags": ["users"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/UsersRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "firstName": "Charlene",
                      "lastName": "Roberts",
                      "fullName": "Charlene Roberts",
                      "username": "charlene_roberts",
                      "email": "charlene_roberts@example.com",
                      "phone": "(234) 666-5232",
                      "bio": "siege lover, educator 🍔",
                      "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1",
                      "thumbnailUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1&size=128",
                      "coverImageUrl": "https://picsum.photos/seed/user-cover-1/1200/400",
                      "emailVerified": false,
                      "isActive": true,
                      "twitterHandle": null,
                      "createdAt": "2025-06-29T00:23:00.310Z",
                      "updatedAt": "2025-11-06T06:30:01.857Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/users?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a users record (fake — not persisted)",
        "operationId": "create-users",
        "tags": ["users"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/UsersRecord" },
              "example": {
                "id": 1,
                "firstName": "Charlene",
                "lastName": "Roberts",
                "fullName": "Charlene Roberts",
                "username": "charlene_roberts",
                "email": "charlene_roberts@example.com",
                "phone": "(234) 666-5232",
                "bio": "siege lover, educator 🍔",
                "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1",
                "thumbnailUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1&size=128",
                "coverImageUrl": "https://picsum.photos/seed/user-cover-1/1200/400",
                "emailVerified": false,
                "isActive": true,
                "twitterHandle": null,
                "createdAt": "2025-06-29T00:23:00.310Z",
                "updatedAt": "2025-11-06T06:30:01.857Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/UsersRecord" },
                "example": {
                  "id": 1,
                  "firstName": "Charlene",
                  "lastName": "Roberts",
                  "fullName": "Charlene Roberts",
                  "username": "charlene_roberts",
                  "email": "charlene_roberts@example.com",
                  "phone": "(234) 666-5232",
                  "bio": "siege lover, educator 🍔",
                  "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1",
                  "thumbnailUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1&size=128",
                  "coverImageUrl": "https://picsum.photos/seed/user-cover-1/1200/400",
                  "emailVerified": false,
                  "isActive": true,
                  "twitterHandle": null,
                  "createdAt": "2025-06-29T00:23:00.310Z",
                  "updatedAt": "2025-11-06T06:30:01.857Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/users/{id}": {
      "get": {
        "summary": "Get one users record by id",
        "operationId": "get-users-by-id",
        "tags": ["users"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/UsersRecord" },
                "example": {
                  "id": 1,
                  "firstName": "Charlene",
                  "lastName": "Roberts",
                  "fullName": "Charlene Roberts",
                  "username": "charlene_roberts",
                  "email": "charlene_roberts@example.com",
                  "phone": "(234) 666-5232",
                  "bio": "siege lover, educator 🍔",
                  "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1",
                  "thumbnailUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1&size=128",
                  "coverImageUrl": "https://picsum.photos/seed/user-cover-1/1200/400",
                  "emailVerified": false,
                  "isActive": true,
                  "twitterHandle": null,
                  "createdAt": "2025-06-29T00:23:00.310Z",
                  "updatedAt": "2025-11-06T06:30:01.857Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a users record (fake — not persisted)",
        "operationId": "replace-users",
        "tags": ["users"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/UsersRecord" },
              "example": {
                "id": 1,
                "firstName": "Charlene",
                "lastName": "Roberts",
                "fullName": "Charlene Roberts",
                "username": "charlene_roberts",
                "email": "charlene_roberts@example.com",
                "phone": "(234) 666-5232",
                "bio": "siege lover, educator 🍔",
                "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1",
                "thumbnailUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1&size=128",
                "coverImageUrl": "https://picsum.photos/seed/user-cover-1/1200/400",
                "emailVerified": false,
                "isActive": true,
                "twitterHandle": null,
                "createdAt": "2025-06-29T00:23:00.310Z",
                "updatedAt": "2025-11-06T06:30:01.857Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/UsersRecord" },
                "example": {
                  "id": 1,
                  "firstName": "Charlene",
                  "lastName": "Roberts",
                  "fullName": "Charlene Roberts",
                  "username": "charlene_roberts",
                  "email": "charlene_roberts@example.com",
                  "phone": "(234) 666-5232",
                  "bio": "siege lover, educator 🍔",
                  "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1",
                  "thumbnailUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1&size=128",
                  "coverImageUrl": "https://picsum.photos/seed/user-cover-1/1200/400",
                  "emailVerified": false,
                  "isActive": true,
                  "twitterHandle": null,
                  "createdAt": "2025-06-29T00:23:00.310Z",
                  "updatedAt": "2025-11-06T06:30:01.857Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a users record (fake — not persisted)",
        "operationId": "patch-users",
        "tags": ["users"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/UsersRecord" },
                "example": {
                  "id": 1,
                  "firstName": "Charlene",
                  "lastName": "Roberts",
                  "fullName": "Charlene Roberts",
                  "username": "charlene_roberts",
                  "email": "charlene_roberts@example.com",
                  "phone": "(234) 666-5232",
                  "bio": "siege lover, educator 🍔",
                  "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1",
                  "thumbnailUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=user-1&size=128",
                  "coverImageUrl": "https://picsum.photos/seed/user-cover-1/1200/400",
                  "emailVerified": false,
                  "isActive": true,
                  "twitterHandle": null,
                  "createdAt": "2025-06-29T00:23:00.310Z",
                  "updatedAt": "2025-11-06T06:30:01.857Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a users record (fake — not persisted)",
        "operationId": "delete-users",
        "tags": ["users"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/countries": {
      "get": {
        "summary": "List countries",
        "operationId": "list-countries",
        "tags": ["countries"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CountriesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "United States",
                      "alpha2": "US",
                      "alpha3": "USA",
                      "numericCode": "840",
                      "capital": "Washington, D.C.",
                      "region": "Americas",
                      "subregion": "Northern America",
                      "currencyCode": "USD",
                      "callingCode": "+1",
                      "flagEmoji": "🇺🇸"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/countries?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a countries record (fake — not persisted)",
        "operationId": "create-countries",
        "tags": ["countries"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CountriesRecord" },
              "example": {
                "id": 1,
                "name": "United States",
                "alpha2": "US",
                "alpha3": "USA",
                "numericCode": "840",
                "capital": "Washington, D.C.",
                "region": "Americas",
                "subregion": "Northern America",
                "currencyCode": "USD",
                "callingCode": "+1",
                "flagEmoji": "🇺🇸"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CountriesRecord" },
                "example": {
                  "id": 1,
                  "name": "United States",
                  "alpha2": "US",
                  "alpha3": "USA",
                  "numericCode": "840",
                  "capital": "Washington, D.C.",
                  "region": "Americas",
                  "subregion": "Northern America",
                  "currencyCode": "USD",
                  "callingCode": "+1",
                  "flagEmoji": "🇺🇸"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/countries/{id}": {
      "get": {
        "summary": "Get one countries record by id",
        "operationId": "get-countries-by-id",
        "tags": ["countries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CountriesRecord" },
                "example": {
                  "id": 1,
                  "name": "United States",
                  "alpha2": "US",
                  "alpha3": "USA",
                  "numericCode": "840",
                  "capital": "Washington, D.C.",
                  "region": "Americas",
                  "subregion": "Northern America",
                  "currencyCode": "USD",
                  "callingCode": "+1",
                  "flagEmoji": "🇺🇸"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a countries record (fake — not persisted)",
        "operationId": "replace-countries",
        "tags": ["countries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CountriesRecord" },
              "example": {
                "id": 1,
                "name": "United States",
                "alpha2": "US",
                "alpha3": "USA",
                "numericCode": "840",
                "capital": "Washington, D.C.",
                "region": "Americas",
                "subregion": "Northern America",
                "currencyCode": "USD",
                "callingCode": "+1",
                "flagEmoji": "🇺🇸"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CountriesRecord" },
                "example": {
                  "id": 1,
                  "name": "United States",
                  "alpha2": "US",
                  "alpha3": "USA",
                  "numericCode": "840",
                  "capital": "Washington, D.C.",
                  "region": "Americas",
                  "subregion": "Northern America",
                  "currencyCode": "USD",
                  "callingCode": "+1",
                  "flagEmoji": "🇺🇸"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a countries record (fake — not persisted)",
        "operationId": "patch-countries",
        "tags": ["countries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CountriesRecord" },
                "example": {
                  "id": 1,
                  "name": "United States",
                  "alpha2": "US",
                  "alpha3": "USA",
                  "numericCode": "840",
                  "capital": "Washington, D.C.",
                  "region": "Americas",
                  "subregion": "Northern America",
                  "currencyCode": "USD",
                  "callingCode": "+1",
                  "flagEmoji": "🇺🇸"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a countries record (fake — not persisted)",
        "operationId": "delete-countries",
        "tags": ["countries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/posts": {
      "get": {
        "summary": "List posts",
        "operationId": "list-posts",
        "tags": ["posts"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/PostsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 60,
                      "title": "Commodo vomer usque recusandae unde doloribus absconditus adicio dignissimos sufficio",
                      "slug": "commodo-vomer-usque-recusandae-unde-doloribus-absconditus-adicio-dignissimos-suf-1",
                      "excerpt": "Vomer ipsa reiciendis synagoga. Denuncio vigilo victus accusator.",
                      "content": "Baiulus valde solus dignissimos quasi adiuvo. Colligo tum similique. Arto apto comburo sufficio vos succurro corrigo.\n\nQuidem mollitia summa crastinus crustulum suscipio soleo degenero. Triumphus absque atavus cunctatio quae virga trepide tertius statim ullus. Peccatus ea aggero occaecati suscipio infit.\n\nVerumtamen depono solutio cimentarius arbitro cunabula adsum solitudo. Conatus animi deficio subito copiose. Ter contabesco usus animadverto conturbo crux cultellus.\n\nSuccurro amet acquiro convoco. Usitas aggredior alii alter quasi. Triduana celo cribro ultra stabilis.\n\nAdemptio subnecto tristis credo blandior. Tollo vicinus sonitus pectus corrumpo depromo cultura solus. Cena depereo amplexus altus dolorum catena clementia.\n\nAdversus correptius quisquam. Vado abstergo suppellex. Admoveo ventito cupiditate id.\n\nTotam curto nesciunt claustrum degero auditor thymbra attero ubi. Claro hic verto. Arbitro vir spargo stella subvenio venustas triumphus voluptatum complectus ubi.",
                      "isPublished": true,
                      "publishedAt": "2025-11-25T06:26:06.433Z",
                      "viewCount": 39643,
                      "createdAt": "2025-11-18T07:00:30.419Z",
                      "updatedAt": "2026-01-13T10:35:49.451Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/posts?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a posts record (fake — not persisted)",
        "operationId": "create-posts",
        "tags": ["posts"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PostsRecord" },
              "example": {
                "id": 1,
                "userId": 60,
                "title": "Commodo vomer usque recusandae unde doloribus absconditus adicio dignissimos sufficio",
                "slug": "commodo-vomer-usque-recusandae-unde-doloribus-absconditus-adicio-dignissimos-suf-1",
                "excerpt": "Vomer ipsa reiciendis synagoga. Denuncio vigilo victus accusator.",
                "content": "Baiulus valde solus dignissimos quasi adiuvo. Colligo tum similique. Arto apto comburo sufficio vos succurro corrigo.\n\nQuidem mollitia summa crastinus crustulum suscipio soleo degenero. Triumphus absque atavus cunctatio quae virga trepide tertius statim ullus. Peccatus ea aggero occaecati suscipio infit.\n\nVerumtamen depono solutio cimentarius arbitro cunabula adsum solitudo. Conatus animi deficio subito copiose. Ter contabesco usus animadverto conturbo crux cultellus.\n\nSuccurro amet acquiro convoco. Usitas aggredior alii alter quasi. Triduana celo cribro ultra stabilis.\n\nAdemptio subnecto tristis credo blandior. Tollo vicinus sonitus pectus corrumpo depromo cultura solus. Cena depereo amplexus altus dolorum catena clementia.\n\nAdversus correptius quisquam. Vado abstergo suppellex. Admoveo ventito cupiditate id.\n\nTotam curto nesciunt claustrum degero auditor thymbra attero ubi. Claro hic verto. Arbitro vir spargo stella subvenio venustas triumphus voluptatum complectus ubi.",
                "isPublished": true,
                "publishedAt": "2025-11-25T06:26:06.433Z",
                "viewCount": 39643,
                "createdAt": "2025-11-18T07:00:30.419Z",
                "updatedAt": "2026-01-13T10:35:49.451Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PostsRecord" },
                "example": {
                  "id": 1,
                  "userId": 60,
                  "title": "Commodo vomer usque recusandae unde doloribus absconditus adicio dignissimos sufficio",
                  "slug": "commodo-vomer-usque-recusandae-unde-doloribus-absconditus-adicio-dignissimos-suf-1",
                  "excerpt": "Vomer ipsa reiciendis synagoga. Denuncio vigilo victus accusator.",
                  "content": "Baiulus valde solus dignissimos quasi adiuvo. Colligo tum similique. Arto apto comburo sufficio vos succurro corrigo.\n\nQuidem mollitia summa crastinus crustulum suscipio soleo degenero. Triumphus absque atavus cunctatio quae virga trepide tertius statim ullus. Peccatus ea aggero occaecati suscipio infit.\n\nVerumtamen depono solutio cimentarius arbitro cunabula adsum solitudo. Conatus animi deficio subito copiose. Ter contabesco usus animadverto conturbo crux cultellus.\n\nSuccurro amet acquiro convoco. Usitas aggredior alii alter quasi. Triduana celo cribro ultra stabilis.\n\nAdemptio subnecto tristis credo blandior. Tollo vicinus sonitus pectus corrumpo depromo cultura solus. Cena depereo amplexus altus dolorum catena clementia.\n\nAdversus correptius quisquam. Vado abstergo suppellex. Admoveo ventito cupiditate id.\n\nTotam curto nesciunt claustrum degero auditor thymbra attero ubi. Claro hic verto. Arbitro vir spargo stella subvenio venustas triumphus voluptatum complectus ubi.",
                  "isPublished": true,
                  "publishedAt": "2025-11-25T06:26:06.433Z",
                  "viewCount": 39643,
                  "createdAt": "2025-11-18T07:00:30.419Z",
                  "updatedAt": "2026-01-13T10:35:49.451Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/posts/{id}": {
      "get": {
        "summary": "Get one posts record by id",
        "operationId": "get-posts-by-id",
        "tags": ["posts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PostsRecord" },
                "example": {
                  "id": 1,
                  "userId": 60,
                  "title": "Commodo vomer usque recusandae unde doloribus absconditus adicio dignissimos sufficio",
                  "slug": "commodo-vomer-usque-recusandae-unde-doloribus-absconditus-adicio-dignissimos-suf-1",
                  "excerpt": "Vomer ipsa reiciendis synagoga. Denuncio vigilo victus accusator.",
                  "content": "Baiulus valde solus dignissimos quasi adiuvo. Colligo tum similique. Arto apto comburo sufficio vos succurro corrigo.\n\nQuidem mollitia summa crastinus crustulum suscipio soleo degenero. Triumphus absque atavus cunctatio quae virga trepide tertius statim ullus. Peccatus ea aggero occaecati suscipio infit.\n\nVerumtamen depono solutio cimentarius arbitro cunabula adsum solitudo. Conatus animi deficio subito copiose. Ter contabesco usus animadverto conturbo crux cultellus.\n\nSuccurro amet acquiro convoco. Usitas aggredior alii alter quasi. Triduana celo cribro ultra stabilis.\n\nAdemptio subnecto tristis credo blandior. Tollo vicinus sonitus pectus corrumpo depromo cultura solus. Cena depereo amplexus altus dolorum catena clementia.\n\nAdversus correptius quisquam. Vado abstergo suppellex. Admoveo ventito cupiditate id.\n\nTotam curto nesciunt claustrum degero auditor thymbra attero ubi. Claro hic verto. Arbitro vir spargo stella subvenio venustas triumphus voluptatum complectus ubi.",
                  "isPublished": true,
                  "publishedAt": "2025-11-25T06:26:06.433Z",
                  "viewCount": 39643,
                  "createdAt": "2025-11-18T07:00:30.419Z",
                  "updatedAt": "2026-01-13T10:35:49.451Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a posts record (fake — not persisted)",
        "operationId": "replace-posts",
        "tags": ["posts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PostsRecord" },
              "example": {
                "id": 1,
                "userId": 60,
                "title": "Commodo vomer usque recusandae unde doloribus absconditus adicio dignissimos sufficio",
                "slug": "commodo-vomer-usque-recusandae-unde-doloribus-absconditus-adicio-dignissimos-suf-1",
                "excerpt": "Vomer ipsa reiciendis synagoga. Denuncio vigilo victus accusator.",
                "content": "Baiulus valde solus dignissimos quasi adiuvo. Colligo tum similique. Arto apto comburo sufficio vos succurro corrigo.\n\nQuidem mollitia summa crastinus crustulum suscipio soleo degenero. Triumphus absque atavus cunctatio quae virga trepide tertius statim ullus. Peccatus ea aggero occaecati suscipio infit.\n\nVerumtamen depono solutio cimentarius arbitro cunabula adsum solitudo. Conatus animi deficio subito copiose. Ter contabesco usus animadverto conturbo crux cultellus.\n\nSuccurro amet acquiro convoco. Usitas aggredior alii alter quasi. Triduana celo cribro ultra stabilis.\n\nAdemptio subnecto tristis credo blandior. Tollo vicinus sonitus pectus corrumpo depromo cultura solus. Cena depereo amplexus altus dolorum catena clementia.\n\nAdversus correptius quisquam. Vado abstergo suppellex. Admoveo ventito cupiditate id.\n\nTotam curto nesciunt claustrum degero auditor thymbra attero ubi. Claro hic verto. Arbitro vir spargo stella subvenio venustas triumphus voluptatum complectus ubi.",
                "isPublished": true,
                "publishedAt": "2025-11-25T06:26:06.433Z",
                "viewCount": 39643,
                "createdAt": "2025-11-18T07:00:30.419Z",
                "updatedAt": "2026-01-13T10:35:49.451Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PostsRecord" },
                "example": {
                  "id": 1,
                  "userId": 60,
                  "title": "Commodo vomer usque recusandae unde doloribus absconditus adicio dignissimos sufficio",
                  "slug": "commodo-vomer-usque-recusandae-unde-doloribus-absconditus-adicio-dignissimos-suf-1",
                  "excerpt": "Vomer ipsa reiciendis synagoga. Denuncio vigilo victus accusator.",
                  "content": "Baiulus valde solus dignissimos quasi adiuvo. Colligo tum similique. Arto apto comburo sufficio vos succurro corrigo.\n\nQuidem mollitia summa crastinus crustulum suscipio soleo degenero. Triumphus absque atavus cunctatio quae virga trepide tertius statim ullus. Peccatus ea aggero occaecati suscipio infit.\n\nVerumtamen depono solutio cimentarius arbitro cunabula adsum solitudo. Conatus animi deficio subito copiose. Ter contabesco usus animadverto conturbo crux cultellus.\n\nSuccurro amet acquiro convoco. Usitas aggredior alii alter quasi. Triduana celo cribro ultra stabilis.\n\nAdemptio subnecto tristis credo blandior. Tollo vicinus sonitus pectus corrumpo depromo cultura solus. Cena depereo amplexus altus dolorum catena clementia.\n\nAdversus correptius quisquam. Vado abstergo suppellex. Admoveo ventito cupiditate id.\n\nTotam curto nesciunt claustrum degero auditor thymbra attero ubi. Claro hic verto. Arbitro vir spargo stella subvenio venustas triumphus voluptatum complectus ubi.",
                  "isPublished": true,
                  "publishedAt": "2025-11-25T06:26:06.433Z",
                  "viewCount": 39643,
                  "createdAt": "2025-11-18T07:00:30.419Z",
                  "updatedAt": "2026-01-13T10:35:49.451Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a posts record (fake — not persisted)",
        "operationId": "patch-posts",
        "tags": ["posts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PostsRecord" },
                "example": {
                  "id": 1,
                  "userId": 60,
                  "title": "Commodo vomer usque recusandae unde doloribus absconditus adicio dignissimos sufficio",
                  "slug": "commodo-vomer-usque-recusandae-unde-doloribus-absconditus-adicio-dignissimos-suf-1",
                  "excerpt": "Vomer ipsa reiciendis synagoga. Denuncio vigilo victus accusator.",
                  "content": "Baiulus valde solus dignissimos quasi adiuvo. Colligo tum similique. Arto apto comburo sufficio vos succurro corrigo.\n\nQuidem mollitia summa crastinus crustulum suscipio soleo degenero. Triumphus absque atavus cunctatio quae virga trepide tertius statim ullus. Peccatus ea aggero occaecati suscipio infit.\n\nVerumtamen depono solutio cimentarius arbitro cunabula adsum solitudo. Conatus animi deficio subito copiose. Ter contabesco usus animadverto conturbo crux cultellus.\n\nSuccurro amet acquiro convoco. Usitas aggredior alii alter quasi. Triduana celo cribro ultra stabilis.\n\nAdemptio subnecto tristis credo blandior. Tollo vicinus sonitus pectus corrumpo depromo cultura solus. Cena depereo amplexus altus dolorum catena clementia.\n\nAdversus correptius quisquam. Vado abstergo suppellex. Admoveo ventito cupiditate id.\n\nTotam curto nesciunt claustrum degero auditor thymbra attero ubi. Claro hic verto. Arbitro vir spargo stella subvenio venustas triumphus voluptatum complectus ubi.",
                  "isPublished": true,
                  "publishedAt": "2025-11-25T06:26:06.433Z",
                  "viewCount": 39643,
                  "createdAt": "2025-11-18T07:00:30.419Z",
                  "updatedAt": "2026-01-13T10:35:49.451Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a posts record (fake — not persisted)",
        "operationId": "delete-posts",
        "tags": ["posts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/products": {
      "get": {
        "summary": "List products",
        "operationId": "list-products",
        "tags": ["products"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ProductsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "sku": "H57WBW2GVC",
                      "name": "Tasty Silk Tuna",
                      "slug": "tasty-silk-tuna-1",
                      "description": "Our bear-friendly Chips ensures unlucky comfort for your pets",
                      "category": "clothing",
                      "brand": "Braun - Tromp",
                      "price": 219.09,
                      "salePrice": null,
                      "currency": "USD",
                      "inStock": false,
                      "stockCount": 0,
                      "rating": 2.3,
                      "ratingCount": 657,
                      "imageUrl": "https://picsum.photos/seed/product-1/800/800",
                      "createdAt": "2026-03-10T02:02:36.337Z",
                      "updatedAt": "2026-05-11T20:35:27.253Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/products?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a products record (fake — not persisted)",
        "operationId": "create-products",
        "tags": ["products"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ProductsRecord" },
              "example": {
                "id": 1,
                "sku": "H57WBW2GVC",
                "name": "Tasty Silk Tuna",
                "slug": "tasty-silk-tuna-1",
                "description": "Our bear-friendly Chips ensures unlucky comfort for your pets",
                "category": "clothing",
                "brand": "Braun - Tromp",
                "price": 219.09,
                "salePrice": null,
                "currency": "USD",
                "inStock": false,
                "stockCount": 0,
                "rating": 2.3,
                "ratingCount": 657,
                "imageUrl": "https://picsum.photos/seed/product-1/800/800",
                "createdAt": "2026-03-10T02:02:36.337Z",
                "updatedAt": "2026-05-11T20:35:27.253Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProductsRecord" },
                "example": {
                  "id": 1,
                  "sku": "H57WBW2GVC",
                  "name": "Tasty Silk Tuna",
                  "slug": "tasty-silk-tuna-1",
                  "description": "Our bear-friendly Chips ensures unlucky comfort for your pets",
                  "category": "clothing",
                  "brand": "Braun - Tromp",
                  "price": 219.09,
                  "salePrice": null,
                  "currency": "USD",
                  "inStock": false,
                  "stockCount": 0,
                  "rating": 2.3,
                  "ratingCount": 657,
                  "imageUrl": "https://picsum.photos/seed/product-1/800/800",
                  "createdAt": "2026-03-10T02:02:36.337Z",
                  "updatedAt": "2026-05-11T20:35:27.253Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/products/{id}": {
      "get": {
        "summary": "Get one products record by id",
        "operationId": "get-products-by-id",
        "tags": ["products"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProductsRecord" },
                "example": {
                  "id": 1,
                  "sku": "H57WBW2GVC",
                  "name": "Tasty Silk Tuna",
                  "slug": "tasty-silk-tuna-1",
                  "description": "Our bear-friendly Chips ensures unlucky comfort for your pets",
                  "category": "clothing",
                  "brand": "Braun - Tromp",
                  "price": 219.09,
                  "salePrice": null,
                  "currency": "USD",
                  "inStock": false,
                  "stockCount": 0,
                  "rating": 2.3,
                  "ratingCount": 657,
                  "imageUrl": "https://picsum.photos/seed/product-1/800/800",
                  "createdAt": "2026-03-10T02:02:36.337Z",
                  "updatedAt": "2026-05-11T20:35:27.253Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a products record (fake — not persisted)",
        "operationId": "replace-products",
        "tags": ["products"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ProductsRecord" },
              "example": {
                "id": 1,
                "sku": "H57WBW2GVC",
                "name": "Tasty Silk Tuna",
                "slug": "tasty-silk-tuna-1",
                "description": "Our bear-friendly Chips ensures unlucky comfort for your pets",
                "category": "clothing",
                "brand": "Braun - Tromp",
                "price": 219.09,
                "salePrice": null,
                "currency": "USD",
                "inStock": false,
                "stockCount": 0,
                "rating": 2.3,
                "ratingCount": 657,
                "imageUrl": "https://picsum.photos/seed/product-1/800/800",
                "createdAt": "2026-03-10T02:02:36.337Z",
                "updatedAt": "2026-05-11T20:35:27.253Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProductsRecord" },
                "example": {
                  "id": 1,
                  "sku": "H57WBW2GVC",
                  "name": "Tasty Silk Tuna",
                  "slug": "tasty-silk-tuna-1",
                  "description": "Our bear-friendly Chips ensures unlucky comfort for your pets",
                  "category": "clothing",
                  "brand": "Braun - Tromp",
                  "price": 219.09,
                  "salePrice": null,
                  "currency": "USD",
                  "inStock": false,
                  "stockCount": 0,
                  "rating": 2.3,
                  "ratingCount": 657,
                  "imageUrl": "https://picsum.photos/seed/product-1/800/800",
                  "createdAt": "2026-03-10T02:02:36.337Z",
                  "updatedAt": "2026-05-11T20:35:27.253Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a products record (fake — not persisted)",
        "operationId": "patch-products",
        "tags": ["products"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProductsRecord" },
                "example": {
                  "id": 1,
                  "sku": "H57WBW2GVC",
                  "name": "Tasty Silk Tuna",
                  "slug": "tasty-silk-tuna-1",
                  "description": "Our bear-friendly Chips ensures unlucky comfort for your pets",
                  "category": "clothing",
                  "brand": "Braun - Tromp",
                  "price": 219.09,
                  "salePrice": null,
                  "currency": "USD",
                  "inStock": false,
                  "stockCount": 0,
                  "rating": 2.3,
                  "ratingCount": 657,
                  "imageUrl": "https://picsum.photos/seed/product-1/800/800",
                  "createdAt": "2026-03-10T02:02:36.337Z",
                  "updatedAt": "2026-05-11T20:35:27.253Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a products record (fake — not persisted)",
        "operationId": "delete-products",
        "tags": ["products"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/orders": {
      "get": {
        "summary": "List orders",
        "operationId": "list-orders",
        "tags": ["orders"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/OrdersRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 129,
                      "status": "shipped",
                      "currency": "USD",
                      "subtotal": 1635.7,
                      "tax": 143.12,
                      "shipping": 0,
                      "total": 1778.82,
                      "placedAt": "2025-08-01T09:53:49.279Z",
                      "shippedAt": "2025-08-02T11:26:14.340Z",
                      "deliveredAt": null,
                      "createdAt": "2025-08-01T09:53:49.279Z",
                      "updatedAt": "2025-08-02T11:26:14.340Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/orders?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a orders record (fake — not persisted)",
        "operationId": "create-orders",
        "tags": ["orders"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/OrdersRecord" },
              "example": {
                "id": 1,
                "userId": 129,
                "status": "shipped",
                "currency": "USD",
                "subtotal": 1635.7,
                "tax": 143.12,
                "shipping": 0,
                "total": 1778.82,
                "placedAt": "2025-08-01T09:53:49.279Z",
                "shippedAt": "2025-08-02T11:26:14.340Z",
                "deliveredAt": null,
                "createdAt": "2025-08-01T09:53:49.279Z",
                "updatedAt": "2025-08-02T11:26:14.340Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/OrdersRecord" },
                "example": {
                  "id": 1,
                  "userId": 129,
                  "status": "shipped",
                  "currency": "USD",
                  "subtotal": 1635.7,
                  "tax": 143.12,
                  "shipping": 0,
                  "total": 1778.82,
                  "placedAt": "2025-08-01T09:53:49.279Z",
                  "shippedAt": "2025-08-02T11:26:14.340Z",
                  "deliveredAt": null,
                  "createdAt": "2025-08-01T09:53:49.279Z",
                  "updatedAt": "2025-08-02T11:26:14.340Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/orders/{id}": {
      "get": {
        "summary": "Get one orders record by id",
        "operationId": "get-orders-by-id",
        "tags": ["orders"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/OrdersRecord" },
                "example": {
                  "id": 1,
                  "userId": 129,
                  "status": "shipped",
                  "currency": "USD",
                  "subtotal": 1635.7,
                  "tax": 143.12,
                  "shipping": 0,
                  "total": 1778.82,
                  "placedAt": "2025-08-01T09:53:49.279Z",
                  "shippedAt": "2025-08-02T11:26:14.340Z",
                  "deliveredAt": null,
                  "createdAt": "2025-08-01T09:53:49.279Z",
                  "updatedAt": "2025-08-02T11:26:14.340Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a orders record (fake — not persisted)",
        "operationId": "replace-orders",
        "tags": ["orders"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/OrdersRecord" },
              "example": {
                "id": 1,
                "userId": 129,
                "status": "shipped",
                "currency": "USD",
                "subtotal": 1635.7,
                "tax": 143.12,
                "shipping": 0,
                "total": 1778.82,
                "placedAt": "2025-08-01T09:53:49.279Z",
                "shippedAt": "2025-08-02T11:26:14.340Z",
                "deliveredAt": null,
                "createdAt": "2025-08-01T09:53:49.279Z",
                "updatedAt": "2025-08-02T11:26:14.340Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/OrdersRecord" },
                "example": {
                  "id": 1,
                  "userId": 129,
                  "status": "shipped",
                  "currency": "USD",
                  "subtotal": 1635.7,
                  "tax": 143.12,
                  "shipping": 0,
                  "total": 1778.82,
                  "placedAt": "2025-08-01T09:53:49.279Z",
                  "shippedAt": "2025-08-02T11:26:14.340Z",
                  "deliveredAt": null,
                  "createdAt": "2025-08-01T09:53:49.279Z",
                  "updatedAt": "2025-08-02T11:26:14.340Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a orders record (fake — not persisted)",
        "operationId": "patch-orders",
        "tags": ["orders"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/OrdersRecord" },
                "example": {
                  "id": 1,
                  "userId": 129,
                  "status": "shipped",
                  "currency": "USD",
                  "subtotal": 1635.7,
                  "tax": 143.12,
                  "shipping": 0,
                  "total": 1778.82,
                  "placedAt": "2025-08-01T09:53:49.279Z",
                  "shippedAt": "2025-08-02T11:26:14.340Z",
                  "deliveredAt": null,
                  "createdAt": "2025-08-01T09:53:49.279Z",
                  "updatedAt": "2025-08-02T11:26:14.340Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a orders record (fake — not persisted)",
        "operationId": "delete-orders",
        "tags": ["orders"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/order-items": {
      "get": {
        "summary": "List order-items",
        "operationId": "list-order-items",
        "tags": ["order-items"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/OrderItemsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "orderId": 1,
                      "productId": 33,
                      "quantity": 4,
                      "unitPrice": 60.49,
                      "lineTotal": 241.96
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/order-items?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a order-items record (fake — not persisted)",
        "operationId": "create-order-items",
        "tags": ["order-items"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/OrderItemsRecord" },
              "example": {
                "id": 1,
                "orderId": 1,
                "productId": 33,
                "quantity": 4,
                "unitPrice": 60.49,
                "lineTotal": 241.96
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/OrderItemsRecord" },
                "example": {
                  "id": 1,
                  "orderId": 1,
                  "productId": 33,
                  "quantity": 4,
                  "unitPrice": 60.49,
                  "lineTotal": 241.96
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/order-items/{id}": {
      "get": {
        "summary": "Get one order-items record by id",
        "operationId": "get-order-items-by-id",
        "tags": ["order-items"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/OrderItemsRecord" },
                "example": {
                  "id": 1,
                  "orderId": 1,
                  "productId": 33,
                  "quantity": 4,
                  "unitPrice": 60.49,
                  "lineTotal": 241.96
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a order-items record (fake — not persisted)",
        "operationId": "replace-order-items",
        "tags": ["order-items"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/OrderItemsRecord" },
              "example": {
                "id": 1,
                "orderId": 1,
                "productId": 33,
                "quantity": 4,
                "unitPrice": 60.49,
                "lineTotal": 241.96
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/OrderItemsRecord" },
                "example": {
                  "id": 1,
                  "orderId": 1,
                  "productId": 33,
                  "quantity": 4,
                  "unitPrice": 60.49,
                  "lineTotal": 241.96
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a order-items record (fake — not persisted)",
        "operationId": "patch-order-items",
        "tags": ["order-items"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/OrderItemsRecord" },
                "example": {
                  "id": 1,
                  "orderId": 1,
                  "productId": 33,
                  "quantity": 4,
                  "unitPrice": 60.49,
                  "lineTotal": 241.96
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a order-items record (fake — not persisted)",
        "operationId": "delete-order-items",
        "tags": ["order-items"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/restaurants": {
      "get": {
        "summary": "List restaurants",
        "operationId": "list-restaurants",
        "tags": ["restaurants"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/RestaurantsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "O'Hara and Sons",
                      "slug": "o-hara-and-sons-1",
                      "cuisine": "mediterranean",
                      "priceRange": "$",
                      "rating": 4.4,
                      "ratingCount": 2759,
                      "countryAlpha2": "NZ",
                      "city": "New Eloisaboro",
                      "neighborhood": "Hamilton County",
                      "address": "96634 Ursula Forks",
                      "phone": "(668) 959-4852",
                      "website": "https://o-hara-and-sons-1.example.com",
                      "hasDelivery": false,
                      "isOpen": false,
                      "latitude": 24.816431,
                      "longitude": -126.109296,
                      "createdAt": "2025-11-16T06:33:21.422Z",
                      "updatedAt": "2025-11-16T06:33:21.422Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/restaurants?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a restaurants record (fake — not persisted)",
        "operationId": "create-restaurants",
        "tags": ["restaurants"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/RestaurantsRecord" },
              "example": {
                "id": 1,
                "name": "O'Hara and Sons",
                "slug": "o-hara-and-sons-1",
                "cuisine": "mediterranean",
                "priceRange": "$",
                "rating": 4.4,
                "ratingCount": 2759,
                "countryAlpha2": "NZ",
                "city": "New Eloisaboro",
                "neighborhood": "Hamilton County",
                "address": "96634 Ursula Forks",
                "phone": "(668) 959-4852",
                "website": "https://o-hara-and-sons-1.example.com",
                "hasDelivery": false,
                "isOpen": false,
                "latitude": 24.816431,
                "longitude": -126.109296,
                "createdAt": "2025-11-16T06:33:21.422Z",
                "updatedAt": "2025-11-16T06:33:21.422Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RestaurantsRecord" },
                "example": {
                  "id": 1,
                  "name": "O'Hara and Sons",
                  "slug": "o-hara-and-sons-1",
                  "cuisine": "mediterranean",
                  "priceRange": "$",
                  "rating": 4.4,
                  "ratingCount": 2759,
                  "countryAlpha2": "NZ",
                  "city": "New Eloisaboro",
                  "neighborhood": "Hamilton County",
                  "address": "96634 Ursula Forks",
                  "phone": "(668) 959-4852",
                  "website": "https://o-hara-and-sons-1.example.com",
                  "hasDelivery": false,
                  "isOpen": false,
                  "latitude": 24.816431,
                  "longitude": -126.109296,
                  "createdAt": "2025-11-16T06:33:21.422Z",
                  "updatedAt": "2025-11-16T06:33:21.422Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/restaurants/{id}": {
      "get": {
        "summary": "Get one restaurants record by id",
        "operationId": "get-restaurants-by-id",
        "tags": ["restaurants"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RestaurantsRecord" },
                "example": {
                  "id": 1,
                  "name": "O'Hara and Sons",
                  "slug": "o-hara-and-sons-1",
                  "cuisine": "mediterranean",
                  "priceRange": "$",
                  "rating": 4.4,
                  "ratingCount": 2759,
                  "countryAlpha2": "NZ",
                  "city": "New Eloisaboro",
                  "neighborhood": "Hamilton County",
                  "address": "96634 Ursula Forks",
                  "phone": "(668) 959-4852",
                  "website": "https://o-hara-and-sons-1.example.com",
                  "hasDelivery": false,
                  "isOpen": false,
                  "latitude": 24.816431,
                  "longitude": -126.109296,
                  "createdAt": "2025-11-16T06:33:21.422Z",
                  "updatedAt": "2025-11-16T06:33:21.422Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a restaurants record (fake — not persisted)",
        "operationId": "replace-restaurants",
        "tags": ["restaurants"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/RestaurantsRecord" },
              "example": {
                "id": 1,
                "name": "O'Hara and Sons",
                "slug": "o-hara-and-sons-1",
                "cuisine": "mediterranean",
                "priceRange": "$",
                "rating": 4.4,
                "ratingCount": 2759,
                "countryAlpha2": "NZ",
                "city": "New Eloisaboro",
                "neighborhood": "Hamilton County",
                "address": "96634 Ursula Forks",
                "phone": "(668) 959-4852",
                "website": "https://o-hara-and-sons-1.example.com",
                "hasDelivery": false,
                "isOpen": false,
                "latitude": 24.816431,
                "longitude": -126.109296,
                "createdAt": "2025-11-16T06:33:21.422Z",
                "updatedAt": "2025-11-16T06:33:21.422Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RestaurantsRecord" },
                "example": {
                  "id": 1,
                  "name": "O'Hara and Sons",
                  "slug": "o-hara-and-sons-1",
                  "cuisine": "mediterranean",
                  "priceRange": "$",
                  "rating": 4.4,
                  "ratingCount": 2759,
                  "countryAlpha2": "NZ",
                  "city": "New Eloisaboro",
                  "neighborhood": "Hamilton County",
                  "address": "96634 Ursula Forks",
                  "phone": "(668) 959-4852",
                  "website": "https://o-hara-and-sons-1.example.com",
                  "hasDelivery": false,
                  "isOpen": false,
                  "latitude": 24.816431,
                  "longitude": -126.109296,
                  "createdAt": "2025-11-16T06:33:21.422Z",
                  "updatedAt": "2025-11-16T06:33:21.422Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a restaurants record (fake — not persisted)",
        "operationId": "patch-restaurants",
        "tags": ["restaurants"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RestaurantsRecord" },
                "example": {
                  "id": 1,
                  "name": "O'Hara and Sons",
                  "slug": "o-hara-and-sons-1",
                  "cuisine": "mediterranean",
                  "priceRange": "$",
                  "rating": 4.4,
                  "ratingCount": 2759,
                  "countryAlpha2": "NZ",
                  "city": "New Eloisaboro",
                  "neighborhood": "Hamilton County",
                  "address": "96634 Ursula Forks",
                  "phone": "(668) 959-4852",
                  "website": "https://o-hara-and-sons-1.example.com",
                  "hasDelivery": false,
                  "isOpen": false,
                  "latitude": 24.816431,
                  "longitude": -126.109296,
                  "createdAt": "2025-11-16T06:33:21.422Z",
                  "updatedAt": "2025-11-16T06:33:21.422Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a restaurants record (fake — not persisted)",
        "operationId": "delete-restaurants",
        "tags": ["restaurants"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/restaurant-photos": {
      "get": {
        "summary": "List restaurant-photos",
        "operationId": "list-restaurant-photos",
        "tags": ["restaurant-photos"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/RestaurantPhotosRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "restaurantId": 1,
                      "url": "https://picsum.photos/seed/restaurant-1-0/1200/800",
                      "alt": "O'Hara and Sons interior photo 1",
                      "caption": "Cuius ipsam turpis compello tyrannus contego astrum vinitor spero.",
                      "isPrimary": true,
                      "createdAt": "2025-07-18T05:21:16.975Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/restaurant-photos?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a restaurant-photos record (fake — not persisted)",
        "operationId": "create-restaurant-photos",
        "tags": ["restaurant-photos"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/RestaurantPhotosRecord" },
              "example": {
                "id": 1,
                "restaurantId": 1,
                "url": "https://picsum.photos/seed/restaurant-1-0/1200/800",
                "alt": "O'Hara and Sons interior photo 1",
                "caption": "Cuius ipsam turpis compello tyrannus contego astrum vinitor spero.",
                "isPrimary": true,
                "createdAt": "2025-07-18T05:21:16.975Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RestaurantPhotosRecord" },
                "example": {
                  "id": 1,
                  "restaurantId": 1,
                  "url": "https://picsum.photos/seed/restaurant-1-0/1200/800",
                  "alt": "O'Hara and Sons interior photo 1",
                  "caption": "Cuius ipsam turpis compello tyrannus contego astrum vinitor spero.",
                  "isPrimary": true,
                  "createdAt": "2025-07-18T05:21:16.975Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/restaurant-photos/{id}": {
      "get": {
        "summary": "Get one restaurant-photos record by id",
        "operationId": "get-restaurant-photos-by-id",
        "tags": ["restaurant-photos"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RestaurantPhotosRecord" },
                "example": {
                  "id": 1,
                  "restaurantId": 1,
                  "url": "https://picsum.photos/seed/restaurant-1-0/1200/800",
                  "alt": "O'Hara and Sons interior photo 1",
                  "caption": "Cuius ipsam turpis compello tyrannus contego astrum vinitor spero.",
                  "isPrimary": true,
                  "createdAt": "2025-07-18T05:21:16.975Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a restaurant-photos record (fake — not persisted)",
        "operationId": "replace-restaurant-photos",
        "tags": ["restaurant-photos"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/RestaurantPhotosRecord" },
              "example": {
                "id": 1,
                "restaurantId": 1,
                "url": "https://picsum.photos/seed/restaurant-1-0/1200/800",
                "alt": "O'Hara and Sons interior photo 1",
                "caption": "Cuius ipsam turpis compello tyrannus contego astrum vinitor spero.",
                "isPrimary": true,
                "createdAt": "2025-07-18T05:21:16.975Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RestaurantPhotosRecord" },
                "example": {
                  "id": 1,
                  "restaurantId": 1,
                  "url": "https://picsum.photos/seed/restaurant-1-0/1200/800",
                  "alt": "O'Hara and Sons interior photo 1",
                  "caption": "Cuius ipsam turpis compello tyrannus contego astrum vinitor spero.",
                  "isPrimary": true,
                  "createdAt": "2025-07-18T05:21:16.975Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a restaurant-photos record (fake — not persisted)",
        "operationId": "patch-restaurant-photos",
        "tags": ["restaurant-photos"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RestaurantPhotosRecord" },
                "example": {
                  "id": 1,
                  "restaurantId": 1,
                  "url": "https://picsum.photos/seed/restaurant-1-0/1200/800",
                  "alt": "O'Hara and Sons interior photo 1",
                  "caption": "Cuius ipsam turpis compello tyrannus contego astrum vinitor spero.",
                  "isPrimary": true,
                  "createdAt": "2025-07-18T05:21:16.975Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a restaurant-photos record (fake — not persisted)",
        "operationId": "delete-restaurant-photos",
        "tags": ["restaurant-photos"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/recipes": {
      "get": {
        "summary": "List recipes",
        "operationId": "list-recipes",
        "tags": ["recipes"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/RecipesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 24,
                      "title": "rich Blood Orange Pie",
                      "slug": "rich-blood-orange-pie-1",
                      "description": "Adsuesco amitto cenaculum arma.",
                      "cuisine": "indian",
                      "difficulty": "hard",
                      "prepMinutes": 9,
                      "cookMinutes": 170,
                      "servings": 8,
                      "ingredients": [
                        "4 oz apple juice",
                        "1.75 tbsp raisin",
                        "0.5 tsp jelly",
                        "3.75 g barramundi",
                        "4 g curry powder",
                        "3 tbsp fennel seeds",
                        "2.25 g hummus",
                        "4 tbsp ricotta",
                        "3.5 lb baking soda",
                        "1.25 oz macadamia nut",
                        "1 tsp guava",
                        "3 tsp lobster",
                        "1.25 tsp papaya",
                        "3.25 lb dried chinese broccoli"
                      ],
                      "instructions": [
                        "Step 1: Simmer safflower oil until aqua sumo una cattus universe.",
                        "Step 2: Fold aubergine until thorax torrens amoveo.",
                        "Step 3: Sauté cream until cado arx quibusdam trans.",
                        "Step 4: Whisk greenwheat freekeh until cimentarius labore volup trepide commemoro.",
                        "Step 5: Sauté sunflower seeds until vespillo tero compono antiquus averto."
                      ],
                      "tags": ["gluten-free", "dairy-free", "low-carb", "vegan"],
                      "imageUrl": "https://picsum.photos/seed/recipe-1/1200/800",
                      "createdAt": "2025-04-30T14:56:49.378Z",
                      "updatedAt": "2025-04-30T14:56:49.378Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/recipes?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a recipes record (fake — not persisted)",
        "operationId": "create-recipes",
        "tags": ["recipes"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/RecipesRecord" },
              "example": {
                "id": 1,
                "userId": 24,
                "title": "rich Blood Orange Pie",
                "slug": "rich-blood-orange-pie-1",
                "description": "Adsuesco amitto cenaculum arma.",
                "cuisine": "indian",
                "difficulty": "hard",
                "prepMinutes": 9,
                "cookMinutes": 170,
                "servings": 8,
                "ingredients": [
                  "4 oz apple juice",
                  "1.75 tbsp raisin",
                  "0.5 tsp jelly",
                  "3.75 g barramundi",
                  "4 g curry powder",
                  "3 tbsp fennel seeds",
                  "2.25 g hummus",
                  "4 tbsp ricotta",
                  "3.5 lb baking soda",
                  "1.25 oz macadamia nut",
                  "1 tsp guava",
                  "3 tsp lobster",
                  "1.25 tsp papaya",
                  "3.25 lb dried chinese broccoli"
                ],
                "instructions": [
                  "Step 1: Simmer safflower oil until aqua sumo una cattus universe.",
                  "Step 2: Fold aubergine until thorax torrens amoveo.",
                  "Step 3: Sauté cream until cado arx quibusdam trans.",
                  "Step 4: Whisk greenwheat freekeh until cimentarius labore volup trepide commemoro.",
                  "Step 5: Sauté sunflower seeds until vespillo tero compono antiquus averto."
                ],
                "tags": ["gluten-free", "dairy-free", "low-carb", "vegan"],
                "imageUrl": "https://picsum.photos/seed/recipe-1/1200/800",
                "createdAt": "2025-04-30T14:56:49.378Z",
                "updatedAt": "2025-04-30T14:56:49.378Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RecipesRecord" },
                "example": {
                  "id": 1,
                  "userId": 24,
                  "title": "rich Blood Orange Pie",
                  "slug": "rich-blood-orange-pie-1",
                  "description": "Adsuesco amitto cenaculum arma.",
                  "cuisine": "indian",
                  "difficulty": "hard",
                  "prepMinutes": 9,
                  "cookMinutes": 170,
                  "servings": 8,
                  "ingredients": [
                    "4 oz apple juice",
                    "1.75 tbsp raisin",
                    "0.5 tsp jelly",
                    "3.75 g barramundi",
                    "4 g curry powder",
                    "3 tbsp fennel seeds",
                    "2.25 g hummus",
                    "4 tbsp ricotta",
                    "3.5 lb baking soda",
                    "1.25 oz macadamia nut",
                    "1 tsp guava",
                    "3 tsp lobster",
                    "1.25 tsp papaya",
                    "3.25 lb dried chinese broccoli"
                  ],
                  "instructions": [
                    "Step 1: Simmer safflower oil until aqua sumo una cattus universe.",
                    "Step 2: Fold aubergine until thorax torrens amoveo.",
                    "Step 3: Sauté cream until cado arx quibusdam trans.",
                    "Step 4: Whisk greenwheat freekeh until cimentarius labore volup trepide commemoro.",
                    "Step 5: Sauté sunflower seeds until vespillo tero compono antiquus averto."
                  ],
                  "tags": ["gluten-free", "dairy-free", "low-carb", "vegan"],
                  "imageUrl": "https://picsum.photos/seed/recipe-1/1200/800",
                  "createdAt": "2025-04-30T14:56:49.378Z",
                  "updatedAt": "2025-04-30T14:56:49.378Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/recipes/{id}": {
      "get": {
        "summary": "Get one recipes record by id",
        "operationId": "get-recipes-by-id",
        "tags": ["recipes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RecipesRecord" },
                "example": {
                  "id": 1,
                  "userId": 24,
                  "title": "rich Blood Orange Pie",
                  "slug": "rich-blood-orange-pie-1",
                  "description": "Adsuesco amitto cenaculum arma.",
                  "cuisine": "indian",
                  "difficulty": "hard",
                  "prepMinutes": 9,
                  "cookMinutes": 170,
                  "servings": 8,
                  "ingredients": [
                    "4 oz apple juice",
                    "1.75 tbsp raisin",
                    "0.5 tsp jelly",
                    "3.75 g barramundi",
                    "4 g curry powder",
                    "3 tbsp fennel seeds",
                    "2.25 g hummus",
                    "4 tbsp ricotta",
                    "3.5 lb baking soda",
                    "1.25 oz macadamia nut",
                    "1 tsp guava",
                    "3 tsp lobster",
                    "1.25 tsp papaya",
                    "3.25 lb dried chinese broccoli"
                  ],
                  "instructions": [
                    "Step 1: Simmer safflower oil until aqua sumo una cattus universe.",
                    "Step 2: Fold aubergine until thorax torrens amoveo.",
                    "Step 3: Sauté cream until cado arx quibusdam trans.",
                    "Step 4: Whisk greenwheat freekeh until cimentarius labore volup trepide commemoro.",
                    "Step 5: Sauté sunflower seeds until vespillo tero compono antiquus averto."
                  ],
                  "tags": ["gluten-free", "dairy-free", "low-carb", "vegan"],
                  "imageUrl": "https://picsum.photos/seed/recipe-1/1200/800",
                  "createdAt": "2025-04-30T14:56:49.378Z",
                  "updatedAt": "2025-04-30T14:56:49.378Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a recipes record (fake — not persisted)",
        "operationId": "replace-recipes",
        "tags": ["recipes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/RecipesRecord" },
              "example": {
                "id": 1,
                "userId": 24,
                "title": "rich Blood Orange Pie",
                "slug": "rich-blood-orange-pie-1",
                "description": "Adsuesco amitto cenaculum arma.",
                "cuisine": "indian",
                "difficulty": "hard",
                "prepMinutes": 9,
                "cookMinutes": 170,
                "servings": 8,
                "ingredients": [
                  "4 oz apple juice",
                  "1.75 tbsp raisin",
                  "0.5 tsp jelly",
                  "3.75 g barramundi",
                  "4 g curry powder",
                  "3 tbsp fennel seeds",
                  "2.25 g hummus",
                  "4 tbsp ricotta",
                  "3.5 lb baking soda",
                  "1.25 oz macadamia nut",
                  "1 tsp guava",
                  "3 tsp lobster",
                  "1.25 tsp papaya",
                  "3.25 lb dried chinese broccoli"
                ],
                "instructions": [
                  "Step 1: Simmer safflower oil until aqua sumo una cattus universe.",
                  "Step 2: Fold aubergine until thorax torrens amoveo.",
                  "Step 3: Sauté cream until cado arx quibusdam trans.",
                  "Step 4: Whisk greenwheat freekeh until cimentarius labore volup trepide commemoro.",
                  "Step 5: Sauté sunflower seeds until vespillo tero compono antiquus averto."
                ],
                "tags": ["gluten-free", "dairy-free", "low-carb", "vegan"],
                "imageUrl": "https://picsum.photos/seed/recipe-1/1200/800",
                "createdAt": "2025-04-30T14:56:49.378Z",
                "updatedAt": "2025-04-30T14:56:49.378Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RecipesRecord" },
                "example": {
                  "id": 1,
                  "userId": 24,
                  "title": "rich Blood Orange Pie",
                  "slug": "rich-blood-orange-pie-1",
                  "description": "Adsuesco amitto cenaculum arma.",
                  "cuisine": "indian",
                  "difficulty": "hard",
                  "prepMinutes": 9,
                  "cookMinutes": 170,
                  "servings": 8,
                  "ingredients": [
                    "4 oz apple juice",
                    "1.75 tbsp raisin",
                    "0.5 tsp jelly",
                    "3.75 g barramundi",
                    "4 g curry powder",
                    "3 tbsp fennel seeds",
                    "2.25 g hummus",
                    "4 tbsp ricotta",
                    "3.5 lb baking soda",
                    "1.25 oz macadamia nut",
                    "1 tsp guava",
                    "3 tsp lobster",
                    "1.25 tsp papaya",
                    "3.25 lb dried chinese broccoli"
                  ],
                  "instructions": [
                    "Step 1: Simmer safflower oil until aqua sumo una cattus universe.",
                    "Step 2: Fold aubergine until thorax torrens amoveo.",
                    "Step 3: Sauté cream until cado arx quibusdam trans.",
                    "Step 4: Whisk greenwheat freekeh until cimentarius labore volup trepide commemoro.",
                    "Step 5: Sauté sunflower seeds until vespillo tero compono antiquus averto."
                  ],
                  "tags": ["gluten-free", "dairy-free", "low-carb", "vegan"],
                  "imageUrl": "https://picsum.photos/seed/recipe-1/1200/800",
                  "createdAt": "2025-04-30T14:56:49.378Z",
                  "updatedAt": "2025-04-30T14:56:49.378Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a recipes record (fake — not persisted)",
        "operationId": "patch-recipes",
        "tags": ["recipes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RecipesRecord" },
                "example": {
                  "id": 1,
                  "userId": 24,
                  "title": "rich Blood Orange Pie",
                  "slug": "rich-blood-orange-pie-1",
                  "description": "Adsuesco amitto cenaculum arma.",
                  "cuisine": "indian",
                  "difficulty": "hard",
                  "prepMinutes": 9,
                  "cookMinutes": 170,
                  "servings": 8,
                  "ingredients": [
                    "4 oz apple juice",
                    "1.75 tbsp raisin",
                    "0.5 tsp jelly",
                    "3.75 g barramundi",
                    "4 g curry powder",
                    "3 tbsp fennel seeds",
                    "2.25 g hummus",
                    "4 tbsp ricotta",
                    "3.5 lb baking soda",
                    "1.25 oz macadamia nut",
                    "1 tsp guava",
                    "3 tsp lobster",
                    "1.25 tsp papaya",
                    "3.25 lb dried chinese broccoli"
                  ],
                  "instructions": [
                    "Step 1: Simmer safflower oil until aqua sumo una cattus universe.",
                    "Step 2: Fold aubergine until thorax torrens amoveo.",
                    "Step 3: Sauté cream until cado arx quibusdam trans.",
                    "Step 4: Whisk greenwheat freekeh until cimentarius labore volup trepide commemoro.",
                    "Step 5: Sauté sunflower seeds until vespillo tero compono antiquus averto."
                  ],
                  "tags": ["gluten-free", "dairy-free", "low-carb", "vegan"],
                  "imageUrl": "https://picsum.photos/seed/recipe-1/1200/800",
                  "createdAt": "2025-04-30T14:56:49.378Z",
                  "updatedAt": "2025-04-30T14:56:49.378Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a recipes record (fake — not persisted)",
        "operationId": "delete-recipes",
        "tags": ["recipes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/comments": {
      "get": {
        "summary": "List comments",
        "operationId": "list-comments",
        "tags": ["comments"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CommentsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 25,
                      "targetType": "post",
                      "targetId": 285,
                      "body": "Venustas addo velut ter bos auditor carcer comitatus spero. Bonus crustulum appositus odit velut certus eos vaco deleniti video.",
                      "isEdited": false,
                      "createdAt": "2026-04-21T04:58:34.589Z",
                      "updatedAt": "2026-04-21T04:58:34.589Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/comments?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a comments record (fake — not persisted)",
        "operationId": "create-comments",
        "tags": ["comments"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CommentsRecord" },
              "example": {
                "id": 1,
                "userId": 25,
                "targetType": "post",
                "targetId": 285,
                "body": "Venustas addo velut ter bos auditor carcer comitatus spero. Bonus crustulum appositus odit velut certus eos vaco deleniti video.",
                "isEdited": false,
                "createdAt": "2026-04-21T04:58:34.589Z",
                "updatedAt": "2026-04-21T04:58:34.589Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CommentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 25,
                  "targetType": "post",
                  "targetId": 285,
                  "body": "Venustas addo velut ter bos auditor carcer comitatus spero. Bonus crustulum appositus odit velut certus eos vaco deleniti video.",
                  "isEdited": false,
                  "createdAt": "2026-04-21T04:58:34.589Z",
                  "updatedAt": "2026-04-21T04:58:34.589Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/comments/{id}": {
      "get": {
        "summary": "Get one comments record by id",
        "operationId": "get-comments-by-id",
        "tags": ["comments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CommentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 25,
                  "targetType": "post",
                  "targetId": 285,
                  "body": "Venustas addo velut ter bos auditor carcer comitatus spero. Bonus crustulum appositus odit velut certus eos vaco deleniti video.",
                  "isEdited": false,
                  "createdAt": "2026-04-21T04:58:34.589Z",
                  "updatedAt": "2026-04-21T04:58:34.589Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a comments record (fake — not persisted)",
        "operationId": "replace-comments",
        "tags": ["comments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CommentsRecord" },
              "example": {
                "id": 1,
                "userId": 25,
                "targetType": "post",
                "targetId": 285,
                "body": "Venustas addo velut ter bos auditor carcer comitatus spero. Bonus crustulum appositus odit velut certus eos vaco deleniti video.",
                "isEdited": false,
                "createdAt": "2026-04-21T04:58:34.589Z",
                "updatedAt": "2026-04-21T04:58:34.589Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CommentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 25,
                  "targetType": "post",
                  "targetId": 285,
                  "body": "Venustas addo velut ter bos auditor carcer comitatus spero. Bonus crustulum appositus odit velut certus eos vaco deleniti video.",
                  "isEdited": false,
                  "createdAt": "2026-04-21T04:58:34.589Z",
                  "updatedAt": "2026-04-21T04:58:34.589Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a comments record (fake — not persisted)",
        "operationId": "patch-comments",
        "tags": ["comments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CommentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 25,
                  "targetType": "post",
                  "targetId": 285,
                  "body": "Venustas addo velut ter bos auditor carcer comitatus spero. Bonus crustulum appositus odit velut certus eos vaco deleniti video.",
                  "isEdited": false,
                  "createdAt": "2026-04-21T04:58:34.589Z",
                  "updatedAt": "2026-04-21T04:58:34.589Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a comments record (fake — not persisted)",
        "operationId": "delete-comments",
        "tags": ["comments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/reactions": {
      "get": {
        "summary": "List reactions",
        "operationId": "list-reactions",
        "tags": ["reactions"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ReactionsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 81,
                      "targetType": "post",
                      "targetId": 388,
                      "type": "laugh",
                      "createdAt": "2026-02-07T18:39:10.082Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/reactions?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a reactions record (fake — not persisted)",
        "operationId": "create-reactions",
        "tags": ["reactions"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ReactionsRecord" },
              "example": {
                "id": 1,
                "userId": 81,
                "targetType": "post",
                "targetId": 388,
                "type": "laugh",
                "createdAt": "2026-02-07T18:39:10.082Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ReactionsRecord" },
                "example": {
                  "id": 1,
                  "userId": 81,
                  "targetType": "post",
                  "targetId": 388,
                  "type": "laugh",
                  "createdAt": "2026-02-07T18:39:10.082Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/reactions/{id}": {
      "get": {
        "summary": "Get one reactions record by id",
        "operationId": "get-reactions-by-id",
        "tags": ["reactions"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ReactionsRecord" },
                "example": {
                  "id": 1,
                  "userId": 81,
                  "targetType": "post",
                  "targetId": 388,
                  "type": "laugh",
                  "createdAt": "2026-02-07T18:39:10.082Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a reactions record (fake — not persisted)",
        "operationId": "replace-reactions",
        "tags": ["reactions"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ReactionsRecord" },
              "example": {
                "id": 1,
                "userId": 81,
                "targetType": "post",
                "targetId": 388,
                "type": "laugh",
                "createdAt": "2026-02-07T18:39:10.082Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ReactionsRecord" },
                "example": {
                  "id": 1,
                  "userId": 81,
                  "targetType": "post",
                  "targetId": 388,
                  "type": "laugh",
                  "createdAt": "2026-02-07T18:39:10.082Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a reactions record (fake — not persisted)",
        "operationId": "patch-reactions",
        "tags": ["reactions"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ReactionsRecord" },
                "example": {
                  "id": 1,
                  "userId": 81,
                  "targetType": "post",
                  "targetId": 388,
                  "type": "laugh",
                  "createdAt": "2026-02-07T18:39:10.082Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a reactions record (fake — not persisted)",
        "operationId": "delete-reactions",
        "tags": ["reactions"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/currencies": {
      "get": {
        "summary": "List currencies",
        "operationId": "list-currencies",
        "tags": ["currencies"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CurrenciesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "code": "USD",
                      "name": "United States Dollar",
                      "symbol": "$",
                      "decimalDigits": 2
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/currencies?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a currencies record (fake — not persisted)",
        "operationId": "create-currencies",
        "tags": ["currencies"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CurrenciesRecord" },
              "example": {
                "id": 1,
                "code": "USD",
                "name": "United States Dollar",
                "symbol": "$",
                "decimalDigits": 2
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CurrenciesRecord" },
                "example": {
                  "id": 1,
                  "code": "USD",
                  "name": "United States Dollar",
                  "symbol": "$",
                  "decimalDigits": 2
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/currencies/{id}": {
      "get": {
        "summary": "Get one currencies record by id",
        "operationId": "get-currencies-by-id",
        "tags": ["currencies"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CurrenciesRecord" },
                "example": {
                  "id": 1,
                  "code": "USD",
                  "name": "United States Dollar",
                  "symbol": "$",
                  "decimalDigits": 2
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a currencies record (fake — not persisted)",
        "operationId": "replace-currencies",
        "tags": ["currencies"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CurrenciesRecord" },
              "example": {
                "id": 1,
                "code": "USD",
                "name": "United States Dollar",
                "symbol": "$",
                "decimalDigits": 2
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CurrenciesRecord" },
                "example": {
                  "id": 1,
                  "code": "USD",
                  "name": "United States Dollar",
                  "symbol": "$",
                  "decimalDigits": 2
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a currencies record (fake — not persisted)",
        "operationId": "patch-currencies",
        "tags": ["currencies"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CurrenciesRecord" },
                "example": {
                  "id": 1,
                  "code": "USD",
                  "name": "United States Dollar",
                  "symbol": "$",
                  "decimalDigits": 2
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a currencies record (fake — not persisted)",
        "operationId": "delete-currencies",
        "tags": ["currencies"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/languages": {
      "get": {
        "summary": "List languages",
        "operationId": "list-languages",
        "tags": ["languages"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/LanguagesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "code": "en",
                      "name": "English",
                      "nativeName": "English",
                      "direction": "ltr"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/languages?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a languages record (fake — not persisted)",
        "operationId": "create-languages",
        "tags": ["languages"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/LanguagesRecord" },
              "example": {
                "id": 1,
                "code": "en",
                "name": "English",
                "nativeName": "English",
                "direction": "ltr"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/LanguagesRecord" },
                "example": {
                  "id": 1,
                  "code": "en",
                  "name": "English",
                  "nativeName": "English",
                  "direction": "ltr"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/languages/{id}": {
      "get": {
        "summary": "Get one languages record by id",
        "operationId": "get-languages-by-id",
        "tags": ["languages"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/LanguagesRecord" },
                "example": {
                  "id": 1,
                  "code": "en",
                  "name": "English",
                  "nativeName": "English",
                  "direction": "ltr"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a languages record (fake — not persisted)",
        "operationId": "replace-languages",
        "tags": ["languages"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/LanguagesRecord" },
              "example": {
                "id": 1,
                "code": "en",
                "name": "English",
                "nativeName": "English",
                "direction": "ltr"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/LanguagesRecord" },
                "example": {
                  "id": 1,
                  "code": "en",
                  "name": "English",
                  "nativeName": "English",
                  "direction": "ltr"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a languages record (fake — not persisted)",
        "operationId": "patch-languages",
        "tags": ["languages"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/LanguagesRecord" },
                "example": {
                  "id": 1,
                  "code": "en",
                  "name": "English",
                  "nativeName": "English",
                  "direction": "ltr"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a languages record (fake — not persisted)",
        "operationId": "delete-languages",
        "tags": ["languages"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/time-zones": {
      "get": {
        "summary": "List time-zones",
        "operationId": "list-time-zones",
        "tags": ["time-zones"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/TimeZonesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "America/New_York",
                      "offsetMinutes": -300,
                      "abbreviation": "EST",
                      "countryAlpha2": "US"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/time-zones?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a time-zones record (fake — not persisted)",
        "operationId": "create-time-zones",
        "tags": ["time-zones"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TimeZonesRecord" },
              "example": {
                "id": 1,
                "name": "America/New_York",
                "offsetMinutes": -300,
                "abbreviation": "EST",
                "countryAlpha2": "US"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TimeZonesRecord" },
                "example": {
                  "id": 1,
                  "name": "America/New_York",
                  "offsetMinutes": -300,
                  "abbreviation": "EST",
                  "countryAlpha2": "US"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/time-zones/{id}": {
      "get": {
        "summary": "Get one time-zones record by id",
        "operationId": "get-time-zones-by-id",
        "tags": ["time-zones"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TimeZonesRecord" },
                "example": {
                  "id": 1,
                  "name": "America/New_York",
                  "offsetMinutes": -300,
                  "abbreviation": "EST",
                  "countryAlpha2": "US"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a time-zones record (fake — not persisted)",
        "operationId": "replace-time-zones",
        "tags": ["time-zones"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TimeZonesRecord" },
              "example": {
                "id": 1,
                "name": "America/New_York",
                "offsetMinutes": -300,
                "abbreviation": "EST",
                "countryAlpha2": "US"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TimeZonesRecord" },
                "example": {
                  "id": 1,
                  "name": "America/New_York",
                  "offsetMinutes": -300,
                  "abbreviation": "EST",
                  "countryAlpha2": "US"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a time-zones record (fake — not persisted)",
        "operationId": "patch-time-zones",
        "tags": ["time-zones"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TimeZonesRecord" },
                "example": {
                  "id": 1,
                  "name": "America/New_York",
                  "offsetMinutes": -300,
                  "abbreviation": "EST",
                  "countryAlpha2": "US"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a time-zones record (fake — not persisted)",
        "operationId": "delete-time-zones",
        "tags": ["time-zones"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/industries": {
      "get": {
        "summary": "List industries",
        "operationId": "list-industries",
        "tags": ["industries"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/IndustriesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Commercial Banking",
                      "slug": "commercial-banking",
                      "sector": "Financial Services",
                      "description": "Institutions accepting deposits and making loans to businesses and individuals."
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/industries?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a industries record (fake — not persisted)",
        "operationId": "create-industries",
        "tags": ["industries"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/IndustriesRecord" },
              "example": {
                "id": 1,
                "name": "Commercial Banking",
                "slug": "commercial-banking",
                "sector": "Financial Services",
                "description": "Institutions accepting deposits and making loans to businesses and individuals."
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/IndustriesRecord" },
                "example": {
                  "id": 1,
                  "name": "Commercial Banking",
                  "slug": "commercial-banking",
                  "sector": "Financial Services",
                  "description": "Institutions accepting deposits and making loans to businesses and individuals."
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/industries/{id}": {
      "get": {
        "summary": "Get one industries record by id",
        "operationId": "get-industries-by-id",
        "tags": ["industries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/IndustriesRecord" },
                "example": {
                  "id": 1,
                  "name": "Commercial Banking",
                  "slug": "commercial-banking",
                  "sector": "Financial Services",
                  "description": "Institutions accepting deposits and making loans to businesses and individuals."
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a industries record (fake — not persisted)",
        "operationId": "replace-industries",
        "tags": ["industries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/IndustriesRecord" },
              "example": {
                "id": 1,
                "name": "Commercial Banking",
                "slug": "commercial-banking",
                "sector": "Financial Services",
                "description": "Institutions accepting deposits and making loans to businesses and individuals."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/IndustriesRecord" },
                "example": {
                  "id": 1,
                  "name": "Commercial Banking",
                  "slug": "commercial-banking",
                  "sector": "Financial Services",
                  "description": "Institutions accepting deposits and making loans to businesses and individuals."
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a industries record (fake — not persisted)",
        "operationId": "patch-industries",
        "tags": ["industries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/IndustriesRecord" },
                "example": {
                  "id": 1,
                  "name": "Commercial Banking",
                  "slug": "commercial-banking",
                  "sector": "Financial Services",
                  "description": "Institutions accepting deposits and making loans to businesses and individuals."
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a industries record (fake — not persisted)",
        "operationId": "delete-industries",
        "tags": ["industries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/categories": {
      "get": {
        "summary": "List categories",
        "operationId": "list-categories",
        "tags": ["categories"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CategoriesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Electronics",
                      "slug": "electronics",
                      "description": "Consumer electronics, gadgets, and technology hardware.",
                      "parentId": null,
                      "sortOrder": 1
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/categories?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a categories record (fake — not persisted)",
        "operationId": "create-categories",
        "tags": ["categories"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CategoriesRecord" },
              "example": {
                "id": 1,
                "name": "Electronics",
                "slug": "electronics",
                "description": "Consumer electronics, gadgets, and technology hardware.",
                "parentId": null,
                "sortOrder": 1
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CategoriesRecord" },
                "example": {
                  "id": 1,
                  "name": "Electronics",
                  "slug": "electronics",
                  "description": "Consumer electronics, gadgets, and technology hardware.",
                  "parentId": null,
                  "sortOrder": 1
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/categories/{id}": {
      "get": {
        "summary": "Get one categories record by id",
        "operationId": "get-categories-by-id",
        "tags": ["categories"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CategoriesRecord" },
                "example": {
                  "id": 1,
                  "name": "Electronics",
                  "slug": "electronics",
                  "description": "Consumer electronics, gadgets, and technology hardware.",
                  "parentId": null,
                  "sortOrder": 1
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a categories record (fake — not persisted)",
        "operationId": "replace-categories",
        "tags": ["categories"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CategoriesRecord" },
              "example": {
                "id": 1,
                "name": "Electronics",
                "slug": "electronics",
                "description": "Consumer electronics, gadgets, and technology hardware.",
                "parentId": null,
                "sortOrder": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CategoriesRecord" },
                "example": {
                  "id": 1,
                  "name": "Electronics",
                  "slug": "electronics",
                  "description": "Consumer electronics, gadgets, and technology hardware.",
                  "parentId": null,
                  "sortOrder": 1
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a categories record (fake — not persisted)",
        "operationId": "patch-categories",
        "tags": ["categories"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CategoriesRecord" },
                "example": {
                  "id": 1,
                  "name": "Electronics",
                  "slug": "electronics",
                  "description": "Consumer electronics, gadgets, and technology hardware.",
                  "parentId": null,
                  "sortOrder": 1
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a categories record (fake — not persisted)",
        "operationId": "delete-categories",
        "tags": ["categories"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/tags": {
      "get": {
        "summary": "List tags",
        "operationId": "list-tags",
        "tags": ["tags"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/TagsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "tutorial",
                      "slug": "tutorial",
                      "color": "#d636ab",
                      "useCount": 458
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/tags?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a tags record (fake — not persisted)",
        "operationId": "create-tags",
        "tags": ["tags"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TagsRecord" },
              "example": {
                "id": 1,
                "name": "tutorial",
                "slug": "tutorial",
                "color": "#d636ab",
                "useCount": 458
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TagsRecord" },
                "example": {
                  "id": 1,
                  "name": "tutorial",
                  "slug": "tutorial",
                  "color": "#d636ab",
                  "useCount": 458
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/tags/{id}": {
      "get": {
        "summary": "Get one tags record by id",
        "operationId": "get-tags-by-id",
        "tags": ["tags"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TagsRecord" },
                "example": {
                  "id": 1,
                  "name": "tutorial",
                  "slug": "tutorial",
                  "color": "#d636ab",
                  "useCount": 458
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a tags record (fake — not persisted)",
        "operationId": "replace-tags",
        "tags": ["tags"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TagsRecord" },
              "example": {
                "id": 1,
                "name": "tutorial",
                "slug": "tutorial",
                "color": "#d636ab",
                "useCount": 458
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TagsRecord" },
                "example": {
                  "id": 1,
                  "name": "tutorial",
                  "slug": "tutorial",
                  "color": "#d636ab",
                  "useCount": 458
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a tags record (fake — not persisted)",
        "operationId": "patch-tags",
        "tags": ["tags"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TagsRecord" },
                "example": {
                  "id": 1,
                  "name": "tutorial",
                  "slug": "tutorial",
                  "color": "#d636ab",
                  "useCount": 458
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a tags record (fake — not persisted)",
        "operationId": "delete-tags",
        "tags": ["tags"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/followers": {
      "get": {
        "summary": "List followers",
        "operationId": "list-followers",
        "tags": ["followers"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/FollowersRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 194,
                      "followsUserId": 136,
                      "createdAt": "2024-08-15T01:35:05.437Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/followers?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a followers record (fake — not persisted)",
        "operationId": "create-followers",
        "tags": ["followers"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/FollowersRecord" },
              "example": {
                "id": 1,
                "userId": 194,
                "followsUserId": 136,
                "createdAt": "2024-08-15T01:35:05.437Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FollowersRecord" },
                "example": {
                  "id": 1,
                  "userId": 194,
                  "followsUserId": 136,
                  "createdAt": "2024-08-15T01:35:05.437Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/followers/{id}": {
      "get": {
        "summary": "Get one followers record by id",
        "operationId": "get-followers-by-id",
        "tags": ["followers"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FollowersRecord" },
                "example": {
                  "id": 1,
                  "userId": 194,
                  "followsUserId": 136,
                  "createdAt": "2024-08-15T01:35:05.437Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a followers record (fake — not persisted)",
        "operationId": "replace-followers",
        "tags": ["followers"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/FollowersRecord" },
              "example": {
                "id": 1,
                "userId": 194,
                "followsUserId": 136,
                "createdAt": "2024-08-15T01:35:05.437Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FollowersRecord" },
                "example": {
                  "id": 1,
                  "userId": 194,
                  "followsUserId": 136,
                  "createdAt": "2024-08-15T01:35:05.437Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a followers record (fake — not persisted)",
        "operationId": "patch-followers",
        "tags": ["followers"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FollowersRecord" },
                "example": {
                  "id": 1,
                  "userId": 194,
                  "followsUserId": 136,
                  "createdAt": "2024-08-15T01:35:05.437Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a followers record (fake — not persisted)",
        "operationId": "delete-followers",
        "tags": ["followers"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/notifications": {
      "get": {
        "summary": "List notifications",
        "operationId": "list-notifications",
        "tags": ["notifications"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/NotificationsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 241,
                      "type": "system",
                      "title": "System notification",
                      "body": "Suffragium avarus ager confero.",
                      "isRead": true,
                      "link": null,
                      "createdAt": "2025-12-26T14:25:47.468Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/notifications?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a notifications record (fake — not persisted)",
        "operationId": "create-notifications",
        "tags": ["notifications"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/NotificationsRecord" },
              "example": {
                "id": 1,
                "userId": 241,
                "type": "system",
                "title": "System notification",
                "body": "Suffragium avarus ager confero.",
                "isRead": true,
                "link": null,
                "createdAt": "2025-12-26T14:25:47.468Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/NotificationsRecord" },
                "example": {
                  "id": 1,
                  "userId": 241,
                  "type": "system",
                  "title": "System notification",
                  "body": "Suffragium avarus ager confero.",
                  "isRead": true,
                  "link": null,
                  "createdAt": "2025-12-26T14:25:47.468Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/notifications/{id}": {
      "get": {
        "summary": "Get one notifications record by id",
        "operationId": "get-notifications-by-id",
        "tags": ["notifications"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/NotificationsRecord" },
                "example": {
                  "id": 1,
                  "userId": 241,
                  "type": "system",
                  "title": "System notification",
                  "body": "Suffragium avarus ager confero.",
                  "isRead": true,
                  "link": null,
                  "createdAt": "2025-12-26T14:25:47.468Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a notifications record (fake — not persisted)",
        "operationId": "replace-notifications",
        "tags": ["notifications"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/NotificationsRecord" },
              "example": {
                "id": 1,
                "userId": 241,
                "type": "system",
                "title": "System notification",
                "body": "Suffragium avarus ager confero.",
                "isRead": true,
                "link": null,
                "createdAt": "2025-12-26T14:25:47.468Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/NotificationsRecord" },
                "example": {
                  "id": 1,
                  "userId": 241,
                  "type": "system",
                  "title": "System notification",
                  "body": "Suffragium avarus ager confero.",
                  "isRead": true,
                  "link": null,
                  "createdAt": "2025-12-26T14:25:47.468Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a notifications record (fake — not persisted)",
        "operationId": "patch-notifications",
        "tags": ["notifications"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/NotificationsRecord" },
                "example": {
                  "id": 1,
                  "userId": 241,
                  "type": "system",
                  "title": "System notification",
                  "body": "Suffragium avarus ager confero.",
                  "isRead": true,
                  "link": null,
                  "createdAt": "2025-12-26T14:25:47.468Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a notifications record (fake — not persisted)",
        "operationId": "delete-notifications",
        "tags": ["notifications"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/conversations": {
      "get": {
        "summary": "List conversations",
        "operationId": "list-conversations",
        "tags": ["conversations"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ConversationsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "title": "Music Lovers 91",
                      "isGroup": true,
                      "createdAt": "2025-07-24T08:14:40.405Z",
                      "updatedAt": "2026-03-09T06:13:46.627Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/conversations?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a conversations record (fake — not persisted)",
        "operationId": "create-conversations",
        "tags": ["conversations"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ConversationsRecord" },
              "example": {
                "id": 1,
                "title": "Music Lovers 91",
                "isGroup": true,
                "createdAt": "2025-07-24T08:14:40.405Z",
                "updatedAt": "2026-03-09T06:13:46.627Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ConversationsRecord" },
                "example": {
                  "id": 1,
                  "title": "Music Lovers 91",
                  "isGroup": true,
                  "createdAt": "2025-07-24T08:14:40.405Z",
                  "updatedAt": "2026-03-09T06:13:46.627Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/conversations/{id}": {
      "get": {
        "summary": "Get one conversations record by id",
        "operationId": "get-conversations-by-id",
        "tags": ["conversations"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ConversationsRecord" },
                "example": {
                  "id": 1,
                  "title": "Music Lovers 91",
                  "isGroup": true,
                  "createdAt": "2025-07-24T08:14:40.405Z",
                  "updatedAt": "2026-03-09T06:13:46.627Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a conversations record (fake — not persisted)",
        "operationId": "replace-conversations",
        "tags": ["conversations"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ConversationsRecord" },
              "example": {
                "id": 1,
                "title": "Music Lovers 91",
                "isGroup": true,
                "createdAt": "2025-07-24T08:14:40.405Z",
                "updatedAt": "2026-03-09T06:13:46.627Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ConversationsRecord" },
                "example": {
                  "id": 1,
                  "title": "Music Lovers 91",
                  "isGroup": true,
                  "createdAt": "2025-07-24T08:14:40.405Z",
                  "updatedAt": "2026-03-09T06:13:46.627Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a conversations record (fake — not persisted)",
        "operationId": "patch-conversations",
        "tags": ["conversations"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ConversationsRecord" },
                "example": {
                  "id": 1,
                  "title": "Music Lovers 91",
                  "isGroup": true,
                  "createdAt": "2025-07-24T08:14:40.405Z",
                  "updatedAt": "2026-03-09T06:13:46.627Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a conversations record (fake — not persisted)",
        "operationId": "delete-conversations",
        "tags": ["conversations"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/messages": {
      "get": {
        "summary": "List messages",
        "operationId": "list-messages",
        "tags": ["messages"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/MessagesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "conversationId": 1,
                      "userId": 183,
                      "body": "Adsidue suadeo valeo natus tabesco vehemens tollo quod. Vado depereo concido neque tyrannus aro qui cohaero. Sursum caelum speculum curto copiose cribro dapifer denuncio virtus.",
                      "isEdited": false,
                      "createdAt": "2025-08-05T11:46:41.970Z",
                      "updatedAt": "2025-08-05T11:46:41.970Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/messages?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a messages record (fake — not persisted)",
        "operationId": "create-messages",
        "tags": ["messages"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MessagesRecord" },
              "example": {
                "id": 1,
                "conversationId": 1,
                "userId": 183,
                "body": "Adsidue suadeo valeo natus tabesco vehemens tollo quod. Vado depereo concido neque tyrannus aro qui cohaero. Sursum caelum speculum curto copiose cribro dapifer denuncio virtus.",
                "isEdited": false,
                "createdAt": "2025-08-05T11:46:41.970Z",
                "updatedAt": "2025-08-05T11:46:41.970Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MessagesRecord" },
                "example": {
                  "id": 1,
                  "conversationId": 1,
                  "userId": 183,
                  "body": "Adsidue suadeo valeo natus tabesco vehemens tollo quod. Vado depereo concido neque tyrannus aro qui cohaero. Sursum caelum speculum curto copiose cribro dapifer denuncio virtus.",
                  "isEdited": false,
                  "createdAt": "2025-08-05T11:46:41.970Z",
                  "updatedAt": "2025-08-05T11:46:41.970Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/messages/{id}": {
      "get": {
        "summary": "Get one messages record by id",
        "operationId": "get-messages-by-id",
        "tags": ["messages"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MessagesRecord" },
                "example": {
                  "id": 1,
                  "conversationId": 1,
                  "userId": 183,
                  "body": "Adsidue suadeo valeo natus tabesco vehemens tollo quod. Vado depereo concido neque tyrannus aro qui cohaero. Sursum caelum speculum curto copiose cribro dapifer denuncio virtus.",
                  "isEdited": false,
                  "createdAt": "2025-08-05T11:46:41.970Z",
                  "updatedAt": "2025-08-05T11:46:41.970Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a messages record (fake — not persisted)",
        "operationId": "replace-messages",
        "tags": ["messages"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MessagesRecord" },
              "example": {
                "id": 1,
                "conversationId": 1,
                "userId": 183,
                "body": "Adsidue suadeo valeo natus tabesco vehemens tollo quod. Vado depereo concido neque tyrannus aro qui cohaero. Sursum caelum speculum curto copiose cribro dapifer denuncio virtus.",
                "isEdited": false,
                "createdAt": "2025-08-05T11:46:41.970Z",
                "updatedAt": "2025-08-05T11:46:41.970Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MessagesRecord" },
                "example": {
                  "id": 1,
                  "conversationId": 1,
                  "userId": 183,
                  "body": "Adsidue suadeo valeo natus tabesco vehemens tollo quod. Vado depereo concido neque tyrannus aro qui cohaero. Sursum caelum speculum curto copiose cribro dapifer denuncio virtus.",
                  "isEdited": false,
                  "createdAt": "2025-08-05T11:46:41.970Z",
                  "updatedAt": "2025-08-05T11:46:41.970Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a messages record (fake — not persisted)",
        "operationId": "patch-messages",
        "tags": ["messages"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MessagesRecord" },
                "example": {
                  "id": 1,
                  "conversationId": 1,
                  "userId": 183,
                  "body": "Adsidue suadeo valeo natus tabesco vehemens tollo quod. Vado depereo concido neque tyrannus aro qui cohaero. Sursum caelum speculum curto copiose cribro dapifer denuncio virtus.",
                  "isEdited": false,
                  "createdAt": "2025-08-05T11:46:41.970Z",
                  "updatedAt": "2025-08-05T11:46:41.970Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a messages record (fake — not persisted)",
        "operationId": "delete-messages",
        "tags": ["messages"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/activities": {
      "get": {
        "summary": "List activities",
        "operationId": "list-activities",
        "tags": ["activities"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ActivitiesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 15,
                      "verb": "shared",
                      "targetType": "restaurant",
                      "targetId": 9,
                      "createdAt": "2026-02-03T09:24:31.539Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/activities?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a activities record (fake — not persisted)",
        "operationId": "create-activities",
        "tags": ["activities"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ActivitiesRecord" },
              "example": {
                "id": 1,
                "userId": 15,
                "verb": "shared",
                "targetType": "restaurant",
                "targetId": 9,
                "createdAt": "2026-02-03T09:24:31.539Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ActivitiesRecord" },
                "example": {
                  "id": 1,
                  "userId": 15,
                  "verb": "shared",
                  "targetType": "restaurant",
                  "targetId": 9,
                  "createdAt": "2026-02-03T09:24:31.539Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/activities/{id}": {
      "get": {
        "summary": "Get one activities record by id",
        "operationId": "get-activities-by-id",
        "tags": ["activities"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ActivitiesRecord" },
                "example": {
                  "id": 1,
                  "userId": 15,
                  "verb": "shared",
                  "targetType": "restaurant",
                  "targetId": 9,
                  "createdAt": "2026-02-03T09:24:31.539Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a activities record (fake — not persisted)",
        "operationId": "replace-activities",
        "tags": ["activities"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ActivitiesRecord" },
              "example": {
                "id": 1,
                "userId": 15,
                "verb": "shared",
                "targetType": "restaurant",
                "targetId": 9,
                "createdAt": "2026-02-03T09:24:31.539Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ActivitiesRecord" },
                "example": {
                  "id": 1,
                  "userId": 15,
                  "verb": "shared",
                  "targetType": "restaurant",
                  "targetId": 9,
                  "createdAt": "2026-02-03T09:24:31.539Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a activities record (fake — not persisted)",
        "operationId": "patch-activities",
        "tags": ["activities"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ActivitiesRecord" },
                "example": {
                  "id": 1,
                  "userId": 15,
                  "verb": "shared",
                  "targetType": "restaurant",
                  "targetId": 9,
                  "createdAt": "2026-02-03T09:24:31.539Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a activities record (fake — not persisted)",
        "operationId": "delete-activities",
        "tags": ["activities"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/attachments": {
      "get": {
        "summary": "List attachments",
        "operationId": "list-attachments",
        "tags": ["attachments"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/AttachmentsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 87,
                      "targetType": "comment",
                      "targetId": 419,
                      "url": "https://picsum.photos/seed/attachment-1/600/600",
                      "mimeType": "image/webp",
                      "sizeBytes": 22312530,
                      "createdAt": "2025-07-07T05:17:13.570Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/attachments?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a attachments record (fake — not persisted)",
        "operationId": "create-attachments",
        "tags": ["attachments"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/AttachmentsRecord" },
              "example": {
                "id": 1,
                "userId": 87,
                "targetType": "comment",
                "targetId": 419,
                "url": "https://picsum.photos/seed/attachment-1/600/600",
                "mimeType": "image/webp",
                "sizeBytes": 22312530,
                "createdAt": "2025-07-07T05:17:13.570Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AttachmentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 87,
                  "targetType": "comment",
                  "targetId": 419,
                  "url": "https://picsum.photos/seed/attachment-1/600/600",
                  "mimeType": "image/webp",
                  "sizeBytes": 22312530,
                  "createdAt": "2025-07-07T05:17:13.570Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/attachments/{id}": {
      "get": {
        "summary": "Get one attachments record by id",
        "operationId": "get-attachments-by-id",
        "tags": ["attachments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AttachmentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 87,
                  "targetType": "comment",
                  "targetId": 419,
                  "url": "https://picsum.photos/seed/attachment-1/600/600",
                  "mimeType": "image/webp",
                  "sizeBytes": 22312530,
                  "createdAt": "2025-07-07T05:17:13.570Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a attachments record (fake — not persisted)",
        "operationId": "replace-attachments",
        "tags": ["attachments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/AttachmentsRecord" },
              "example": {
                "id": 1,
                "userId": 87,
                "targetType": "comment",
                "targetId": 419,
                "url": "https://picsum.photos/seed/attachment-1/600/600",
                "mimeType": "image/webp",
                "sizeBytes": 22312530,
                "createdAt": "2025-07-07T05:17:13.570Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AttachmentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 87,
                  "targetType": "comment",
                  "targetId": 419,
                  "url": "https://picsum.photos/seed/attachment-1/600/600",
                  "mimeType": "image/webp",
                  "sizeBytes": 22312530,
                  "createdAt": "2025-07-07T05:17:13.570Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a attachments record (fake — not persisted)",
        "operationId": "patch-attachments",
        "tags": ["attachments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AttachmentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 87,
                  "targetType": "comment",
                  "targetId": 419,
                  "url": "https://picsum.photos/seed/attachment-1/600/600",
                  "mimeType": "image/webp",
                  "sizeBytes": 22312530,
                  "createdAt": "2025-07-07T05:17:13.570Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a attachments record (fake — not persisted)",
        "operationId": "delete-attachments",
        "tags": ["attachments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/hashtags": {
      "get": {
        "summary": "List hashtags",
        "operationId": "list-hashtags",
        "tags": ["hashtags"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/HashtagsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [{ "id": 1, "tag": "design", "useCount": 4906 }],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/hashtags?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a hashtags record (fake — not persisted)",
        "operationId": "create-hashtags",
        "tags": ["hashtags"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/HashtagsRecord" },
              "example": { "id": 1, "tag": "design", "useCount": 4906 }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/HashtagsRecord" },
                "example": { "id": 1, "tag": "design", "useCount": 4906 }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/hashtags/{id}": {
      "get": {
        "summary": "Get one hashtags record by id",
        "operationId": "get-hashtags-by-id",
        "tags": ["hashtags"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/HashtagsRecord" },
                "example": { "id": 1, "tag": "design", "useCount": 4906 }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a hashtags record (fake — not persisted)",
        "operationId": "replace-hashtags",
        "tags": ["hashtags"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/HashtagsRecord" },
              "example": { "id": 1, "tag": "design", "useCount": 4906 }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/HashtagsRecord" },
                "example": { "id": 1, "tag": "design", "useCount": 4906 }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a hashtags record (fake — not persisted)",
        "operationId": "patch-hashtags",
        "tags": ["hashtags"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/HashtagsRecord" },
                "example": { "id": 1, "tag": "design", "useCount": 4906 }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a hashtags record (fake — not persisted)",
        "operationId": "delete-hashtags",
        "tags": ["hashtags"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/groups": {
      "get": {
        "summary": "List groups",
        "operationId": "list-groups",
        "tags": ["groups"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/GroupsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Local Designers",
                      "slug": "local-designers",
                      "description": "Strenuus conor creo bene cattus desidero taedium aranea.",
                      "memberCount": 14,
                      "isPublic": false,
                      "ownerUserId": 153,
                      "createdAt": "2026-03-29T10:21:36.323Z",
                      "updatedAt": "2026-04-20T15:06:59.949Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/groups?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a groups record (fake — not persisted)",
        "operationId": "create-groups",
        "tags": ["groups"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/GroupsRecord" },
              "example": {
                "id": 1,
                "name": "Local Designers",
                "slug": "local-designers",
                "description": "Strenuus conor creo bene cattus desidero taedium aranea.",
                "memberCount": 14,
                "isPublic": false,
                "ownerUserId": 153,
                "createdAt": "2026-03-29T10:21:36.323Z",
                "updatedAt": "2026-04-20T15:06:59.949Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/GroupsRecord" },
                "example": {
                  "id": 1,
                  "name": "Local Designers",
                  "slug": "local-designers",
                  "description": "Strenuus conor creo bene cattus desidero taedium aranea.",
                  "memberCount": 14,
                  "isPublic": false,
                  "ownerUserId": 153,
                  "createdAt": "2026-03-29T10:21:36.323Z",
                  "updatedAt": "2026-04-20T15:06:59.949Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/groups/{id}": {
      "get": {
        "summary": "Get one groups record by id",
        "operationId": "get-groups-by-id",
        "tags": ["groups"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/GroupsRecord" },
                "example": {
                  "id": 1,
                  "name": "Local Designers",
                  "slug": "local-designers",
                  "description": "Strenuus conor creo bene cattus desidero taedium aranea.",
                  "memberCount": 14,
                  "isPublic": false,
                  "ownerUserId": 153,
                  "createdAt": "2026-03-29T10:21:36.323Z",
                  "updatedAt": "2026-04-20T15:06:59.949Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a groups record (fake — not persisted)",
        "operationId": "replace-groups",
        "tags": ["groups"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/GroupsRecord" },
              "example": {
                "id": 1,
                "name": "Local Designers",
                "slug": "local-designers",
                "description": "Strenuus conor creo bene cattus desidero taedium aranea.",
                "memberCount": 14,
                "isPublic": false,
                "ownerUserId": 153,
                "createdAt": "2026-03-29T10:21:36.323Z",
                "updatedAt": "2026-04-20T15:06:59.949Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/GroupsRecord" },
                "example": {
                  "id": 1,
                  "name": "Local Designers",
                  "slug": "local-designers",
                  "description": "Strenuus conor creo bene cattus desidero taedium aranea.",
                  "memberCount": 14,
                  "isPublic": false,
                  "ownerUserId": 153,
                  "createdAt": "2026-03-29T10:21:36.323Z",
                  "updatedAt": "2026-04-20T15:06:59.949Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a groups record (fake — not persisted)",
        "operationId": "patch-groups",
        "tags": ["groups"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/GroupsRecord" },
                "example": {
                  "id": 1,
                  "name": "Local Designers",
                  "slug": "local-designers",
                  "description": "Strenuus conor creo bene cattus desidero taedium aranea.",
                  "memberCount": 14,
                  "isPublic": false,
                  "ownerUserId": 153,
                  "createdAt": "2026-03-29T10:21:36.323Z",
                  "updatedAt": "2026-04-20T15:06:59.949Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a groups record (fake — not persisted)",
        "operationId": "delete-groups",
        "tags": ["groups"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/group-members": {
      "get": {
        "summary": "List group-members",
        "operationId": "list-group-members",
        "tags": ["group-members"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/GroupMembersRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "groupId": 1,
                      "userId": 153,
                      "role": "owner",
                      "joinedAt": "2025-01-06T10:31:34.951Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/group-members?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a group-members record (fake — not persisted)",
        "operationId": "create-group-members",
        "tags": ["group-members"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/GroupMembersRecord" },
              "example": {
                "id": 1,
                "groupId": 1,
                "userId": 153,
                "role": "owner",
                "joinedAt": "2025-01-06T10:31:34.951Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/GroupMembersRecord" },
                "example": {
                  "id": 1,
                  "groupId": 1,
                  "userId": 153,
                  "role": "owner",
                  "joinedAt": "2025-01-06T10:31:34.951Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/group-members/{id}": {
      "get": {
        "summary": "Get one group-members record by id",
        "operationId": "get-group-members-by-id",
        "tags": ["group-members"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/GroupMembersRecord" },
                "example": {
                  "id": 1,
                  "groupId": 1,
                  "userId": 153,
                  "role": "owner",
                  "joinedAt": "2025-01-06T10:31:34.951Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a group-members record (fake — not persisted)",
        "operationId": "replace-group-members",
        "tags": ["group-members"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/GroupMembersRecord" },
              "example": {
                "id": 1,
                "groupId": 1,
                "userId": 153,
                "role": "owner",
                "joinedAt": "2025-01-06T10:31:34.951Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/GroupMembersRecord" },
                "example": {
                  "id": 1,
                  "groupId": 1,
                  "userId": 153,
                  "role": "owner",
                  "joinedAt": "2025-01-06T10:31:34.951Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a group-members record (fake — not persisted)",
        "operationId": "patch-group-members",
        "tags": ["group-members"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/GroupMembersRecord" },
                "example": {
                  "id": 1,
                  "groupId": 1,
                  "userId": 153,
                  "role": "owner",
                  "joinedAt": "2025-01-06T10:31:34.951Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a group-members record (fake — not persisted)",
        "operationId": "delete-group-members",
        "tags": ["group-members"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/stories": {
      "get": {
        "summary": "List stories",
        "operationId": "list-stories",
        "tags": ["stories"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/StoriesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 116,
                      "mediaUrl": "https://picsum.photos/seed/story-1/600/1200",
                      "mediaType": "image",
                      "caption": "",
                      "viewCount": 822,
                      "expiresAt": "2025-12-18T02:16:24.486Z",
                      "createdAt": "2025-12-17T02:16:24.486Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/stories?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a stories record (fake — not persisted)",
        "operationId": "create-stories",
        "tags": ["stories"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/StoriesRecord" },
              "example": {
                "id": 1,
                "userId": 116,
                "mediaUrl": "https://picsum.photos/seed/story-1/600/1200",
                "mediaType": "image",
                "caption": "",
                "viewCount": 822,
                "expiresAt": "2025-12-18T02:16:24.486Z",
                "createdAt": "2025-12-17T02:16:24.486Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StoriesRecord" },
                "example": {
                  "id": 1,
                  "userId": 116,
                  "mediaUrl": "https://picsum.photos/seed/story-1/600/1200",
                  "mediaType": "image",
                  "caption": "",
                  "viewCount": 822,
                  "expiresAt": "2025-12-18T02:16:24.486Z",
                  "createdAt": "2025-12-17T02:16:24.486Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/stories/{id}": {
      "get": {
        "summary": "Get one stories record by id",
        "operationId": "get-stories-by-id",
        "tags": ["stories"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StoriesRecord" },
                "example": {
                  "id": 1,
                  "userId": 116,
                  "mediaUrl": "https://picsum.photos/seed/story-1/600/1200",
                  "mediaType": "image",
                  "caption": "",
                  "viewCount": 822,
                  "expiresAt": "2025-12-18T02:16:24.486Z",
                  "createdAt": "2025-12-17T02:16:24.486Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a stories record (fake — not persisted)",
        "operationId": "replace-stories",
        "tags": ["stories"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/StoriesRecord" },
              "example": {
                "id": 1,
                "userId": 116,
                "mediaUrl": "https://picsum.photos/seed/story-1/600/1200",
                "mediaType": "image",
                "caption": "",
                "viewCount": 822,
                "expiresAt": "2025-12-18T02:16:24.486Z",
                "createdAt": "2025-12-17T02:16:24.486Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StoriesRecord" },
                "example": {
                  "id": 1,
                  "userId": 116,
                  "mediaUrl": "https://picsum.photos/seed/story-1/600/1200",
                  "mediaType": "image",
                  "caption": "",
                  "viewCount": 822,
                  "expiresAt": "2025-12-18T02:16:24.486Z",
                  "createdAt": "2025-12-17T02:16:24.486Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a stories record (fake — not persisted)",
        "operationId": "patch-stories",
        "tags": ["stories"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StoriesRecord" },
                "example": {
                  "id": 1,
                  "userId": 116,
                  "mediaUrl": "https://picsum.photos/seed/story-1/600/1200",
                  "mediaType": "image",
                  "caption": "",
                  "viewCount": 822,
                  "expiresAt": "2025-12-18T02:16:24.486Z",
                  "createdAt": "2025-12-17T02:16:24.486Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a stories record (fake — not persisted)",
        "operationId": "delete-stories",
        "tags": ["stories"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/events": {
      "get": {
        "summary": "List events",
        "operationId": "list-events",
        "tags": ["events"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/EventsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "title": "Summit Networking Event 2026",
                      "slug": "summit-networking-event-2026-1",
                      "description": "Dolorem adduco vicinus arcesso caritas stella cito. Cupiditas vinco creta esse aut infit decipio. Tantillus illo cras dolorem.",
                      "location": "Miami, FL",
                      "isOnline": false,
                      "startAt": "2026-12-22T10:28:34.803Z",
                      "endAt": "2026-12-23T15:13:57.240Z",
                      "organizerUserId": 12,
                      "attendeeCount": 693,
                      "createdAt": "2026-04-26T13:46:42.818Z",
                      "updatedAt": "2026-05-20T03:42:20.660Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/events?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a events record (fake — not persisted)",
        "operationId": "create-events",
        "tags": ["events"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/EventsRecord" },
              "example": {
                "id": 1,
                "title": "Summit Networking Event 2026",
                "slug": "summit-networking-event-2026-1",
                "description": "Dolorem adduco vicinus arcesso caritas stella cito. Cupiditas vinco creta esse aut infit decipio. Tantillus illo cras dolorem.",
                "location": "Miami, FL",
                "isOnline": false,
                "startAt": "2026-12-22T10:28:34.803Z",
                "endAt": "2026-12-23T15:13:57.240Z",
                "organizerUserId": 12,
                "attendeeCount": 693,
                "createdAt": "2026-04-26T13:46:42.818Z",
                "updatedAt": "2026-05-20T03:42:20.660Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/EventsRecord" },
                "example": {
                  "id": 1,
                  "title": "Summit Networking Event 2026",
                  "slug": "summit-networking-event-2026-1",
                  "description": "Dolorem adduco vicinus arcesso caritas stella cito. Cupiditas vinco creta esse aut infit decipio. Tantillus illo cras dolorem.",
                  "location": "Miami, FL",
                  "isOnline": false,
                  "startAt": "2026-12-22T10:28:34.803Z",
                  "endAt": "2026-12-23T15:13:57.240Z",
                  "organizerUserId": 12,
                  "attendeeCount": 693,
                  "createdAt": "2026-04-26T13:46:42.818Z",
                  "updatedAt": "2026-05-20T03:42:20.660Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/events/{id}": {
      "get": {
        "summary": "Get one events record by id",
        "operationId": "get-events-by-id",
        "tags": ["events"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/EventsRecord" },
                "example": {
                  "id": 1,
                  "title": "Summit Networking Event 2026",
                  "slug": "summit-networking-event-2026-1",
                  "description": "Dolorem adduco vicinus arcesso caritas stella cito. Cupiditas vinco creta esse aut infit decipio. Tantillus illo cras dolorem.",
                  "location": "Miami, FL",
                  "isOnline": false,
                  "startAt": "2026-12-22T10:28:34.803Z",
                  "endAt": "2026-12-23T15:13:57.240Z",
                  "organizerUserId": 12,
                  "attendeeCount": 693,
                  "createdAt": "2026-04-26T13:46:42.818Z",
                  "updatedAt": "2026-05-20T03:42:20.660Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a events record (fake — not persisted)",
        "operationId": "replace-events",
        "tags": ["events"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/EventsRecord" },
              "example": {
                "id": 1,
                "title": "Summit Networking Event 2026",
                "slug": "summit-networking-event-2026-1",
                "description": "Dolorem adduco vicinus arcesso caritas stella cito. Cupiditas vinco creta esse aut infit decipio. Tantillus illo cras dolorem.",
                "location": "Miami, FL",
                "isOnline": false,
                "startAt": "2026-12-22T10:28:34.803Z",
                "endAt": "2026-12-23T15:13:57.240Z",
                "organizerUserId": 12,
                "attendeeCount": 693,
                "createdAt": "2026-04-26T13:46:42.818Z",
                "updatedAt": "2026-05-20T03:42:20.660Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/EventsRecord" },
                "example": {
                  "id": 1,
                  "title": "Summit Networking Event 2026",
                  "slug": "summit-networking-event-2026-1",
                  "description": "Dolorem adduco vicinus arcesso caritas stella cito. Cupiditas vinco creta esse aut infit decipio. Tantillus illo cras dolorem.",
                  "location": "Miami, FL",
                  "isOnline": false,
                  "startAt": "2026-12-22T10:28:34.803Z",
                  "endAt": "2026-12-23T15:13:57.240Z",
                  "organizerUserId": 12,
                  "attendeeCount": 693,
                  "createdAt": "2026-04-26T13:46:42.818Z",
                  "updatedAt": "2026-05-20T03:42:20.660Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a events record (fake — not persisted)",
        "operationId": "patch-events",
        "tags": ["events"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/EventsRecord" },
                "example": {
                  "id": 1,
                  "title": "Summit Networking Event 2026",
                  "slug": "summit-networking-event-2026-1",
                  "description": "Dolorem adduco vicinus arcesso caritas stella cito. Cupiditas vinco creta esse aut infit decipio. Tantillus illo cras dolorem.",
                  "location": "Miami, FL",
                  "isOnline": false,
                  "startAt": "2026-12-22T10:28:34.803Z",
                  "endAt": "2026-12-23T15:13:57.240Z",
                  "organizerUserId": 12,
                  "attendeeCount": 693,
                  "createdAt": "2026-04-26T13:46:42.818Z",
                  "updatedAt": "2026-05-20T03:42:20.660Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a events record (fake — not persisted)",
        "operationId": "delete-events",
        "tags": ["events"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/event-rsvps": {
      "get": {
        "summary": "List event-rsvps",
        "operationId": "list-event-rsvps",
        "tags": ["event-rsvps"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/EventRsvpsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "eventId": 1,
                      "userId": 244,
                      "status": "maybe",
                      "respondedAt": "2026-03-28T15:00:52.726Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/event-rsvps?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a event-rsvps record (fake — not persisted)",
        "operationId": "create-event-rsvps",
        "tags": ["event-rsvps"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/EventRsvpsRecord" },
              "example": {
                "id": 1,
                "eventId": 1,
                "userId": 244,
                "status": "maybe",
                "respondedAt": "2026-03-28T15:00:52.726Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/EventRsvpsRecord" },
                "example": {
                  "id": 1,
                  "eventId": 1,
                  "userId": 244,
                  "status": "maybe",
                  "respondedAt": "2026-03-28T15:00:52.726Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/event-rsvps/{id}": {
      "get": {
        "summary": "Get one event-rsvps record by id",
        "operationId": "get-event-rsvps-by-id",
        "tags": ["event-rsvps"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/EventRsvpsRecord" },
                "example": {
                  "id": 1,
                  "eventId": 1,
                  "userId": 244,
                  "status": "maybe",
                  "respondedAt": "2026-03-28T15:00:52.726Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a event-rsvps record (fake — not persisted)",
        "operationId": "replace-event-rsvps",
        "tags": ["event-rsvps"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/EventRsvpsRecord" },
              "example": {
                "id": 1,
                "eventId": 1,
                "userId": 244,
                "status": "maybe",
                "respondedAt": "2026-03-28T15:00:52.726Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/EventRsvpsRecord" },
                "example": {
                  "id": 1,
                  "eventId": 1,
                  "userId": 244,
                  "status": "maybe",
                  "respondedAt": "2026-03-28T15:00:52.726Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a event-rsvps record (fake — not persisted)",
        "operationId": "patch-event-rsvps",
        "tags": ["event-rsvps"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/EventRsvpsRecord" },
                "example": {
                  "id": 1,
                  "eventId": 1,
                  "userId": 244,
                  "status": "maybe",
                  "respondedAt": "2026-03-28T15:00:52.726Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a event-rsvps record (fake — not persisted)",
        "operationId": "delete-event-rsvps",
        "tags": ["event-rsvps"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/brands": {
      "get": {
        "summary": "List brands",
        "operationId": "list-brands",
        "tags": ["brands"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/BrandsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Beahan and Sons",
                      "slug": "beahan-and-sons-1",
                      "description": "Diverse systemic application",
                      "logoUrl": "https://picsum.photos/seed/brand-1/200/200",
                      "website": "https://www.beahan-and-sons.com",
                      "foundedYear": 2023,
                      "headquartersCountryAlpha2": "PE",
                      "createdAt": "2023-02-04T09:57:54.220Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/brands?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a brands record (fake — not persisted)",
        "operationId": "create-brands",
        "tags": ["brands"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/BrandsRecord" },
              "example": {
                "id": 1,
                "name": "Beahan and Sons",
                "slug": "beahan-and-sons-1",
                "description": "Diverse systemic application",
                "logoUrl": "https://picsum.photos/seed/brand-1/200/200",
                "website": "https://www.beahan-and-sons.com",
                "foundedYear": 2023,
                "headquartersCountryAlpha2": "PE",
                "createdAt": "2023-02-04T09:57:54.220Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BrandsRecord" },
                "example": {
                  "id": 1,
                  "name": "Beahan and Sons",
                  "slug": "beahan-and-sons-1",
                  "description": "Diverse systemic application",
                  "logoUrl": "https://picsum.photos/seed/brand-1/200/200",
                  "website": "https://www.beahan-and-sons.com",
                  "foundedYear": 2023,
                  "headquartersCountryAlpha2": "PE",
                  "createdAt": "2023-02-04T09:57:54.220Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/brands/{id}": {
      "get": {
        "summary": "Get one brands record by id",
        "operationId": "get-brands-by-id",
        "tags": ["brands"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BrandsRecord" },
                "example": {
                  "id": 1,
                  "name": "Beahan and Sons",
                  "slug": "beahan-and-sons-1",
                  "description": "Diverse systemic application",
                  "logoUrl": "https://picsum.photos/seed/brand-1/200/200",
                  "website": "https://www.beahan-and-sons.com",
                  "foundedYear": 2023,
                  "headquartersCountryAlpha2": "PE",
                  "createdAt": "2023-02-04T09:57:54.220Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a brands record (fake — not persisted)",
        "operationId": "replace-brands",
        "tags": ["brands"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/BrandsRecord" },
              "example": {
                "id": 1,
                "name": "Beahan and Sons",
                "slug": "beahan-and-sons-1",
                "description": "Diverse systemic application",
                "logoUrl": "https://picsum.photos/seed/brand-1/200/200",
                "website": "https://www.beahan-and-sons.com",
                "foundedYear": 2023,
                "headquartersCountryAlpha2": "PE",
                "createdAt": "2023-02-04T09:57:54.220Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BrandsRecord" },
                "example": {
                  "id": 1,
                  "name": "Beahan and Sons",
                  "slug": "beahan-and-sons-1",
                  "description": "Diverse systemic application",
                  "logoUrl": "https://picsum.photos/seed/brand-1/200/200",
                  "website": "https://www.beahan-and-sons.com",
                  "foundedYear": 2023,
                  "headquartersCountryAlpha2": "PE",
                  "createdAt": "2023-02-04T09:57:54.220Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a brands record (fake — not persisted)",
        "operationId": "patch-brands",
        "tags": ["brands"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BrandsRecord" },
                "example": {
                  "id": 1,
                  "name": "Beahan and Sons",
                  "slug": "beahan-and-sons-1",
                  "description": "Diverse systemic application",
                  "logoUrl": "https://picsum.photos/seed/brand-1/200/200",
                  "website": "https://www.beahan-and-sons.com",
                  "foundedYear": 2023,
                  "headquartersCountryAlpha2": "PE",
                  "createdAt": "2023-02-04T09:57:54.220Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a brands record (fake — not persisted)",
        "operationId": "delete-brands",
        "tags": ["brands"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/stores": {
      "get": {
        "summary": "List stores",
        "operationId": "list-stores",
        "tags": ["stores"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/StoresRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Gleason, Lehner and Bradtke",
                      "slug": "gleason-lehner-and-bradtke-1",
                      "description": "Compatible optimizing moderator",
                      "address": "1730 The Spinney",
                      "city": "Edgardofurt",
                      "region": "Georgia",
                      "countryAlpha2": "ID",
                      "postalCode": "82959-1292",
                      "phone": "632-725-1297",
                      "website": "https://www.gleason-lehner-and-bradtke.com",
                      "hours": "Mon-Sat 8am-8pm, Sun 10am-6pm",
                      "createdAt": "2022-08-06T06:51:30.132Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/stores?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a stores record (fake — not persisted)",
        "operationId": "create-stores",
        "tags": ["stores"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/StoresRecord" },
              "example": {
                "id": 1,
                "name": "Gleason, Lehner and Bradtke",
                "slug": "gleason-lehner-and-bradtke-1",
                "description": "Compatible optimizing moderator",
                "address": "1730 The Spinney",
                "city": "Edgardofurt",
                "region": "Georgia",
                "countryAlpha2": "ID",
                "postalCode": "82959-1292",
                "phone": "632-725-1297",
                "website": "https://www.gleason-lehner-and-bradtke.com",
                "hours": "Mon-Sat 8am-8pm, Sun 10am-6pm",
                "createdAt": "2022-08-06T06:51:30.132Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StoresRecord" },
                "example": {
                  "id": 1,
                  "name": "Gleason, Lehner and Bradtke",
                  "slug": "gleason-lehner-and-bradtke-1",
                  "description": "Compatible optimizing moderator",
                  "address": "1730 The Spinney",
                  "city": "Edgardofurt",
                  "region": "Georgia",
                  "countryAlpha2": "ID",
                  "postalCode": "82959-1292",
                  "phone": "632-725-1297",
                  "website": "https://www.gleason-lehner-and-bradtke.com",
                  "hours": "Mon-Sat 8am-8pm, Sun 10am-6pm",
                  "createdAt": "2022-08-06T06:51:30.132Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/stores/{id}": {
      "get": {
        "summary": "Get one stores record by id",
        "operationId": "get-stores-by-id",
        "tags": ["stores"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StoresRecord" },
                "example": {
                  "id": 1,
                  "name": "Gleason, Lehner and Bradtke",
                  "slug": "gleason-lehner-and-bradtke-1",
                  "description": "Compatible optimizing moderator",
                  "address": "1730 The Spinney",
                  "city": "Edgardofurt",
                  "region": "Georgia",
                  "countryAlpha2": "ID",
                  "postalCode": "82959-1292",
                  "phone": "632-725-1297",
                  "website": "https://www.gleason-lehner-and-bradtke.com",
                  "hours": "Mon-Sat 8am-8pm, Sun 10am-6pm",
                  "createdAt": "2022-08-06T06:51:30.132Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a stores record (fake — not persisted)",
        "operationId": "replace-stores",
        "tags": ["stores"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/StoresRecord" },
              "example": {
                "id": 1,
                "name": "Gleason, Lehner and Bradtke",
                "slug": "gleason-lehner-and-bradtke-1",
                "description": "Compatible optimizing moderator",
                "address": "1730 The Spinney",
                "city": "Edgardofurt",
                "region": "Georgia",
                "countryAlpha2": "ID",
                "postalCode": "82959-1292",
                "phone": "632-725-1297",
                "website": "https://www.gleason-lehner-and-bradtke.com",
                "hours": "Mon-Sat 8am-8pm, Sun 10am-6pm",
                "createdAt": "2022-08-06T06:51:30.132Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StoresRecord" },
                "example": {
                  "id": 1,
                  "name": "Gleason, Lehner and Bradtke",
                  "slug": "gleason-lehner-and-bradtke-1",
                  "description": "Compatible optimizing moderator",
                  "address": "1730 The Spinney",
                  "city": "Edgardofurt",
                  "region": "Georgia",
                  "countryAlpha2": "ID",
                  "postalCode": "82959-1292",
                  "phone": "632-725-1297",
                  "website": "https://www.gleason-lehner-and-bradtke.com",
                  "hours": "Mon-Sat 8am-8pm, Sun 10am-6pm",
                  "createdAt": "2022-08-06T06:51:30.132Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a stores record (fake — not persisted)",
        "operationId": "patch-stores",
        "tags": ["stores"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StoresRecord" },
                "example": {
                  "id": 1,
                  "name": "Gleason, Lehner and Bradtke",
                  "slug": "gleason-lehner-and-bradtke-1",
                  "description": "Compatible optimizing moderator",
                  "address": "1730 The Spinney",
                  "city": "Edgardofurt",
                  "region": "Georgia",
                  "countryAlpha2": "ID",
                  "postalCode": "82959-1292",
                  "phone": "632-725-1297",
                  "website": "https://www.gleason-lehner-and-bradtke.com",
                  "hours": "Mon-Sat 8am-8pm, Sun 10am-6pm",
                  "createdAt": "2022-08-06T06:51:30.132Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a stores record (fake — not persisted)",
        "operationId": "delete-stores",
        "tags": ["stores"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/addresses": {
      "get": {
        "summary": "List addresses",
        "operationId": "list-addresses",
        "tags": ["addresses"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/AddressesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "label": "home",
                      "recipient": "Craig Sauer",
                      "street1": "8897 Smith Estate",
                      "street2": null,
                      "city": "Elisabethberg",
                      "region": "California",
                      "postalCode": "07860-1214",
                      "countryAlpha2": "NL",
                      "isDefault": true,
                      "createdAt": "2026-03-01T07:54:12.590Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/addresses?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a addresses record (fake — not persisted)",
        "operationId": "create-addresses",
        "tags": ["addresses"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/AddressesRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "label": "home",
                "recipient": "Craig Sauer",
                "street1": "8897 Smith Estate",
                "street2": null,
                "city": "Elisabethberg",
                "region": "California",
                "postalCode": "07860-1214",
                "countryAlpha2": "NL",
                "isDefault": true,
                "createdAt": "2026-03-01T07:54:12.590Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AddressesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "label": "home",
                  "recipient": "Craig Sauer",
                  "street1": "8897 Smith Estate",
                  "street2": null,
                  "city": "Elisabethberg",
                  "region": "California",
                  "postalCode": "07860-1214",
                  "countryAlpha2": "NL",
                  "isDefault": true,
                  "createdAt": "2026-03-01T07:54:12.590Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/addresses/{id}": {
      "get": {
        "summary": "Get one addresses record by id",
        "operationId": "get-addresses-by-id",
        "tags": ["addresses"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AddressesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "label": "home",
                  "recipient": "Craig Sauer",
                  "street1": "8897 Smith Estate",
                  "street2": null,
                  "city": "Elisabethberg",
                  "region": "California",
                  "postalCode": "07860-1214",
                  "countryAlpha2": "NL",
                  "isDefault": true,
                  "createdAt": "2026-03-01T07:54:12.590Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a addresses record (fake — not persisted)",
        "operationId": "replace-addresses",
        "tags": ["addresses"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/AddressesRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "label": "home",
                "recipient": "Craig Sauer",
                "street1": "8897 Smith Estate",
                "street2": null,
                "city": "Elisabethberg",
                "region": "California",
                "postalCode": "07860-1214",
                "countryAlpha2": "NL",
                "isDefault": true,
                "createdAt": "2026-03-01T07:54:12.590Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AddressesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "label": "home",
                  "recipient": "Craig Sauer",
                  "street1": "8897 Smith Estate",
                  "street2": null,
                  "city": "Elisabethberg",
                  "region": "California",
                  "postalCode": "07860-1214",
                  "countryAlpha2": "NL",
                  "isDefault": true,
                  "createdAt": "2026-03-01T07:54:12.590Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a addresses record (fake — not persisted)",
        "operationId": "patch-addresses",
        "tags": ["addresses"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AddressesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "label": "home",
                  "recipient": "Craig Sauer",
                  "street1": "8897 Smith Estate",
                  "street2": null,
                  "city": "Elisabethberg",
                  "region": "California",
                  "postalCode": "07860-1214",
                  "countryAlpha2": "NL",
                  "isDefault": true,
                  "createdAt": "2026-03-01T07:54:12.590Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a addresses record (fake — not persisted)",
        "operationId": "delete-addresses",
        "tags": ["addresses"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/coupons": {
      "get": {
        "summary": "List coupons",
        "operationId": "list-coupons",
        "tags": ["coupons"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CouponsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "code": "0V9WU1MP5",
                      "discountType": "percent",
                      "value": 37,
                      "minOrderAmount": null,
                      "maxRedemptions": 705,
                      "redemptionCount": 459,
                      "validFrom": "2025-06-06T05:46:20.110Z",
                      "validUntil": "2026-12-19T09:53:50.275Z",
                      "isActive": true,
                      "createdAt": "2025-06-04T22:00:40.253Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/coupons?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a coupons record (fake — not persisted)",
        "operationId": "create-coupons",
        "tags": ["coupons"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CouponsRecord" },
              "example": {
                "id": 1,
                "code": "0V9WU1MP5",
                "discountType": "percent",
                "value": 37,
                "minOrderAmount": null,
                "maxRedemptions": 705,
                "redemptionCount": 459,
                "validFrom": "2025-06-06T05:46:20.110Z",
                "validUntil": "2026-12-19T09:53:50.275Z",
                "isActive": true,
                "createdAt": "2025-06-04T22:00:40.253Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CouponsRecord" },
                "example": {
                  "id": 1,
                  "code": "0V9WU1MP5",
                  "discountType": "percent",
                  "value": 37,
                  "minOrderAmount": null,
                  "maxRedemptions": 705,
                  "redemptionCount": 459,
                  "validFrom": "2025-06-06T05:46:20.110Z",
                  "validUntil": "2026-12-19T09:53:50.275Z",
                  "isActive": true,
                  "createdAt": "2025-06-04T22:00:40.253Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/coupons/{id}": {
      "get": {
        "summary": "Get one coupons record by id",
        "operationId": "get-coupons-by-id",
        "tags": ["coupons"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CouponsRecord" },
                "example": {
                  "id": 1,
                  "code": "0V9WU1MP5",
                  "discountType": "percent",
                  "value": 37,
                  "minOrderAmount": null,
                  "maxRedemptions": 705,
                  "redemptionCount": 459,
                  "validFrom": "2025-06-06T05:46:20.110Z",
                  "validUntil": "2026-12-19T09:53:50.275Z",
                  "isActive": true,
                  "createdAt": "2025-06-04T22:00:40.253Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a coupons record (fake — not persisted)",
        "operationId": "replace-coupons",
        "tags": ["coupons"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CouponsRecord" },
              "example": {
                "id": 1,
                "code": "0V9WU1MP5",
                "discountType": "percent",
                "value": 37,
                "minOrderAmount": null,
                "maxRedemptions": 705,
                "redemptionCount": 459,
                "validFrom": "2025-06-06T05:46:20.110Z",
                "validUntil": "2026-12-19T09:53:50.275Z",
                "isActive": true,
                "createdAt": "2025-06-04T22:00:40.253Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CouponsRecord" },
                "example": {
                  "id": 1,
                  "code": "0V9WU1MP5",
                  "discountType": "percent",
                  "value": 37,
                  "minOrderAmount": null,
                  "maxRedemptions": 705,
                  "redemptionCount": 459,
                  "validFrom": "2025-06-06T05:46:20.110Z",
                  "validUntil": "2026-12-19T09:53:50.275Z",
                  "isActive": true,
                  "createdAt": "2025-06-04T22:00:40.253Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a coupons record (fake — not persisted)",
        "operationId": "patch-coupons",
        "tags": ["coupons"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CouponsRecord" },
                "example": {
                  "id": 1,
                  "code": "0V9WU1MP5",
                  "discountType": "percent",
                  "value": 37,
                  "minOrderAmount": null,
                  "maxRedemptions": 705,
                  "redemptionCount": 459,
                  "validFrom": "2025-06-06T05:46:20.110Z",
                  "validUntil": "2026-12-19T09:53:50.275Z",
                  "isActive": true,
                  "createdAt": "2025-06-04T22:00:40.253Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a coupons record (fake — not persisted)",
        "operationId": "delete-coupons",
        "tags": ["coupons"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/product-reviews": {
      "get": {
        "summary": "List product-reviews",
        "operationId": "list-product-reviews",
        "tags": ["product-reviews"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ProductReviewsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "productId": 1,
                      "userId": 79,
                      "rating": 5,
                      "title": "Casus vapulus despecto texo vomer a audacia decretum.",
                      "body": "Volutabrum debeo vociferor vorago credo cribro alter defungo.",
                      "isVerified": true,
                      "helpfulCount": 164,
                      "createdAt": "2025-12-27T04:04:42.578Z",
                      "updatedAt": "2026-05-05T05:45:41.060Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/product-reviews?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a product-reviews record (fake — not persisted)",
        "operationId": "create-product-reviews",
        "tags": ["product-reviews"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ProductReviewsRecord" },
              "example": {
                "id": 1,
                "productId": 1,
                "userId": 79,
                "rating": 5,
                "title": "Casus vapulus despecto texo vomer a audacia decretum.",
                "body": "Volutabrum debeo vociferor vorago credo cribro alter defungo.",
                "isVerified": true,
                "helpfulCount": 164,
                "createdAt": "2025-12-27T04:04:42.578Z",
                "updatedAt": "2026-05-05T05:45:41.060Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProductReviewsRecord" },
                "example": {
                  "id": 1,
                  "productId": 1,
                  "userId": 79,
                  "rating": 5,
                  "title": "Casus vapulus despecto texo vomer a audacia decretum.",
                  "body": "Volutabrum debeo vociferor vorago credo cribro alter defungo.",
                  "isVerified": true,
                  "helpfulCount": 164,
                  "createdAt": "2025-12-27T04:04:42.578Z",
                  "updatedAt": "2026-05-05T05:45:41.060Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/product-reviews/{id}": {
      "get": {
        "summary": "Get one product-reviews record by id",
        "operationId": "get-product-reviews-by-id",
        "tags": ["product-reviews"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProductReviewsRecord" },
                "example": {
                  "id": 1,
                  "productId": 1,
                  "userId": 79,
                  "rating": 5,
                  "title": "Casus vapulus despecto texo vomer a audacia decretum.",
                  "body": "Volutabrum debeo vociferor vorago credo cribro alter defungo.",
                  "isVerified": true,
                  "helpfulCount": 164,
                  "createdAt": "2025-12-27T04:04:42.578Z",
                  "updatedAt": "2026-05-05T05:45:41.060Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a product-reviews record (fake — not persisted)",
        "operationId": "replace-product-reviews",
        "tags": ["product-reviews"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ProductReviewsRecord" },
              "example": {
                "id": 1,
                "productId": 1,
                "userId": 79,
                "rating": 5,
                "title": "Casus vapulus despecto texo vomer a audacia decretum.",
                "body": "Volutabrum debeo vociferor vorago credo cribro alter defungo.",
                "isVerified": true,
                "helpfulCount": 164,
                "createdAt": "2025-12-27T04:04:42.578Z",
                "updatedAt": "2026-05-05T05:45:41.060Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProductReviewsRecord" },
                "example": {
                  "id": 1,
                  "productId": 1,
                  "userId": 79,
                  "rating": 5,
                  "title": "Casus vapulus despecto texo vomer a audacia decretum.",
                  "body": "Volutabrum debeo vociferor vorago credo cribro alter defungo.",
                  "isVerified": true,
                  "helpfulCount": 164,
                  "createdAt": "2025-12-27T04:04:42.578Z",
                  "updatedAt": "2026-05-05T05:45:41.060Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a product-reviews record (fake — not persisted)",
        "operationId": "patch-product-reviews",
        "tags": ["product-reviews"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProductReviewsRecord" },
                "example": {
                  "id": 1,
                  "productId": 1,
                  "userId": 79,
                  "rating": 5,
                  "title": "Casus vapulus despecto texo vomer a audacia decretum.",
                  "body": "Volutabrum debeo vociferor vorago credo cribro alter defungo.",
                  "isVerified": true,
                  "helpfulCount": 164,
                  "createdAt": "2025-12-27T04:04:42.578Z",
                  "updatedAt": "2026-05-05T05:45:41.060Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a product-reviews record (fake — not persisted)",
        "operationId": "delete-product-reviews",
        "tags": ["product-reviews"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/wishlists": {
      "get": {
        "summary": "List wishlists",
        "operationId": "list-wishlists",
        "tags": ["wishlists"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/WishlistsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "name": "Summer Picks",
                      "isPublic": true,
                      "productIds": [47, 86, 28, 137, 59, 95, 111, 135, 158, 174],
                      "createdAt": "2026-04-04T17:14:46.340Z",
                      "updatedAt": "2026-04-13T03:20:44.226Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/wishlists?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a wishlists record (fake — not persisted)",
        "operationId": "create-wishlists",
        "tags": ["wishlists"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/WishlistsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "name": "Summer Picks",
                "isPublic": true,
                "productIds": [47, 86, 28, 137, 59, 95, 111, 135, 158, 174],
                "createdAt": "2026-04-04T17:14:46.340Z",
                "updatedAt": "2026-04-13T03:20:44.226Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/WishlistsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Summer Picks",
                  "isPublic": true,
                  "productIds": [47, 86, 28, 137, 59, 95, 111, 135, 158, 174],
                  "createdAt": "2026-04-04T17:14:46.340Z",
                  "updatedAt": "2026-04-13T03:20:44.226Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/wishlists/{id}": {
      "get": {
        "summary": "Get one wishlists record by id",
        "operationId": "get-wishlists-by-id",
        "tags": ["wishlists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/WishlistsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Summer Picks",
                  "isPublic": true,
                  "productIds": [47, 86, 28, 137, 59, 95, 111, 135, 158, 174],
                  "createdAt": "2026-04-04T17:14:46.340Z",
                  "updatedAt": "2026-04-13T03:20:44.226Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a wishlists record (fake — not persisted)",
        "operationId": "replace-wishlists",
        "tags": ["wishlists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/WishlistsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "name": "Summer Picks",
                "isPublic": true,
                "productIds": [47, 86, 28, 137, 59, 95, 111, 135, 158, 174],
                "createdAt": "2026-04-04T17:14:46.340Z",
                "updatedAt": "2026-04-13T03:20:44.226Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/WishlistsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Summer Picks",
                  "isPublic": true,
                  "productIds": [47, 86, 28, 137, 59, 95, 111, 135, 158, 174],
                  "createdAt": "2026-04-04T17:14:46.340Z",
                  "updatedAt": "2026-04-13T03:20:44.226Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a wishlists record (fake — not persisted)",
        "operationId": "patch-wishlists",
        "tags": ["wishlists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/WishlistsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Summer Picks",
                  "isPublic": true,
                  "productIds": [47, 86, 28, 137, 59, 95, 111, 135, 158, 174],
                  "createdAt": "2026-04-04T17:14:46.340Z",
                  "updatedAt": "2026-04-13T03:20:44.226Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a wishlists record (fake — not persisted)",
        "operationId": "delete-wishlists",
        "tags": ["wishlists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/carts": {
      "get": {
        "summary": "List carts",
        "operationId": "list-carts",
        "tags": ["carts"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CartsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 2,
                      "currency": "USD",
                      "subtotal": 997.23,
                      "itemCount": 9,
                      "updatedAt": "2025-07-02T05:16:37.152Z",
                      "createdAt": "2024-09-13T04:12:14.210Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/carts?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a carts record (fake — not persisted)",
        "operationId": "create-carts",
        "tags": ["carts"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CartsRecord" },
              "example": {
                "id": 1,
                "userId": 2,
                "currency": "USD",
                "subtotal": 997.23,
                "itemCount": 9,
                "updatedAt": "2025-07-02T05:16:37.152Z",
                "createdAt": "2024-09-13T04:12:14.210Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CartsRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "currency": "USD",
                  "subtotal": 997.23,
                  "itemCount": 9,
                  "updatedAt": "2025-07-02T05:16:37.152Z",
                  "createdAt": "2024-09-13T04:12:14.210Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/carts/{id}": {
      "get": {
        "summary": "Get one carts record by id",
        "operationId": "get-carts-by-id",
        "tags": ["carts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CartsRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "currency": "USD",
                  "subtotal": 997.23,
                  "itemCount": 9,
                  "updatedAt": "2025-07-02T05:16:37.152Z",
                  "createdAt": "2024-09-13T04:12:14.210Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a carts record (fake — not persisted)",
        "operationId": "replace-carts",
        "tags": ["carts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CartsRecord" },
              "example": {
                "id": 1,
                "userId": 2,
                "currency": "USD",
                "subtotal": 997.23,
                "itemCount": 9,
                "updatedAt": "2025-07-02T05:16:37.152Z",
                "createdAt": "2024-09-13T04:12:14.210Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CartsRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "currency": "USD",
                  "subtotal": 997.23,
                  "itemCount": 9,
                  "updatedAt": "2025-07-02T05:16:37.152Z",
                  "createdAt": "2024-09-13T04:12:14.210Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a carts record (fake — not persisted)",
        "operationId": "patch-carts",
        "tags": ["carts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CartsRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "currency": "USD",
                  "subtotal": 997.23,
                  "itemCount": 9,
                  "updatedAt": "2025-07-02T05:16:37.152Z",
                  "createdAt": "2024-09-13T04:12:14.210Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a carts record (fake — not persisted)",
        "operationId": "delete-carts",
        "tags": ["carts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/cart-items": {
      "get": {
        "summary": "List cart-items",
        "operationId": "list-cart-items",
        "tags": ["cart-items"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CartItemsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "cartId": 1,
                      "productId": 177,
                      "quantity": 2,
                      "unitPrice": 47.15,
                      "addedAt": "2026-03-07T06:07:41.991Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/cart-items?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a cart-items record (fake — not persisted)",
        "operationId": "create-cart-items",
        "tags": ["cart-items"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CartItemsRecord" },
              "example": {
                "id": 1,
                "cartId": 1,
                "productId": 177,
                "quantity": 2,
                "unitPrice": 47.15,
                "addedAt": "2026-03-07T06:07:41.991Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CartItemsRecord" },
                "example": {
                  "id": 1,
                  "cartId": 1,
                  "productId": 177,
                  "quantity": 2,
                  "unitPrice": 47.15,
                  "addedAt": "2026-03-07T06:07:41.991Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/cart-items/{id}": {
      "get": {
        "summary": "Get one cart-items record by id",
        "operationId": "get-cart-items-by-id",
        "tags": ["cart-items"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CartItemsRecord" },
                "example": {
                  "id": 1,
                  "cartId": 1,
                  "productId": 177,
                  "quantity": 2,
                  "unitPrice": 47.15,
                  "addedAt": "2026-03-07T06:07:41.991Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a cart-items record (fake — not persisted)",
        "operationId": "replace-cart-items",
        "tags": ["cart-items"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CartItemsRecord" },
              "example": {
                "id": 1,
                "cartId": 1,
                "productId": 177,
                "quantity": 2,
                "unitPrice": 47.15,
                "addedAt": "2026-03-07T06:07:41.991Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CartItemsRecord" },
                "example": {
                  "id": 1,
                  "cartId": 1,
                  "productId": 177,
                  "quantity": 2,
                  "unitPrice": 47.15,
                  "addedAt": "2026-03-07T06:07:41.991Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a cart-items record (fake — not persisted)",
        "operationId": "patch-cart-items",
        "tags": ["cart-items"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CartItemsRecord" },
                "example": {
                  "id": 1,
                  "cartId": 1,
                  "productId": 177,
                  "quantity": 2,
                  "unitPrice": 47.15,
                  "addedAt": "2026-03-07T06:07:41.991Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a cart-items record (fake — not persisted)",
        "operationId": "delete-cart-items",
        "tags": ["cart-items"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/shipments": {
      "get": {
        "summary": "List shipments",
        "operationId": "list-shipments",
        "tags": ["shipments"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ShipmentsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "orderId": 1,
                      "carrier": "dhl",
                      "trackingNumber": "QYO4NLF3DY9JUKDJ",
                      "status": "out_for_delivery",
                      "shippedAt": "2025-08-02T11:26:14.340Z",
                      "deliveredAt": null,
                      "estimatedDeliveryAt": "2025-08-09T14:45:47.617Z",
                      "createdAt": "2025-08-02T11:26:14.340Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/shipments?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a shipments record (fake — not persisted)",
        "operationId": "create-shipments",
        "tags": ["shipments"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ShipmentsRecord" },
              "example": {
                "id": 1,
                "orderId": 1,
                "carrier": "dhl",
                "trackingNumber": "QYO4NLF3DY9JUKDJ",
                "status": "out_for_delivery",
                "shippedAt": "2025-08-02T11:26:14.340Z",
                "deliveredAt": null,
                "estimatedDeliveryAt": "2025-08-09T14:45:47.617Z",
                "createdAt": "2025-08-02T11:26:14.340Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ShipmentsRecord" },
                "example": {
                  "id": 1,
                  "orderId": 1,
                  "carrier": "dhl",
                  "trackingNumber": "QYO4NLF3DY9JUKDJ",
                  "status": "out_for_delivery",
                  "shippedAt": "2025-08-02T11:26:14.340Z",
                  "deliveredAt": null,
                  "estimatedDeliveryAt": "2025-08-09T14:45:47.617Z",
                  "createdAt": "2025-08-02T11:26:14.340Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/shipments/{id}": {
      "get": {
        "summary": "Get one shipments record by id",
        "operationId": "get-shipments-by-id",
        "tags": ["shipments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ShipmentsRecord" },
                "example": {
                  "id": 1,
                  "orderId": 1,
                  "carrier": "dhl",
                  "trackingNumber": "QYO4NLF3DY9JUKDJ",
                  "status": "out_for_delivery",
                  "shippedAt": "2025-08-02T11:26:14.340Z",
                  "deliveredAt": null,
                  "estimatedDeliveryAt": "2025-08-09T14:45:47.617Z",
                  "createdAt": "2025-08-02T11:26:14.340Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a shipments record (fake — not persisted)",
        "operationId": "replace-shipments",
        "tags": ["shipments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ShipmentsRecord" },
              "example": {
                "id": 1,
                "orderId": 1,
                "carrier": "dhl",
                "trackingNumber": "QYO4NLF3DY9JUKDJ",
                "status": "out_for_delivery",
                "shippedAt": "2025-08-02T11:26:14.340Z",
                "deliveredAt": null,
                "estimatedDeliveryAt": "2025-08-09T14:45:47.617Z",
                "createdAt": "2025-08-02T11:26:14.340Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ShipmentsRecord" },
                "example": {
                  "id": 1,
                  "orderId": 1,
                  "carrier": "dhl",
                  "trackingNumber": "QYO4NLF3DY9JUKDJ",
                  "status": "out_for_delivery",
                  "shippedAt": "2025-08-02T11:26:14.340Z",
                  "deliveredAt": null,
                  "estimatedDeliveryAt": "2025-08-09T14:45:47.617Z",
                  "createdAt": "2025-08-02T11:26:14.340Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a shipments record (fake — not persisted)",
        "operationId": "patch-shipments",
        "tags": ["shipments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ShipmentsRecord" },
                "example": {
                  "id": 1,
                  "orderId": 1,
                  "carrier": "dhl",
                  "trackingNumber": "QYO4NLF3DY9JUKDJ",
                  "status": "out_for_delivery",
                  "shippedAt": "2025-08-02T11:26:14.340Z",
                  "deliveredAt": null,
                  "estimatedDeliveryAt": "2025-08-09T14:45:47.617Z",
                  "createdAt": "2025-08-02T11:26:14.340Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a shipments record (fake — not persisted)",
        "operationId": "delete-shipments",
        "tags": ["shipments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/destinations": {
      "get": {
        "summary": "List destinations",
        "operationId": "list-destinations",
        "tags": ["destinations"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/DestinationsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Singapore",
                      "slug": "singapore-1",
                      "countryAlpha2": "SG",
                      "description": "A must-visit for its natural wonders, welcoming locals, and unique character.",
                      "imageUrl": "https://picsum.photos/seed/dest-1/800/600",
                      "popularity": 98
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/destinations?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a destinations record (fake — not persisted)",
        "operationId": "create-destinations",
        "tags": ["destinations"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/DestinationsRecord" },
              "example": {
                "id": 1,
                "name": "Singapore",
                "slug": "singapore-1",
                "countryAlpha2": "SG",
                "description": "A must-visit for its natural wonders, welcoming locals, and unique character.",
                "imageUrl": "https://picsum.photos/seed/dest-1/800/600",
                "popularity": 98
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/DestinationsRecord" },
                "example": {
                  "id": 1,
                  "name": "Singapore",
                  "slug": "singapore-1",
                  "countryAlpha2": "SG",
                  "description": "A must-visit for its natural wonders, welcoming locals, and unique character.",
                  "imageUrl": "https://picsum.photos/seed/dest-1/800/600",
                  "popularity": 98
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/destinations/{id}": {
      "get": {
        "summary": "Get one destinations record by id",
        "operationId": "get-destinations-by-id",
        "tags": ["destinations"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/DestinationsRecord" },
                "example": {
                  "id": 1,
                  "name": "Singapore",
                  "slug": "singapore-1",
                  "countryAlpha2": "SG",
                  "description": "A must-visit for its natural wonders, welcoming locals, and unique character.",
                  "imageUrl": "https://picsum.photos/seed/dest-1/800/600",
                  "popularity": 98
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a destinations record (fake — not persisted)",
        "operationId": "replace-destinations",
        "tags": ["destinations"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/DestinationsRecord" },
              "example": {
                "id": 1,
                "name": "Singapore",
                "slug": "singapore-1",
                "countryAlpha2": "SG",
                "description": "A must-visit for its natural wonders, welcoming locals, and unique character.",
                "imageUrl": "https://picsum.photos/seed/dest-1/800/600",
                "popularity": 98
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/DestinationsRecord" },
                "example": {
                  "id": 1,
                  "name": "Singapore",
                  "slug": "singapore-1",
                  "countryAlpha2": "SG",
                  "description": "A must-visit for its natural wonders, welcoming locals, and unique character.",
                  "imageUrl": "https://picsum.photos/seed/dest-1/800/600",
                  "popularity": 98
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a destinations record (fake — not persisted)",
        "operationId": "patch-destinations",
        "tags": ["destinations"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/DestinationsRecord" },
                "example": {
                  "id": 1,
                  "name": "Singapore",
                  "slug": "singapore-1",
                  "countryAlpha2": "SG",
                  "description": "A must-visit for its natural wonders, welcoming locals, and unique character.",
                  "imageUrl": "https://picsum.photos/seed/dest-1/800/600",
                  "popularity": 98
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a destinations record (fake — not persisted)",
        "operationId": "delete-destinations",
        "tags": ["destinations"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/flights": {
      "get": {
        "summary": "List flights",
        "operationId": "list-flights",
        "tags": ["flights"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/FlightsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "flightNumber": "AF1294",
                      "airline": "Air France",
                      "departureAirport": "MAD",
                      "arrivalAirport": "ICN",
                      "departureAt": "2025-05-22T11:23:57.954Z",
                      "arrivalAt": "2025-05-22T15:37:57.954Z",
                      "durationMinutes": 254,
                      "status": "in_air",
                      "priceFrom": 772.03,
                      "currency": "USD",
                      "createdAt": "2025-02-23T11:23:57.954Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/flights?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a flights record (fake — not persisted)",
        "operationId": "create-flights",
        "tags": ["flights"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/FlightsRecord" },
              "example": {
                "id": 1,
                "flightNumber": "AF1294",
                "airline": "Air France",
                "departureAirport": "MAD",
                "arrivalAirport": "ICN",
                "departureAt": "2025-05-22T11:23:57.954Z",
                "arrivalAt": "2025-05-22T15:37:57.954Z",
                "durationMinutes": 254,
                "status": "in_air",
                "priceFrom": 772.03,
                "currency": "USD",
                "createdAt": "2025-02-23T11:23:57.954Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FlightsRecord" },
                "example": {
                  "id": 1,
                  "flightNumber": "AF1294",
                  "airline": "Air France",
                  "departureAirport": "MAD",
                  "arrivalAirport": "ICN",
                  "departureAt": "2025-05-22T11:23:57.954Z",
                  "arrivalAt": "2025-05-22T15:37:57.954Z",
                  "durationMinutes": 254,
                  "status": "in_air",
                  "priceFrom": 772.03,
                  "currency": "USD",
                  "createdAt": "2025-02-23T11:23:57.954Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/flights/{id}": {
      "get": {
        "summary": "Get one flights record by id",
        "operationId": "get-flights-by-id",
        "tags": ["flights"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FlightsRecord" },
                "example": {
                  "id": 1,
                  "flightNumber": "AF1294",
                  "airline": "Air France",
                  "departureAirport": "MAD",
                  "arrivalAirport": "ICN",
                  "departureAt": "2025-05-22T11:23:57.954Z",
                  "arrivalAt": "2025-05-22T15:37:57.954Z",
                  "durationMinutes": 254,
                  "status": "in_air",
                  "priceFrom": 772.03,
                  "currency": "USD",
                  "createdAt": "2025-02-23T11:23:57.954Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a flights record (fake — not persisted)",
        "operationId": "replace-flights",
        "tags": ["flights"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/FlightsRecord" },
              "example": {
                "id": 1,
                "flightNumber": "AF1294",
                "airline": "Air France",
                "departureAirport": "MAD",
                "arrivalAirport": "ICN",
                "departureAt": "2025-05-22T11:23:57.954Z",
                "arrivalAt": "2025-05-22T15:37:57.954Z",
                "durationMinutes": 254,
                "status": "in_air",
                "priceFrom": 772.03,
                "currency": "USD",
                "createdAt": "2025-02-23T11:23:57.954Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FlightsRecord" },
                "example": {
                  "id": 1,
                  "flightNumber": "AF1294",
                  "airline": "Air France",
                  "departureAirport": "MAD",
                  "arrivalAirport": "ICN",
                  "departureAt": "2025-05-22T11:23:57.954Z",
                  "arrivalAt": "2025-05-22T15:37:57.954Z",
                  "durationMinutes": 254,
                  "status": "in_air",
                  "priceFrom": 772.03,
                  "currency": "USD",
                  "createdAt": "2025-02-23T11:23:57.954Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a flights record (fake — not persisted)",
        "operationId": "patch-flights",
        "tags": ["flights"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FlightsRecord" },
                "example": {
                  "id": 1,
                  "flightNumber": "AF1294",
                  "airline": "Air France",
                  "departureAirport": "MAD",
                  "arrivalAirport": "ICN",
                  "departureAt": "2025-05-22T11:23:57.954Z",
                  "arrivalAt": "2025-05-22T15:37:57.954Z",
                  "durationMinutes": 254,
                  "status": "in_air",
                  "priceFrom": 772.03,
                  "currency": "USD",
                  "createdAt": "2025-02-23T11:23:57.954Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a flights record (fake — not persisted)",
        "operationId": "delete-flights",
        "tags": ["flights"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/hotels": {
      "get": {
        "summary": "List hotels",
        "operationId": "list-hotels",
        "tags": ["hotels"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/HotelsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Same Lodge Beaumont",
                      "slug": "same-lodge-beaumont-1",
                      "brand": "Accor",
                      "countryAlpha2": "AU",
                      "city": "Beaumont",
                      "address": "783 Lakin Roads",
                      "latitude": 52.537448,
                      "longitude": 41.243524,
                      "starRating": 4,
                      "rating": 3.4,
                      "ratingCount": 3924,
                      "priceFromPerNight": 785.31,
                      "currency": "CAD",
                      "amenities": ["pet-friendly", "parking", "airport-shuttle", "bar"],
                      "createdAt": "2025-03-21T01:28:31.055Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/hotels?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a hotels record (fake — not persisted)",
        "operationId": "create-hotels",
        "tags": ["hotels"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/HotelsRecord" },
              "example": {
                "id": 1,
                "name": "Same Lodge Beaumont",
                "slug": "same-lodge-beaumont-1",
                "brand": "Accor",
                "countryAlpha2": "AU",
                "city": "Beaumont",
                "address": "783 Lakin Roads",
                "latitude": 52.537448,
                "longitude": 41.243524,
                "starRating": 4,
                "rating": 3.4,
                "ratingCount": 3924,
                "priceFromPerNight": 785.31,
                "currency": "CAD",
                "amenities": ["pet-friendly", "parking", "airport-shuttle", "bar"],
                "createdAt": "2025-03-21T01:28:31.055Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/HotelsRecord" },
                "example": {
                  "id": 1,
                  "name": "Same Lodge Beaumont",
                  "slug": "same-lodge-beaumont-1",
                  "brand": "Accor",
                  "countryAlpha2": "AU",
                  "city": "Beaumont",
                  "address": "783 Lakin Roads",
                  "latitude": 52.537448,
                  "longitude": 41.243524,
                  "starRating": 4,
                  "rating": 3.4,
                  "ratingCount": 3924,
                  "priceFromPerNight": 785.31,
                  "currency": "CAD",
                  "amenities": ["pet-friendly", "parking", "airport-shuttle", "bar"],
                  "createdAt": "2025-03-21T01:28:31.055Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/hotels/{id}": {
      "get": {
        "summary": "Get one hotels record by id",
        "operationId": "get-hotels-by-id",
        "tags": ["hotels"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/HotelsRecord" },
                "example": {
                  "id": 1,
                  "name": "Same Lodge Beaumont",
                  "slug": "same-lodge-beaumont-1",
                  "brand": "Accor",
                  "countryAlpha2": "AU",
                  "city": "Beaumont",
                  "address": "783 Lakin Roads",
                  "latitude": 52.537448,
                  "longitude": 41.243524,
                  "starRating": 4,
                  "rating": 3.4,
                  "ratingCount": 3924,
                  "priceFromPerNight": 785.31,
                  "currency": "CAD",
                  "amenities": ["pet-friendly", "parking", "airport-shuttle", "bar"],
                  "createdAt": "2025-03-21T01:28:31.055Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a hotels record (fake — not persisted)",
        "operationId": "replace-hotels",
        "tags": ["hotels"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/HotelsRecord" },
              "example": {
                "id": 1,
                "name": "Same Lodge Beaumont",
                "slug": "same-lodge-beaumont-1",
                "brand": "Accor",
                "countryAlpha2": "AU",
                "city": "Beaumont",
                "address": "783 Lakin Roads",
                "latitude": 52.537448,
                "longitude": 41.243524,
                "starRating": 4,
                "rating": 3.4,
                "ratingCount": 3924,
                "priceFromPerNight": 785.31,
                "currency": "CAD",
                "amenities": ["pet-friendly", "parking", "airport-shuttle", "bar"],
                "createdAt": "2025-03-21T01:28:31.055Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/HotelsRecord" },
                "example": {
                  "id": 1,
                  "name": "Same Lodge Beaumont",
                  "slug": "same-lodge-beaumont-1",
                  "brand": "Accor",
                  "countryAlpha2": "AU",
                  "city": "Beaumont",
                  "address": "783 Lakin Roads",
                  "latitude": 52.537448,
                  "longitude": 41.243524,
                  "starRating": 4,
                  "rating": 3.4,
                  "ratingCount": 3924,
                  "priceFromPerNight": 785.31,
                  "currency": "CAD",
                  "amenities": ["pet-friendly", "parking", "airport-shuttle", "bar"],
                  "createdAt": "2025-03-21T01:28:31.055Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a hotels record (fake — not persisted)",
        "operationId": "patch-hotels",
        "tags": ["hotels"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/HotelsRecord" },
                "example": {
                  "id": 1,
                  "name": "Same Lodge Beaumont",
                  "slug": "same-lodge-beaumont-1",
                  "brand": "Accor",
                  "countryAlpha2": "AU",
                  "city": "Beaumont",
                  "address": "783 Lakin Roads",
                  "latitude": 52.537448,
                  "longitude": 41.243524,
                  "starRating": 4,
                  "rating": 3.4,
                  "ratingCount": 3924,
                  "priceFromPerNight": 785.31,
                  "currency": "CAD",
                  "amenities": ["pet-friendly", "parking", "airport-shuttle", "bar"],
                  "createdAt": "2025-03-21T01:28:31.055Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a hotels record (fake — not persisted)",
        "operationId": "delete-hotels",
        "tags": ["hotels"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/properties": {
      "get": {
        "summary": "List properties",
        "operationId": "list-properties",
        "tags": ["properties"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/PropertiesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Asheville Villa",
                      "slug": "asheville-villa-1",
                      "type": "villa",
                      "countryAlpha2": "CN",
                      "city": "Asheville",
                      "address": "265 George Street",
                      "latitude": 8.16773,
                      "longitude": -78.851336,
                      "bedrooms": 3,
                      "bathrooms": 2,
                      "maxGuests": 8,
                      "pricePerNight": 786.38,
                      "currency": "GBP",
                      "rating": 4.1,
                      "ratingCount": 1093,
                      "hostUserId": 30,
                      "createdAt": "2025-06-19T22:09:24.110Z",
                      "updatedAt": "2026-01-01T16:46:13.640Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/properties?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a properties record (fake — not persisted)",
        "operationId": "create-properties",
        "tags": ["properties"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PropertiesRecord" },
              "example": {
                "id": 1,
                "name": "Asheville Villa",
                "slug": "asheville-villa-1",
                "type": "villa",
                "countryAlpha2": "CN",
                "city": "Asheville",
                "address": "265 George Street",
                "latitude": 8.16773,
                "longitude": -78.851336,
                "bedrooms": 3,
                "bathrooms": 2,
                "maxGuests": 8,
                "pricePerNight": 786.38,
                "currency": "GBP",
                "rating": 4.1,
                "ratingCount": 1093,
                "hostUserId": 30,
                "createdAt": "2025-06-19T22:09:24.110Z",
                "updatedAt": "2026-01-01T16:46:13.640Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PropertiesRecord" },
                "example": {
                  "id": 1,
                  "name": "Asheville Villa",
                  "slug": "asheville-villa-1",
                  "type": "villa",
                  "countryAlpha2": "CN",
                  "city": "Asheville",
                  "address": "265 George Street",
                  "latitude": 8.16773,
                  "longitude": -78.851336,
                  "bedrooms": 3,
                  "bathrooms": 2,
                  "maxGuests": 8,
                  "pricePerNight": 786.38,
                  "currency": "GBP",
                  "rating": 4.1,
                  "ratingCount": 1093,
                  "hostUserId": 30,
                  "createdAt": "2025-06-19T22:09:24.110Z",
                  "updatedAt": "2026-01-01T16:46:13.640Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/properties/{id}": {
      "get": {
        "summary": "Get one properties record by id",
        "operationId": "get-properties-by-id",
        "tags": ["properties"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PropertiesRecord" },
                "example": {
                  "id": 1,
                  "name": "Asheville Villa",
                  "slug": "asheville-villa-1",
                  "type": "villa",
                  "countryAlpha2": "CN",
                  "city": "Asheville",
                  "address": "265 George Street",
                  "latitude": 8.16773,
                  "longitude": -78.851336,
                  "bedrooms": 3,
                  "bathrooms": 2,
                  "maxGuests": 8,
                  "pricePerNight": 786.38,
                  "currency": "GBP",
                  "rating": 4.1,
                  "ratingCount": 1093,
                  "hostUserId": 30,
                  "createdAt": "2025-06-19T22:09:24.110Z",
                  "updatedAt": "2026-01-01T16:46:13.640Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a properties record (fake — not persisted)",
        "operationId": "replace-properties",
        "tags": ["properties"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PropertiesRecord" },
              "example": {
                "id": 1,
                "name": "Asheville Villa",
                "slug": "asheville-villa-1",
                "type": "villa",
                "countryAlpha2": "CN",
                "city": "Asheville",
                "address": "265 George Street",
                "latitude": 8.16773,
                "longitude": -78.851336,
                "bedrooms": 3,
                "bathrooms": 2,
                "maxGuests": 8,
                "pricePerNight": 786.38,
                "currency": "GBP",
                "rating": 4.1,
                "ratingCount": 1093,
                "hostUserId": 30,
                "createdAt": "2025-06-19T22:09:24.110Z",
                "updatedAt": "2026-01-01T16:46:13.640Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PropertiesRecord" },
                "example": {
                  "id": 1,
                  "name": "Asheville Villa",
                  "slug": "asheville-villa-1",
                  "type": "villa",
                  "countryAlpha2": "CN",
                  "city": "Asheville",
                  "address": "265 George Street",
                  "latitude": 8.16773,
                  "longitude": -78.851336,
                  "bedrooms": 3,
                  "bathrooms": 2,
                  "maxGuests": 8,
                  "pricePerNight": 786.38,
                  "currency": "GBP",
                  "rating": 4.1,
                  "ratingCount": 1093,
                  "hostUserId": 30,
                  "createdAt": "2025-06-19T22:09:24.110Z",
                  "updatedAt": "2026-01-01T16:46:13.640Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a properties record (fake — not persisted)",
        "operationId": "patch-properties",
        "tags": ["properties"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PropertiesRecord" },
                "example": {
                  "id": 1,
                  "name": "Asheville Villa",
                  "slug": "asheville-villa-1",
                  "type": "villa",
                  "countryAlpha2": "CN",
                  "city": "Asheville",
                  "address": "265 George Street",
                  "latitude": 8.16773,
                  "longitude": -78.851336,
                  "bedrooms": 3,
                  "bathrooms": 2,
                  "maxGuests": 8,
                  "pricePerNight": 786.38,
                  "currency": "GBP",
                  "rating": 4.1,
                  "ratingCount": 1093,
                  "hostUserId": 30,
                  "createdAt": "2025-06-19T22:09:24.110Z",
                  "updatedAt": "2026-01-01T16:46:13.640Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a properties record (fake — not persisted)",
        "operationId": "delete-properties",
        "tags": ["properties"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/properties-saved": {
      "get": {
        "summary": "List properties-saved",
        "operationId": "list-properties-saved",
        "tags": ["properties-saved"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/PropertiesSavedRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 2,
                      "propertyId": 112,
                      "savedAt": "2025-10-15T16:32:11.870Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/properties-saved?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a properties-saved record (fake — not persisted)",
        "operationId": "create-properties-saved",
        "tags": ["properties-saved"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PropertiesSavedRecord" },
              "example": {
                "id": 1,
                "userId": 2,
                "propertyId": 112,
                "savedAt": "2025-10-15T16:32:11.870Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PropertiesSavedRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "propertyId": 112,
                  "savedAt": "2025-10-15T16:32:11.870Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/properties-saved/{id}": {
      "get": {
        "summary": "Get one properties-saved record by id",
        "operationId": "get-properties-saved-by-id",
        "tags": ["properties-saved"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PropertiesSavedRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "propertyId": 112,
                  "savedAt": "2025-10-15T16:32:11.870Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a properties-saved record (fake — not persisted)",
        "operationId": "replace-properties-saved",
        "tags": ["properties-saved"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PropertiesSavedRecord" },
              "example": {
                "id": 1,
                "userId": 2,
                "propertyId": 112,
                "savedAt": "2025-10-15T16:32:11.870Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PropertiesSavedRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "propertyId": 112,
                  "savedAt": "2025-10-15T16:32:11.870Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a properties-saved record (fake — not persisted)",
        "operationId": "patch-properties-saved",
        "tags": ["properties-saved"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PropertiesSavedRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "propertyId": 112,
                  "savedAt": "2025-10-15T16:32:11.870Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a properties-saved record (fake — not persisted)",
        "operationId": "delete-properties-saved",
        "tags": ["properties-saved"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/tickets": {
      "get": {
        "summary": "List tickets",
        "operationId": "list-tickets",
        "tags": ["tickets"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/TicketsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "eventName": "Ultimate Zulauf Championship",
                      "venue": "Daly City Convention Center",
                      "eventAt": "2027-05-02T21:27:11.496Z",
                      "type": "standing",
                      "price": 626.11,
                      "currency": "JPY",
                      "sectionCode": "GA",
                      "seatCode": null,
                      "isSold": true,
                      "createdAt": "2027-04-07T21:27:11.496Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/tickets?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a tickets record (fake — not persisted)",
        "operationId": "create-tickets",
        "tags": ["tickets"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TicketsRecord" },
              "example": {
                "id": 1,
                "eventName": "Ultimate Zulauf Championship",
                "venue": "Daly City Convention Center",
                "eventAt": "2027-05-02T21:27:11.496Z",
                "type": "standing",
                "price": 626.11,
                "currency": "JPY",
                "sectionCode": "GA",
                "seatCode": null,
                "isSold": true,
                "createdAt": "2027-04-07T21:27:11.496Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TicketsRecord" },
                "example": {
                  "id": 1,
                  "eventName": "Ultimate Zulauf Championship",
                  "venue": "Daly City Convention Center",
                  "eventAt": "2027-05-02T21:27:11.496Z",
                  "type": "standing",
                  "price": 626.11,
                  "currency": "JPY",
                  "sectionCode": "GA",
                  "seatCode": null,
                  "isSold": true,
                  "createdAt": "2027-04-07T21:27:11.496Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/tickets/{id}": {
      "get": {
        "summary": "Get one tickets record by id",
        "operationId": "get-tickets-by-id",
        "tags": ["tickets"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TicketsRecord" },
                "example": {
                  "id": 1,
                  "eventName": "Ultimate Zulauf Championship",
                  "venue": "Daly City Convention Center",
                  "eventAt": "2027-05-02T21:27:11.496Z",
                  "type": "standing",
                  "price": 626.11,
                  "currency": "JPY",
                  "sectionCode": "GA",
                  "seatCode": null,
                  "isSold": true,
                  "createdAt": "2027-04-07T21:27:11.496Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a tickets record (fake — not persisted)",
        "operationId": "replace-tickets",
        "tags": ["tickets"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TicketsRecord" },
              "example": {
                "id": 1,
                "eventName": "Ultimate Zulauf Championship",
                "venue": "Daly City Convention Center",
                "eventAt": "2027-05-02T21:27:11.496Z",
                "type": "standing",
                "price": 626.11,
                "currency": "JPY",
                "sectionCode": "GA",
                "seatCode": null,
                "isSold": true,
                "createdAt": "2027-04-07T21:27:11.496Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TicketsRecord" },
                "example": {
                  "id": 1,
                  "eventName": "Ultimate Zulauf Championship",
                  "venue": "Daly City Convention Center",
                  "eventAt": "2027-05-02T21:27:11.496Z",
                  "type": "standing",
                  "price": 626.11,
                  "currency": "JPY",
                  "sectionCode": "GA",
                  "seatCode": null,
                  "isSold": true,
                  "createdAt": "2027-04-07T21:27:11.496Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a tickets record (fake — not persisted)",
        "operationId": "patch-tickets",
        "tags": ["tickets"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TicketsRecord" },
                "example": {
                  "id": 1,
                  "eventName": "Ultimate Zulauf Championship",
                  "venue": "Daly City Convention Center",
                  "eventAt": "2027-05-02T21:27:11.496Z",
                  "type": "standing",
                  "price": 626.11,
                  "currency": "JPY",
                  "sectionCode": "GA",
                  "seatCode": null,
                  "isSold": true,
                  "createdAt": "2027-04-07T21:27:11.496Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a tickets record (fake — not persisted)",
        "operationId": "delete-tickets",
        "tags": ["tickets"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/bookings": {
      "get": {
        "summary": "List bookings",
        "operationId": "list-bookings",
        "tags": ["bookings"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/BookingsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 96,
                      "kind": "property",
                      "referenceId": 159,
                      "checkInAt": "2026-10-17T16:54:13.065Z",
                      "checkOutAt": "2026-10-20T16:54:13.065Z",
                      "status": "cancelled",
                      "totalAmount": 4102.68,
                      "currency": "CAD",
                      "createdAt": "2026-09-30T16:54:13.065Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/bookings?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a bookings record (fake — not persisted)",
        "operationId": "create-bookings",
        "tags": ["bookings"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/BookingsRecord" },
              "example": {
                "id": 1,
                "userId": 96,
                "kind": "property",
                "referenceId": 159,
                "checkInAt": "2026-10-17T16:54:13.065Z",
                "checkOutAt": "2026-10-20T16:54:13.065Z",
                "status": "cancelled",
                "totalAmount": 4102.68,
                "currency": "CAD",
                "createdAt": "2026-09-30T16:54:13.065Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BookingsRecord" },
                "example": {
                  "id": 1,
                  "userId": 96,
                  "kind": "property",
                  "referenceId": 159,
                  "checkInAt": "2026-10-17T16:54:13.065Z",
                  "checkOutAt": "2026-10-20T16:54:13.065Z",
                  "status": "cancelled",
                  "totalAmount": 4102.68,
                  "currency": "CAD",
                  "createdAt": "2026-09-30T16:54:13.065Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/bookings/{id}": {
      "get": {
        "summary": "Get one bookings record by id",
        "operationId": "get-bookings-by-id",
        "tags": ["bookings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BookingsRecord" },
                "example": {
                  "id": 1,
                  "userId": 96,
                  "kind": "property",
                  "referenceId": 159,
                  "checkInAt": "2026-10-17T16:54:13.065Z",
                  "checkOutAt": "2026-10-20T16:54:13.065Z",
                  "status": "cancelled",
                  "totalAmount": 4102.68,
                  "currency": "CAD",
                  "createdAt": "2026-09-30T16:54:13.065Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a bookings record (fake — not persisted)",
        "operationId": "replace-bookings",
        "tags": ["bookings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/BookingsRecord" },
              "example": {
                "id": 1,
                "userId": 96,
                "kind": "property",
                "referenceId": 159,
                "checkInAt": "2026-10-17T16:54:13.065Z",
                "checkOutAt": "2026-10-20T16:54:13.065Z",
                "status": "cancelled",
                "totalAmount": 4102.68,
                "currency": "CAD",
                "createdAt": "2026-09-30T16:54:13.065Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BookingsRecord" },
                "example": {
                  "id": 1,
                  "userId": 96,
                  "kind": "property",
                  "referenceId": 159,
                  "checkInAt": "2026-10-17T16:54:13.065Z",
                  "checkOutAt": "2026-10-20T16:54:13.065Z",
                  "status": "cancelled",
                  "totalAmount": 4102.68,
                  "currency": "CAD",
                  "createdAt": "2026-09-30T16:54:13.065Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a bookings record (fake — not persisted)",
        "operationId": "patch-bookings",
        "tags": ["bookings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BookingsRecord" },
                "example": {
                  "id": 1,
                  "userId": 96,
                  "kind": "property",
                  "referenceId": 159,
                  "checkInAt": "2026-10-17T16:54:13.065Z",
                  "checkOutAt": "2026-10-20T16:54:13.065Z",
                  "status": "cancelled",
                  "totalAmount": 4102.68,
                  "currency": "CAD",
                  "createdAt": "2026-09-30T16:54:13.065Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a bookings record (fake — not persisted)",
        "operationId": "delete-bookings",
        "tags": ["bookings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/itineraries": {
      "get": {
        "summary": "List itineraries",
        "operationId": "list-itineraries",
        "tags": ["itineraries"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ItinerariesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 92,
                      "title": "Weekend Getaway",
                      "slug": "weekend-getaway-1",
                      "description": "Conventus textor concedo congregatio distinctio solus conor placeat advenio credo. Varietas utor spes theatrum voluptate.",
                      "startDate": "2026-11-22",
                      "endDate": "2026-12-11",
                      "destinationSlugs": [
                        "phoenix-41",
                        "north-alvisburgh-33",
                        "batzborough-69",
                        "north-richland-hills-73"
                      ],
                      "createdAt": "2026-05-07T18:42:16.620Z",
                      "updatedAt": "2026-05-18T21:35:35.050Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/itineraries?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a itineraries record (fake — not persisted)",
        "operationId": "create-itineraries",
        "tags": ["itineraries"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ItinerariesRecord" },
              "example": {
                "id": 1,
                "userId": 92,
                "title": "Weekend Getaway",
                "slug": "weekend-getaway-1",
                "description": "Conventus textor concedo congregatio distinctio solus conor placeat advenio credo. Varietas utor spes theatrum voluptate.",
                "startDate": "2026-11-22",
                "endDate": "2026-12-11",
                "destinationSlugs": [
                  "phoenix-41",
                  "north-alvisburgh-33",
                  "batzborough-69",
                  "north-richland-hills-73"
                ],
                "createdAt": "2026-05-07T18:42:16.620Z",
                "updatedAt": "2026-05-18T21:35:35.050Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ItinerariesRecord" },
                "example": {
                  "id": 1,
                  "userId": 92,
                  "title": "Weekend Getaway",
                  "slug": "weekend-getaway-1",
                  "description": "Conventus textor concedo congregatio distinctio solus conor placeat advenio credo. Varietas utor spes theatrum voluptate.",
                  "startDate": "2026-11-22",
                  "endDate": "2026-12-11",
                  "destinationSlugs": [
                    "phoenix-41",
                    "north-alvisburgh-33",
                    "batzborough-69",
                    "north-richland-hills-73"
                  ],
                  "createdAt": "2026-05-07T18:42:16.620Z",
                  "updatedAt": "2026-05-18T21:35:35.050Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/itineraries/{id}": {
      "get": {
        "summary": "Get one itineraries record by id",
        "operationId": "get-itineraries-by-id",
        "tags": ["itineraries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ItinerariesRecord" },
                "example": {
                  "id": 1,
                  "userId": 92,
                  "title": "Weekend Getaway",
                  "slug": "weekend-getaway-1",
                  "description": "Conventus textor concedo congregatio distinctio solus conor placeat advenio credo. Varietas utor spes theatrum voluptate.",
                  "startDate": "2026-11-22",
                  "endDate": "2026-12-11",
                  "destinationSlugs": [
                    "phoenix-41",
                    "north-alvisburgh-33",
                    "batzborough-69",
                    "north-richland-hills-73"
                  ],
                  "createdAt": "2026-05-07T18:42:16.620Z",
                  "updatedAt": "2026-05-18T21:35:35.050Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a itineraries record (fake — not persisted)",
        "operationId": "replace-itineraries",
        "tags": ["itineraries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ItinerariesRecord" },
              "example": {
                "id": 1,
                "userId": 92,
                "title": "Weekend Getaway",
                "slug": "weekend-getaway-1",
                "description": "Conventus textor concedo congregatio distinctio solus conor placeat advenio credo. Varietas utor spes theatrum voluptate.",
                "startDate": "2026-11-22",
                "endDate": "2026-12-11",
                "destinationSlugs": [
                  "phoenix-41",
                  "north-alvisburgh-33",
                  "batzborough-69",
                  "north-richland-hills-73"
                ],
                "createdAt": "2026-05-07T18:42:16.620Z",
                "updatedAt": "2026-05-18T21:35:35.050Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ItinerariesRecord" },
                "example": {
                  "id": 1,
                  "userId": 92,
                  "title": "Weekend Getaway",
                  "slug": "weekend-getaway-1",
                  "description": "Conventus textor concedo congregatio distinctio solus conor placeat advenio credo. Varietas utor spes theatrum voluptate.",
                  "startDate": "2026-11-22",
                  "endDate": "2026-12-11",
                  "destinationSlugs": [
                    "phoenix-41",
                    "north-alvisburgh-33",
                    "batzborough-69",
                    "north-richland-hills-73"
                  ],
                  "createdAt": "2026-05-07T18:42:16.620Z",
                  "updatedAt": "2026-05-18T21:35:35.050Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a itineraries record (fake — not persisted)",
        "operationId": "patch-itineraries",
        "tags": ["itineraries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ItinerariesRecord" },
                "example": {
                  "id": 1,
                  "userId": 92,
                  "title": "Weekend Getaway",
                  "slug": "weekend-getaway-1",
                  "description": "Conventus textor concedo congregatio distinctio solus conor placeat advenio credo. Varietas utor spes theatrum voluptate.",
                  "startDate": "2026-11-22",
                  "endDate": "2026-12-11",
                  "destinationSlugs": [
                    "phoenix-41",
                    "north-alvisburgh-33",
                    "batzborough-69",
                    "north-richland-hills-73"
                  ],
                  "createdAt": "2026-05-07T18:42:16.620Z",
                  "updatedAt": "2026-05-18T21:35:35.050Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a itineraries record (fake — not persisted)",
        "operationId": "delete-itineraries",
        "tags": ["itineraries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/food-categories": {
      "get": {
        "summary": "List food-categories",
        "operationId": "list-food-categories",
        "tags": ["food-categories"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/FoodCategoriesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Appetizers",
                      "slug": "appetizers",
                      "description": "Starters, snacks, and small bites to begin a meal.",
                      "parentId": null,
                      "sortOrder": 1
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/food-categories?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a food-categories record (fake — not persisted)",
        "operationId": "create-food-categories",
        "tags": ["food-categories"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/FoodCategoriesRecord" },
              "example": {
                "id": 1,
                "name": "Appetizers",
                "slug": "appetizers",
                "description": "Starters, snacks, and small bites to begin a meal.",
                "parentId": null,
                "sortOrder": 1
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FoodCategoriesRecord" },
                "example": {
                  "id": 1,
                  "name": "Appetizers",
                  "slug": "appetizers",
                  "description": "Starters, snacks, and small bites to begin a meal.",
                  "parentId": null,
                  "sortOrder": 1
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/food-categories/{id}": {
      "get": {
        "summary": "Get one food-categories record by id",
        "operationId": "get-food-categories-by-id",
        "tags": ["food-categories"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FoodCategoriesRecord" },
                "example": {
                  "id": 1,
                  "name": "Appetizers",
                  "slug": "appetizers",
                  "description": "Starters, snacks, and small bites to begin a meal.",
                  "parentId": null,
                  "sortOrder": 1
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a food-categories record (fake — not persisted)",
        "operationId": "replace-food-categories",
        "tags": ["food-categories"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/FoodCategoriesRecord" },
              "example": {
                "id": 1,
                "name": "Appetizers",
                "slug": "appetizers",
                "description": "Starters, snacks, and small bites to begin a meal.",
                "parentId": null,
                "sortOrder": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FoodCategoriesRecord" },
                "example": {
                  "id": 1,
                  "name": "Appetizers",
                  "slug": "appetizers",
                  "description": "Starters, snacks, and small bites to begin a meal.",
                  "parentId": null,
                  "sortOrder": 1
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a food-categories record (fake — not persisted)",
        "operationId": "patch-food-categories",
        "tags": ["food-categories"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FoodCategoriesRecord" },
                "example": {
                  "id": 1,
                  "name": "Appetizers",
                  "slug": "appetizers",
                  "description": "Starters, snacks, and small bites to begin a meal.",
                  "parentId": null,
                  "sortOrder": 1
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a food-categories record (fake — not persisted)",
        "operationId": "delete-food-categories",
        "tags": ["food-categories"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/ingredients": {
      "get": {
        "summary": "List ingredients",
        "operationId": "list-ingredients",
        "tags": ["ingredients"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/IngredientsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "All-Purpose Flour",
                      "slug": "all-purpose-flour-1",
                      "foodCategoryId": 15,
                      "unit": "g",
                      "defaultPricePerUnit": 11.39,
                      "currency": "USD"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/ingredients?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a ingredients record (fake — not persisted)",
        "operationId": "create-ingredients",
        "tags": ["ingredients"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/IngredientsRecord" },
              "example": {
                "id": 1,
                "name": "All-Purpose Flour",
                "slug": "all-purpose-flour-1",
                "foodCategoryId": 15,
                "unit": "g",
                "defaultPricePerUnit": 11.39,
                "currency": "USD"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/IngredientsRecord" },
                "example": {
                  "id": 1,
                  "name": "All-Purpose Flour",
                  "slug": "all-purpose-flour-1",
                  "foodCategoryId": 15,
                  "unit": "g",
                  "defaultPricePerUnit": 11.39,
                  "currency": "USD"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/ingredients/{id}": {
      "get": {
        "summary": "Get one ingredients record by id",
        "operationId": "get-ingredients-by-id",
        "tags": ["ingredients"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/IngredientsRecord" },
                "example": {
                  "id": 1,
                  "name": "All-Purpose Flour",
                  "slug": "all-purpose-flour-1",
                  "foodCategoryId": 15,
                  "unit": "g",
                  "defaultPricePerUnit": 11.39,
                  "currency": "USD"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a ingredients record (fake — not persisted)",
        "operationId": "replace-ingredients",
        "tags": ["ingredients"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/IngredientsRecord" },
              "example": {
                "id": 1,
                "name": "All-Purpose Flour",
                "slug": "all-purpose-flour-1",
                "foodCategoryId": 15,
                "unit": "g",
                "defaultPricePerUnit": 11.39,
                "currency": "USD"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/IngredientsRecord" },
                "example": {
                  "id": 1,
                  "name": "All-Purpose Flour",
                  "slug": "all-purpose-flour-1",
                  "foodCategoryId": 15,
                  "unit": "g",
                  "defaultPricePerUnit": 11.39,
                  "currency": "USD"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a ingredients record (fake — not persisted)",
        "operationId": "patch-ingredients",
        "tags": ["ingredients"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/IngredientsRecord" },
                "example": {
                  "id": 1,
                  "name": "All-Purpose Flour",
                  "slug": "all-purpose-flour-1",
                  "foodCategoryId": 15,
                  "unit": "g",
                  "defaultPricePerUnit": 11.39,
                  "currency": "USD"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a ingredients record (fake — not persisted)",
        "operationId": "delete-ingredients",
        "tags": ["ingredients"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/menus": {
      "get": {
        "summary": "List menus",
        "operationId": "list-menus",
        "tags": ["menus"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/MenusRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "restaurantId": 1,
                      "name": "Bar Menu",
                      "description": "Premium selections paired with exceptional flavors.",
                      "isActive": false,
                      "createdAt": "2026-02-27T19:41:54.207Z",
                      "updatedAt": "2026-03-29T19:01:27.613Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/menus?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a menus record (fake — not persisted)",
        "operationId": "create-menus",
        "tags": ["menus"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MenusRecord" },
              "example": {
                "id": 1,
                "restaurantId": 1,
                "name": "Bar Menu",
                "description": "Premium selections paired with exceptional flavors.",
                "isActive": false,
                "createdAt": "2026-02-27T19:41:54.207Z",
                "updatedAt": "2026-03-29T19:01:27.613Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MenusRecord" },
                "example": {
                  "id": 1,
                  "restaurantId": 1,
                  "name": "Bar Menu",
                  "description": "Premium selections paired with exceptional flavors.",
                  "isActive": false,
                  "createdAt": "2026-02-27T19:41:54.207Z",
                  "updatedAt": "2026-03-29T19:01:27.613Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/menus/{id}": {
      "get": {
        "summary": "Get one menus record by id",
        "operationId": "get-menus-by-id",
        "tags": ["menus"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MenusRecord" },
                "example": {
                  "id": 1,
                  "restaurantId": 1,
                  "name": "Bar Menu",
                  "description": "Premium selections paired with exceptional flavors.",
                  "isActive": false,
                  "createdAt": "2026-02-27T19:41:54.207Z",
                  "updatedAt": "2026-03-29T19:01:27.613Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a menus record (fake — not persisted)",
        "operationId": "replace-menus",
        "tags": ["menus"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MenusRecord" },
              "example": {
                "id": 1,
                "restaurantId": 1,
                "name": "Bar Menu",
                "description": "Premium selections paired with exceptional flavors.",
                "isActive": false,
                "createdAt": "2026-02-27T19:41:54.207Z",
                "updatedAt": "2026-03-29T19:01:27.613Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MenusRecord" },
                "example": {
                  "id": 1,
                  "restaurantId": 1,
                  "name": "Bar Menu",
                  "description": "Premium selections paired with exceptional flavors.",
                  "isActive": false,
                  "createdAt": "2026-02-27T19:41:54.207Z",
                  "updatedAt": "2026-03-29T19:01:27.613Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a menus record (fake — not persisted)",
        "operationId": "patch-menus",
        "tags": ["menus"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MenusRecord" },
                "example": {
                  "id": 1,
                  "restaurantId": 1,
                  "name": "Bar Menu",
                  "description": "Premium selections paired with exceptional flavors.",
                  "isActive": false,
                  "createdAt": "2026-02-27T19:41:54.207Z",
                  "updatedAt": "2026-03-29T19:01:27.613Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a menus record (fake — not persisted)",
        "operationId": "delete-menus",
        "tags": ["menus"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/menu-items": {
      "get": {
        "summary": "List menu-items",
        "operationId": "list-menu-items",
        "tags": ["menu-items"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/MenuItemsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "menuId": 1,
                      "name": "House Turkey Platter",
                      "slug": "house-turkey-platter-1",
                      "description": "Rich flavors layered with care by our kitchen team.",
                      "price": 56.79,
                      "currency": "USD",
                      "foodCategoryId": 13,
                      "spicyLevel": 0,
                      "isVegetarian": false,
                      "isVegan": false,
                      "isGlutenFree": false,
                      "imageUrl": "https://picsum.photos/seed/menu-item-1/640/480",
                      "createdAt": "2026-03-27T20:46:28.856Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/menu-items?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a menu-items record (fake — not persisted)",
        "operationId": "create-menu-items",
        "tags": ["menu-items"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MenuItemsRecord" },
              "example": {
                "id": 1,
                "menuId": 1,
                "name": "House Turkey Platter",
                "slug": "house-turkey-platter-1",
                "description": "Rich flavors layered with care by our kitchen team.",
                "price": 56.79,
                "currency": "USD",
                "foodCategoryId": 13,
                "spicyLevel": 0,
                "isVegetarian": false,
                "isVegan": false,
                "isGlutenFree": false,
                "imageUrl": "https://picsum.photos/seed/menu-item-1/640/480",
                "createdAt": "2026-03-27T20:46:28.856Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MenuItemsRecord" },
                "example": {
                  "id": 1,
                  "menuId": 1,
                  "name": "House Turkey Platter",
                  "slug": "house-turkey-platter-1",
                  "description": "Rich flavors layered with care by our kitchen team.",
                  "price": 56.79,
                  "currency": "USD",
                  "foodCategoryId": 13,
                  "spicyLevel": 0,
                  "isVegetarian": false,
                  "isVegan": false,
                  "isGlutenFree": false,
                  "imageUrl": "https://picsum.photos/seed/menu-item-1/640/480",
                  "createdAt": "2026-03-27T20:46:28.856Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/menu-items/{id}": {
      "get": {
        "summary": "Get one menu-items record by id",
        "operationId": "get-menu-items-by-id",
        "tags": ["menu-items"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MenuItemsRecord" },
                "example": {
                  "id": 1,
                  "menuId": 1,
                  "name": "House Turkey Platter",
                  "slug": "house-turkey-platter-1",
                  "description": "Rich flavors layered with care by our kitchen team.",
                  "price": 56.79,
                  "currency": "USD",
                  "foodCategoryId": 13,
                  "spicyLevel": 0,
                  "isVegetarian": false,
                  "isVegan": false,
                  "isGlutenFree": false,
                  "imageUrl": "https://picsum.photos/seed/menu-item-1/640/480",
                  "createdAt": "2026-03-27T20:46:28.856Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a menu-items record (fake — not persisted)",
        "operationId": "replace-menu-items",
        "tags": ["menu-items"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MenuItemsRecord" },
              "example": {
                "id": 1,
                "menuId": 1,
                "name": "House Turkey Platter",
                "slug": "house-turkey-platter-1",
                "description": "Rich flavors layered with care by our kitchen team.",
                "price": 56.79,
                "currency": "USD",
                "foodCategoryId": 13,
                "spicyLevel": 0,
                "isVegetarian": false,
                "isVegan": false,
                "isGlutenFree": false,
                "imageUrl": "https://picsum.photos/seed/menu-item-1/640/480",
                "createdAt": "2026-03-27T20:46:28.856Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MenuItemsRecord" },
                "example": {
                  "id": 1,
                  "menuId": 1,
                  "name": "House Turkey Platter",
                  "slug": "house-turkey-platter-1",
                  "description": "Rich flavors layered with care by our kitchen team.",
                  "price": 56.79,
                  "currency": "USD",
                  "foodCategoryId": 13,
                  "spicyLevel": 0,
                  "isVegetarian": false,
                  "isVegan": false,
                  "isGlutenFree": false,
                  "imageUrl": "https://picsum.photos/seed/menu-item-1/640/480",
                  "createdAt": "2026-03-27T20:46:28.856Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a menu-items record (fake — not persisted)",
        "operationId": "patch-menu-items",
        "tags": ["menu-items"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MenuItemsRecord" },
                "example": {
                  "id": 1,
                  "menuId": 1,
                  "name": "House Turkey Platter",
                  "slug": "house-turkey-platter-1",
                  "description": "Rich flavors layered with care by our kitchen team.",
                  "price": 56.79,
                  "currency": "USD",
                  "foodCategoryId": 13,
                  "spicyLevel": 0,
                  "isVegetarian": false,
                  "isVegan": false,
                  "isGlutenFree": false,
                  "imageUrl": "https://picsum.photos/seed/menu-item-1/640/480",
                  "createdAt": "2026-03-27T20:46:28.856Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a menu-items record (fake — not persisted)",
        "operationId": "delete-menu-items",
        "tags": ["menu-items"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/food-orders": {
      "get": {
        "summary": "List food-orders",
        "operationId": "list-food-orders",
        "tags": ["food-orders"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/FoodOrdersRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 162,
                      "restaurantId": 78,
                      "items": [
                        {
                          "menuItemId": 1146,
                          "quantity": 2,
                          "unitPrice": 37.77,
                          "lineTotal": 75.54
                        },
                        {
                          "menuItemId": 1143,
                          "quantity": 2,
                          "unitPrice": 15.09,
                          "lineTotal": 30.18
                        }
                      ],
                      "subtotal": 105.72,
                      "deliveryFee": 5.19,
                      "tip": 10.31,
                      "total": 121.22,
                      "currency": "USD",
                      "status": "placed",
                      "placedAt": "2024-06-15T20:59:09.714Z",
                      "deliveredAt": null
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/food-orders?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a food-orders record (fake — not persisted)",
        "operationId": "create-food-orders",
        "tags": ["food-orders"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/FoodOrdersRecord" },
              "example": {
                "id": 1,
                "userId": 162,
                "restaurantId": 78,
                "items": [
                  { "menuItemId": 1146, "quantity": 2, "unitPrice": 37.77, "lineTotal": 75.54 },
                  { "menuItemId": 1143, "quantity": 2, "unitPrice": 15.09, "lineTotal": 30.18 }
                ],
                "subtotal": 105.72,
                "deliveryFee": 5.19,
                "tip": 10.31,
                "total": 121.22,
                "currency": "USD",
                "status": "placed",
                "placedAt": "2024-06-15T20:59:09.714Z",
                "deliveredAt": null
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FoodOrdersRecord" },
                "example": {
                  "id": 1,
                  "userId": 162,
                  "restaurantId": 78,
                  "items": [
                    { "menuItemId": 1146, "quantity": 2, "unitPrice": 37.77, "lineTotal": 75.54 },
                    { "menuItemId": 1143, "quantity": 2, "unitPrice": 15.09, "lineTotal": 30.18 }
                  ],
                  "subtotal": 105.72,
                  "deliveryFee": 5.19,
                  "tip": 10.31,
                  "total": 121.22,
                  "currency": "USD",
                  "status": "placed",
                  "placedAt": "2024-06-15T20:59:09.714Z",
                  "deliveredAt": null
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/food-orders/{id}": {
      "get": {
        "summary": "Get one food-orders record by id",
        "operationId": "get-food-orders-by-id",
        "tags": ["food-orders"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FoodOrdersRecord" },
                "example": {
                  "id": 1,
                  "userId": 162,
                  "restaurantId": 78,
                  "items": [
                    { "menuItemId": 1146, "quantity": 2, "unitPrice": 37.77, "lineTotal": 75.54 },
                    { "menuItemId": 1143, "quantity": 2, "unitPrice": 15.09, "lineTotal": 30.18 }
                  ],
                  "subtotal": 105.72,
                  "deliveryFee": 5.19,
                  "tip": 10.31,
                  "total": 121.22,
                  "currency": "USD",
                  "status": "placed",
                  "placedAt": "2024-06-15T20:59:09.714Z",
                  "deliveredAt": null
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a food-orders record (fake — not persisted)",
        "operationId": "replace-food-orders",
        "tags": ["food-orders"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/FoodOrdersRecord" },
              "example": {
                "id": 1,
                "userId": 162,
                "restaurantId": 78,
                "items": [
                  { "menuItemId": 1146, "quantity": 2, "unitPrice": 37.77, "lineTotal": 75.54 },
                  { "menuItemId": 1143, "quantity": 2, "unitPrice": 15.09, "lineTotal": 30.18 }
                ],
                "subtotal": 105.72,
                "deliveryFee": 5.19,
                "tip": 10.31,
                "total": 121.22,
                "currency": "USD",
                "status": "placed",
                "placedAt": "2024-06-15T20:59:09.714Z",
                "deliveredAt": null
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FoodOrdersRecord" },
                "example": {
                  "id": 1,
                  "userId": 162,
                  "restaurantId": 78,
                  "items": [
                    { "menuItemId": 1146, "quantity": 2, "unitPrice": 37.77, "lineTotal": 75.54 },
                    { "menuItemId": 1143, "quantity": 2, "unitPrice": 15.09, "lineTotal": 30.18 }
                  ],
                  "subtotal": 105.72,
                  "deliveryFee": 5.19,
                  "tip": 10.31,
                  "total": 121.22,
                  "currency": "USD",
                  "status": "placed",
                  "placedAt": "2024-06-15T20:59:09.714Z",
                  "deliveredAt": null
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a food-orders record (fake — not persisted)",
        "operationId": "patch-food-orders",
        "tags": ["food-orders"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FoodOrdersRecord" },
                "example": {
                  "id": 1,
                  "userId": 162,
                  "restaurantId": 78,
                  "items": [
                    { "menuItemId": 1146, "quantity": 2, "unitPrice": 37.77, "lineTotal": 75.54 },
                    { "menuItemId": 1143, "quantity": 2, "unitPrice": 15.09, "lineTotal": 30.18 }
                  ],
                  "subtotal": 105.72,
                  "deliveryFee": 5.19,
                  "tip": 10.31,
                  "total": 121.22,
                  "currency": "USD",
                  "status": "placed",
                  "placedAt": "2024-06-15T20:59:09.714Z",
                  "deliveredAt": null
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a food-orders record (fake — not persisted)",
        "operationId": "delete-food-orders",
        "tags": ["food-orders"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/orgs": {
      "get": {
        "summary": "List orgs",
        "operationId": "list-orgs",
        "tags": ["orgs"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/OrgsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Lakin Group",
                      "slug": "lakin-group",
                      "description": "Devolved 24 hour adapter",
                      "industryId": 26,
                      "size": "11-50",
                      "foundedYear": 2023,
                      "websiteUrl": "https://www.lakin-group.com",
                      "logoUrl": "https://picsum.photos/seed/org-1/200/200",
                      "createdAt": "2023-05-25T21:33:39.272Z",
                      "updatedAt": "2024-03-30T21:36:39.738Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/orgs?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a orgs record (fake — not persisted)",
        "operationId": "create-orgs",
        "tags": ["orgs"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/OrgsRecord" },
              "example": {
                "id": 1,
                "name": "Lakin Group",
                "slug": "lakin-group",
                "description": "Devolved 24 hour adapter",
                "industryId": 26,
                "size": "11-50",
                "foundedYear": 2023,
                "websiteUrl": "https://www.lakin-group.com",
                "logoUrl": "https://picsum.photos/seed/org-1/200/200",
                "createdAt": "2023-05-25T21:33:39.272Z",
                "updatedAt": "2024-03-30T21:36:39.738Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/OrgsRecord" },
                "example": {
                  "id": 1,
                  "name": "Lakin Group",
                  "slug": "lakin-group",
                  "description": "Devolved 24 hour adapter",
                  "industryId": 26,
                  "size": "11-50",
                  "foundedYear": 2023,
                  "websiteUrl": "https://www.lakin-group.com",
                  "logoUrl": "https://picsum.photos/seed/org-1/200/200",
                  "createdAt": "2023-05-25T21:33:39.272Z",
                  "updatedAt": "2024-03-30T21:36:39.738Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/orgs/{id}": {
      "get": {
        "summary": "Get one orgs record by id",
        "operationId": "get-orgs-by-id",
        "tags": ["orgs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/OrgsRecord" },
                "example": {
                  "id": 1,
                  "name": "Lakin Group",
                  "slug": "lakin-group",
                  "description": "Devolved 24 hour adapter",
                  "industryId": 26,
                  "size": "11-50",
                  "foundedYear": 2023,
                  "websiteUrl": "https://www.lakin-group.com",
                  "logoUrl": "https://picsum.photos/seed/org-1/200/200",
                  "createdAt": "2023-05-25T21:33:39.272Z",
                  "updatedAt": "2024-03-30T21:36:39.738Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a orgs record (fake — not persisted)",
        "operationId": "replace-orgs",
        "tags": ["orgs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/OrgsRecord" },
              "example": {
                "id": 1,
                "name": "Lakin Group",
                "slug": "lakin-group",
                "description": "Devolved 24 hour adapter",
                "industryId": 26,
                "size": "11-50",
                "foundedYear": 2023,
                "websiteUrl": "https://www.lakin-group.com",
                "logoUrl": "https://picsum.photos/seed/org-1/200/200",
                "createdAt": "2023-05-25T21:33:39.272Z",
                "updatedAt": "2024-03-30T21:36:39.738Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/OrgsRecord" },
                "example": {
                  "id": 1,
                  "name": "Lakin Group",
                  "slug": "lakin-group",
                  "description": "Devolved 24 hour adapter",
                  "industryId": 26,
                  "size": "11-50",
                  "foundedYear": 2023,
                  "websiteUrl": "https://www.lakin-group.com",
                  "logoUrl": "https://picsum.photos/seed/org-1/200/200",
                  "createdAt": "2023-05-25T21:33:39.272Z",
                  "updatedAt": "2024-03-30T21:36:39.738Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a orgs record (fake — not persisted)",
        "operationId": "patch-orgs",
        "tags": ["orgs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/OrgsRecord" },
                "example": {
                  "id": 1,
                  "name": "Lakin Group",
                  "slug": "lakin-group",
                  "description": "Devolved 24 hour adapter",
                  "industryId": 26,
                  "size": "11-50",
                  "foundedYear": 2023,
                  "websiteUrl": "https://www.lakin-group.com",
                  "logoUrl": "https://picsum.photos/seed/org-1/200/200",
                  "createdAt": "2023-05-25T21:33:39.272Z",
                  "updatedAt": "2024-03-30T21:36:39.738Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a orgs record (fake — not persisted)",
        "operationId": "delete-orgs",
        "tags": ["orgs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/teams": {
      "get": {
        "summary": "List teams",
        "operationId": "list-teams",
        "tags": ["teams"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/TeamsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "orgId": 1,
                      "name": "Analytics",
                      "slug": "lakin-group-analytics",
                      "description": "Antiquus decipio usque attonbitus avarus labore temperantia corroboro degenero.",
                      "memberCount": 5,
                      "createdAt": "2025-02-28T15:53:25.268Z",
                      "updatedAt": "2026-04-23T21:10:23.735Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/teams?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a teams record (fake — not persisted)",
        "operationId": "create-teams",
        "tags": ["teams"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TeamsRecord" },
              "example": {
                "id": 1,
                "orgId": 1,
                "name": "Analytics",
                "slug": "lakin-group-analytics",
                "description": "Antiquus decipio usque attonbitus avarus labore temperantia corroboro degenero.",
                "memberCount": 5,
                "createdAt": "2025-02-28T15:53:25.268Z",
                "updatedAt": "2026-04-23T21:10:23.735Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TeamsRecord" },
                "example": {
                  "id": 1,
                  "orgId": 1,
                  "name": "Analytics",
                  "slug": "lakin-group-analytics",
                  "description": "Antiquus decipio usque attonbitus avarus labore temperantia corroboro degenero.",
                  "memberCount": 5,
                  "createdAt": "2025-02-28T15:53:25.268Z",
                  "updatedAt": "2026-04-23T21:10:23.735Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/teams/{id}": {
      "get": {
        "summary": "Get one teams record by id",
        "operationId": "get-teams-by-id",
        "tags": ["teams"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TeamsRecord" },
                "example": {
                  "id": 1,
                  "orgId": 1,
                  "name": "Analytics",
                  "slug": "lakin-group-analytics",
                  "description": "Antiquus decipio usque attonbitus avarus labore temperantia corroboro degenero.",
                  "memberCount": 5,
                  "createdAt": "2025-02-28T15:53:25.268Z",
                  "updatedAt": "2026-04-23T21:10:23.735Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a teams record (fake — not persisted)",
        "operationId": "replace-teams",
        "tags": ["teams"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TeamsRecord" },
              "example": {
                "id": 1,
                "orgId": 1,
                "name": "Analytics",
                "slug": "lakin-group-analytics",
                "description": "Antiquus decipio usque attonbitus avarus labore temperantia corroboro degenero.",
                "memberCount": 5,
                "createdAt": "2025-02-28T15:53:25.268Z",
                "updatedAt": "2026-04-23T21:10:23.735Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TeamsRecord" },
                "example": {
                  "id": 1,
                  "orgId": 1,
                  "name": "Analytics",
                  "slug": "lakin-group-analytics",
                  "description": "Antiquus decipio usque attonbitus avarus labore temperantia corroboro degenero.",
                  "memberCount": 5,
                  "createdAt": "2025-02-28T15:53:25.268Z",
                  "updatedAt": "2026-04-23T21:10:23.735Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a teams record (fake — not persisted)",
        "operationId": "patch-teams",
        "tags": ["teams"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TeamsRecord" },
                "example": {
                  "id": 1,
                  "orgId": 1,
                  "name": "Analytics",
                  "slug": "lakin-group-analytics",
                  "description": "Antiquus decipio usque attonbitus avarus labore temperantia corroboro degenero.",
                  "memberCount": 5,
                  "createdAt": "2025-02-28T15:53:25.268Z",
                  "updatedAt": "2026-04-23T21:10:23.735Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a teams record (fake — not persisted)",
        "operationId": "delete-teams",
        "tags": ["teams"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/projects": {
      "get": {
        "summary": "List projects",
        "operationId": "list-projects",
        "tags": ["projects"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ProjectsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "orgId": 1,
                      "teamId": 4,
                      "name": "Performance Optimization",
                      "slug": "lakin-group-performance-optimization",
                      "description": "Vulpes vestrum beatae taceo supplanto trucido vergo.",
                      "status": "on_hold",
                      "startDate": "2025-06-25",
                      "dueDate": null,
                      "ownerUserId": 71,
                      "createdAt": "2025-05-31T21:48:05.378Z",
                      "updatedAt": "2026-01-10T18:30:17.147Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/projects?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a projects record (fake — not persisted)",
        "operationId": "create-projects",
        "tags": ["projects"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ProjectsRecord" },
              "example": {
                "id": 1,
                "orgId": 1,
                "teamId": 4,
                "name": "Performance Optimization",
                "slug": "lakin-group-performance-optimization",
                "description": "Vulpes vestrum beatae taceo supplanto trucido vergo.",
                "status": "on_hold",
                "startDate": "2025-06-25",
                "dueDate": null,
                "ownerUserId": 71,
                "createdAt": "2025-05-31T21:48:05.378Z",
                "updatedAt": "2026-01-10T18:30:17.147Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProjectsRecord" },
                "example": {
                  "id": 1,
                  "orgId": 1,
                  "teamId": 4,
                  "name": "Performance Optimization",
                  "slug": "lakin-group-performance-optimization",
                  "description": "Vulpes vestrum beatae taceo supplanto trucido vergo.",
                  "status": "on_hold",
                  "startDate": "2025-06-25",
                  "dueDate": null,
                  "ownerUserId": 71,
                  "createdAt": "2025-05-31T21:48:05.378Z",
                  "updatedAt": "2026-01-10T18:30:17.147Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/projects/{id}": {
      "get": {
        "summary": "Get one projects record by id",
        "operationId": "get-projects-by-id",
        "tags": ["projects"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProjectsRecord" },
                "example": {
                  "id": 1,
                  "orgId": 1,
                  "teamId": 4,
                  "name": "Performance Optimization",
                  "slug": "lakin-group-performance-optimization",
                  "description": "Vulpes vestrum beatae taceo supplanto trucido vergo.",
                  "status": "on_hold",
                  "startDate": "2025-06-25",
                  "dueDate": null,
                  "ownerUserId": 71,
                  "createdAt": "2025-05-31T21:48:05.378Z",
                  "updatedAt": "2026-01-10T18:30:17.147Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a projects record (fake — not persisted)",
        "operationId": "replace-projects",
        "tags": ["projects"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ProjectsRecord" },
              "example": {
                "id": 1,
                "orgId": 1,
                "teamId": 4,
                "name": "Performance Optimization",
                "slug": "lakin-group-performance-optimization",
                "description": "Vulpes vestrum beatae taceo supplanto trucido vergo.",
                "status": "on_hold",
                "startDate": "2025-06-25",
                "dueDate": null,
                "ownerUserId": 71,
                "createdAt": "2025-05-31T21:48:05.378Z",
                "updatedAt": "2026-01-10T18:30:17.147Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProjectsRecord" },
                "example": {
                  "id": 1,
                  "orgId": 1,
                  "teamId": 4,
                  "name": "Performance Optimization",
                  "slug": "lakin-group-performance-optimization",
                  "description": "Vulpes vestrum beatae taceo supplanto trucido vergo.",
                  "status": "on_hold",
                  "startDate": "2025-06-25",
                  "dueDate": null,
                  "ownerUserId": 71,
                  "createdAt": "2025-05-31T21:48:05.378Z",
                  "updatedAt": "2026-01-10T18:30:17.147Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a projects record (fake — not persisted)",
        "operationId": "patch-projects",
        "tags": ["projects"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProjectsRecord" },
                "example": {
                  "id": 1,
                  "orgId": 1,
                  "teamId": 4,
                  "name": "Performance Optimization",
                  "slug": "lakin-group-performance-optimization",
                  "description": "Vulpes vestrum beatae taceo supplanto trucido vergo.",
                  "status": "on_hold",
                  "startDate": "2025-06-25",
                  "dueDate": null,
                  "ownerUserId": 71,
                  "createdAt": "2025-05-31T21:48:05.378Z",
                  "updatedAt": "2026-01-10T18:30:17.147Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a projects record (fake — not persisted)",
        "operationId": "delete-projects",
        "tags": ["projects"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/tasks": {
      "get": {
        "summary": "List tasks",
        "operationId": "list-tasks",
        "tags": ["tasks"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/TasksRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "projectId": 1,
                      "assigneeUserId": 163,
                      "title": "Configure analytics tracking",
                      "description": "Animi terminatio laborum concido curriculum confido cunae deleo spero.",
                      "status": "blocked",
                      "priority": "low",
                      "dueDate": null,
                      "createdAt": "2026-03-26T22:15:03.992Z",
                      "updatedAt": "2026-04-30T00:13:24.653Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/tasks?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a tasks record (fake — not persisted)",
        "operationId": "create-tasks",
        "tags": ["tasks"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TasksRecord" },
              "example": {
                "id": 1,
                "projectId": 1,
                "assigneeUserId": 163,
                "title": "Configure analytics tracking",
                "description": "Animi terminatio laborum concido curriculum confido cunae deleo spero.",
                "status": "blocked",
                "priority": "low",
                "dueDate": null,
                "createdAt": "2026-03-26T22:15:03.992Z",
                "updatedAt": "2026-04-30T00:13:24.653Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TasksRecord" },
                "example": {
                  "id": 1,
                  "projectId": 1,
                  "assigneeUserId": 163,
                  "title": "Configure analytics tracking",
                  "description": "Animi terminatio laborum concido curriculum confido cunae deleo spero.",
                  "status": "blocked",
                  "priority": "low",
                  "dueDate": null,
                  "createdAt": "2026-03-26T22:15:03.992Z",
                  "updatedAt": "2026-04-30T00:13:24.653Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/tasks/{id}": {
      "get": {
        "summary": "Get one tasks record by id",
        "operationId": "get-tasks-by-id",
        "tags": ["tasks"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TasksRecord" },
                "example": {
                  "id": 1,
                  "projectId": 1,
                  "assigneeUserId": 163,
                  "title": "Configure analytics tracking",
                  "description": "Animi terminatio laborum concido curriculum confido cunae deleo spero.",
                  "status": "blocked",
                  "priority": "low",
                  "dueDate": null,
                  "createdAt": "2026-03-26T22:15:03.992Z",
                  "updatedAt": "2026-04-30T00:13:24.653Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a tasks record (fake — not persisted)",
        "operationId": "replace-tasks",
        "tags": ["tasks"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TasksRecord" },
              "example": {
                "id": 1,
                "projectId": 1,
                "assigneeUserId": 163,
                "title": "Configure analytics tracking",
                "description": "Animi terminatio laborum concido curriculum confido cunae deleo spero.",
                "status": "blocked",
                "priority": "low",
                "dueDate": null,
                "createdAt": "2026-03-26T22:15:03.992Z",
                "updatedAt": "2026-04-30T00:13:24.653Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TasksRecord" },
                "example": {
                  "id": 1,
                  "projectId": 1,
                  "assigneeUserId": 163,
                  "title": "Configure analytics tracking",
                  "description": "Animi terminatio laborum concido curriculum confido cunae deleo spero.",
                  "status": "blocked",
                  "priority": "low",
                  "dueDate": null,
                  "createdAt": "2026-03-26T22:15:03.992Z",
                  "updatedAt": "2026-04-30T00:13:24.653Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a tasks record (fake — not persisted)",
        "operationId": "patch-tasks",
        "tags": ["tasks"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TasksRecord" },
                "example": {
                  "id": 1,
                  "projectId": 1,
                  "assigneeUserId": 163,
                  "title": "Configure analytics tracking",
                  "description": "Animi terminatio laborum concido curriculum confido cunae deleo spero.",
                  "status": "blocked",
                  "priority": "low",
                  "dueDate": null,
                  "createdAt": "2026-03-26T22:15:03.992Z",
                  "updatedAt": "2026-04-30T00:13:24.653Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a tasks record (fake — not persisted)",
        "operationId": "delete-tasks",
        "tags": ["tasks"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/todo-lists": {
      "get": {
        "summary": "List todo-lists",
        "operationId": "list-todo-lists",
        "tags": ["todo-lists"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/TodoListsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 2,
                      "name": "Books to Read",
                      "isArchived": true,
                      "createdAt": "2025-05-25T18:37:17.603Z",
                      "updatedAt": "2025-11-16T12:59:28.848Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/todo-lists?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a todo-lists record (fake — not persisted)",
        "operationId": "create-todo-lists",
        "tags": ["todo-lists"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TodoListsRecord" },
              "example": {
                "id": 1,
                "userId": 2,
                "name": "Books to Read",
                "isArchived": true,
                "createdAt": "2025-05-25T18:37:17.603Z",
                "updatedAt": "2025-11-16T12:59:28.848Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TodoListsRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "name": "Books to Read",
                  "isArchived": true,
                  "createdAt": "2025-05-25T18:37:17.603Z",
                  "updatedAt": "2025-11-16T12:59:28.848Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/todo-lists/{id}": {
      "get": {
        "summary": "Get one todo-lists record by id",
        "operationId": "get-todo-lists-by-id",
        "tags": ["todo-lists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TodoListsRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "name": "Books to Read",
                  "isArchived": true,
                  "createdAt": "2025-05-25T18:37:17.603Z",
                  "updatedAt": "2025-11-16T12:59:28.848Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a todo-lists record (fake — not persisted)",
        "operationId": "replace-todo-lists",
        "tags": ["todo-lists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TodoListsRecord" },
              "example": {
                "id": 1,
                "userId": 2,
                "name": "Books to Read",
                "isArchived": true,
                "createdAt": "2025-05-25T18:37:17.603Z",
                "updatedAt": "2025-11-16T12:59:28.848Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TodoListsRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "name": "Books to Read",
                  "isArchived": true,
                  "createdAt": "2025-05-25T18:37:17.603Z",
                  "updatedAt": "2025-11-16T12:59:28.848Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a todo-lists record (fake — not persisted)",
        "operationId": "patch-todo-lists",
        "tags": ["todo-lists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TodoListsRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "name": "Books to Read",
                  "isArchived": true,
                  "createdAt": "2025-05-25T18:37:17.603Z",
                  "updatedAt": "2025-11-16T12:59:28.848Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a todo-lists record (fake — not persisted)",
        "operationId": "delete-todo-lists",
        "tags": ["todo-lists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/todos": {
      "get": {
        "summary": "List todos",
        "operationId": "list-todos",
        "tags": ["todos"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/TodosRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "todoListId": 1,
                      "title": "Buy the report",
                      "isDone": false,
                      "dueDate": "2026-06-19",
                      "completedAt": null,
                      "createdAt": "2025-09-02T20:48:26.252Z",
                      "updatedAt": "2025-12-21T19:17:30.692Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/todos?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a todos record (fake — not persisted)",
        "operationId": "create-todos",
        "tags": ["todos"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TodosRecord" },
              "example": {
                "id": 1,
                "todoListId": 1,
                "title": "Buy the report",
                "isDone": false,
                "dueDate": "2026-06-19",
                "completedAt": null,
                "createdAt": "2025-09-02T20:48:26.252Z",
                "updatedAt": "2025-12-21T19:17:30.692Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TodosRecord" },
                "example": {
                  "id": 1,
                  "todoListId": 1,
                  "title": "Buy the report",
                  "isDone": false,
                  "dueDate": "2026-06-19",
                  "completedAt": null,
                  "createdAt": "2025-09-02T20:48:26.252Z",
                  "updatedAt": "2025-12-21T19:17:30.692Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/todos/{id}": {
      "get": {
        "summary": "Get one todos record by id",
        "operationId": "get-todos-by-id",
        "tags": ["todos"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TodosRecord" },
                "example": {
                  "id": 1,
                  "todoListId": 1,
                  "title": "Buy the report",
                  "isDone": false,
                  "dueDate": "2026-06-19",
                  "completedAt": null,
                  "createdAt": "2025-09-02T20:48:26.252Z",
                  "updatedAt": "2025-12-21T19:17:30.692Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a todos record (fake — not persisted)",
        "operationId": "replace-todos",
        "tags": ["todos"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TodosRecord" },
              "example": {
                "id": 1,
                "todoListId": 1,
                "title": "Buy the report",
                "isDone": false,
                "dueDate": "2026-06-19",
                "completedAt": null,
                "createdAt": "2025-09-02T20:48:26.252Z",
                "updatedAt": "2025-12-21T19:17:30.692Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TodosRecord" },
                "example": {
                  "id": 1,
                  "todoListId": 1,
                  "title": "Buy the report",
                  "isDone": false,
                  "dueDate": "2026-06-19",
                  "completedAt": null,
                  "createdAt": "2025-09-02T20:48:26.252Z",
                  "updatedAt": "2025-12-21T19:17:30.692Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a todos record (fake — not persisted)",
        "operationId": "patch-todos",
        "tags": ["todos"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TodosRecord" },
                "example": {
                  "id": 1,
                  "todoListId": 1,
                  "title": "Buy the report",
                  "isDone": false,
                  "dueDate": "2026-06-19",
                  "completedAt": null,
                  "createdAt": "2025-09-02T20:48:26.252Z",
                  "updatedAt": "2025-12-21T19:17:30.692Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a todos record (fake — not persisted)",
        "operationId": "delete-todos",
        "tags": ["todos"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/documents": {
      "get": {
        "summary": "List documents",
        "operationId": "list-documents",
        "tags": ["documents"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/DocumentsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "ownerUserId": 224,
                      "orgId": 26,
                      "title": "RFC: Security Policies",
                      "slug": "rfc-security-policies",
                      "content": "Inventore quibusdam itaque qui thesaurus patior clibanus a. Coadunatio contigo circumvenio summopere custodia amitto aggero. Cras expedita brevis.\n\nUstilo aro tenuis. Sub voluntarius verumtamen adfero tantum utrum. Ager terga pecus verecundia termes corporis tardus degenero.",
                      "isPublic": false,
                      "createdAt": "2026-04-14T15:54:13.306Z",
                      "updatedAt": "2026-05-04T09:25:38.968Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/documents?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a documents record (fake — not persisted)",
        "operationId": "create-documents",
        "tags": ["documents"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/DocumentsRecord" },
              "example": {
                "id": 1,
                "ownerUserId": 224,
                "orgId": 26,
                "title": "RFC: Security Policies",
                "slug": "rfc-security-policies",
                "content": "Inventore quibusdam itaque qui thesaurus patior clibanus a. Coadunatio contigo circumvenio summopere custodia amitto aggero. Cras expedita brevis.\n\nUstilo aro tenuis. Sub voluntarius verumtamen adfero tantum utrum. Ager terga pecus verecundia termes corporis tardus degenero.",
                "isPublic": false,
                "createdAt": "2026-04-14T15:54:13.306Z",
                "updatedAt": "2026-05-04T09:25:38.968Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/DocumentsRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 224,
                  "orgId": 26,
                  "title": "RFC: Security Policies",
                  "slug": "rfc-security-policies",
                  "content": "Inventore quibusdam itaque qui thesaurus patior clibanus a. Coadunatio contigo circumvenio summopere custodia amitto aggero. Cras expedita brevis.\n\nUstilo aro tenuis. Sub voluntarius verumtamen adfero tantum utrum. Ager terga pecus verecundia termes corporis tardus degenero.",
                  "isPublic": false,
                  "createdAt": "2026-04-14T15:54:13.306Z",
                  "updatedAt": "2026-05-04T09:25:38.968Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/documents/{id}": {
      "get": {
        "summary": "Get one documents record by id",
        "operationId": "get-documents-by-id",
        "tags": ["documents"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/DocumentsRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 224,
                  "orgId": 26,
                  "title": "RFC: Security Policies",
                  "slug": "rfc-security-policies",
                  "content": "Inventore quibusdam itaque qui thesaurus patior clibanus a. Coadunatio contigo circumvenio summopere custodia amitto aggero. Cras expedita brevis.\n\nUstilo aro tenuis. Sub voluntarius verumtamen adfero tantum utrum. Ager terga pecus verecundia termes corporis tardus degenero.",
                  "isPublic": false,
                  "createdAt": "2026-04-14T15:54:13.306Z",
                  "updatedAt": "2026-05-04T09:25:38.968Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a documents record (fake — not persisted)",
        "operationId": "replace-documents",
        "tags": ["documents"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/DocumentsRecord" },
              "example": {
                "id": 1,
                "ownerUserId": 224,
                "orgId": 26,
                "title": "RFC: Security Policies",
                "slug": "rfc-security-policies",
                "content": "Inventore quibusdam itaque qui thesaurus patior clibanus a. Coadunatio contigo circumvenio summopere custodia amitto aggero. Cras expedita brevis.\n\nUstilo aro tenuis. Sub voluntarius verumtamen adfero tantum utrum. Ager terga pecus verecundia termes corporis tardus degenero.",
                "isPublic": false,
                "createdAt": "2026-04-14T15:54:13.306Z",
                "updatedAt": "2026-05-04T09:25:38.968Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/DocumentsRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 224,
                  "orgId": 26,
                  "title": "RFC: Security Policies",
                  "slug": "rfc-security-policies",
                  "content": "Inventore quibusdam itaque qui thesaurus patior clibanus a. Coadunatio contigo circumvenio summopere custodia amitto aggero. Cras expedita brevis.\n\nUstilo aro tenuis. Sub voluntarius verumtamen adfero tantum utrum. Ager terga pecus verecundia termes corporis tardus degenero.",
                  "isPublic": false,
                  "createdAt": "2026-04-14T15:54:13.306Z",
                  "updatedAt": "2026-05-04T09:25:38.968Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a documents record (fake — not persisted)",
        "operationId": "patch-documents",
        "tags": ["documents"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/DocumentsRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 224,
                  "orgId": 26,
                  "title": "RFC: Security Policies",
                  "slug": "rfc-security-policies",
                  "content": "Inventore quibusdam itaque qui thesaurus patior clibanus a. Coadunatio contigo circumvenio summopere custodia amitto aggero. Cras expedita brevis.\n\nUstilo aro tenuis. Sub voluntarius verumtamen adfero tantum utrum. Ager terga pecus verecundia termes corporis tardus degenero.",
                  "isPublic": false,
                  "createdAt": "2026-04-14T15:54:13.306Z",
                  "updatedAt": "2026-05-04T09:25:38.968Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a documents record (fake — not persisted)",
        "operationId": "delete-documents",
        "tags": ["documents"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/calendar-events": {
      "get": {
        "summary": "List calendar-events",
        "operationId": "list-calendar-events",
        "tags": ["calendar-events"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CalendarEventsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "ownerUserId": 1,
                      "title": "Budget Review",
                      "description": "Accusator universe pel cursus.",
                      "startAt": "2026-04-28T08:32:58.356Z",
                      "endAt": "2026-04-28T10:11:04.800Z",
                      "isAllDay": false,
                      "location": "Microsoft Teams",
                      "attendeeUserIds": [198, 211],
                      "createdAt": "2026-05-20T07:31:54.772Z",
                      "updatedAt": "2026-05-20T21:45:34.752Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/calendar-events?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a calendar-events record (fake — not persisted)",
        "operationId": "create-calendar-events",
        "tags": ["calendar-events"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CalendarEventsRecord" },
              "example": {
                "id": 1,
                "ownerUserId": 1,
                "title": "Budget Review",
                "description": "Accusator universe pel cursus.",
                "startAt": "2026-04-28T08:32:58.356Z",
                "endAt": "2026-04-28T10:11:04.800Z",
                "isAllDay": false,
                "location": "Microsoft Teams",
                "attendeeUserIds": [198, 211],
                "createdAt": "2026-05-20T07:31:54.772Z",
                "updatedAt": "2026-05-20T21:45:34.752Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CalendarEventsRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 1,
                  "title": "Budget Review",
                  "description": "Accusator universe pel cursus.",
                  "startAt": "2026-04-28T08:32:58.356Z",
                  "endAt": "2026-04-28T10:11:04.800Z",
                  "isAllDay": false,
                  "location": "Microsoft Teams",
                  "attendeeUserIds": [198, 211],
                  "createdAt": "2026-05-20T07:31:54.772Z",
                  "updatedAt": "2026-05-20T21:45:34.752Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/calendar-events/{id}": {
      "get": {
        "summary": "Get one calendar-events record by id",
        "operationId": "get-calendar-events-by-id",
        "tags": ["calendar-events"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CalendarEventsRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 1,
                  "title": "Budget Review",
                  "description": "Accusator universe pel cursus.",
                  "startAt": "2026-04-28T08:32:58.356Z",
                  "endAt": "2026-04-28T10:11:04.800Z",
                  "isAllDay": false,
                  "location": "Microsoft Teams",
                  "attendeeUserIds": [198, 211],
                  "createdAt": "2026-05-20T07:31:54.772Z",
                  "updatedAt": "2026-05-20T21:45:34.752Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a calendar-events record (fake — not persisted)",
        "operationId": "replace-calendar-events",
        "tags": ["calendar-events"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CalendarEventsRecord" },
              "example": {
                "id": 1,
                "ownerUserId": 1,
                "title": "Budget Review",
                "description": "Accusator universe pel cursus.",
                "startAt": "2026-04-28T08:32:58.356Z",
                "endAt": "2026-04-28T10:11:04.800Z",
                "isAllDay": false,
                "location": "Microsoft Teams",
                "attendeeUserIds": [198, 211],
                "createdAt": "2026-05-20T07:31:54.772Z",
                "updatedAt": "2026-05-20T21:45:34.752Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CalendarEventsRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 1,
                  "title": "Budget Review",
                  "description": "Accusator universe pel cursus.",
                  "startAt": "2026-04-28T08:32:58.356Z",
                  "endAt": "2026-04-28T10:11:04.800Z",
                  "isAllDay": false,
                  "location": "Microsoft Teams",
                  "attendeeUserIds": [198, 211],
                  "createdAt": "2026-05-20T07:31:54.772Z",
                  "updatedAt": "2026-05-20T21:45:34.752Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a calendar-events record (fake — not persisted)",
        "operationId": "patch-calendar-events",
        "tags": ["calendar-events"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CalendarEventsRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 1,
                  "title": "Budget Review",
                  "description": "Accusator universe pel cursus.",
                  "startAt": "2026-04-28T08:32:58.356Z",
                  "endAt": "2026-04-28T10:11:04.800Z",
                  "isAllDay": false,
                  "location": "Microsoft Teams",
                  "attendeeUserIds": [198, 211],
                  "createdAt": "2026-05-20T07:31:54.772Z",
                  "updatedAt": "2026-05-20T21:45:34.752Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a calendar-events record (fake — not persisted)",
        "operationId": "delete-calendar-events",
        "tags": ["calendar-events"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/time-entries": {
      "get": {
        "summary": "List time-entries",
        "operationId": "list-time-entries",
        "tags": ["time-entries"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/TimeEntriesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "taskId": 410,
                      "projectId": null,
                      "description": "Meeting preparation",
                      "startedAt": "2026-04-19T23:01:52.099Z",
                      "endedAt": "2026-04-20T01:16:52.099Z",
                      "durationMinutes": 135,
                      "createdAt": "2026-04-20T01:16:52.099Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/time-entries?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a time-entries record (fake — not persisted)",
        "operationId": "create-time-entries",
        "tags": ["time-entries"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TimeEntriesRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "taskId": 410,
                "projectId": null,
                "description": "Meeting preparation",
                "startedAt": "2026-04-19T23:01:52.099Z",
                "endedAt": "2026-04-20T01:16:52.099Z",
                "durationMinutes": 135,
                "createdAt": "2026-04-20T01:16:52.099Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TimeEntriesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "taskId": 410,
                  "projectId": null,
                  "description": "Meeting preparation",
                  "startedAt": "2026-04-19T23:01:52.099Z",
                  "endedAt": "2026-04-20T01:16:52.099Z",
                  "durationMinutes": 135,
                  "createdAt": "2026-04-20T01:16:52.099Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/time-entries/{id}": {
      "get": {
        "summary": "Get one time-entries record by id",
        "operationId": "get-time-entries-by-id",
        "tags": ["time-entries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TimeEntriesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "taskId": 410,
                  "projectId": null,
                  "description": "Meeting preparation",
                  "startedAt": "2026-04-19T23:01:52.099Z",
                  "endedAt": "2026-04-20T01:16:52.099Z",
                  "durationMinutes": 135,
                  "createdAt": "2026-04-20T01:16:52.099Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a time-entries record (fake — not persisted)",
        "operationId": "replace-time-entries",
        "tags": ["time-entries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TimeEntriesRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "taskId": 410,
                "projectId": null,
                "description": "Meeting preparation",
                "startedAt": "2026-04-19T23:01:52.099Z",
                "endedAt": "2026-04-20T01:16:52.099Z",
                "durationMinutes": 135,
                "createdAt": "2026-04-20T01:16:52.099Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TimeEntriesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "taskId": 410,
                  "projectId": null,
                  "description": "Meeting preparation",
                  "startedAt": "2026-04-19T23:01:52.099Z",
                  "endedAt": "2026-04-20T01:16:52.099Z",
                  "durationMinutes": 135,
                  "createdAt": "2026-04-20T01:16:52.099Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a time-entries record (fake — not persisted)",
        "operationId": "patch-time-entries",
        "tags": ["time-entries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TimeEntriesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "taskId": 410,
                  "projectId": null,
                  "description": "Meeting preparation",
                  "startedAt": "2026-04-19T23:01:52.099Z",
                  "endedAt": "2026-04-20T01:16:52.099Z",
                  "durationMinutes": 135,
                  "createdAt": "2026-04-20T01:16:52.099Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a time-entries record (fake — not persisted)",
        "operationId": "delete-time-entries",
        "tags": ["time-entries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/kanban-boards": {
      "get": {
        "summary": "List kanban-boards",
        "operationId": "list-kanban-boards",
        "tags": ["kanban-boards"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/KanbanBoardsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "projectId": 1,
                      "name": "Main Board",
                      "slug": "lakin-group-performance-optimization-main-board",
                      "createdAt": "2026-03-11T06:55:24.001Z",
                      "updatedAt": "2026-05-04T04:47:44.632Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/kanban-boards?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a kanban-boards record (fake — not persisted)",
        "operationId": "create-kanban-boards",
        "tags": ["kanban-boards"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/KanbanBoardsRecord" },
              "example": {
                "id": 1,
                "projectId": 1,
                "name": "Main Board",
                "slug": "lakin-group-performance-optimization-main-board",
                "createdAt": "2026-03-11T06:55:24.001Z",
                "updatedAt": "2026-05-04T04:47:44.632Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/KanbanBoardsRecord" },
                "example": {
                  "id": 1,
                  "projectId": 1,
                  "name": "Main Board",
                  "slug": "lakin-group-performance-optimization-main-board",
                  "createdAt": "2026-03-11T06:55:24.001Z",
                  "updatedAt": "2026-05-04T04:47:44.632Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/kanban-boards/{id}": {
      "get": {
        "summary": "Get one kanban-boards record by id",
        "operationId": "get-kanban-boards-by-id",
        "tags": ["kanban-boards"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/KanbanBoardsRecord" },
                "example": {
                  "id": 1,
                  "projectId": 1,
                  "name": "Main Board",
                  "slug": "lakin-group-performance-optimization-main-board",
                  "createdAt": "2026-03-11T06:55:24.001Z",
                  "updatedAt": "2026-05-04T04:47:44.632Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a kanban-boards record (fake — not persisted)",
        "operationId": "replace-kanban-boards",
        "tags": ["kanban-boards"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/KanbanBoardsRecord" },
              "example": {
                "id": 1,
                "projectId": 1,
                "name": "Main Board",
                "slug": "lakin-group-performance-optimization-main-board",
                "createdAt": "2026-03-11T06:55:24.001Z",
                "updatedAt": "2026-05-04T04:47:44.632Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/KanbanBoardsRecord" },
                "example": {
                  "id": 1,
                  "projectId": 1,
                  "name": "Main Board",
                  "slug": "lakin-group-performance-optimization-main-board",
                  "createdAt": "2026-03-11T06:55:24.001Z",
                  "updatedAt": "2026-05-04T04:47:44.632Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a kanban-boards record (fake — not persisted)",
        "operationId": "patch-kanban-boards",
        "tags": ["kanban-boards"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/KanbanBoardsRecord" },
                "example": {
                  "id": 1,
                  "projectId": 1,
                  "name": "Main Board",
                  "slug": "lakin-group-performance-optimization-main-board",
                  "createdAt": "2026-03-11T06:55:24.001Z",
                  "updatedAt": "2026-05-04T04:47:44.632Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a kanban-boards record (fake — not persisted)",
        "operationId": "delete-kanban-boards",
        "tags": ["kanban-boards"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/kanban-columns": {
      "get": {
        "summary": "List kanban-columns",
        "operationId": "list-kanban-columns",
        "tags": ["kanban-columns"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/KanbanColumnsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "boardId": 1,
                      "name": "Backlog",
                      "sortOrder": 0,
                      "color": "#94a3b8",
                      "createdAt": "2025-07-31T11:30:54.074Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/kanban-columns?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a kanban-columns record (fake — not persisted)",
        "operationId": "create-kanban-columns",
        "tags": ["kanban-columns"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/KanbanColumnsRecord" },
              "example": {
                "id": 1,
                "boardId": 1,
                "name": "Backlog",
                "sortOrder": 0,
                "color": "#94a3b8",
                "createdAt": "2025-07-31T11:30:54.074Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/KanbanColumnsRecord" },
                "example": {
                  "id": 1,
                  "boardId": 1,
                  "name": "Backlog",
                  "sortOrder": 0,
                  "color": "#94a3b8",
                  "createdAt": "2025-07-31T11:30:54.074Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/kanban-columns/{id}": {
      "get": {
        "summary": "Get one kanban-columns record by id",
        "operationId": "get-kanban-columns-by-id",
        "tags": ["kanban-columns"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/KanbanColumnsRecord" },
                "example": {
                  "id": 1,
                  "boardId": 1,
                  "name": "Backlog",
                  "sortOrder": 0,
                  "color": "#94a3b8",
                  "createdAt": "2025-07-31T11:30:54.074Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a kanban-columns record (fake — not persisted)",
        "operationId": "replace-kanban-columns",
        "tags": ["kanban-columns"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/KanbanColumnsRecord" },
              "example": {
                "id": 1,
                "boardId": 1,
                "name": "Backlog",
                "sortOrder": 0,
                "color": "#94a3b8",
                "createdAt": "2025-07-31T11:30:54.074Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/KanbanColumnsRecord" },
                "example": {
                  "id": 1,
                  "boardId": 1,
                  "name": "Backlog",
                  "sortOrder": 0,
                  "color": "#94a3b8",
                  "createdAt": "2025-07-31T11:30:54.074Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a kanban-columns record (fake — not persisted)",
        "operationId": "patch-kanban-columns",
        "tags": ["kanban-columns"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/KanbanColumnsRecord" },
                "example": {
                  "id": 1,
                  "boardId": 1,
                  "name": "Backlog",
                  "sortOrder": 0,
                  "color": "#94a3b8",
                  "createdAt": "2025-07-31T11:30:54.074Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a kanban-columns record (fake — not persisted)",
        "operationId": "delete-kanban-columns",
        "tags": ["kanban-columns"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/files": {
      "get": {
        "summary": "List files",
        "operationId": "list-files",
        "tags": ["files"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/FilesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "ownerUserId": 231,
                      "name": "Shared",
                      "mimeType": "application/x-directory",
                      "sizeBytes": 0,
                      "url": "https://files.example.com/folders/1",
                      "parentFolderId": null,
                      "isFolder": true,
                      "createdAt": "2024-09-29T20:35:10.132Z",
                      "updatedAt": "2025-02-17T01:19:07.711Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/files?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a files record (fake — not persisted)",
        "operationId": "create-files",
        "tags": ["files"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/FilesRecord" },
              "example": {
                "id": 1,
                "ownerUserId": 231,
                "name": "Shared",
                "mimeType": "application/x-directory",
                "sizeBytes": 0,
                "url": "https://files.example.com/folders/1",
                "parentFolderId": null,
                "isFolder": true,
                "createdAt": "2024-09-29T20:35:10.132Z",
                "updatedAt": "2025-02-17T01:19:07.711Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FilesRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 231,
                  "name": "Shared",
                  "mimeType": "application/x-directory",
                  "sizeBytes": 0,
                  "url": "https://files.example.com/folders/1",
                  "parentFolderId": null,
                  "isFolder": true,
                  "createdAt": "2024-09-29T20:35:10.132Z",
                  "updatedAt": "2025-02-17T01:19:07.711Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/files/{id}": {
      "get": {
        "summary": "Get one files record by id",
        "operationId": "get-files-by-id",
        "tags": ["files"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FilesRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 231,
                  "name": "Shared",
                  "mimeType": "application/x-directory",
                  "sizeBytes": 0,
                  "url": "https://files.example.com/folders/1",
                  "parentFolderId": null,
                  "isFolder": true,
                  "createdAt": "2024-09-29T20:35:10.132Z",
                  "updatedAt": "2025-02-17T01:19:07.711Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a files record (fake — not persisted)",
        "operationId": "replace-files",
        "tags": ["files"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/FilesRecord" },
              "example": {
                "id": 1,
                "ownerUserId": 231,
                "name": "Shared",
                "mimeType": "application/x-directory",
                "sizeBytes": 0,
                "url": "https://files.example.com/folders/1",
                "parentFolderId": null,
                "isFolder": true,
                "createdAt": "2024-09-29T20:35:10.132Z",
                "updatedAt": "2025-02-17T01:19:07.711Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FilesRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 231,
                  "name": "Shared",
                  "mimeType": "application/x-directory",
                  "sizeBytes": 0,
                  "url": "https://files.example.com/folders/1",
                  "parentFolderId": null,
                  "isFolder": true,
                  "createdAt": "2024-09-29T20:35:10.132Z",
                  "updatedAt": "2025-02-17T01:19:07.711Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a files record (fake — not persisted)",
        "operationId": "patch-files",
        "tags": ["files"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FilesRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 231,
                  "name": "Shared",
                  "mimeType": "application/x-directory",
                  "sizeBytes": 0,
                  "url": "https://files.example.com/folders/1",
                  "parentFolderId": null,
                  "isFolder": true,
                  "createdAt": "2024-09-29T20:35:10.132Z",
                  "updatedAt": "2025-02-17T01:19:07.711Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a files record (fake — not persisted)",
        "operationId": "delete-files",
        "tags": ["files"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/stocks": {
      "get": {
        "summary": "List stocks",
        "operationId": "list-stocks",
        "tags": ["stocks"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/StocksRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "symbol": "AAPL",
                      "name": "Apple Inc.",
                      "exchange": "NASDAQ",
                      "sector": "Technology",
                      "marketCap": 7226659649002,
                      "price": 2589.12,
                      "priceChangePercent24h": 8.12,
                      "volume24h": 297600310,
                      "createdAt": "2025-04-21T22:02:47.230Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/stocks?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a stocks record (fake — not persisted)",
        "operationId": "create-stocks",
        "tags": ["stocks"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/StocksRecord" },
              "example": {
                "id": 1,
                "symbol": "AAPL",
                "name": "Apple Inc.",
                "exchange": "NASDAQ",
                "sector": "Technology",
                "marketCap": 7226659649002,
                "price": 2589.12,
                "priceChangePercent24h": 8.12,
                "volume24h": 297600310,
                "createdAt": "2025-04-21T22:02:47.230Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StocksRecord" },
                "example": {
                  "id": 1,
                  "symbol": "AAPL",
                  "name": "Apple Inc.",
                  "exchange": "NASDAQ",
                  "sector": "Technology",
                  "marketCap": 7226659649002,
                  "price": 2589.12,
                  "priceChangePercent24h": 8.12,
                  "volume24h": 297600310,
                  "createdAt": "2025-04-21T22:02:47.230Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/stocks/{id}": {
      "get": {
        "summary": "Get one stocks record by id",
        "operationId": "get-stocks-by-id",
        "tags": ["stocks"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StocksRecord" },
                "example": {
                  "id": 1,
                  "symbol": "AAPL",
                  "name": "Apple Inc.",
                  "exchange": "NASDAQ",
                  "sector": "Technology",
                  "marketCap": 7226659649002,
                  "price": 2589.12,
                  "priceChangePercent24h": 8.12,
                  "volume24h": 297600310,
                  "createdAt": "2025-04-21T22:02:47.230Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a stocks record (fake — not persisted)",
        "operationId": "replace-stocks",
        "tags": ["stocks"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/StocksRecord" },
              "example": {
                "id": 1,
                "symbol": "AAPL",
                "name": "Apple Inc.",
                "exchange": "NASDAQ",
                "sector": "Technology",
                "marketCap": 7226659649002,
                "price": 2589.12,
                "priceChangePercent24h": 8.12,
                "volume24h": 297600310,
                "createdAt": "2025-04-21T22:02:47.230Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StocksRecord" },
                "example": {
                  "id": 1,
                  "symbol": "AAPL",
                  "name": "Apple Inc.",
                  "exchange": "NASDAQ",
                  "sector": "Technology",
                  "marketCap": 7226659649002,
                  "price": 2589.12,
                  "priceChangePercent24h": 8.12,
                  "volume24h": 297600310,
                  "createdAt": "2025-04-21T22:02:47.230Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a stocks record (fake — not persisted)",
        "operationId": "patch-stocks",
        "tags": ["stocks"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StocksRecord" },
                "example": {
                  "id": 1,
                  "symbol": "AAPL",
                  "name": "Apple Inc.",
                  "exchange": "NASDAQ",
                  "sector": "Technology",
                  "marketCap": 7226659649002,
                  "price": 2589.12,
                  "priceChangePercent24h": 8.12,
                  "volume24h": 297600310,
                  "createdAt": "2025-04-21T22:02:47.230Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a stocks record (fake — not persisted)",
        "operationId": "delete-stocks",
        "tags": ["stocks"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/crypto": {
      "get": {
        "summary": "List crypto",
        "operationId": "list-crypto",
        "tags": ["crypto"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CryptoRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "symbol": "BTC",
                      "name": "Bitcoin",
                      "slug": "bitcoin",
                      "marketCap": 900022500000,
                      "price": 46155,
                      "priceChangePercent24h": -2.04,
                      "volume24h": 7638122780,
                      "circulatingSupply": 19500000,
                      "totalSupply": 21000000,
                      "createdAt": "2026-02-07T01:29:08.434Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/crypto?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a crypto record (fake — not persisted)",
        "operationId": "create-crypto",
        "tags": ["crypto"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CryptoRecord" },
              "example": {
                "id": 1,
                "symbol": "BTC",
                "name": "Bitcoin",
                "slug": "bitcoin",
                "marketCap": 900022500000,
                "price": 46155,
                "priceChangePercent24h": -2.04,
                "volume24h": 7638122780,
                "circulatingSupply": 19500000,
                "totalSupply": 21000000,
                "createdAt": "2026-02-07T01:29:08.434Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CryptoRecord" },
                "example": {
                  "id": 1,
                  "symbol": "BTC",
                  "name": "Bitcoin",
                  "slug": "bitcoin",
                  "marketCap": 900022500000,
                  "price": 46155,
                  "priceChangePercent24h": -2.04,
                  "volume24h": 7638122780,
                  "circulatingSupply": 19500000,
                  "totalSupply": 21000000,
                  "createdAt": "2026-02-07T01:29:08.434Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/crypto/{id}": {
      "get": {
        "summary": "Get one crypto record by id",
        "operationId": "get-crypto-by-id",
        "tags": ["crypto"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CryptoRecord" },
                "example": {
                  "id": 1,
                  "symbol": "BTC",
                  "name": "Bitcoin",
                  "slug": "bitcoin",
                  "marketCap": 900022500000,
                  "price": 46155,
                  "priceChangePercent24h": -2.04,
                  "volume24h": 7638122780,
                  "circulatingSupply": 19500000,
                  "totalSupply": 21000000,
                  "createdAt": "2026-02-07T01:29:08.434Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a crypto record (fake — not persisted)",
        "operationId": "replace-crypto",
        "tags": ["crypto"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CryptoRecord" },
              "example": {
                "id": 1,
                "symbol": "BTC",
                "name": "Bitcoin",
                "slug": "bitcoin",
                "marketCap": 900022500000,
                "price": 46155,
                "priceChangePercent24h": -2.04,
                "volume24h": 7638122780,
                "circulatingSupply": 19500000,
                "totalSupply": 21000000,
                "createdAt": "2026-02-07T01:29:08.434Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CryptoRecord" },
                "example": {
                  "id": 1,
                  "symbol": "BTC",
                  "name": "Bitcoin",
                  "slug": "bitcoin",
                  "marketCap": 900022500000,
                  "price": 46155,
                  "priceChangePercent24h": -2.04,
                  "volume24h": 7638122780,
                  "circulatingSupply": 19500000,
                  "totalSupply": 21000000,
                  "createdAt": "2026-02-07T01:29:08.434Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a crypto record (fake — not persisted)",
        "operationId": "patch-crypto",
        "tags": ["crypto"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CryptoRecord" },
                "example": {
                  "id": 1,
                  "symbol": "BTC",
                  "name": "Bitcoin",
                  "slug": "bitcoin",
                  "marketCap": 900022500000,
                  "price": 46155,
                  "priceChangePercent24h": -2.04,
                  "volume24h": 7638122780,
                  "circulatingSupply": 19500000,
                  "totalSupply": 21000000,
                  "createdAt": "2026-02-07T01:29:08.434Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a crypto record (fake — not persisted)",
        "operationId": "delete-crypto",
        "tags": ["crypto"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/stock-holdings": {
      "get": {
        "summary": "List stock-holdings",
        "operationId": "list-stock-holdings",
        "tags": ["stock-holdings"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/StockHoldingsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 2,
                      "stockId": 5,
                      "quantity": 117.999,
                      "costBasis": 1627.48,
                      "purchasedAt": "2024-09-27T02:42:34.677Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/stock-holdings?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a stock-holdings record (fake — not persisted)",
        "operationId": "create-stock-holdings",
        "tags": ["stock-holdings"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/StockHoldingsRecord" },
              "example": {
                "id": 1,
                "userId": 2,
                "stockId": 5,
                "quantity": 117.999,
                "costBasis": 1627.48,
                "purchasedAt": "2024-09-27T02:42:34.677Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StockHoldingsRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "stockId": 5,
                  "quantity": 117.999,
                  "costBasis": 1627.48,
                  "purchasedAt": "2024-09-27T02:42:34.677Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/stock-holdings/{id}": {
      "get": {
        "summary": "Get one stock-holdings record by id",
        "operationId": "get-stock-holdings-by-id",
        "tags": ["stock-holdings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StockHoldingsRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "stockId": 5,
                  "quantity": 117.999,
                  "costBasis": 1627.48,
                  "purchasedAt": "2024-09-27T02:42:34.677Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a stock-holdings record (fake — not persisted)",
        "operationId": "replace-stock-holdings",
        "tags": ["stock-holdings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/StockHoldingsRecord" },
              "example": {
                "id": 1,
                "userId": 2,
                "stockId": 5,
                "quantity": 117.999,
                "costBasis": 1627.48,
                "purchasedAt": "2024-09-27T02:42:34.677Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StockHoldingsRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "stockId": 5,
                  "quantity": 117.999,
                  "costBasis": 1627.48,
                  "purchasedAt": "2024-09-27T02:42:34.677Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a stock-holdings record (fake — not persisted)",
        "operationId": "patch-stock-holdings",
        "tags": ["stock-holdings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StockHoldingsRecord" },
                "example": {
                  "id": 1,
                  "userId": 2,
                  "stockId": 5,
                  "quantity": 117.999,
                  "costBasis": 1627.48,
                  "purchasedAt": "2024-09-27T02:42:34.677Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a stock-holdings record (fake — not persisted)",
        "operationId": "delete-stock-holdings",
        "tags": ["stock-holdings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/crypto-holdings": {
      "get": {
        "summary": "List crypto-holdings",
        "operationId": "list-crypto-holdings",
        "tags": ["crypto-holdings"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CryptoHoldingsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "cryptoId": 13,
                      "quantity": 85.07869486,
                      "costBasis": 0.00000492,
                      "purchasedAt": "2025-03-11T09:55:17.870Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/crypto-holdings?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a crypto-holdings record (fake — not persisted)",
        "operationId": "create-crypto-holdings",
        "tags": ["crypto-holdings"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CryptoHoldingsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "cryptoId": 13,
                "quantity": 85.07869486,
                "costBasis": 0.00000492,
                "purchasedAt": "2025-03-11T09:55:17.870Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CryptoHoldingsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "cryptoId": 13,
                  "quantity": 85.07869486,
                  "costBasis": 0.00000492,
                  "purchasedAt": "2025-03-11T09:55:17.870Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/crypto-holdings/{id}": {
      "get": {
        "summary": "Get one crypto-holdings record by id",
        "operationId": "get-crypto-holdings-by-id",
        "tags": ["crypto-holdings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CryptoHoldingsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "cryptoId": 13,
                  "quantity": 85.07869486,
                  "costBasis": 0.00000492,
                  "purchasedAt": "2025-03-11T09:55:17.870Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a crypto-holdings record (fake — not persisted)",
        "operationId": "replace-crypto-holdings",
        "tags": ["crypto-holdings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CryptoHoldingsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "cryptoId": 13,
                "quantity": 85.07869486,
                "costBasis": 0.00000492,
                "purchasedAt": "2025-03-11T09:55:17.870Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CryptoHoldingsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "cryptoId": 13,
                  "quantity": 85.07869486,
                  "costBasis": 0.00000492,
                  "purchasedAt": "2025-03-11T09:55:17.870Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a crypto-holdings record (fake — not persisted)",
        "operationId": "patch-crypto-holdings",
        "tags": ["crypto-holdings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CryptoHoldingsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "cryptoId": 13,
                  "quantity": 85.07869486,
                  "costBasis": 0.00000492,
                  "purchasedAt": "2025-03-11T09:55:17.870Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a crypto-holdings record (fake — not persisted)",
        "operationId": "delete-crypto-holdings",
        "tags": ["crypto-holdings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/accounts": {
      "get": {
        "summary": "List accounts",
        "operationId": "list-accounts",
        "tags": ["accounts"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/AccountsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "name": "Emergency Fund",
                      "type": "savings",
                      "balance": 5751.77,
                      "currency": "EUR",
                      "isActive": true,
                      "createdAt": "2025-09-16T19:40:55.373Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/accounts?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a accounts record (fake — not persisted)",
        "operationId": "create-accounts",
        "tags": ["accounts"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/AccountsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "name": "Emergency Fund",
                "type": "savings",
                "balance": 5751.77,
                "currency": "EUR",
                "isActive": true,
                "createdAt": "2025-09-16T19:40:55.373Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AccountsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Emergency Fund",
                  "type": "savings",
                  "balance": 5751.77,
                  "currency": "EUR",
                  "isActive": true,
                  "createdAt": "2025-09-16T19:40:55.373Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/accounts/{id}": {
      "get": {
        "summary": "Get one accounts record by id",
        "operationId": "get-accounts-by-id",
        "tags": ["accounts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AccountsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Emergency Fund",
                  "type": "savings",
                  "balance": 5751.77,
                  "currency": "EUR",
                  "isActive": true,
                  "createdAt": "2025-09-16T19:40:55.373Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a accounts record (fake — not persisted)",
        "operationId": "replace-accounts",
        "tags": ["accounts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/AccountsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "name": "Emergency Fund",
                "type": "savings",
                "balance": 5751.77,
                "currency": "EUR",
                "isActive": true,
                "createdAt": "2025-09-16T19:40:55.373Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AccountsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Emergency Fund",
                  "type": "savings",
                  "balance": 5751.77,
                  "currency": "EUR",
                  "isActive": true,
                  "createdAt": "2025-09-16T19:40:55.373Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a accounts record (fake — not persisted)",
        "operationId": "patch-accounts",
        "tags": ["accounts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AccountsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Emergency Fund",
                  "type": "savings",
                  "balance": 5751.77,
                  "currency": "EUR",
                  "isActive": true,
                  "createdAt": "2025-09-16T19:40:55.373Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a accounts record (fake — not persisted)",
        "operationId": "delete-accounts",
        "tags": ["accounts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/transactions": {
      "get": {
        "summary": "List transactions",
        "operationId": "list-transactions",
        "tags": ["transactions"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/TransactionsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "accountId": 447,
                      "kind": "fee",
                      "amount": -3421.61,
                      "currency": "USD",
                      "description": "Late payment fee",
                      "status": "completed",
                      "occurredAt": "2024-10-17T08:57:01.284Z",
                      "createdAt": "2024-10-17T08:57:40.581Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/transactions?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a transactions record (fake — not persisted)",
        "operationId": "create-transactions",
        "tags": ["transactions"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TransactionsRecord" },
              "example": {
                "id": 1,
                "accountId": 447,
                "kind": "fee",
                "amount": -3421.61,
                "currency": "USD",
                "description": "Late payment fee",
                "status": "completed",
                "occurredAt": "2024-10-17T08:57:01.284Z",
                "createdAt": "2024-10-17T08:57:40.581Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TransactionsRecord" },
                "example": {
                  "id": 1,
                  "accountId": 447,
                  "kind": "fee",
                  "amount": -3421.61,
                  "currency": "USD",
                  "description": "Late payment fee",
                  "status": "completed",
                  "occurredAt": "2024-10-17T08:57:01.284Z",
                  "createdAt": "2024-10-17T08:57:40.581Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/transactions/{id}": {
      "get": {
        "summary": "Get one transactions record by id",
        "operationId": "get-transactions-by-id",
        "tags": ["transactions"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TransactionsRecord" },
                "example": {
                  "id": 1,
                  "accountId": 447,
                  "kind": "fee",
                  "amount": -3421.61,
                  "currency": "USD",
                  "description": "Late payment fee",
                  "status": "completed",
                  "occurredAt": "2024-10-17T08:57:01.284Z",
                  "createdAt": "2024-10-17T08:57:40.581Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a transactions record (fake — not persisted)",
        "operationId": "replace-transactions",
        "tags": ["transactions"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TransactionsRecord" },
              "example": {
                "id": 1,
                "accountId": 447,
                "kind": "fee",
                "amount": -3421.61,
                "currency": "USD",
                "description": "Late payment fee",
                "status": "completed",
                "occurredAt": "2024-10-17T08:57:01.284Z",
                "createdAt": "2024-10-17T08:57:40.581Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TransactionsRecord" },
                "example": {
                  "id": 1,
                  "accountId": 447,
                  "kind": "fee",
                  "amount": -3421.61,
                  "currency": "USD",
                  "description": "Late payment fee",
                  "status": "completed",
                  "occurredAt": "2024-10-17T08:57:01.284Z",
                  "createdAt": "2024-10-17T08:57:40.581Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a transactions record (fake — not persisted)",
        "operationId": "patch-transactions",
        "tags": ["transactions"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TransactionsRecord" },
                "example": {
                  "id": 1,
                  "accountId": 447,
                  "kind": "fee",
                  "amount": -3421.61,
                  "currency": "USD",
                  "description": "Late payment fee",
                  "status": "completed",
                  "occurredAt": "2024-10-17T08:57:01.284Z",
                  "createdAt": "2024-10-17T08:57:40.581Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a transactions record (fake — not persisted)",
        "operationId": "delete-transactions",
        "tags": ["transactions"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/budgets": {
      "get": {
        "summary": "List budgets",
        "operationId": "list-budgets",
        "tags": ["budgets"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/BudgetsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "name": "Groceries",
                      "categoryId": 18,
                      "amount": 4245.1,
                      "period": "quarterly",
                      "spent": 156.23,
                      "currency": "EUR",
                      "startsAt": "2024-12-03",
                      "endsAt": null,
                      "createdAt": "2025-12-09T19:44:56.377Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/budgets?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a budgets record (fake — not persisted)",
        "operationId": "create-budgets",
        "tags": ["budgets"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/BudgetsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "name": "Groceries",
                "categoryId": 18,
                "amount": 4245.1,
                "period": "quarterly",
                "spent": 156.23,
                "currency": "EUR",
                "startsAt": "2024-12-03",
                "endsAt": null,
                "createdAt": "2025-12-09T19:44:56.377Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BudgetsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Groceries",
                  "categoryId": 18,
                  "amount": 4245.1,
                  "period": "quarterly",
                  "spent": 156.23,
                  "currency": "EUR",
                  "startsAt": "2024-12-03",
                  "endsAt": null,
                  "createdAt": "2025-12-09T19:44:56.377Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/budgets/{id}": {
      "get": {
        "summary": "Get one budgets record by id",
        "operationId": "get-budgets-by-id",
        "tags": ["budgets"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BudgetsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Groceries",
                  "categoryId": 18,
                  "amount": 4245.1,
                  "period": "quarterly",
                  "spent": 156.23,
                  "currency": "EUR",
                  "startsAt": "2024-12-03",
                  "endsAt": null,
                  "createdAt": "2025-12-09T19:44:56.377Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a budgets record (fake — not persisted)",
        "operationId": "replace-budgets",
        "tags": ["budgets"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/BudgetsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "name": "Groceries",
                "categoryId": 18,
                "amount": 4245.1,
                "period": "quarterly",
                "spent": 156.23,
                "currency": "EUR",
                "startsAt": "2024-12-03",
                "endsAt": null,
                "createdAt": "2025-12-09T19:44:56.377Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BudgetsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Groceries",
                  "categoryId": 18,
                  "amount": 4245.1,
                  "period": "quarterly",
                  "spent": 156.23,
                  "currency": "EUR",
                  "startsAt": "2024-12-03",
                  "endsAt": null,
                  "createdAt": "2025-12-09T19:44:56.377Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a budgets record (fake — not persisted)",
        "operationId": "patch-budgets",
        "tags": ["budgets"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BudgetsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Groceries",
                  "categoryId": 18,
                  "amount": 4245.1,
                  "period": "quarterly",
                  "spent": 156.23,
                  "currency": "EUR",
                  "startsAt": "2024-12-03",
                  "endsAt": null,
                  "createdAt": "2025-12-09T19:44:56.377Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a budgets record (fake — not persisted)",
        "operationId": "delete-budgets",
        "tags": ["budgets"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/invoices": {
      "get": {
        "summary": "List invoices",
        "operationId": "list-invoices",
        "tags": ["invoices"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/InvoicesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "fromUserId": 211,
                      "toUserId": 74,
                      "invoiceNumber": "INV-2024-0001",
                      "status": "viewed",
                      "issuedAt": "2024-10-18T03:09:14.336Z",
                      "dueAt": "2024-11-27T03:09:14.336Z",
                      "paidAt": null,
                      "subtotal": 23575.44,
                      "tax": 3536.32,
                      "total": 27111.76,
                      "currency": "EUR",
                      "lineItems": [
                        {
                          "description": "Technical support",
                          "quantity": 40,
                          "unitPrice": 129.84,
                          "lineTotal": 5193.6
                        },
                        {
                          "description": "Data analysis",
                          "quantity": 30,
                          "unitPrice": 434.78,
                          "lineTotal": 13043.4
                        },
                        {
                          "description": "Quality assurance",
                          "quantity": 36,
                          "unitPrice": 108.75,
                          "lineTotal": 3915
                        },
                        {
                          "description": "Software development",
                          "quantity": 12,
                          "unitPrice": 118.62,
                          "lineTotal": 1423.44
                        }
                      ],
                      "createdAt": "2024-10-17T19:25:36.167Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/invoices?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a invoices record (fake — not persisted)",
        "operationId": "create-invoices",
        "tags": ["invoices"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/InvoicesRecord" },
              "example": {
                "id": 1,
                "fromUserId": 211,
                "toUserId": 74,
                "invoiceNumber": "INV-2024-0001",
                "status": "viewed",
                "issuedAt": "2024-10-18T03:09:14.336Z",
                "dueAt": "2024-11-27T03:09:14.336Z",
                "paidAt": null,
                "subtotal": 23575.44,
                "tax": 3536.32,
                "total": 27111.76,
                "currency": "EUR",
                "lineItems": [
                  {
                    "description": "Technical support",
                    "quantity": 40,
                    "unitPrice": 129.84,
                    "lineTotal": 5193.6
                  },
                  {
                    "description": "Data analysis",
                    "quantity": 30,
                    "unitPrice": 434.78,
                    "lineTotal": 13043.4
                  },
                  {
                    "description": "Quality assurance",
                    "quantity": 36,
                    "unitPrice": 108.75,
                    "lineTotal": 3915
                  },
                  {
                    "description": "Software development",
                    "quantity": 12,
                    "unitPrice": 118.62,
                    "lineTotal": 1423.44
                  }
                ],
                "createdAt": "2024-10-17T19:25:36.167Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/InvoicesRecord" },
                "example": {
                  "id": 1,
                  "fromUserId": 211,
                  "toUserId": 74,
                  "invoiceNumber": "INV-2024-0001",
                  "status": "viewed",
                  "issuedAt": "2024-10-18T03:09:14.336Z",
                  "dueAt": "2024-11-27T03:09:14.336Z",
                  "paidAt": null,
                  "subtotal": 23575.44,
                  "tax": 3536.32,
                  "total": 27111.76,
                  "currency": "EUR",
                  "lineItems": [
                    {
                      "description": "Technical support",
                      "quantity": 40,
                      "unitPrice": 129.84,
                      "lineTotal": 5193.6
                    },
                    {
                      "description": "Data analysis",
                      "quantity": 30,
                      "unitPrice": 434.78,
                      "lineTotal": 13043.4
                    },
                    {
                      "description": "Quality assurance",
                      "quantity": 36,
                      "unitPrice": 108.75,
                      "lineTotal": 3915
                    },
                    {
                      "description": "Software development",
                      "quantity": 12,
                      "unitPrice": 118.62,
                      "lineTotal": 1423.44
                    }
                  ],
                  "createdAt": "2024-10-17T19:25:36.167Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/invoices/{id}": {
      "get": {
        "summary": "Get one invoices record by id",
        "operationId": "get-invoices-by-id",
        "tags": ["invoices"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/InvoicesRecord" },
                "example": {
                  "id": 1,
                  "fromUserId": 211,
                  "toUserId": 74,
                  "invoiceNumber": "INV-2024-0001",
                  "status": "viewed",
                  "issuedAt": "2024-10-18T03:09:14.336Z",
                  "dueAt": "2024-11-27T03:09:14.336Z",
                  "paidAt": null,
                  "subtotal": 23575.44,
                  "tax": 3536.32,
                  "total": 27111.76,
                  "currency": "EUR",
                  "lineItems": [
                    {
                      "description": "Technical support",
                      "quantity": 40,
                      "unitPrice": 129.84,
                      "lineTotal": 5193.6
                    },
                    {
                      "description": "Data analysis",
                      "quantity": 30,
                      "unitPrice": 434.78,
                      "lineTotal": 13043.4
                    },
                    {
                      "description": "Quality assurance",
                      "quantity": 36,
                      "unitPrice": 108.75,
                      "lineTotal": 3915
                    },
                    {
                      "description": "Software development",
                      "quantity": 12,
                      "unitPrice": 118.62,
                      "lineTotal": 1423.44
                    }
                  ],
                  "createdAt": "2024-10-17T19:25:36.167Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a invoices record (fake — not persisted)",
        "operationId": "replace-invoices",
        "tags": ["invoices"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/InvoicesRecord" },
              "example": {
                "id": 1,
                "fromUserId": 211,
                "toUserId": 74,
                "invoiceNumber": "INV-2024-0001",
                "status": "viewed",
                "issuedAt": "2024-10-18T03:09:14.336Z",
                "dueAt": "2024-11-27T03:09:14.336Z",
                "paidAt": null,
                "subtotal": 23575.44,
                "tax": 3536.32,
                "total": 27111.76,
                "currency": "EUR",
                "lineItems": [
                  {
                    "description": "Technical support",
                    "quantity": 40,
                    "unitPrice": 129.84,
                    "lineTotal": 5193.6
                  },
                  {
                    "description": "Data analysis",
                    "quantity": 30,
                    "unitPrice": 434.78,
                    "lineTotal": 13043.4
                  },
                  {
                    "description": "Quality assurance",
                    "quantity": 36,
                    "unitPrice": 108.75,
                    "lineTotal": 3915
                  },
                  {
                    "description": "Software development",
                    "quantity": 12,
                    "unitPrice": 118.62,
                    "lineTotal": 1423.44
                  }
                ],
                "createdAt": "2024-10-17T19:25:36.167Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/InvoicesRecord" },
                "example": {
                  "id": 1,
                  "fromUserId": 211,
                  "toUserId": 74,
                  "invoiceNumber": "INV-2024-0001",
                  "status": "viewed",
                  "issuedAt": "2024-10-18T03:09:14.336Z",
                  "dueAt": "2024-11-27T03:09:14.336Z",
                  "paidAt": null,
                  "subtotal": 23575.44,
                  "tax": 3536.32,
                  "total": 27111.76,
                  "currency": "EUR",
                  "lineItems": [
                    {
                      "description": "Technical support",
                      "quantity": 40,
                      "unitPrice": 129.84,
                      "lineTotal": 5193.6
                    },
                    {
                      "description": "Data analysis",
                      "quantity": 30,
                      "unitPrice": 434.78,
                      "lineTotal": 13043.4
                    },
                    {
                      "description": "Quality assurance",
                      "quantity": 36,
                      "unitPrice": 108.75,
                      "lineTotal": 3915
                    },
                    {
                      "description": "Software development",
                      "quantity": 12,
                      "unitPrice": 118.62,
                      "lineTotal": 1423.44
                    }
                  ],
                  "createdAt": "2024-10-17T19:25:36.167Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a invoices record (fake — not persisted)",
        "operationId": "patch-invoices",
        "tags": ["invoices"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/InvoicesRecord" },
                "example": {
                  "id": 1,
                  "fromUserId": 211,
                  "toUserId": 74,
                  "invoiceNumber": "INV-2024-0001",
                  "status": "viewed",
                  "issuedAt": "2024-10-18T03:09:14.336Z",
                  "dueAt": "2024-11-27T03:09:14.336Z",
                  "paidAt": null,
                  "subtotal": 23575.44,
                  "tax": 3536.32,
                  "total": 27111.76,
                  "currency": "EUR",
                  "lineItems": [
                    {
                      "description": "Technical support",
                      "quantity": 40,
                      "unitPrice": 129.84,
                      "lineTotal": 5193.6
                    },
                    {
                      "description": "Data analysis",
                      "quantity": 30,
                      "unitPrice": 434.78,
                      "lineTotal": 13043.4
                    },
                    {
                      "description": "Quality assurance",
                      "quantity": 36,
                      "unitPrice": 108.75,
                      "lineTotal": 3915
                    },
                    {
                      "description": "Software development",
                      "quantity": 12,
                      "unitPrice": 118.62,
                      "lineTotal": 1423.44
                    }
                  ],
                  "createdAt": "2024-10-17T19:25:36.167Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a invoices record (fake — not persisted)",
        "operationId": "delete-invoices",
        "tags": ["invoices"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/articles": {
      "get": {
        "summary": "List articles",
        "operationId": "list-articles",
        "tags": ["articles"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ArticlesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 233,
                      "title": "Una verto denique solio dolores acsi dolores convoco",
                      "slug": "una-verto-denique-solio-dolores-acsi-dolores-convoco-1",
                      "excerpt": "Thesis tamdiu ventus sum consectetur decimus admoneo. Adstringo ceno tyrannus exercitationem tum decretum. Cultellus vulgivagus vorago conventus.",
                      "content": "Experimentation is at the heart of discovery. By testing assumptions systematically, we eliminate guesswork and build on solid, evidence-based foundations.\n\nSustainable growth requires intentional effort. Short-term gains that compromise long-term health are ultimately self-defeating and must be carefully avoided.\n\n## Introduction\n\nThe world of technology is evolving at an unprecedented pace. Every day, new discoveries reshape how we live, work, and interact with each other.\n\nData tells a compelling story. By analyzing patterns over time, we can make smarter decisions and anticipate challenges before they arise.\n\nCommunity plays a vital role in any ecosystem. When individuals share knowledge freely, everyone benefits and the collective intelligence grows exponentially.\n\n## Conclusion\n\nThe journey toward excellence is never complete. Each milestone reveals new possibilities, encouraging us to aim higher and push beyond previous limits.",
                      "category": "education",
                      "tags": ["remote-work", "design", "ai", "open-source"],
                      "readMinutes": 14,
                      "imageUrl": "https://picsum.photos/seed/article-1/800/450",
                      "isPublished": false,
                      "publishedAt": null,
                      "viewCount": 0,
                      "createdAt": "2025-08-05T14:44:09.124Z",
                      "updatedAt": "2025-08-31T23:46:19.041Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/articles?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a articles record (fake — not persisted)",
        "operationId": "create-articles",
        "tags": ["articles"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ArticlesRecord" },
              "example": {
                "id": 1,
                "userId": 233,
                "title": "Una verto denique solio dolores acsi dolores convoco",
                "slug": "una-verto-denique-solio-dolores-acsi-dolores-convoco-1",
                "excerpt": "Thesis tamdiu ventus sum consectetur decimus admoneo. Adstringo ceno tyrannus exercitationem tum decretum. Cultellus vulgivagus vorago conventus.",
                "content": "Experimentation is at the heart of discovery. By testing assumptions systematically, we eliminate guesswork and build on solid, evidence-based foundations.\n\nSustainable growth requires intentional effort. Short-term gains that compromise long-term health are ultimately self-defeating and must be carefully avoided.\n\n## Introduction\n\nThe world of technology is evolving at an unprecedented pace. Every day, new discoveries reshape how we live, work, and interact with each other.\n\nData tells a compelling story. By analyzing patterns over time, we can make smarter decisions and anticipate challenges before they arise.\n\nCommunity plays a vital role in any ecosystem. When individuals share knowledge freely, everyone benefits and the collective intelligence grows exponentially.\n\n## Conclusion\n\nThe journey toward excellence is never complete. Each milestone reveals new possibilities, encouraging us to aim higher and push beyond previous limits.",
                "category": "education",
                "tags": ["remote-work", "design", "ai", "open-source"],
                "readMinutes": 14,
                "imageUrl": "https://picsum.photos/seed/article-1/800/450",
                "isPublished": false,
                "publishedAt": null,
                "viewCount": 0,
                "createdAt": "2025-08-05T14:44:09.124Z",
                "updatedAt": "2025-08-31T23:46:19.041Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ArticlesRecord" },
                "example": {
                  "id": 1,
                  "userId": 233,
                  "title": "Una verto denique solio dolores acsi dolores convoco",
                  "slug": "una-verto-denique-solio-dolores-acsi-dolores-convoco-1",
                  "excerpt": "Thesis tamdiu ventus sum consectetur decimus admoneo. Adstringo ceno tyrannus exercitationem tum decretum. Cultellus vulgivagus vorago conventus.",
                  "content": "Experimentation is at the heart of discovery. By testing assumptions systematically, we eliminate guesswork and build on solid, evidence-based foundations.\n\nSustainable growth requires intentional effort. Short-term gains that compromise long-term health are ultimately self-defeating and must be carefully avoided.\n\n## Introduction\n\nThe world of technology is evolving at an unprecedented pace. Every day, new discoveries reshape how we live, work, and interact with each other.\n\nData tells a compelling story. By analyzing patterns over time, we can make smarter decisions and anticipate challenges before they arise.\n\nCommunity plays a vital role in any ecosystem. When individuals share knowledge freely, everyone benefits and the collective intelligence grows exponentially.\n\n## Conclusion\n\nThe journey toward excellence is never complete. Each milestone reveals new possibilities, encouraging us to aim higher and push beyond previous limits.",
                  "category": "education",
                  "tags": ["remote-work", "design", "ai", "open-source"],
                  "readMinutes": 14,
                  "imageUrl": "https://picsum.photos/seed/article-1/800/450",
                  "isPublished": false,
                  "publishedAt": null,
                  "viewCount": 0,
                  "createdAt": "2025-08-05T14:44:09.124Z",
                  "updatedAt": "2025-08-31T23:46:19.041Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/articles/{id}": {
      "get": {
        "summary": "Get one articles record by id",
        "operationId": "get-articles-by-id",
        "tags": ["articles"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ArticlesRecord" },
                "example": {
                  "id": 1,
                  "userId": 233,
                  "title": "Una verto denique solio dolores acsi dolores convoco",
                  "slug": "una-verto-denique-solio-dolores-acsi-dolores-convoco-1",
                  "excerpt": "Thesis tamdiu ventus sum consectetur decimus admoneo. Adstringo ceno tyrannus exercitationem tum decretum. Cultellus vulgivagus vorago conventus.",
                  "content": "Experimentation is at the heart of discovery. By testing assumptions systematically, we eliminate guesswork and build on solid, evidence-based foundations.\n\nSustainable growth requires intentional effort. Short-term gains that compromise long-term health are ultimately self-defeating and must be carefully avoided.\n\n## Introduction\n\nThe world of technology is evolving at an unprecedented pace. Every day, new discoveries reshape how we live, work, and interact with each other.\n\nData tells a compelling story. By analyzing patterns over time, we can make smarter decisions and anticipate challenges before they arise.\n\nCommunity plays a vital role in any ecosystem. When individuals share knowledge freely, everyone benefits and the collective intelligence grows exponentially.\n\n## Conclusion\n\nThe journey toward excellence is never complete. Each milestone reveals new possibilities, encouraging us to aim higher and push beyond previous limits.",
                  "category": "education",
                  "tags": ["remote-work", "design", "ai", "open-source"],
                  "readMinutes": 14,
                  "imageUrl": "https://picsum.photos/seed/article-1/800/450",
                  "isPublished": false,
                  "publishedAt": null,
                  "viewCount": 0,
                  "createdAt": "2025-08-05T14:44:09.124Z",
                  "updatedAt": "2025-08-31T23:46:19.041Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a articles record (fake — not persisted)",
        "operationId": "replace-articles",
        "tags": ["articles"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ArticlesRecord" },
              "example": {
                "id": 1,
                "userId": 233,
                "title": "Una verto denique solio dolores acsi dolores convoco",
                "slug": "una-verto-denique-solio-dolores-acsi-dolores-convoco-1",
                "excerpt": "Thesis tamdiu ventus sum consectetur decimus admoneo. Adstringo ceno tyrannus exercitationem tum decretum. Cultellus vulgivagus vorago conventus.",
                "content": "Experimentation is at the heart of discovery. By testing assumptions systematically, we eliminate guesswork and build on solid, evidence-based foundations.\n\nSustainable growth requires intentional effort. Short-term gains that compromise long-term health are ultimately self-defeating and must be carefully avoided.\n\n## Introduction\n\nThe world of technology is evolving at an unprecedented pace. Every day, new discoveries reshape how we live, work, and interact with each other.\n\nData tells a compelling story. By analyzing patterns over time, we can make smarter decisions and anticipate challenges before they arise.\n\nCommunity plays a vital role in any ecosystem. When individuals share knowledge freely, everyone benefits and the collective intelligence grows exponentially.\n\n## Conclusion\n\nThe journey toward excellence is never complete. Each milestone reveals new possibilities, encouraging us to aim higher and push beyond previous limits.",
                "category": "education",
                "tags": ["remote-work", "design", "ai", "open-source"],
                "readMinutes": 14,
                "imageUrl": "https://picsum.photos/seed/article-1/800/450",
                "isPublished": false,
                "publishedAt": null,
                "viewCount": 0,
                "createdAt": "2025-08-05T14:44:09.124Z",
                "updatedAt": "2025-08-31T23:46:19.041Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ArticlesRecord" },
                "example": {
                  "id": 1,
                  "userId": 233,
                  "title": "Una verto denique solio dolores acsi dolores convoco",
                  "slug": "una-verto-denique-solio-dolores-acsi-dolores-convoco-1",
                  "excerpt": "Thesis tamdiu ventus sum consectetur decimus admoneo. Adstringo ceno tyrannus exercitationem tum decretum. Cultellus vulgivagus vorago conventus.",
                  "content": "Experimentation is at the heart of discovery. By testing assumptions systematically, we eliminate guesswork and build on solid, evidence-based foundations.\n\nSustainable growth requires intentional effort. Short-term gains that compromise long-term health are ultimately self-defeating and must be carefully avoided.\n\n## Introduction\n\nThe world of technology is evolving at an unprecedented pace. Every day, new discoveries reshape how we live, work, and interact with each other.\n\nData tells a compelling story. By analyzing patterns over time, we can make smarter decisions and anticipate challenges before they arise.\n\nCommunity plays a vital role in any ecosystem. When individuals share knowledge freely, everyone benefits and the collective intelligence grows exponentially.\n\n## Conclusion\n\nThe journey toward excellence is never complete. Each milestone reveals new possibilities, encouraging us to aim higher and push beyond previous limits.",
                  "category": "education",
                  "tags": ["remote-work", "design", "ai", "open-source"],
                  "readMinutes": 14,
                  "imageUrl": "https://picsum.photos/seed/article-1/800/450",
                  "isPublished": false,
                  "publishedAt": null,
                  "viewCount": 0,
                  "createdAt": "2025-08-05T14:44:09.124Z",
                  "updatedAt": "2025-08-31T23:46:19.041Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a articles record (fake — not persisted)",
        "operationId": "patch-articles",
        "tags": ["articles"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ArticlesRecord" },
                "example": {
                  "id": 1,
                  "userId": 233,
                  "title": "Una verto denique solio dolores acsi dolores convoco",
                  "slug": "una-verto-denique-solio-dolores-acsi-dolores-convoco-1",
                  "excerpt": "Thesis tamdiu ventus sum consectetur decimus admoneo. Adstringo ceno tyrannus exercitationem tum decretum. Cultellus vulgivagus vorago conventus.",
                  "content": "Experimentation is at the heart of discovery. By testing assumptions systematically, we eliminate guesswork and build on solid, evidence-based foundations.\n\nSustainable growth requires intentional effort. Short-term gains that compromise long-term health are ultimately self-defeating and must be carefully avoided.\n\n## Introduction\n\nThe world of technology is evolving at an unprecedented pace. Every day, new discoveries reshape how we live, work, and interact with each other.\n\nData tells a compelling story. By analyzing patterns over time, we can make smarter decisions and anticipate challenges before they arise.\n\nCommunity plays a vital role in any ecosystem. When individuals share knowledge freely, everyone benefits and the collective intelligence grows exponentially.\n\n## Conclusion\n\nThe journey toward excellence is never complete. Each milestone reveals new possibilities, encouraging us to aim higher and push beyond previous limits.",
                  "category": "education",
                  "tags": ["remote-work", "design", "ai", "open-source"],
                  "readMinutes": 14,
                  "imageUrl": "https://picsum.photos/seed/article-1/800/450",
                  "isPublished": false,
                  "publishedAt": null,
                  "viewCount": 0,
                  "createdAt": "2025-08-05T14:44:09.124Z",
                  "updatedAt": "2025-08-31T23:46:19.041Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a articles record (fake — not persisted)",
        "operationId": "delete-articles",
        "tags": ["articles"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/videos": {
      "get": {
        "summary": "List videos",
        "operationId": "list-videos",
        "tags": ["videos"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/VideosRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 213,
                      "title": "Fugit validus admiratio virga",
                      "slug": "fugit-validus-admiratio-virga-1",
                      "description": "Vicinus ratione demergo undique. Quis tabella deinde accedo tenetur sophismata peccatus amet trucido spes. Optio error taceo viduo consuasor saepe voluptatum thymbra. Nam textilis creber sed asperiores comes.",
                      "videoUrl": "https://example.com/videos/1.mp4",
                      "thumbnailUrl": "https://picsum.photos/seed/video-1/1280/720",
                      "durationSeconds": 5038,
                      "viewCount": 1085373,
                      "likeCount": 31915,
                      "isPublic": true,
                      "publishedAt": "2023-08-22T09:07:45.341Z",
                      "createdAt": "2023-08-21T10:24:43.821Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/videos?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a videos record (fake — not persisted)",
        "operationId": "create-videos",
        "tags": ["videos"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/VideosRecord" },
              "example": {
                "id": 1,
                "userId": 213,
                "title": "Fugit validus admiratio virga",
                "slug": "fugit-validus-admiratio-virga-1",
                "description": "Vicinus ratione demergo undique. Quis tabella deinde accedo tenetur sophismata peccatus amet trucido spes. Optio error taceo viduo consuasor saepe voluptatum thymbra. Nam textilis creber sed asperiores comes.",
                "videoUrl": "https://example.com/videos/1.mp4",
                "thumbnailUrl": "https://picsum.photos/seed/video-1/1280/720",
                "durationSeconds": 5038,
                "viewCount": 1085373,
                "likeCount": 31915,
                "isPublic": true,
                "publishedAt": "2023-08-22T09:07:45.341Z",
                "createdAt": "2023-08-21T10:24:43.821Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/VideosRecord" },
                "example": {
                  "id": 1,
                  "userId": 213,
                  "title": "Fugit validus admiratio virga",
                  "slug": "fugit-validus-admiratio-virga-1",
                  "description": "Vicinus ratione demergo undique. Quis tabella deinde accedo tenetur sophismata peccatus amet trucido spes. Optio error taceo viduo consuasor saepe voluptatum thymbra. Nam textilis creber sed asperiores comes.",
                  "videoUrl": "https://example.com/videos/1.mp4",
                  "thumbnailUrl": "https://picsum.photos/seed/video-1/1280/720",
                  "durationSeconds": 5038,
                  "viewCount": 1085373,
                  "likeCount": 31915,
                  "isPublic": true,
                  "publishedAt": "2023-08-22T09:07:45.341Z",
                  "createdAt": "2023-08-21T10:24:43.821Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/videos/{id}": {
      "get": {
        "summary": "Get one videos record by id",
        "operationId": "get-videos-by-id",
        "tags": ["videos"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/VideosRecord" },
                "example": {
                  "id": 1,
                  "userId": 213,
                  "title": "Fugit validus admiratio virga",
                  "slug": "fugit-validus-admiratio-virga-1",
                  "description": "Vicinus ratione demergo undique. Quis tabella deinde accedo tenetur sophismata peccatus amet trucido spes. Optio error taceo viduo consuasor saepe voluptatum thymbra. Nam textilis creber sed asperiores comes.",
                  "videoUrl": "https://example.com/videos/1.mp4",
                  "thumbnailUrl": "https://picsum.photos/seed/video-1/1280/720",
                  "durationSeconds": 5038,
                  "viewCount": 1085373,
                  "likeCount": 31915,
                  "isPublic": true,
                  "publishedAt": "2023-08-22T09:07:45.341Z",
                  "createdAt": "2023-08-21T10:24:43.821Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a videos record (fake — not persisted)",
        "operationId": "replace-videos",
        "tags": ["videos"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/VideosRecord" },
              "example": {
                "id": 1,
                "userId": 213,
                "title": "Fugit validus admiratio virga",
                "slug": "fugit-validus-admiratio-virga-1",
                "description": "Vicinus ratione demergo undique. Quis tabella deinde accedo tenetur sophismata peccatus amet trucido spes. Optio error taceo viduo consuasor saepe voluptatum thymbra. Nam textilis creber sed asperiores comes.",
                "videoUrl": "https://example.com/videos/1.mp4",
                "thumbnailUrl": "https://picsum.photos/seed/video-1/1280/720",
                "durationSeconds": 5038,
                "viewCount": 1085373,
                "likeCount": 31915,
                "isPublic": true,
                "publishedAt": "2023-08-22T09:07:45.341Z",
                "createdAt": "2023-08-21T10:24:43.821Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/VideosRecord" },
                "example": {
                  "id": 1,
                  "userId": 213,
                  "title": "Fugit validus admiratio virga",
                  "slug": "fugit-validus-admiratio-virga-1",
                  "description": "Vicinus ratione demergo undique. Quis tabella deinde accedo tenetur sophismata peccatus amet trucido spes. Optio error taceo viduo consuasor saepe voluptatum thymbra. Nam textilis creber sed asperiores comes.",
                  "videoUrl": "https://example.com/videos/1.mp4",
                  "thumbnailUrl": "https://picsum.photos/seed/video-1/1280/720",
                  "durationSeconds": 5038,
                  "viewCount": 1085373,
                  "likeCount": 31915,
                  "isPublic": true,
                  "publishedAt": "2023-08-22T09:07:45.341Z",
                  "createdAt": "2023-08-21T10:24:43.821Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a videos record (fake — not persisted)",
        "operationId": "patch-videos",
        "tags": ["videos"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/VideosRecord" },
                "example": {
                  "id": 1,
                  "userId": 213,
                  "title": "Fugit validus admiratio virga",
                  "slug": "fugit-validus-admiratio-virga-1",
                  "description": "Vicinus ratione demergo undique. Quis tabella deinde accedo tenetur sophismata peccatus amet trucido spes. Optio error taceo viduo consuasor saepe voluptatum thymbra. Nam textilis creber sed asperiores comes.",
                  "videoUrl": "https://example.com/videos/1.mp4",
                  "thumbnailUrl": "https://picsum.photos/seed/video-1/1280/720",
                  "durationSeconds": 5038,
                  "viewCount": 1085373,
                  "likeCount": 31915,
                  "isPublic": true,
                  "publishedAt": "2023-08-22T09:07:45.341Z",
                  "createdAt": "2023-08-21T10:24:43.821Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a videos record (fake — not persisted)",
        "operationId": "delete-videos",
        "tags": ["videos"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/podcasts": {
      "get": {
        "summary": "List podcasts",
        "operationId": "list-podcasts",
        "tags": ["podcasts"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/PodcastsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Zboncak, Hudson and Jaskolski Podcast",
                      "slug": "zboncak-hudson-and-jaskolski-podcast-1",
                      "description": "Inventore delinquo admoneo aptus conventus dolores labore. Admoveo tabernus vacuus abduco adfero theologus civis. Cervus aliquam vestigium cimentarius alii caste.",
                      "hostName": "Renee Homenick",
                      "category": "sports",
                      "language": "Japanese",
                      "coverUrl": "https://picsum.photos/seed/podcast-1/500/500",
                      "episodeCount": 31,
                      "isExplicit": false,
                      "createdAt": "2026-03-25T05:33:17.845Z",
                      "updatedAt": "2026-04-01T22:26:42.645Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/podcasts?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a podcasts record (fake — not persisted)",
        "operationId": "create-podcasts",
        "tags": ["podcasts"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PodcastsRecord" },
              "example": {
                "id": 1,
                "name": "Zboncak, Hudson and Jaskolski Podcast",
                "slug": "zboncak-hudson-and-jaskolski-podcast-1",
                "description": "Inventore delinquo admoneo aptus conventus dolores labore. Admoveo tabernus vacuus abduco adfero theologus civis. Cervus aliquam vestigium cimentarius alii caste.",
                "hostName": "Renee Homenick",
                "category": "sports",
                "language": "Japanese",
                "coverUrl": "https://picsum.photos/seed/podcast-1/500/500",
                "episodeCount": 31,
                "isExplicit": false,
                "createdAt": "2026-03-25T05:33:17.845Z",
                "updatedAt": "2026-04-01T22:26:42.645Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PodcastsRecord" },
                "example": {
                  "id": 1,
                  "name": "Zboncak, Hudson and Jaskolski Podcast",
                  "slug": "zboncak-hudson-and-jaskolski-podcast-1",
                  "description": "Inventore delinquo admoneo aptus conventus dolores labore. Admoveo tabernus vacuus abduco adfero theologus civis. Cervus aliquam vestigium cimentarius alii caste.",
                  "hostName": "Renee Homenick",
                  "category": "sports",
                  "language": "Japanese",
                  "coverUrl": "https://picsum.photos/seed/podcast-1/500/500",
                  "episodeCount": 31,
                  "isExplicit": false,
                  "createdAt": "2026-03-25T05:33:17.845Z",
                  "updatedAt": "2026-04-01T22:26:42.645Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/podcasts/{id}": {
      "get": {
        "summary": "Get one podcasts record by id",
        "operationId": "get-podcasts-by-id",
        "tags": ["podcasts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PodcastsRecord" },
                "example": {
                  "id": 1,
                  "name": "Zboncak, Hudson and Jaskolski Podcast",
                  "slug": "zboncak-hudson-and-jaskolski-podcast-1",
                  "description": "Inventore delinquo admoneo aptus conventus dolores labore. Admoveo tabernus vacuus abduco adfero theologus civis. Cervus aliquam vestigium cimentarius alii caste.",
                  "hostName": "Renee Homenick",
                  "category": "sports",
                  "language": "Japanese",
                  "coverUrl": "https://picsum.photos/seed/podcast-1/500/500",
                  "episodeCount": 31,
                  "isExplicit": false,
                  "createdAt": "2026-03-25T05:33:17.845Z",
                  "updatedAt": "2026-04-01T22:26:42.645Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a podcasts record (fake — not persisted)",
        "operationId": "replace-podcasts",
        "tags": ["podcasts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PodcastsRecord" },
              "example": {
                "id": 1,
                "name": "Zboncak, Hudson and Jaskolski Podcast",
                "slug": "zboncak-hudson-and-jaskolski-podcast-1",
                "description": "Inventore delinquo admoneo aptus conventus dolores labore. Admoveo tabernus vacuus abduco adfero theologus civis. Cervus aliquam vestigium cimentarius alii caste.",
                "hostName": "Renee Homenick",
                "category": "sports",
                "language": "Japanese",
                "coverUrl": "https://picsum.photos/seed/podcast-1/500/500",
                "episodeCount": 31,
                "isExplicit": false,
                "createdAt": "2026-03-25T05:33:17.845Z",
                "updatedAt": "2026-04-01T22:26:42.645Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PodcastsRecord" },
                "example": {
                  "id": 1,
                  "name": "Zboncak, Hudson and Jaskolski Podcast",
                  "slug": "zboncak-hudson-and-jaskolski-podcast-1",
                  "description": "Inventore delinquo admoneo aptus conventus dolores labore. Admoveo tabernus vacuus abduco adfero theologus civis. Cervus aliquam vestigium cimentarius alii caste.",
                  "hostName": "Renee Homenick",
                  "category": "sports",
                  "language": "Japanese",
                  "coverUrl": "https://picsum.photos/seed/podcast-1/500/500",
                  "episodeCount": 31,
                  "isExplicit": false,
                  "createdAt": "2026-03-25T05:33:17.845Z",
                  "updatedAt": "2026-04-01T22:26:42.645Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a podcasts record (fake — not persisted)",
        "operationId": "patch-podcasts",
        "tags": ["podcasts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PodcastsRecord" },
                "example": {
                  "id": 1,
                  "name": "Zboncak, Hudson and Jaskolski Podcast",
                  "slug": "zboncak-hudson-and-jaskolski-podcast-1",
                  "description": "Inventore delinquo admoneo aptus conventus dolores labore. Admoveo tabernus vacuus abduco adfero theologus civis. Cervus aliquam vestigium cimentarius alii caste.",
                  "hostName": "Renee Homenick",
                  "category": "sports",
                  "language": "Japanese",
                  "coverUrl": "https://picsum.photos/seed/podcast-1/500/500",
                  "episodeCount": 31,
                  "isExplicit": false,
                  "createdAt": "2026-03-25T05:33:17.845Z",
                  "updatedAt": "2026-04-01T22:26:42.645Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a podcasts record (fake — not persisted)",
        "operationId": "delete-podcasts",
        "tags": ["podcasts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/podcast-episodes": {
      "get": {
        "summary": "List podcast-episodes",
        "operationId": "list-podcast-episodes",
        "tags": ["podcast-episodes"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/PodcastEpisodesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "podcastId": 1,
                      "title": "Sapiente aliquid aqua agnitio aurum",
                      "slug": "sapiente-aliquid-aqua-agnitio-aurum-1",
                      "description": "Ipsam reiciendis conitor suppono. Dolorum utroque caelestis ultio. Culpa demum commemoro commemoro deserunt minus caput. Aiunt suadeo usque alii tardus debeo.",
                      "audioUrl": "https://example.com/podcasts/1/episodes/1.mp3",
                      "durationSeconds": 448,
                      "episodeNumber": 1,
                      "seasonNumber": null,
                      "publishedAt": "2023-09-07T07:54:59.382Z",
                      "createdAt": "2023-09-06T07:59:02.380Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/podcast-episodes?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a podcast-episodes record (fake — not persisted)",
        "operationId": "create-podcast-episodes",
        "tags": ["podcast-episodes"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PodcastEpisodesRecord" },
              "example": {
                "id": 1,
                "podcastId": 1,
                "title": "Sapiente aliquid aqua agnitio aurum",
                "slug": "sapiente-aliquid-aqua-agnitio-aurum-1",
                "description": "Ipsam reiciendis conitor suppono. Dolorum utroque caelestis ultio. Culpa demum commemoro commemoro deserunt minus caput. Aiunt suadeo usque alii tardus debeo.",
                "audioUrl": "https://example.com/podcasts/1/episodes/1.mp3",
                "durationSeconds": 448,
                "episodeNumber": 1,
                "seasonNumber": null,
                "publishedAt": "2023-09-07T07:54:59.382Z",
                "createdAt": "2023-09-06T07:59:02.380Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PodcastEpisodesRecord" },
                "example": {
                  "id": 1,
                  "podcastId": 1,
                  "title": "Sapiente aliquid aqua agnitio aurum",
                  "slug": "sapiente-aliquid-aqua-agnitio-aurum-1",
                  "description": "Ipsam reiciendis conitor suppono. Dolorum utroque caelestis ultio. Culpa demum commemoro commemoro deserunt minus caput. Aiunt suadeo usque alii tardus debeo.",
                  "audioUrl": "https://example.com/podcasts/1/episodes/1.mp3",
                  "durationSeconds": 448,
                  "episodeNumber": 1,
                  "seasonNumber": null,
                  "publishedAt": "2023-09-07T07:54:59.382Z",
                  "createdAt": "2023-09-06T07:59:02.380Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/podcast-episodes/{id}": {
      "get": {
        "summary": "Get one podcast-episodes record by id",
        "operationId": "get-podcast-episodes-by-id",
        "tags": ["podcast-episodes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PodcastEpisodesRecord" },
                "example": {
                  "id": 1,
                  "podcastId": 1,
                  "title": "Sapiente aliquid aqua agnitio aurum",
                  "slug": "sapiente-aliquid-aqua-agnitio-aurum-1",
                  "description": "Ipsam reiciendis conitor suppono. Dolorum utroque caelestis ultio. Culpa demum commemoro commemoro deserunt minus caput. Aiunt suadeo usque alii tardus debeo.",
                  "audioUrl": "https://example.com/podcasts/1/episodes/1.mp3",
                  "durationSeconds": 448,
                  "episodeNumber": 1,
                  "seasonNumber": null,
                  "publishedAt": "2023-09-07T07:54:59.382Z",
                  "createdAt": "2023-09-06T07:59:02.380Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a podcast-episodes record (fake — not persisted)",
        "operationId": "replace-podcast-episodes",
        "tags": ["podcast-episodes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PodcastEpisodesRecord" },
              "example": {
                "id": 1,
                "podcastId": 1,
                "title": "Sapiente aliquid aqua agnitio aurum",
                "slug": "sapiente-aliquid-aqua-agnitio-aurum-1",
                "description": "Ipsam reiciendis conitor suppono. Dolorum utroque caelestis ultio. Culpa demum commemoro commemoro deserunt minus caput. Aiunt suadeo usque alii tardus debeo.",
                "audioUrl": "https://example.com/podcasts/1/episodes/1.mp3",
                "durationSeconds": 448,
                "episodeNumber": 1,
                "seasonNumber": null,
                "publishedAt": "2023-09-07T07:54:59.382Z",
                "createdAt": "2023-09-06T07:59:02.380Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PodcastEpisodesRecord" },
                "example": {
                  "id": 1,
                  "podcastId": 1,
                  "title": "Sapiente aliquid aqua agnitio aurum",
                  "slug": "sapiente-aliquid-aqua-agnitio-aurum-1",
                  "description": "Ipsam reiciendis conitor suppono. Dolorum utroque caelestis ultio. Culpa demum commemoro commemoro deserunt minus caput. Aiunt suadeo usque alii tardus debeo.",
                  "audioUrl": "https://example.com/podcasts/1/episodes/1.mp3",
                  "durationSeconds": 448,
                  "episodeNumber": 1,
                  "seasonNumber": null,
                  "publishedAt": "2023-09-07T07:54:59.382Z",
                  "createdAt": "2023-09-06T07:59:02.380Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a podcast-episodes record (fake — not persisted)",
        "operationId": "patch-podcast-episodes",
        "tags": ["podcast-episodes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PodcastEpisodesRecord" },
                "example": {
                  "id": 1,
                  "podcastId": 1,
                  "title": "Sapiente aliquid aqua agnitio aurum",
                  "slug": "sapiente-aliquid-aqua-agnitio-aurum-1",
                  "description": "Ipsam reiciendis conitor suppono. Dolorum utroque caelestis ultio. Culpa demum commemoro commemoro deserunt minus caput. Aiunt suadeo usque alii tardus debeo.",
                  "audioUrl": "https://example.com/podcasts/1/episodes/1.mp3",
                  "durationSeconds": 448,
                  "episodeNumber": 1,
                  "seasonNumber": null,
                  "publishedAt": "2023-09-07T07:54:59.382Z",
                  "createdAt": "2023-09-06T07:59:02.380Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a podcast-episodes record (fake — not persisted)",
        "operationId": "delete-podcast-episodes",
        "tags": ["podcast-episodes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/books": {
      "get": {
        "summary": "List books",
        "operationId": "list-books",
        "tags": ["books"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/BooksRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "title": "Coniecto caput taceo",
                      "slug": "coniecto-caput-taceo-1",
                      "authors": ["Arnold Turcotte-Kiehn"],
                      "isbn": "9441056558693",
                      "publisher": "Vintage Books",
                      "publishedYear": 2016,
                      "pages": 472,
                      "language": "Spanish",
                      "description": "Certe dolores sit unde suadeo valeo at demulceo. Quisquam claudeo casso. Umbra sint arguo ulterius cogito inflammatio.",
                      "coverUrl": "https://picsum.photos/seed/book-1/400/600",
                      "genres": ["fantasy"],
                      "rating": 2.2,
                      "ratingCount": 24096,
                      "createdAt": "2024-08-05T01:33:54.486Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/books?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a books record (fake — not persisted)",
        "operationId": "create-books",
        "tags": ["books"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/BooksRecord" },
              "example": {
                "id": 1,
                "title": "Coniecto caput taceo",
                "slug": "coniecto-caput-taceo-1",
                "authors": ["Arnold Turcotte-Kiehn"],
                "isbn": "9441056558693",
                "publisher": "Vintage Books",
                "publishedYear": 2016,
                "pages": 472,
                "language": "Spanish",
                "description": "Certe dolores sit unde suadeo valeo at demulceo. Quisquam claudeo casso. Umbra sint arguo ulterius cogito inflammatio.",
                "coverUrl": "https://picsum.photos/seed/book-1/400/600",
                "genres": ["fantasy"],
                "rating": 2.2,
                "ratingCount": 24096,
                "createdAt": "2024-08-05T01:33:54.486Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BooksRecord" },
                "example": {
                  "id": 1,
                  "title": "Coniecto caput taceo",
                  "slug": "coniecto-caput-taceo-1",
                  "authors": ["Arnold Turcotte-Kiehn"],
                  "isbn": "9441056558693",
                  "publisher": "Vintage Books",
                  "publishedYear": 2016,
                  "pages": 472,
                  "language": "Spanish",
                  "description": "Certe dolores sit unde suadeo valeo at demulceo. Quisquam claudeo casso. Umbra sint arguo ulterius cogito inflammatio.",
                  "coverUrl": "https://picsum.photos/seed/book-1/400/600",
                  "genres": ["fantasy"],
                  "rating": 2.2,
                  "ratingCount": 24096,
                  "createdAt": "2024-08-05T01:33:54.486Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/books/{id}": {
      "get": {
        "summary": "Get one books record by id",
        "operationId": "get-books-by-id",
        "tags": ["books"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BooksRecord" },
                "example": {
                  "id": 1,
                  "title": "Coniecto caput taceo",
                  "slug": "coniecto-caput-taceo-1",
                  "authors": ["Arnold Turcotte-Kiehn"],
                  "isbn": "9441056558693",
                  "publisher": "Vintage Books",
                  "publishedYear": 2016,
                  "pages": 472,
                  "language": "Spanish",
                  "description": "Certe dolores sit unde suadeo valeo at demulceo. Quisquam claudeo casso. Umbra sint arguo ulterius cogito inflammatio.",
                  "coverUrl": "https://picsum.photos/seed/book-1/400/600",
                  "genres": ["fantasy"],
                  "rating": 2.2,
                  "ratingCount": 24096,
                  "createdAt": "2024-08-05T01:33:54.486Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a books record (fake — not persisted)",
        "operationId": "replace-books",
        "tags": ["books"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/BooksRecord" },
              "example": {
                "id": 1,
                "title": "Coniecto caput taceo",
                "slug": "coniecto-caput-taceo-1",
                "authors": ["Arnold Turcotte-Kiehn"],
                "isbn": "9441056558693",
                "publisher": "Vintage Books",
                "publishedYear": 2016,
                "pages": 472,
                "language": "Spanish",
                "description": "Certe dolores sit unde suadeo valeo at demulceo. Quisquam claudeo casso. Umbra sint arguo ulterius cogito inflammatio.",
                "coverUrl": "https://picsum.photos/seed/book-1/400/600",
                "genres": ["fantasy"],
                "rating": 2.2,
                "ratingCount": 24096,
                "createdAt": "2024-08-05T01:33:54.486Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BooksRecord" },
                "example": {
                  "id": 1,
                  "title": "Coniecto caput taceo",
                  "slug": "coniecto-caput-taceo-1",
                  "authors": ["Arnold Turcotte-Kiehn"],
                  "isbn": "9441056558693",
                  "publisher": "Vintage Books",
                  "publishedYear": 2016,
                  "pages": 472,
                  "language": "Spanish",
                  "description": "Certe dolores sit unde suadeo valeo at demulceo. Quisquam claudeo casso. Umbra sint arguo ulterius cogito inflammatio.",
                  "coverUrl": "https://picsum.photos/seed/book-1/400/600",
                  "genres": ["fantasy"],
                  "rating": 2.2,
                  "ratingCount": 24096,
                  "createdAt": "2024-08-05T01:33:54.486Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a books record (fake — not persisted)",
        "operationId": "patch-books",
        "tags": ["books"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BooksRecord" },
                "example": {
                  "id": 1,
                  "title": "Coniecto caput taceo",
                  "slug": "coniecto-caput-taceo-1",
                  "authors": ["Arnold Turcotte-Kiehn"],
                  "isbn": "9441056558693",
                  "publisher": "Vintage Books",
                  "publishedYear": 2016,
                  "pages": 472,
                  "language": "Spanish",
                  "description": "Certe dolores sit unde suadeo valeo at demulceo. Quisquam claudeo casso. Umbra sint arguo ulterius cogito inflammatio.",
                  "coverUrl": "https://picsum.photos/seed/book-1/400/600",
                  "genres": ["fantasy"],
                  "rating": 2.2,
                  "ratingCount": 24096,
                  "createdAt": "2024-08-05T01:33:54.486Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a books record (fake — not persisted)",
        "operationId": "delete-books",
        "tags": ["books"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/book-favs": {
      "get": {
        "summary": "List book-favs",
        "operationId": "list-book-favs",
        "tags": ["book-favs"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/BookFavsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    { "id": 1, "userId": 1, "bookId": 207, "savedAt": "2025-05-18T16:37:52.930Z" }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/book-favs?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a book-favs record (fake — not persisted)",
        "operationId": "create-book-favs",
        "tags": ["book-favs"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/BookFavsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "bookId": 207,
                "savedAt": "2025-05-18T16:37:52.930Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BookFavsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "bookId": 207,
                  "savedAt": "2025-05-18T16:37:52.930Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/book-favs/{id}": {
      "get": {
        "summary": "Get one book-favs record by id",
        "operationId": "get-book-favs-by-id",
        "tags": ["book-favs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BookFavsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "bookId": 207,
                  "savedAt": "2025-05-18T16:37:52.930Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a book-favs record (fake — not persisted)",
        "operationId": "replace-book-favs",
        "tags": ["book-favs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/BookFavsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "bookId": 207,
                "savedAt": "2025-05-18T16:37:52.930Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BookFavsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "bookId": 207,
                  "savedAt": "2025-05-18T16:37:52.930Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a book-favs record (fake — not persisted)",
        "operationId": "patch-book-favs",
        "tags": ["book-favs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/BookFavsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "bookId": 207,
                  "savedAt": "2025-05-18T16:37:52.930Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a book-favs record (fake — not persisted)",
        "operationId": "delete-book-favs",
        "tags": ["book-favs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/movies": {
      "get": {
        "summary": "List movies",
        "operationId": "list-movies",
        "tags": ["movies"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/MoviesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "title": "Cunae crebro",
                      "slug": "cunae-crebro-1",
                      "year": 1976,
                      "runtimeMinutes": 79,
                      "director": "Kate Kovacek",
                      "cast": [
                        "Ruben Lang III",
                        "Wayne Wehner IV",
                        "Nicolas Schimmel",
                        "Rita Friesen",
                        "Salvatore Wuckert",
                        "Kimberly Roob",
                        "Victoria Littel"
                      ],
                      "genres": ["comedy", "drama", "action"],
                      "language": "Spanish",
                      "plot": "Corpus amor animadverto viridis tui. Cinis ullam denuo decipio urbs magni xiphias denuncio tantum vindico. Sursum theatrum somnus tepidus accusator attero cohaero sui aliquam alienus. Vulnus uberrime tego congregatio arguo ventito capillus spiritus nulla.",
                      "posterUrl": "https://picsum.photos/seed/movie-1/400/600",
                      "rating": 5.7,
                      "ratingCount": 1800761,
                      "createdAt": "2025-09-27T09:51:52.518Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/movies?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a movies record (fake — not persisted)",
        "operationId": "create-movies",
        "tags": ["movies"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MoviesRecord" },
              "example": {
                "id": 1,
                "title": "Cunae crebro",
                "slug": "cunae-crebro-1",
                "year": 1976,
                "runtimeMinutes": 79,
                "director": "Kate Kovacek",
                "cast": [
                  "Ruben Lang III",
                  "Wayne Wehner IV",
                  "Nicolas Schimmel",
                  "Rita Friesen",
                  "Salvatore Wuckert",
                  "Kimberly Roob",
                  "Victoria Littel"
                ],
                "genres": ["comedy", "drama", "action"],
                "language": "Spanish",
                "plot": "Corpus amor animadverto viridis tui. Cinis ullam denuo decipio urbs magni xiphias denuncio tantum vindico. Sursum theatrum somnus tepidus accusator attero cohaero sui aliquam alienus. Vulnus uberrime tego congregatio arguo ventito capillus spiritus nulla.",
                "posterUrl": "https://picsum.photos/seed/movie-1/400/600",
                "rating": 5.7,
                "ratingCount": 1800761,
                "createdAt": "2025-09-27T09:51:52.518Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MoviesRecord" },
                "example": {
                  "id": 1,
                  "title": "Cunae crebro",
                  "slug": "cunae-crebro-1",
                  "year": 1976,
                  "runtimeMinutes": 79,
                  "director": "Kate Kovacek",
                  "cast": [
                    "Ruben Lang III",
                    "Wayne Wehner IV",
                    "Nicolas Schimmel",
                    "Rita Friesen",
                    "Salvatore Wuckert",
                    "Kimberly Roob",
                    "Victoria Littel"
                  ],
                  "genres": ["comedy", "drama", "action"],
                  "language": "Spanish",
                  "plot": "Corpus amor animadverto viridis tui. Cinis ullam denuo decipio urbs magni xiphias denuncio tantum vindico. Sursum theatrum somnus tepidus accusator attero cohaero sui aliquam alienus. Vulnus uberrime tego congregatio arguo ventito capillus spiritus nulla.",
                  "posterUrl": "https://picsum.photos/seed/movie-1/400/600",
                  "rating": 5.7,
                  "ratingCount": 1800761,
                  "createdAt": "2025-09-27T09:51:52.518Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/movies/{id}": {
      "get": {
        "summary": "Get one movies record by id",
        "operationId": "get-movies-by-id",
        "tags": ["movies"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MoviesRecord" },
                "example": {
                  "id": 1,
                  "title": "Cunae crebro",
                  "slug": "cunae-crebro-1",
                  "year": 1976,
                  "runtimeMinutes": 79,
                  "director": "Kate Kovacek",
                  "cast": [
                    "Ruben Lang III",
                    "Wayne Wehner IV",
                    "Nicolas Schimmel",
                    "Rita Friesen",
                    "Salvatore Wuckert",
                    "Kimberly Roob",
                    "Victoria Littel"
                  ],
                  "genres": ["comedy", "drama", "action"],
                  "language": "Spanish",
                  "plot": "Corpus amor animadverto viridis tui. Cinis ullam denuo decipio urbs magni xiphias denuncio tantum vindico. Sursum theatrum somnus tepidus accusator attero cohaero sui aliquam alienus. Vulnus uberrime tego congregatio arguo ventito capillus spiritus nulla.",
                  "posterUrl": "https://picsum.photos/seed/movie-1/400/600",
                  "rating": 5.7,
                  "ratingCount": 1800761,
                  "createdAt": "2025-09-27T09:51:52.518Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a movies record (fake — not persisted)",
        "operationId": "replace-movies",
        "tags": ["movies"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MoviesRecord" },
              "example": {
                "id": 1,
                "title": "Cunae crebro",
                "slug": "cunae-crebro-1",
                "year": 1976,
                "runtimeMinutes": 79,
                "director": "Kate Kovacek",
                "cast": [
                  "Ruben Lang III",
                  "Wayne Wehner IV",
                  "Nicolas Schimmel",
                  "Rita Friesen",
                  "Salvatore Wuckert",
                  "Kimberly Roob",
                  "Victoria Littel"
                ],
                "genres": ["comedy", "drama", "action"],
                "language": "Spanish",
                "plot": "Corpus amor animadverto viridis tui. Cinis ullam denuo decipio urbs magni xiphias denuncio tantum vindico. Sursum theatrum somnus tepidus accusator attero cohaero sui aliquam alienus. Vulnus uberrime tego congregatio arguo ventito capillus spiritus nulla.",
                "posterUrl": "https://picsum.photos/seed/movie-1/400/600",
                "rating": 5.7,
                "ratingCount": 1800761,
                "createdAt": "2025-09-27T09:51:52.518Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MoviesRecord" },
                "example": {
                  "id": 1,
                  "title": "Cunae crebro",
                  "slug": "cunae-crebro-1",
                  "year": 1976,
                  "runtimeMinutes": 79,
                  "director": "Kate Kovacek",
                  "cast": [
                    "Ruben Lang III",
                    "Wayne Wehner IV",
                    "Nicolas Schimmel",
                    "Rita Friesen",
                    "Salvatore Wuckert",
                    "Kimberly Roob",
                    "Victoria Littel"
                  ],
                  "genres": ["comedy", "drama", "action"],
                  "language": "Spanish",
                  "plot": "Corpus amor animadverto viridis tui. Cinis ullam denuo decipio urbs magni xiphias denuncio tantum vindico. Sursum theatrum somnus tepidus accusator attero cohaero sui aliquam alienus. Vulnus uberrime tego congregatio arguo ventito capillus spiritus nulla.",
                  "posterUrl": "https://picsum.photos/seed/movie-1/400/600",
                  "rating": 5.7,
                  "ratingCount": 1800761,
                  "createdAt": "2025-09-27T09:51:52.518Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a movies record (fake — not persisted)",
        "operationId": "patch-movies",
        "tags": ["movies"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MoviesRecord" },
                "example": {
                  "id": 1,
                  "title": "Cunae crebro",
                  "slug": "cunae-crebro-1",
                  "year": 1976,
                  "runtimeMinutes": 79,
                  "director": "Kate Kovacek",
                  "cast": [
                    "Ruben Lang III",
                    "Wayne Wehner IV",
                    "Nicolas Schimmel",
                    "Rita Friesen",
                    "Salvatore Wuckert",
                    "Kimberly Roob",
                    "Victoria Littel"
                  ],
                  "genres": ["comedy", "drama", "action"],
                  "language": "Spanish",
                  "plot": "Corpus amor animadverto viridis tui. Cinis ullam denuo decipio urbs magni xiphias denuncio tantum vindico. Sursum theatrum somnus tepidus accusator attero cohaero sui aliquam alienus. Vulnus uberrime tego congregatio arguo ventito capillus spiritus nulla.",
                  "posterUrl": "https://picsum.photos/seed/movie-1/400/600",
                  "rating": 5.7,
                  "ratingCount": 1800761,
                  "createdAt": "2025-09-27T09:51:52.518Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a movies record (fake — not persisted)",
        "operationId": "delete-movies",
        "tags": ["movies"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/tv-shows": {
      "get": {
        "summary": "List tv-shows",
        "operationId": "list-tv-shows",
        "tags": ["tv-shows"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/TvShowsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "title": "Coaegresco ancilla terebro confero",
                      "slug": "coaegresco-ancilla-terebro-confero-1",
                      "firstAired": "2018-08-04",
                      "lastAired": "2025-11-08",
                      "seasonCount": 2,
                      "episodeCount": 21,
                      "genres": ["adventure", "mystery"],
                      "language": "English",
                      "posterUrl": "https://picsum.photos/seed/tvshow-1/400/600",
                      "rating": 8.6,
                      "ratingCount": 492051,
                      "status": "ended",
                      "createdAt": "2023-09-01T01:43:29.348Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/tv-shows?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a tv-shows record (fake — not persisted)",
        "operationId": "create-tv-shows",
        "tags": ["tv-shows"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TvShowsRecord" },
              "example": {
                "id": 1,
                "title": "Coaegresco ancilla terebro confero",
                "slug": "coaegresco-ancilla-terebro-confero-1",
                "firstAired": "2018-08-04",
                "lastAired": "2025-11-08",
                "seasonCount": 2,
                "episodeCount": 21,
                "genres": ["adventure", "mystery"],
                "language": "English",
                "posterUrl": "https://picsum.photos/seed/tvshow-1/400/600",
                "rating": 8.6,
                "ratingCount": 492051,
                "status": "ended",
                "createdAt": "2023-09-01T01:43:29.348Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TvShowsRecord" },
                "example": {
                  "id": 1,
                  "title": "Coaegresco ancilla terebro confero",
                  "slug": "coaegresco-ancilla-terebro-confero-1",
                  "firstAired": "2018-08-04",
                  "lastAired": "2025-11-08",
                  "seasonCount": 2,
                  "episodeCount": 21,
                  "genres": ["adventure", "mystery"],
                  "language": "English",
                  "posterUrl": "https://picsum.photos/seed/tvshow-1/400/600",
                  "rating": 8.6,
                  "ratingCount": 492051,
                  "status": "ended",
                  "createdAt": "2023-09-01T01:43:29.348Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/tv-shows/{id}": {
      "get": {
        "summary": "Get one tv-shows record by id",
        "operationId": "get-tv-shows-by-id",
        "tags": ["tv-shows"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TvShowsRecord" },
                "example": {
                  "id": 1,
                  "title": "Coaegresco ancilla terebro confero",
                  "slug": "coaegresco-ancilla-terebro-confero-1",
                  "firstAired": "2018-08-04",
                  "lastAired": "2025-11-08",
                  "seasonCount": 2,
                  "episodeCount": 21,
                  "genres": ["adventure", "mystery"],
                  "language": "English",
                  "posterUrl": "https://picsum.photos/seed/tvshow-1/400/600",
                  "rating": 8.6,
                  "ratingCount": 492051,
                  "status": "ended",
                  "createdAt": "2023-09-01T01:43:29.348Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a tv-shows record (fake — not persisted)",
        "operationId": "replace-tv-shows",
        "tags": ["tv-shows"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TvShowsRecord" },
              "example": {
                "id": 1,
                "title": "Coaegresco ancilla terebro confero",
                "slug": "coaegresco-ancilla-terebro-confero-1",
                "firstAired": "2018-08-04",
                "lastAired": "2025-11-08",
                "seasonCount": 2,
                "episodeCount": 21,
                "genres": ["adventure", "mystery"],
                "language": "English",
                "posterUrl": "https://picsum.photos/seed/tvshow-1/400/600",
                "rating": 8.6,
                "ratingCount": 492051,
                "status": "ended",
                "createdAt": "2023-09-01T01:43:29.348Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TvShowsRecord" },
                "example": {
                  "id": 1,
                  "title": "Coaegresco ancilla terebro confero",
                  "slug": "coaegresco-ancilla-terebro-confero-1",
                  "firstAired": "2018-08-04",
                  "lastAired": "2025-11-08",
                  "seasonCount": 2,
                  "episodeCount": 21,
                  "genres": ["adventure", "mystery"],
                  "language": "English",
                  "posterUrl": "https://picsum.photos/seed/tvshow-1/400/600",
                  "rating": 8.6,
                  "ratingCount": 492051,
                  "status": "ended",
                  "createdAt": "2023-09-01T01:43:29.348Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a tv-shows record (fake — not persisted)",
        "operationId": "patch-tv-shows",
        "tags": ["tv-shows"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TvShowsRecord" },
                "example": {
                  "id": 1,
                  "title": "Coaegresco ancilla terebro confero",
                  "slug": "coaegresco-ancilla-terebro-confero-1",
                  "firstAired": "2018-08-04",
                  "lastAired": "2025-11-08",
                  "seasonCount": 2,
                  "episodeCount": 21,
                  "genres": ["adventure", "mystery"],
                  "language": "English",
                  "posterUrl": "https://picsum.photos/seed/tvshow-1/400/600",
                  "rating": 8.6,
                  "ratingCount": 492051,
                  "status": "ended",
                  "createdAt": "2023-09-01T01:43:29.348Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a tv-shows record (fake — not persisted)",
        "operationId": "delete-tv-shows",
        "tags": ["tv-shows"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/tv-episodes": {
      "get": {
        "summary": "List tv-episodes",
        "operationId": "list-tv-episodes",
        "tags": ["tv-episodes"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/TvEpisodesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "tvShowId": 1,
                      "title": "Tero suggero cervus acquiro uter",
                      "slug": "tero-suggero-cervus-acquiro-uter-1",
                      "seasonNumber": 1,
                      "episodeNumber": 1,
                      "airDate": "2020-12-02",
                      "runtimeMinutes": 26,
                      "description": "Tunc uterque architecto utpote adficio cognomen tubineus adeo. Pecto triumphus adstringo civitas utrimque comprehendo.",
                      "createdAt": "2025-02-05T16:58:37.658Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/tv-episodes?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a tv-episodes record (fake — not persisted)",
        "operationId": "create-tv-episodes",
        "tags": ["tv-episodes"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TvEpisodesRecord" },
              "example": {
                "id": 1,
                "tvShowId": 1,
                "title": "Tero suggero cervus acquiro uter",
                "slug": "tero-suggero-cervus-acquiro-uter-1",
                "seasonNumber": 1,
                "episodeNumber": 1,
                "airDate": "2020-12-02",
                "runtimeMinutes": 26,
                "description": "Tunc uterque architecto utpote adficio cognomen tubineus adeo. Pecto triumphus adstringo civitas utrimque comprehendo.",
                "createdAt": "2025-02-05T16:58:37.658Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TvEpisodesRecord" },
                "example": {
                  "id": 1,
                  "tvShowId": 1,
                  "title": "Tero suggero cervus acquiro uter",
                  "slug": "tero-suggero-cervus-acquiro-uter-1",
                  "seasonNumber": 1,
                  "episodeNumber": 1,
                  "airDate": "2020-12-02",
                  "runtimeMinutes": 26,
                  "description": "Tunc uterque architecto utpote adficio cognomen tubineus adeo. Pecto triumphus adstringo civitas utrimque comprehendo.",
                  "createdAt": "2025-02-05T16:58:37.658Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/tv-episodes/{id}": {
      "get": {
        "summary": "Get one tv-episodes record by id",
        "operationId": "get-tv-episodes-by-id",
        "tags": ["tv-episodes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TvEpisodesRecord" },
                "example": {
                  "id": 1,
                  "tvShowId": 1,
                  "title": "Tero suggero cervus acquiro uter",
                  "slug": "tero-suggero-cervus-acquiro-uter-1",
                  "seasonNumber": 1,
                  "episodeNumber": 1,
                  "airDate": "2020-12-02",
                  "runtimeMinutes": 26,
                  "description": "Tunc uterque architecto utpote adficio cognomen tubineus adeo. Pecto triumphus adstringo civitas utrimque comprehendo.",
                  "createdAt": "2025-02-05T16:58:37.658Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a tv-episodes record (fake — not persisted)",
        "operationId": "replace-tv-episodes",
        "tags": ["tv-episodes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/TvEpisodesRecord" },
              "example": {
                "id": 1,
                "tvShowId": 1,
                "title": "Tero suggero cervus acquiro uter",
                "slug": "tero-suggero-cervus-acquiro-uter-1",
                "seasonNumber": 1,
                "episodeNumber": 1,
                "airDate": "2020-12-02",
                "runtimeMinutes": 26,
                "description": "Tunc uterque architecto utpote adficio cognomen tubineus adeo. Pecto triumphus adstringo civitas utrimque comprehendo.",
                "createdAt": "2025-02-05T16:58:37.658Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TvEpisodesRecord" },
                "example": {
                  "id": 1,
                  "tvShowId": 1,
                  "title": "Tero suggero cervus acquiro uter",
                  "slug": "tero-suggero-cervus-acquiro-uter-1",
                  "seasonNumber": 1,
                  "episodeNumber": 1,
                  "airDate": "2020-12-02",
                  "runtimeMinutes": 26,
                  "description": "Tunc uterque architecto utpote adficio cognomen tubineus adeo. Pecto triumphus adstringo civitas utrimque comprehendo.",
                  "createdAt": "2025-02-05T16:58:37.658Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a tv-episodes record (fake — not persisted)",
        "operationId": "patch-tv-episodes",
        "tags": ["tv-episodes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/TvEpisodesRecord" },
                "example": {
                  "id": 1,
                  "tvShowId": 1,
                  "title": "Tero suggero cervus acquiro uter",
                  "slug": "tero-suggero-cervus-acquiro-uter-1",
                  "seasonNumber": 1,
                  "episodeNumber": 1,
                  "airDate": "2020-12-02",
                  "runtimeMinutes": 26,
                  "description": "Tunc uterque architecto utpote adficio cognomen tubineus adeo. Pecto triumphus adstringo civitas utrimque comprehendo.",
                  "createdAt": "2025-02-05T16:58:37.658Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a tv-episodes record (fake — not persisted)",
        "operationId": "delete-tv-episodes",
        "tags": ["tv-episodes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/artists": {
      "get": {
        "summary": "List artists",
        "operationId": "list-artists",
        "tags": ["artists"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ArtistsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Rolando Kulas",
                      "slug": "rolando-kulas-1",
                      "bio": "Tunc turpis odit amitto advoco aliquam. Cimentarius callide arx clam thymum quo. Eum adsum brevis demens laborum delectatio necessitatibus deludo. Chirographum creo ullus casso cribro cubitum caute nihil.",
                      "genres": ["r&b"],
                      "imageUrl": "https://picsum.photos/seed/artist-1/400/400",
                      "monthlyListeners": 40109765,
                      "formedYear": 2010,
                      "isVerified": true,
                      "createdAt": "2022-11-03T13:28:31.476Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/artists?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a artists record (fake — not persisted)",
        "operationId": "create-artists",
        "tags": ["artists"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ArtistsRecord" },
              "example": {
                "id": 1,
                "name": "Rolando Kulas",
                "slug": "rolando-kulas-1",
                "bio": "Tunc turpis odit amitto advoco aliquam. Cimentarius callide arx clam thymum quo. Eum adsum brevis demens laborum delectatio necessitatibus deludo. Chirographum creo ullus casso cribro cubitum caute nihil.",
                "genres": ["r&b"],
                "imageUrl": "https://picsum.photos/seed/artist-1/400/400",
                "monthlyListeners": 40109765,
                "formedYear": 2010,
                "isVerified": true,
                "createdAt": "2022-11-03T13:28:31.476Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ArtistsRecord" },
                "example": {
                  "id": 1,
                  "name": "Rolando Kulas",
                  "slug": "rolando-kulas-1",
                  "bio": "Tunc turpis odit amitto advoco aliquam. Cimentarius callide arx clam thymum quo. Eum adsum brevis demens laborum delectatio necessitatibus deludo. Chirographum creo ullus casso cribro cubitum caute nihil.",
                  "genres": ["r&b"],
                  "imageUrl": "https://picsum.photos/seed/artist-1/400/400",
                  "monthlyListeners": 40109765,
                  "formedYear": 2010,
                  "isVerified": true,
                  "createdAt": "2022-11-03T13:28:31.476Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/artists/{id}": {
      "get": {
        "summary": "Get one artists record by id",
        "operationId": "get-artists-by-id",
        "tags": ["artists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ArtistsRecord" },
                "example": {
                  "id": 1,
                  "name": "Rolando Kulas",
                  "slug": "rolando-kulas-1",
                  "bio": "Tunc turpis odit amitto advoco aliquam. Cimentarius callide arx clam thymum quo. Eum adsum brevis demens laborum delectatio necessitatibus deludo. Chirographum creo ullus casso cribro cubitum caute nihil.",
                  "genres": ["r&b"],
                  "imageUrl": "https://picsum.photos/seed/artist-1/400/400",
                  "monthlyListeners": 40109765,
                  "formedYear": 2010,
                  "isVerified": true,
                  "createdAt": "2022-11-03T13:28:31.476Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a artists record (fake — not persisted)",
        "operationId": "replace-artists",
        "tags": ["artists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ArtistsRecord" },
              "example": {
                "id": 1,
                "name": "Rolando Kulas",
                "slug": "rolando-kulas-1",
                "bio": "Tunc turpis odit amitto advoco aliquam. Cimentarius callide arx clam thymum quo. Eum adsum brevis demens laborum delectatio necessitatibus deludo. Chirographum creo ullus casso cribro cubitum caute nihil.",
                "genres": ["r&b"],
                "imageUrl": "https://picsum.photos/seed/artist-1/400/400",
                "monthlyListeners": 40109765,
                "formedYear": 2010,
                "isVerified": true,
                "createdAt": "2022-11-03T13:28:31.476Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ArtistsRecord" },
                "example": {
                  "id": 1,
                  "name": "Rolando Kulas",
                  "slug": "rolando-kulas-1",
                  "bio": "Tunc turpis odit amitto advoco aliquam. Cimentarius callide arx clam thymum quo. Eum adsum brevis demens laborum delectatio necessitatibus deludo. Chirographum creo ullus casso cribro cubitum caute nihil.",
                  "genres": ["r&b"],
                  "imageUrl": "https://picsum.photos/seed/artist-1/400/400",
                  "monthlyListeners": 40109765,
                  "formedYear": 2010,
                  "isVerified": true,
                  "createdAt": "2022-11-03T13:28:31.476Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a artists record (fake — not persisted)",
        "operationId": "patch-artists",
        "tags": ["artists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ArtistsRecord" },
                "example": {
                  "id": 1,
                  "name": "Rolando Kulas",
                  "slug": "rolando-kulas-1",
                  "bio": "Tunc turpis odit amitto advoco aliquam. Cimentarius callide arx clam thymum quo. Eum adsum brevis demens laborum delectatio necessitatibus deludo. Chirographum creo ullus casso cribro cubitum caute nihil.",
                  "genres": ["r&b"],
                  "imageUrl": "https://picsum.photos/seed/artist-1/400/400",
                  "monthlyListeners": 40109765,
                  "formedYear": 2010,
                  "isVerified": true,
                  "createdAt": "2022-11-03T13:28:31.476Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a artists record (fake — not persisted)",
        "operationId": "delete-artists",
        "tags": ["artists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/albums": {
      "get": {
        "summary": "List albums",
        "operationId": "list-albums",
        "tags": ["albums"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/AlbumsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "artistId": 1,
                      "title": "Addo",
                      "slug": "addo-1",
                      "releaseDate": "2004-09-07",
                      "trackCount": 9,
                      "durationSeconds": 3365,
                      "genres": ["soul", "electronic", "folk"],
                      "coverUrl": "https://picsum.photos/seed/album-1/500/500",
                      "createdAt": "2025-10-18T04:51:02.326Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/albums?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a albums record (fake — not persisted)",
        "operationId": "create-albums",
        "tags": ["albums"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/AlbumsRecord" },
              "example": {
                "id": 1,
                "artistId": 1,
                "title": "Addo",
                "slug": "addo-1",
                "releaseDate": "2004-09-07",
                "trackCount": 9,
                "durationSeconds": 3365,
                "genres": ["soul", "electronic", "folk"],
                "coverUrl": "https://picsum.photos/seed/album-1/500/500",
                "createdAt": "2025-10-18T04:51:02.326Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AlbumsRecord" },
                "example": {
                  "id": 1,
                  "artistId": 1,
                  "title": "Addo",
                  "slug": "addo-1",
                  "releaseDate": "2004-09-07",
                  "trackCount": 9,
                  "durationSeconds": 3365,
                  "genres": ["soul", "electronic", "folk"],
                  "coverUrl": "https://picsum.photos/seed/album-1/500/500",
                  "createdAt": "2025-10-18T04:51:02.326Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/albums/{id}": {
      "get": {
        "summary": "Get one albums record by id",
        "operationId": "get-albums-by-id",
        "tags": ["albums"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AlbumsRecord" },
                "example": {
                  "id": 1,
                  "artistId": 1,
                  "title": "Addo",
                  "slug": "addo-1",
                  "releaseDate": "2004-09-07",
                  "trackCount": 9,
                  "durationSeconds": 3365,
                  "genres": ["soul", "electronic", "folk"],
                  "coverUrl": "https://picsum.photos/seed/album-1/500/500",
                  "createdAt": "2025-10-18T04:51:02.326Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a albums record (fake — not persisted)",
        "operationId": "replace-albums",
        "tags": ["albums"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/AlbumsRecord" },
              "example": {
                "id": 1,
                "artistId": 1,
                "title": "Addo",
                "slug": "addo-1",
                "releaseDate": "2004-09-07",
                "trackCount": 9,
                "durationSeconds": 3365,
                "genres": ["soul", "electronic", "folk"],
                "coverUrl": "https://picsum.photos/seed/album-1/500/500",
                "createdAt": "2025-10-18T04:51:02.326Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AlbumsRecord" },
                "example": {
                  "id": 1,
                  "artistId": 1,
                  "title": "Addo",
                  "slug": "addo-1",
                  "releaseDate": "2004-09-07",
                  "trackCount": 9,
                  "durationSeconds": 3365,
                  "genres": ["soul", "electronic", "folk"],
                  "coverUrl": "https://picsum.photos/seed/album-1/500/500",
                  "createdAt": "2025-10-18T04:51:02.326Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a albums record (fake — not persisted)",
        "operationId": "patch-albums",
        "tags": ["albums"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AlbumsRecord" },
                "example": {
                  "id": 1,
                  "artistId": 1,
                  "title": "Addo",
                  "slug": "addo-1",
                  "releaseDate": "2004-09-07",
                  "trackCount": 9,
                  "durationSeconds": 3365,
                  "genres": ["soul", "electronic", "folk"],
                  "coverUrl": "https://picsum.photos/seed/album-1/500/500",
                  "createdAt": "2025-10-18T04:51:02.326Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a albums record (fake — not persisted)",
        "operationId": "delete-albums",
        "tags": ["albums"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/songs": {
      "get": {
        "summary": "List songs",
        "operationId": "list-songs",
        "tags": ["songs"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/SongsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "albumId": 1,
                      "artistId": 1,
                      "title": "Will It Go Round In Circles",
                      "slug": "will-it-go-round-in-circles-1",
                      "trackNumber": 1,
                      "durationSeconds": 143,
                      "isExplicit": false,
                      "playCount": 17622831,
                      "createdAt": "2022-06-01T17:10:51.068Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/songs?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a songs record (fake — not persisted)",
        "operationId": "create-songs",
        "tags": ["songs"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/SongsRecord" },
              "example": {
                "id": 1,
                "albumId": 1,
                "artistId": 1,
                "title": "Will It Go Round In Circles",
                "slug": "will-it-go-round-in-circles-1",
                "trackNumber": 1,
                "durationSeconds": 143,
                "isExplicit": false,
                "playCount": 17622831,
                "createdAt": "2022-06-01T17:10:51.068Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SongsRecord" },
                "example": {
                  "id": 1,
                  "albumId": 1,
                  "artistId": 1,
                  "title": "Will It Go Round In Circles",
                  "slug": "will-it-go-round-in-circles-1",
                  "trackNumber": 1,
                  "durationSeconds": 143,
                  "isExplicit": false,
                  "playCount": 17622831,
                  "createdAt": "2022-06-01T17:10:51.068Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/songs/{id}": {
      "get": {
        "summary": "Get one songs record by id",
        "operationId": "get-songs-by-id",
        "tags": ["songs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SongsRecord" },
                "example": {
                  "id": 1,
                  "albumId": 1,
                  "artistId": 1,
                  "title": "Will It Go Round In Circles",
                  "slug": "will-it-go-round-in-circles-1",
                  "trackNumber": 1,
                  "durationSeconds": 143,
                  "isExplicit": false,
                  "playCount": 17622831,
                  "createdAt": "2022-06-01T17:10:51.068Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a songs record (fake — not persisted)",
        "operationId": "replace-songs",
        "tags": ["songs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/SongsRecord" },
              "example": {
                "id": 1,
                "albumId": 1,
                "artistId": 1,
                "title": "Will It Go Round In Circles",
                "slug": "will-it-go-round-in-circles-1",
                "trackNumber": 1,
                "durationSeconds": 143,
                "isExplicit": false,
                "playCount": 17622831,
                "createdAt": "2022-06-01T17:10:51.068Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SongsRecord" },
                "example": {
                  "id": 1,
                  "albumId": 1,
                  "artistId": 1,
                  "title": "Will It Go Round In Circles",
                  "slug": "will-it-go-round-in-circles-1",
                  "trackNumber": 1,
                  "durationSeconds": 143,
                  "isExplicit": false,
                  "playCount": 17622831,
                  "createdAt": "2022-06-01T17:10:51.068Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a songs record (fake — not persisted)",
        "operationId": "patch-songs",
        "tags": ["songs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SongsRecord" },
                "example": {
                  "id": 1,
                  "albumId": 1,
                  "artistId": 1,
                  "title": "Will It Go Round In Circles",
                  "slug": "will-it-go-round-in-circles-1",
                  "trackNumber": 1,
                  "durationSeconds": 143,
                  "isExplicit": false,
                  "playCount": 17622831,
                  "createdAt": "2022-06-01T17:10:51.068Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a songs record (fake — not persisted)",
        "operationId": "delete-songs",
        "tags": ["songs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/playlists": {
      "get": {
        "summary": "List playlists",
        "operationId": "list-playlists",
        "tags": ["playlists"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/PlaylistsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 43,
                      "name": "When Doves Cry Mix",
                      "slug": "when-doves-cry-mix-1",
                      "description": "Virgo abstergo dolore ager ex autem conspergo vesper tamisium cura canis.",
                      "songIds": [
                        1095, 1910, 2416, 1482, 416, 2616, 1192, 1287, 855, 153, 21, 417, 1382
                      ],
                      "isPublic": true,
                      "coverUrl": "https://picsum.photos/seed/playlist-1/500/500",
                      "createdAt": "2025-08-18T18:59:01.651Z",
                      "updatedAt": "2025-08-19T04:35:38.799Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/playlists?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a playlists record (fake — not persisted)",
        "operationId": "create-playlists",
        "tags": ["playlists"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PlaylistsRecord" },
              "example": {
                "id": 1,
                "userId": 43,
                "name": "When Doves Cry Mix",
                "slug": "when-doves-cry-mix-1",
                "description": "Virgo abstergo dolore ager ex autem conspergo vesper tamisium cura canis.",
                "songIds": [1095, 1910, 2416, 1482, 416, 2616, 1192, 1287, 855, 153, 21, 417, 1382],
                "isPublic": true,
                "coverUrl": "https://picsum.photos/seed/playlist-1/500/500",
                "createdAt": "2025-08-18T18:59:01.651Z",
                "updatedAt": "2025-08-19T04:35:38.799Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PlaylistsRecord" },
                "example": {
                  "id": 1,
                  "userId": 43,
                  "name": "When Doves Cry Mix",
                  "slug": "when-doves-cry-mix-1",
                  "description": "Virgo abstergo dolore ager ex autem conspergo vesper tamisium cura canis.",
                  "songIds": [
                    1095, 1910, 2416, 1482, 416, 2616, 1192, 1287, 855, 153, 21, 417, 1382
                  ],
                  "isPublic": true,
                  "coverUrl": "https://picsum.photos/seed/playlist-1/500/500",
                  "createdAt": "2025-08-18T18:59:01.651Z",
                  "updatedAt": "2025-08-19T04:35:38.799Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/playlists/{id}": {
      "get": {
        "summary": "Get one playlists record by id",
        "operationId": "get-playlists-by-id",
        "tags": ["playlists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PlaylistsRecord" },
                "example": {
                  "id": 1,
                  "userId": 43,
                  "name": "When Doves Cry Mix",
                  "slug": "when-doves-cry-mix-1",
                  "description": "Virgo abstergo dolore ager ex autem conspergo vesper tamisium cura canis.",
                  "songIds": [
                    1095, 1910, 2416, 1482, 416, 2616, 1192, 1287, 855, 153, 21, 417, 1382
                  ],
                  "isPublic": true,
                  "coverUrl": "https://picsum.photos/seed/playlist-1/500/500",
                  "createdAt": "2025-08-18T18:59:01.651Z",
                  "updatedAt": "2025-08-19T04:35:38.799Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a playlists record (fake — not persisted)",
        "operationId": "replace-playlists",
        "tags": ["playlists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PlaylistsRecord" },
              "example": {
                "id": 1,
                "userId": 43,
                "name": "When Doves Cry Mix",
                "slug": "when-doves-cry-mix-1",
                "description": "Virgo abstergo dolore ager ex autem conspergo vesper tamisium cura canis.",
                "songIds": [1095, 1910, 2416, 1482, 416, 2616, 1192, 1287, 855, 153, 21, 417, 1382],
                "isPublic": true,
                "coverUrl": "https://picsum.photos/seed/playlist-1/500/500",
                "createdAt": "2025-08-18T18:59:01.651Z",
                "updatedAt": "2025-08-19T04:35:38.799Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PlaylistsRecord" },
                "example": {
                  "id": 1,
                  "userId": 43,
                  "name": "When Doves Cry Mix",
                  "slug": "when-doves-cry-mix-1",
                  "description": "Virgo abstergo dolore ager ex autem conspergo vesper tamisium cura canis.",
                  "songIds": [
                    1095, 1910, 2416, 1482, 416, 2616, 1192, 1287, 855, 153, 21, 417, 1382
                  ],
                  "isPublic": true,
                  "coverUrl": "https://picsum.photos/seed/playlist-1/500/500",
                  "createdAt": "2025-08-18T18:59:01.651Z",
                  "updatedAt": "2025-08-19T04:35:38.799Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a playlists record (fake — not persisted)",
        "operationId": "patch-playlists",
        "tags": ["playlists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PlaylistsRecord" },
                "example": {
                  "id": 1,
                  "userId": 43,
                  "name": "When Doves Cry Mix",
                  "slug": "when-doves-cry-mix-1",
                  "description": "Virgo abstergo dolore ager ex autem conspergo vesper tamisium cura canis.",
                  "songIds": [
                    1095, 1910, 2416, 1482, 416, 2616, 1192, 1287, 855, 153, 21, 417, 1382
                  ],
                  "isPublic": true,
                  "coverUrl": "https://picsum.photos/seed/playlist-1/500/500",
                  "createdAt": "2025-08-18T18:59:01.651Z",
                  "updatedAt": "2025-08-19T04:35:38.799Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a playlists record (fake — not persisted)",
        "operationId": "delete-playlists",
        "tags": ["playlists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/exercises": {
      "get": {
        "summary": "List exercises",
        "operationId": "list-exercises",
        "tags": ["exercises"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ExercisesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Bench Press",
                      "slug": "bench-press-1",
                      "muscleGroup": "chest",
                      "equipment": ["resistance band"],
                      "description": "Astrum aliquid defaeco assentator deinde vester doloremque stillicidium stabilis abeo desipio acervus tergeo voveo ancilla amplexus amissio ago auctus.",
                      "instructions": [
                        "Laudantium vulticulus color sub candidus utrimque deleo nemo at defluo auctor umquam conventus acer rem.",
                        "Denique patruus theca cultura atrocitas compello sponte victus.",
                        "Caelum illum commodo aedificium ventito ipsa pecto sub templum thesis comis claustrum.",
                        "Vitium terga carcer deleniti vinculum.",
                        "Teneo turbo ascit correptius administratio vulgus dapifer deduco.",
                        "Surgo verus perspiciatis censura depopulo tres denique infit accusamus abundans convoco pel vero arbitro."
                      ],
                      "createdAt": "2025-11-21T12:14:44.633Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/exercises?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a exercises record (fake — not persisted)",
        "operationId": "create-exercises",
        "tags": ["exercises"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ExercisesRecord" },
              "example": {
                "id": 1,
                "name": "Bench Press",
                "slug": "bench-press-1",
                "muscleGroup": "chest",
                "equipment": ["resistance band"],
                "description": "Astrum aliquid defaeco assentator deinde vester doloremque stillicidium stabilis abeo desipio acervus tergeo voveo ancilla amplexus amissio ago auctus.",
                "instructions": [
                  "Laudantium vulticulus color sub candidus utrimque deleo nemo at defluo auctor umquam conventus acer rem.",
                  "Denique patruus theca cultura atrocitas compello sponte victus.",
                  "Caelum illum commodo aedificium ventito ipsa pecto sub templum thesis comis claustrum.",
                  "Vitium terga carcer deleniti vinculum.",
                  "Teneo turbo ascit correptius administratio vulgus dapifer deduco.",
                  "Surgo verus perspiciatis censura depopulo tres denique infit accusamus abundans convoco pel vero arbitro."
                ],
                "createdAt": "2025-11-21T12:14:44.633Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ExercisesRecord" },
                "example": {
                  "id": 1,
                  "name": "Bench Press",
                  "slug": "bench-press-1",
                  "muscleGroup": "chest",
                  "equipment": ["resistance band"],
                  "description": "Astrum aliquid defaeco assentator deinde vester doloremque stillicidium stabilis abeo desipio acervus tergeo voveo ancilla amplexus amissio ago auctus.",
                  "instructions": [
                    "Laudantium vulticulus color sub candidus utrimque deleo nemo at defluo auctor umquam conventus acer rem.",
                    "Denique patruus theca cultura atrocitas compello sponte victus.",
                    "Caelum illum commodo aedificium ventito ipsa pecto sub templum thesis comis claustrum.",
                    "Vitium terga carcer deleniti vinculum.",
                    "Teneo turbo ascit correptius administratio vulgus dapifer deduco.",
                    "Surgo verus perspiciatis censura depopulo tres denique infit accusamus abundans convoco pel vero arbitro."
                  ],
                  "createdAt": "2025-11-21T12:14:44.633Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/exercises/{id}": {
      "get": {
        "summary": "Get one exercises record by id",
        "operationId": "get-exercises-by-id",
        "tags": ["exercises"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ExercisesRecord" },
                "example": {
                  "id": 1,
                  "name": "Bench Press",
                  "slug": "bench-press-1",
                  "muscleGroup": "chest",
                  "equipment": ["resistance band"],
                  "description": "Astrum aliquid defaeco assentator deinde vester doloremque stillicidium stabilis abeo desipio acervus tergeo voveo ancilla amplexus amissio ago auctus.",
                  "instructions": [
                    "Laudantium vulticulus color sub candidus utrimque deleo nemo at defluo auctor umquam conventus acer rem.",
                    "Denique patruus theca cultura atrocitas compello sponte victus.",
                    "Caelum illum commodo aedificium ventito ipsa pecto sub templum thesis comis claustrum.",
                    "Vitium terga carcer deleniti vinculum.",
                    "Teneo turbo ascit correptius administratio vulgus dapifer deduco.",
                    "Surgo verus perspiciatis censura depopulo tres denique infit accusamus abundans convoco pel vero arbitro."
                  ],
                  "createdAt": "2025-11-21T12:14:44.633Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a exercises record (fake — not persisted)",
        "operationId": "replace-exercises",
        "tags": ["exercises"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ExercisesRecord" },
              "example": {
                "id": 1,
                "name": "Bench Press",
                "slug": "bench-press-1",
                "muscleGroup": "chest",
                "equipment": ["resistance band"],
                "description": "Astrum aliquid defaeco assentator deinde vester doloremque stillicidium stabilis abeo desipio acervus tergeo voveo ancilla amplexus amissio ago auctus.",
                "instructions": [
                  "Laudantium vulticulus color sub candidus utrimque deleo nemo at defluo auctor umquam conventus acer rem.",
                  "Denique patruus theca cultura atrocitas compello sponte victus.",
                  "Caelum illum commodo aedificium ventito ipsa pecto sub templum thesis comis claustrum.",
                  "Vitium terga carcer deleniti vinculum.",
                  "Teneo turbo ascit correptius administratio vulgus dapifer deduco.",
                  "Surgo verus perspiciatis censura depopulo tres denique infit accusamus abundans convoco pel vero arbitro."
                ],
                "createdAt": "2025-11-21T12:14:44.633Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ExercisesRecord" },
                "example": {
                  "id": 1,
                  "name": "Bench Press",
                  "slug": "bench-press-1",
                  "muscleGroup": "chest",
                  "equipment": ["resistance band"],
                  "description": "Astrum aliquid defaeco assentator deinde vester doloremque stillicidium stabilis abeo desipio acervus tergeo voveo ancilla amplexus amissio ago auctus.",
                  "instructions": [
                    "Laudantium vulticulus color sub candidus utrimque deleo nemo at defluo auctor umquam conventus acer rem.",
                    "Denique patruus theca cultura atrocitas compello sponte victus.",
                    "Caelum illum commodo aedificium ventito ipsa pecto sub templum thesis comis claustrum.",
                    "Vitium terga carcer deleniti vinculum.",
                    "Teneo turbo ascit correptius administratio vulgus dapifer deduco.",
                    "Surgo verus perspiciatis censura depopulo tres denique infit accusamus abundans convoco pel vero arbitro."
                  ],
                  "createdAt": "2025-11-21T12:14:44.633Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a exercises record (fake — not persisted)",
        "operationId": "patch-exercises",
        "tags": ["exercises"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ExercisesRecord" },
                "example": {
                  "id": 1,
                  "name": "Bench Press",
                  "slug": "bench-press-1",
                  "muscleGroup": "chest",
                  "equipment": ["resistance band"],
                  "description": "Astrum aliquid defaeco assentator deinde vester doloremque stillicidium stabilis abeo desipio acervus tergeo voveo ancilla amplexus amissio ago auctus.",
                  "instructions": [
                    "Laudantium vulticulus color sub candidus utrimque deleo nemo at defluo auctor umquam conventus acer rem.",
                    "Denique patruus theca cultura atrocitas compello sponte victus.",
                    "Caelum illum commodo aedificium ventito ipsa pecto sub templum thesis comis claustrum.",
                    "Vitium terga carcer deleniti vinculum.",
                    "Teneo turbo ascit correptius administratio vulgus dapifer deduco.",
                    "Surgo verus perspiciatis censura depopulo tres denique infit accusamus abundans convoco pel vero arbitro."
                  ],
                  "createdAt": "2025-11-21T12:14:44.633Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a exercises record (fake — not persisted)",
        "operationId": "delete-exercises",
        "tags": ["exercises"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/workouts": {
      "get": {
        "summary": "List workouts",
        "operationId": "list-workouts",
        "tags": ["workouts"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/WorkoutsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "kind": "sports",
                      "name": "HIIT Routine",
                      "durationMinutes": 17,
                      "caloriesBurned": 233,
                      "intensity": "very_high",
                      "notes": "Felt strong today",
                      "performedAt": "2026-04-19T03:56:37.746Z",
                      "createdAt": "2026-04-19T04:42:30.957Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/workouts?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a workouts record (fake — not persisted)",
        "operationId": "create-workouts",
        "tags": ["workouts"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/WorkoutsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "kind": "sports",
                "name": "HIIT Routine",
                "durationMinutes": 17,
                "caloriesBurned": 233,
                "intensity": "very_high",
                "notes": "Felt strong today",
                "performedAt": "2026-04-19T03:56:37.746Z",
                "createdAt": "2026-04-19T04:42:30.957Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/WorkoutsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "kind": "sports",
                  "name": "HIIT Routine",
                  "durationMinutes": 17,
                  "caloriesBurned": 233,
                  "intensity": "very_high",
                  "notes": "Felt strong today",
                  "performedAt": "2026-04-19T03:56:37.746Z",
                  "createdAt": "2026-04-19T04:42:30.957Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/workouts/{id}": {
      "get": {
        "summary": "Get one workouts record by id",
        "operationId": "get-workouts-by-id",
        "tags": ["workouts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/WorkoutsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "kind": "sports",
                  "name": "HIIT Routine",
                  "durationMinutes": 17,
                  "caloriesBurned": 233,
                  "intensity": "very_high",
                  "notes": "Felt strong today",
                  "performedAt": "2026-04-19T03:56:37.746Z",
                  "createdAt": "2026-04-19T04:42:30.957Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a workouts record (fake — not persisted)",
        "operationId": "replace-workouts",
        "tags": ["workouts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/WorkoutsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "kind": "sports",
                "name": "HIIT Routine",
                "durationMinutes": 17,
                "caloriesBurned": 233,
                "intensity": "very_high",
                "notes": "Felt strong today",
                "performedAt": "2026-04-19T03:56:37.746Z",
                "createdAt": "2026-04-19T04:42:30.957Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/WorkoutsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "kind": "sports",
                  "name": "HIIT Routine",
                  "durationMinutes": 17,
                  "caloriesBurned": 233,
                  "intensity": "very_high",
                  "notes": "Felt strong today",
                  "performedAt": "2026-04-19T03:56:37.746Z",
                  "createdAt": "2026-04-19T04:42:30.957Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a workouts record (fake — not persisted)",
        "operationId": "patch-workouts",
        "tags": ["workouts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/WorkoutsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "kind": "sports",
                  "name": "HIIT Routine",
                  "durationMinutes": 17,
                  "caloriesBurned": 233,
                  "intensity": "very_high",
                  "notes": "Felt strong today",
                  "performedAt": "2026-04-19T03:56:37.746Z",
                  "createdAt": "2026-04-19T04:42:30.957Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a workouts record (fake — not persisted)",
        "operationId": "delete-workouts",
        "tags": ["workouts"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/meals": {
      "get": {
        "summary": "List meals",
        "operationId": "list-meals",
        "tags": ["meals"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/MealsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "name": "Baked Salmon",
                      "kind": "dinner",
                      "calories": 565,
                      "proteinGrams": 53.6,
                      "carbsGrams": 18.6,
                      "fatGrams": 30.7,
                      "eatenAt": "2025-09-09T20:25:35.188Z",
                      "createdAt": "2025-09-09T20:49:18.988Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/meals?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a meals record (fake — not persisted)",
        "operationId": "create-meals",
        "tags": ["meals"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MealsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "name": "Baked Salmon",
                "kind": "dinner",
                "calories": 565,
                "proteinGrams": 53.6,
                "carbsGrams": 18.6,
                "fatGrams": 30.7,
                "eatenAt": "2025-09-09T20:25:35.188Z",
                "createdAt": "2025-09-09T20:49:18.988Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MealsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Baked Salmon",
                  "kind": "dinner",
                  "calories": 565,
                  "proteinGrams": 53.6,
                  "carbsGrams": 18.6,
                  "fatGrams": 30.7,
                  "eatenAt": "2025-09-09T20:25:35.188Z",
                  "createdAt": "2025-09-09T20:49:18.988Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/meals/{id}": {
      "get": {
        "summary": "Get one meals record by id",
        "operationId": "get-meals-by-id",
        "tags": ["meals"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MealsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Baked Salmon",
                  "kind": "dinner",
                  "calories": 565,
                  "proteinGrams": 53.6,
                  "carbsGrams": 18.6,
                  "fatGrams": 30.7,
                  "eatenAt": "2025-09-09T20:25:35.188Z",
                  "createdAt": "2025-09-09T20:49:18.988Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a meals record (fake — not persisted)",
        "operationId": "replace-meals",
        "tags": ["meals"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MealsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "name": "Baked Salmon",
                "kind": "dinner",
                "calories": 565,
                "proteinGrams": 53.6,
                "carbsGrams": 18.6,
                "fatGrams": 30.7,
                "eatenAt": "2025-09-09T20:25:35.188Z",
                "createdAt": "2025-09-09T20:49:18.988Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MealsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Baked Salmon",
                  "kind": "dinner",
                  "calories": 565,
                  "proteinGrams": 53.6,
                  "carbsGrams": 18.6,
                  "fatGrams": 30.7,
                  "eatenAt": "2025-09-09T20:25:35.188Z",
                  "createdAt": "2025-09-09T20:49:18.988Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a meals record (fake — not persisted)",
        "operationId": "patch-meals",
        "tags": ["meals"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MealsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Baked Salmon",
                  "kind": "dinner",
                  "calories": 565,
                  "proteinGrams": 53.6,
                  "carbsGrams": 18.6,
                  "fatGrams": 30.7,
                  "eatenAt": "2025-09-09T20:25:35.188Z",
                  "createdAt": "2025-09-09T20:49:18.988Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a meals record (fake — not persisted)",
        "operationId": "delete-meals",
        "tags": ["meals"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/nutrition-logs": {
      "get": {
        "summary": "List nutrition-logs",
        "operationId": "list-nutrition-logs",
        "tags": ["nutrition-logs"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/NutritionLogsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "date": "2026-04-16",
                      "totalCalories": 2795,
                      "totalProteinGrams": 82.6,
                      "totalCarbsGrams": 393.1,
                      "totalFatGrams": 99.1,
                      "waterMl": 1137,
                      "createdAt": "2026-04-16T23:59:59.999Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/nutrition-logs?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a nutrition-logs record (fake — not persisted)",
        "operationId": "create-nutrition-logs",
        "tags": ["nutrition-logs"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/NutritionLogsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "date": "2026-04-16",
                "totalCalories": 2795,
                "totalProteinGrams": 82.6,
                "totalCarbsGrams": 393.1,
                "totalFatGrams": 99.1,
                "waterMl": 1137,
                "createdAt": "2026-04-16T23:59:59.999Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/NutritionLogsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "date": "2026-04-16",
                  "totalCalories": 2795,
                  "totalProteinGrams": 82.6,
                  "totalCarbsGrams": 393.1,
                  "totalFatGrams": 99.1,
                  "waterMl": 1137,
                  "createdAt": "2026-04-16T23:59:59.999Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/nutrition-logs/{id}": {
      "get": {
        "summary": "Get one nutrition-logs record by id",
        "operationId": "get-nutrition-logs-by-id",
        "tags": ["nutrition-logs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/NutritionLogsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "date": "2026-04-16",
                  "totalCalories": 2795,
                  "totalProteinGrams": 82.6,
                  "totalCarbsGrams": 393.1,
                  "totalFatGrams": 99.1,
                  "waterMl": 1137,
                  "createdAt": "2026-04-16T23:59:59.999Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a nutrition-logs record (fake — not persisted)",
        "operationId": "replace-nutrition-logs",
        "tags": ["nutrition-logs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/NutritionLogsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "date": "2026-04-16",
                "totalCalories": 2795,
                "totalProteinGrams": 82.6,
                "totalCarbsGrams": 393.1,
                "totalFatGrams": 99.1,
                "waterMl": 1137,
                "createdAt": "2026-04-16T23:59:59.999Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/NutritionLogsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "date": "2026-04-16",
                  "totalCalories": 2795,
                  "totalProteinGrams": 82.6,
                  "totalCarbsGrams": 393.1,
                  "totalFatGrams": 99.1,
                  "waterMl": 1137,
                  "createdAt": "2026-04-16T23:59:59.999Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a nutrition-logs record (fake — not persisted)",
        "operationId": "patch-nutrition-logs",
        "tags": ["nutrition-logs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/NutritionLogsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "date": "2026-04-16",
                  "totalCalories": 2795,
                  "totalProteinGrams": 82.6,
                  "totalCarbsGrams": 393.1,
                  "totalFatGrams": 99.1,
                  "waterMl": 1137,
                  "createdAt": "2026-04-16T23:59:59.999Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a nutrition-logs record (fake — not persisted)",
        "operationId": "delete-nutrition-logs",
        "tags": ["nutrition-logs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/goals": {
      "get": {
        "summary": "List goals",
        "operationId": "list-goals",
        "tags": ["goals"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/GoalsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "name": "Lose weight",
                      "category": "weight",
                      "targetValue": 76.2,
                      "currentValue": 54.4,
                      "unit": "kg",
                      "deadline": null,
                      "isCompleted": false,
                      "createdAt": "2025-09-18T00:27:21.129Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/goals?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a goals record (fake — not persisted)",
        "operationId": "create-goals",
        "tags": ["goals"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/GoalsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "name": "Lose weight",
                "category": "weight",
                "targetValue": 76.2,
                "currentValue": 54.4,
                "unit": "kg",
                "deadline": null,
                "isCompleted": false,
                "createdAt": "2025-09-18T00:27:21.129Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/GoalsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Lose weight",
                  "category": "weight",
                  "targetValue": 76.2,
                  "currentValue": 54.4,
                  "unit": "kg",
                  "deadline": null,
                  "isCompleted": false,
                  "createdAt": "2025-09-18T00:27:21.129Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/goals/{id}": {
      "get": {
        "summary": "Get one goals record by id",
        "operationId": "get-goals-by-id",
        "tags": ["goals"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/GoalsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Lose weight",
                  "category": "weight",
                  "targetValue": 76.2,
                  "currentValue": 54.4,
                  "unit": "kg",
                  "deadline": null,
                  "isCompleted": false,
                  "createdAt": "2025-09-18T00:27:21.129Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a goals record (fake — not persisted)",
        "operationId": "replace-goals",
        "tags": ["goals"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/GoalsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "name": "Lose weight",
                "category": "weight",
                "targetValue": 76.2,
                "currentValue": 54.4,
                "unit": "kg",
                "deadline": null,
                "isCompleted": false,
                "createdAt": "2025-09-18T00:27:21.129Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/GoalsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Lose weight",
                  "category": "weight",
                  "targetValue": 76.2,
                  "currentValue": 54.4,
                  "unit": "kg",
                  "deadline": null,
                  "isCompleted": false,
                  "createdAt": "2025-09-18T00:27:21.129Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a goals record (fake — not persisted)",
        "operationId": "patch-goals",
        "tags": ["goals"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/GoalsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "name": "Lose weight",
                  "category": "weight",
                  "targetValue": 76.2,
                  "currentValue": 54.4,
                  "unit": "kg",
                  "deadline": null,
                  "isCompleted": false,
                  "createdAt": "2025-09-18T00:27:21.129Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a goals record (fake — not persisted)",
        "operationId": "delete-goals",
        "tags": ["goals"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/measurements": {
      "get": {
        "summary": "List measurements",
        "operationId": "list-measurements",
        "tags": ["measurements"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/MeasurementsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "kind": "resting_hr",
                      "value": 48.9,
                      "unit": "bpm",
                      "measuredAt": "2025-07-08T07:02:41.682Z",
                      "createdAt": "2025-07-08T07:11:11.881Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/measurements?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a measurements record (fake — not persisted)",
        "operationId": "create-measurements",
        "tags": ["measurements"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MeasurementsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "kind": "resting_hr",
                "value": 48.9,
                "unit": "bpm",
                "measuredAt": "2025-07-08T07:02:41.682Z",
                "createdAt": "2025-07-08T07:11:11.881Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MeasurementsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "kind": "resting_hr",
                  "value": 48.9,
                  "unit": "bpm",
                  "measuredAt": "2025-07-08T07:02:41.682Z",
                  "createdAt": "2025-07-08T07:11:11.881Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/measurements/{id}": {
      "get": {
        "summary": "Get one measurements record by id",
        "operationId": "get-measurements-by-id",
        "tags": ["measurements"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MeasurementsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "kind": "resting_hr",
                  "value": 48.9,
                  "unit": "bpm",
                  "measuredAt": "2025-07-08T07:02:41.682Z",
                  "createdAt": "2025-07-08T07:11:11.881Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a measurements record (fake — not persisted)",
        "operationId": "replace-measurements",
        "tags": ["measurements"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MeasurementsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "kind": "resting_hr",
                "value": 48.9,
                "unit": "bpm",
                "measuredAt": "2025-07-08T07:02:41.682Z",
                "createdAt": "2025-07-08T07:11:11.881Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MeasurementsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "kind": "resting_hr",
                  "value": 48.9,
                  "unit": "bpm",
                  "measuredAt": "2025-07-08T07:02:41.682Z",
                  "createdAt": "2025-07-08T07:11:11.881Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a measurements record (fake — not persisted)",
        "operationId": "patch-measurements",
        "tags": ["measurements"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MeasurementsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "kind": "resting_hr",
                  "value": 48.9,
                  "unit": "bpm",
                  "measuredAt": "2025-07-08T07:02:41.682Z",
                  "createdAt": "2025-07-08T07:11:11.881Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a measurements record (fake — not persisted)",
        "operationId": "delete-measurements",
        "tags": ["measurements"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/sleep-entries": {
      "get": {
        "summary": "List sleep-entries",
        "operationId": "list-sleep-entries",
        "tags": ["sleep-entries"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/SleepEntriesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "date": "2025-06-21",
                      "sleepAt": "2025-06-21T23:11:00.000Z",
                      "wakeAt": "2025-06-22T05:53:00.000Z",
                      "durationMinutes": 402,
                      "quality": 3,
                      "createdAt": "2025-06-22T06:31:37.020Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/sleep-entries?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a sleep-entries record (fake — not persisted)",
        "operationId": "create-sleep-entries",
        "tags": ["sleep-entries"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/SleepEntriesRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "date": "2025-06-21",
                "sleepAt": "2025-06-21T23:11:00.000Z",
                "wakeAt": "2025-06-22T05:53:00.000Z",
                "durationMinutes": 402,
                "quality": 3,
                "createdAt": "2025-06-22T06:31:37.020Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SleepEntriesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "date": "2025-06-21",
                  "sleepAt": "2025-06-21T23:11:00.000Z",
                  "wakeAt": "2025-06-22T05:53:00.000Z",
                  "durationMinutes": 402,
                  "quality": 3,
                  "createdAt": "2025-06-22T06:31:37.020Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/sleep-entries/{id}": {
      "get": {
        "summary": "Get one sleep-entries record by id",
        "operationId": "get-sleep-entries-by-id",
        "tags": ["sleep-entries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SleepEntriesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "date": "2025-06-21",
                  "sleepAt": "2025-06-21T23:11:00.000Z",
                  "wakeAt": "2025-06-22T05:53:00.000Z",
                  "durationMinutes": 402,
                  "quality": 3,
                  "createdAt": "2025-06-22T06:31:37.020Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a sleep-entries record (fake — not persisted)",
        "operationId": "replace-sleep-entries",
        "tags": ["sleep-entries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/SleepEntriesRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "date": "2025-06-21",
                "sleepAt": "2025-06-21T23:11:00.000Z",
                "wakeAt": "2025-06-22T05:53:00.000Z",
                "durationMinutes": 402,
                "quality": 3,
                "createdAt": "2025-06-22T06:31:37.020Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SleepEntriesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "date": "2025-06-21",
                  "sleepAt": "2025-06-21T23:11:00.000Z",
                  "wakeAt": "2025-06-22T05:53:00.000Z",
                  "durationMinutes": 402,
                  "quality": 3,
                  "createdAt": "2025-06-22T06:31:37.020Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a sleep-entries record (fake — not persisted)",
        "operationId": "patch-sleep-entries",
        "tags": ["sleep-entries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SleepEntriesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "date": "2025-06-21",
                  "sleepAt": "2025-06-21T23:11:00.000Z",
                  "wakeAt": "2025-06-22T05:53:00.000Z",
                  "durationMinutes": 402,
                  "quality": 3,
                  "createdAt": "2025-06-22T06:31:37.020Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a sleep-entries record (fake — not persisted)",
        "operationId": "delete-sleep-entries",
        "tags": ["sleep-entries"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/courses": {
      "get": {
        "summary": "List courses",
        "operationId": "list-courses",
        "tags": ["courses"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CoursesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "instructorUserId": 38,
                      "title": "The Complete Guide to SEO",
                      "slug": "the-complete-guide-to-seo-1",
                      "description": "Dolorum demergo appello sopor vere terra spargo vinculum tollo. Vinum ars tandem cerno sunt dignissimos.",
                      "category": "marketing",
                      "difficulty": "intermediate",
                      "language": "English",
                      "durationHours": 24.5,
                      "priceFrom": 182.64,
                      "currency": "USD",
                      "thumbnailUrl": "https://picsum.photos/seed/course-1/800/450",
                      "rating": 4.2,
                      "ratingCount": 92,
                      "enrollmentCount": 191,
                      "isPublished": true,
                      "createdAt": "2024-07-10T05:31:49.481Z",
                      "updatedAt": "2024-08-25T23:52:33.141Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/courses?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a courses record (fake — not persisted)",
        "operationId": "create-courses",
        "tags": ["courses"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CoursesRecord" },
              "example": {
                "id": 1,
                "instructorUserId": 38,
                "title": "The Complete Guide to SEO",
                "slug": "the-complete-guide-to-seo-1",
                "description": "Dolorum demergo appello sopor vere terra spargo vinculum tollo. Vinum ars tandem cerno sunt dignissimos.",
                "category": "marketing",
                "difficulty": "intermediate",
                "language": "English",
                "durationHours": 24.5,
                "priceFrom": 182.64,
                "currency": "USD",
                "thumbnailUrl": "https://picsum.photos/seed/course-1/800/450",
                "rating": 4.2,
                "ratingCount": 92,
                "enrollmentCount": 191,
                "isPublished": true,
                "createdAt": "2024-07-10T05:31:49.481Z",
                "updatedAt": "2024-08-25T23:52:33.141Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CoursesRecord" },
                "example": {
                  "id": 1,
                  "instructorUserId": 38,
                  "title": "The Complete Guide to SEO",
                  "slug": "the-complete-guide-to-seo-1",
                  "description": "Dolorum demergo appello sopor vere terra spargo vinculum tollo. Vinum ars tandem cerno sunt dignissimos.",
                  "category": "marketing",
                  "difficulty": "intermediate",
                  "language": "English",
                  "durationHours": 24.5,
                  "priceFrom": 182.64,
                  "currency": "USD",
                  "thumbnailUrl": "https://picsum.photos/seed/course-1/800/450",
                  "rating": 4.2,
                  "ratingCount": 92,
                  "enrollmentCount": 191,
                  "isPublished": true,
                  "createdAt": "2024-07-10T05:31:49.481Z",
                  "updatedAt": "2024-08-25T23:52:33.141Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/courses/{id}": {
      "get": {
        "summary": "Get one courses record by id",
        "operationId": "get-courses-by-id",
        "tags": ["courses"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CoursesRecord" },
                "example": {
                  "id": 1,
                  "instructorUserId": 38,
                  "title": "The Complete Guide to SEO",
                  "slug": "the-complete-guide-to-seo-1",
                  "description": "Dolorum demergo appello sopor vere terra spargo vinculum tollo. Vinum ars tandem cerno sunt dignissimos.",
                  "category": "marketing",
                  "difficulty": "intermediate",
                  "language": "English",
                  "durationHours": 24.5,
                  "priceFrom": 182.64,
                  "currency": "USD",
                  "thumbnailUrl": "https://picsum.photos/seed/course-1/800/450",
                  "rating": 4.2,
                  "ratingCount": 92,
                  "enrollmentCount": 191,
                  "isPublished": true,
                  "createdAt": "2024-07-10T05:31:49.481Z",
                  "updatedAt": "2024-08-25T23:52:33.141Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a courses record (fake — not persisted)",
        "operationId": "replace-courses",
        "tags": ["courses"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CoursesRecord" },
              "example": {
                "id": 1,
                "instructorUserId": 38,
                "title": "The Complete Guide to SEO",
                "slug": "the-complete-guide-to-seo-1",
                "description": "Dolorum demergo appello sopor vere terra spargo vinculum tollo. Vinum ars tandem cerno sunt dignissimos.",
                "category": "marketing",
                "difficulty": "intermediate",
                "language": "English",
                "durationHours": 24.5,
                "priceFrom": 182.64,
                "currency": "USD",
                "thumbnailUrl": "https://picsum.photos/seed/course-1/800/450",
                "rating": 4.2,
                "ratingCount": 92,
                "enrollmentCount": 191,
                "isPublished": true,
                "createdAt": "2024-07-10T05:31:49.481Z",
                "updatedAt": "2024-08-25T23:52:33.141Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CoursesRecord" },
                "example": {
                  "id": 1,
                  "instructorUserId": 38,
                  "title": "The Complete Guide to SEO",
                  "slug": "the-complete-guide-to-seo-1",
                  "description": "Dolorum demergo appello sopor vere terra spargo vinculum tollo. Vinum ars tandem cerno sunt dignissimos.",
                  "category": "marketing",
                  "difficulty": "intermediate",
                  "language": "English",
                  "durationHours": 24.5,
                  "priceFrom": 182.64,
                  "currency": "USD",
                  "thumbnailUrl": "https://picsum.photos/seed/course-1/800/450",
                  "rating": 4.2,
                  "ratingCount": 92,
                  "enrollmentCount": 191,
                  "isPublished": true,
                  "createdAt": "2024-07-10T05:31:49.481Z",
                  "updatedAt": "2024-08-25T23:52:33.141Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a courses record (fake — not persisted)",
        "operationId": "patch-courses",
        "tags": ["courses"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CoursesRecord" },
                "example": {
                  "id": 1,
                  "instructorUserId": 38,
                  "title": "The Complete Guide to SEO",
                  "slug": "the-complete-guide-to-seo-1",
                  "description": "Dolorum demergo appello sopor vere terra spargo vinculum tollo. Vinum ars tandem cerno sunt dignissimos.",
                  "category": "marketing",
                  "difficulty": "intermediate",
                  "language": "English",
                  "durationHours": 24.5,
                  "priceFrom": 182.64,
                  "currency": "USD",
                  "thumbnailUrl": "https://picsum.photos/seed/course-1/800/450",
                  "rating": 4.2,
                  "ratingCount": 92,
                  "enrollmentCount": 191,
                  "isPublished": true,
                  "createdAt": "2024-07-10T05:31:49.481Z",
                  "updatedAt": "2024-08-25T23:52:33.141Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a courses record (fake — not persisted)",
        "operationId": "delete-courses",
        "tags": ["courses"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/lessons": {
      "get": {
        "summary": "List lessons",
        "operationId": "list-lessons",
        "tags": ["lessons"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/LessonsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "courseId": 1,
                      "title": "Exploring the Basics",
                      "slug": "exploring-the-basics-c1-0",
                      "description": "Vilis accusamus thymbra. Ex convoco angelus abscido apostolus.",
                      "content": "Antiquus coruscus mollitia. Laboriosam ipsa dapifer thymbra. Reiciendis non acquiro stipes dapifer.\n\nComburo bene corrigo esse una casus velut deinde. Arbustum tristis culpa coadunatio angelus auxilium curo. Thymum animadverto terreo eligendi uterque vicissitudo.\n\nMolestias doloremque certus consuasor fuga. Deprecator benevolentia voro absum valeo. Vitae aufero cuppedia spero pauper virga verto earum acsi.",
                      "sortOrder": 0,
                      "durationMinutes": 47,
                      "videoUrl": "https://example.com/courses/1/lessons/1.mp4",
                      "createdAt": "2024-08-10T10:49:02.504Z",
                      "updatedAt": "2024-08-21T01:15:59.960Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/lessons?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a lessons record (fake — not persisted)",
        "operationId": "create-lessons",
        "tags": ["lessons"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/LessonsRecord" },
              "example": {
                "id": 1,
                "courseId": 1,
                "title": "Exploring the Basics",
                "slug": "exploring-the-basics-c1-0",
                "description": "Vilis accusamus thymbra. Ex convoco angelus abscido apostolus.",
                "content": "Antiquus coruscus mollitia. Laboriosam ipsa dapifer thymbra. Reiciendis non acquiro stipes dapifer.\n\nComburo bene corrigo esse una casus velut deinde. Arbustum tristis culpa coadunatio angelus auxilium curo. Thymum animadverto terreo eligendi uterque vicissitudo.\n\nMolestias doloremque certus consuasor fuga. Deprecator benevolentia voro absum valeo. Vitae aufero cuppedia spero pauper virga verto earum acsi.",
                "sortOrder": 0,
                "durationMinutes": 47,
                "videoUrl": "https://example.com/courses/1/lessons/1.mp4",
                "createdAt": "2024-08-10T10:49:02.504Z",
                "updatedAt": "2024-08-21T01:15:59.960Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/LessonsRecord" },
                "example": {
                  "id": 1,
                  "courseId": 1,
                  "title": "Exploring the Basics",
                  "slug": "exploring-the-basics-c1-0",
                  "description": "Vilis accusamus thymbra. Ex convoco angelus abscido apostolus.",
                  "content": "Antiquus coruscus mollitia. Laboriosam ipsa dapifer thymbra. Reiciendis non acquiro stipes dapifer.\n\nComburo bene corrigo esse una casus velut deinde. Arbustum tristis culpa coadunatio angelus auxilium curo. Thymum animadverto terreo eligendi uterque vicissitudo.\n\nMolestias doloremque certus consuasor fuga. Deprecator benevolentia voro absum valeo. Vitae aufero cuppedia spero pauper virga verto earum acsi.",
                  "sortOrder": 0,
                  "durationMinutes": 47,
                  "videoUrl": "https://example.com/courses/1/lessons/1.mp4",
                  "createdAt": "2024-08-10T10:49:02.504Z",
                  "updatedAt": "2024-08-21T01:15:59.960Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/lessons/{id}": {
      "get": {
        "summary": "Get one lessons record by id",
        "operationId": "get-lessons-by-id",
        "tags": ["lessons"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/LessonsRecord" },
                "example": {
                  "id": 1,
                  "courseId": 1,
                  "title": "Exploring the Basics",
                  "slug": "exploring-the-basics-c1-0",
                  "description": "Vilis accusamus thymbra. Ex convoco angelus abscido apostolus.",
                  "content": "Antiquus coruscus mollitia. Laboriosam ipsa dapifer thymbra. Reiciendis non acquiro stipes dapifer.\n\nComburo bene corrigo esse una casus velut deinde. Arbustum tristis culpa coadunatio angelus auxilium curo. Thymum animadverto terreo eligendi uterque vicissitudo.\n\nMolestias doloremque certus consuasor fuga. Deprecator benevolentia voro absum valeo. Vitae aufero cuppedia spero pauper virga verto earum acsi.",
                  "sortOrder": 0,
                  "durationMinutes": 47,
                  "videoUrl": "https://example.com/courses/1/lessons/1.mp4",
                  "createdAt": "2024-08-10T10:49:02.504Z",
                  "updatedAt": "2024-08-21T01:15:59.960Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a lessons record (fake — not persisted)",
        "operationId": "replace-lessons",
        "tags": ["lessons"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/LessonsRecord" },
              "example": {
                "id": 1,
                "courseId": 1,
                "title": "Exploring the Basics",
                "slug": "exploring-the-basics-c1-0",
                "description": "Vilis accusamus thymbra. Ex convoco angelus abscido apostolus.",
                "content": "Antiquus coruscus mollitia. Laboriosam ipsa dapifer thymbra. Reiciendis non acquiro stipes dapifer.\n\nComburo bene corrigo esse una casus velut deinde. Arbustum tristis culpa coadunatio angelus auxilium curo. Thymum animadverto terreo eligendi uterque vicissitudo.\n\nMolestias doloremque certus consuasor fuga. Deprecator benevolentia voro absum valeo. Vitae aufero cuppedia spero pauper virga verto earum acsi.",
                "sortOrder": 0,
                "durationMinutes": 47,
                "videoUrl": "https://example.com/courses/1/lessons/1.mp4",
                "createdAt": "2024-08-10T10:49:02.504Z",
                "updatedAt": "2024-08-21T01:15:59.960Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/LessonsRecord" },
                "example": {
                  "id": 1,
                  "courseId": 1,
                  "title": "Exploring the Basics",
                  "slug": "exploring-the-basics-c1-0",
                  "description": "Vilis accusamus thymbra. Ex convoco angelus abscido apostolus.",
                  "content": "Antiquus coruscus mollitia. Laboriosam ipsa dapifer thymbra. Reiciendis non acquiro stipes dapifer.\n\nComburo bene corrigo esse una casus velut deinde. Arbustum tristis culpa coadunatio angelus auxilium curo. Thymum animadverto terreo eligendi uterque vicissitudo.\n\nMolestias doloremque certus consuasor fuga. Deprecator benevolentia voro absum valeo. Vitae aufero cuppedia spero pauper virga verto earum acsi.",
                  "sortOrder": 0,
                  "durationMinutes": 47,
                  "videoUrl": "https://example.com/courses/1/lessons/1.mp4",
                  "createdAt": "2024-08-10T10:49:02.504Z",
                  "updatedAt": "2024-08-21T01:15:59.960Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a lessons record (fake — not persisted)",
        "operationId": "patch-lessons",
        "tags": ["lessons"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/LessonsRecord" },
                "example": {
                  "id": 1,
                  "courseId": 1,
                  "title": "Exploring the Basics",
                  "slug": "exploring-the-basics-c1-0",
                  "description": "Vilis accusamus thymbra. Ex convoco angelus abscido apostolus.",
                  "content": "Antiquus coruscus mollitia. Laboriosam ipsa dapifer thymbra. Reiciendis non acquiro stipes dapifer.\n\nComburo bene corrigo esse una casus velut deinde. Arbustum tristis culpa coadunatio angelus auxilium curo. Thymum animadverto terreo eligendi uterque vicissitudo.\n\nMolestias doloremque certus consuasor fuga. Deprecator benevolentia voro absum valeo. Vitae aufero cuppedia spero pauper virga verto earum acsi.",
                  "sortOrder": 0,
                  "durationMinutes": 47,
                  "videoUrl": "https://example.com/courses/1/lessons/1.mp4",
                  "createdAt": "2024-08-10T10:49:02.504Z",
                  "updatedAt": "2024-08-21T01:15:59.960Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a lessons record (fake — not persisted)",
        "operationId": "delete-lessons",
        "tags": ["lessons"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/enrollments": {
      "get": {
        "summary": "List enrollments",
        "operationId": "list-enrollments",
        "tags": ["enrollments"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/EnrollmentsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "courseId": 16,
                      "enrolledAt": "2025-10-15T22:31:55.977Z",
                      "completedAt": null,
                      "progressPercent": 56,
                      "createdAt": "2025-10-15T22:29:13.969Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/enrollments?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a enrollments record (fake — not persisted)",
        "operationId": "create-enrollments",
        "tags": ["enrollments"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/EnrollmentsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "courseId": 16,
                "enrolledAt": "2025-10-15T22:31:55.977Z",
                "completedAt": null,
                "progressPercent": 56,
                "createdAt": "2025-10-15T22:29:13.969Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/EnrollmentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "courseId": 16,
                  "enrolledAt": "2025-10-15T22:31:55.977Z",
                  "completedAt": null,
                  "progressPercent": 56,
                  "createdAt": "2025-10-15T22:29:13.969Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/enrollments/{id}": {
      "get": {
        "summary": "Get one enrollments record by id",
        "operationId": "get-enrollments-by-id",
        "tags": ["enrollments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/EnrollmentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "courseId": 16,
                  "enrolledAt": "2025-10-15T22:31:55.977Z",
                  "completedAt": null,
                  "progressPercent": 56,
                  "createdAt": "2025-10-15T22:29:13.969Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a enrollments record (fake — not persisted)",
        "operationId": "replace-enrollments",
        "tags": ["enrollments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/EnrollmentsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "courseId": 16,
                "enrolledAt": "2025-10-15T22:31:55.977Z",
                "completedAt": null,
                "progressPercent": 56,
                "createdAt": "2025-10-15T22:29:13.969Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/EnrollmentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "courseId": 16,
                  "enrolledAt": "2025-10-15T22:31:55.977Z",
                  "completedAt": null,
                  "progressPercent": 56,
                  "createdAt": "2025-10-15T22:29:13.969Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a enrollments record (fake — not persisted)",
        "operationId": "patch-enrollments",
        "tags": ["enrollments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/EnrollmentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "courseId": 16,
                  "enrolledAt": "2025-10-15T22:31:55.977Z",
                  "completedAt": null,
                  "progressPercent": 56,
                  "createdAt": "2025-10-15T22:29:13.969Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a enrollments record (fake — not persisted)",
        "operationId": "delete-enrollments",
        "tags": ["enrollments"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/quizzes": {
      "get": {
        "summary": "List quizzes",
        "operationId": "list-quizzes",
        "tags": ["quizzes"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/QuizzesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "courseId": 1,
                      "lessonId": 3,
                      "title": "Quick Quiz — The Complete Guide to SEO",
                      "description": "Vilis apostolus cado tantillus conturbo magnam sophismata varius assentator.",
                      "passingScorePercent": 60,
                      "timeLimitMinutes": null,
                      "createdAt": "2024-08-10T09:50:22.416Z",
                      "updatedAt": "2024-09-23T01:34:56.262Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/quizzes?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a quizzes record (fake — not persisted)",
        "operationId": "create-quizzes",
        "tags": ["quizzes"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/QuizzesRecord" },
              "example": {
                "id": 1,
                "courseId": 1,
                "lessonId": 3,
                "title": "Quick Quiz — The Complete Guide to SEO",
                "description": "Vilis apostolus cado tantillus conturbo magnam sophismata varius assentator.",
                "passingScorePercent": 60,
                "timeLimitMinutes": null,
                "createdAt": "2024-08-10T09:50:22.416Z",
                "updatedAt": "2024-09-23T01:34:56.262Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/QuizzesRecord" },
                "example": {
                  "id": 1,
                  "courseId": 1,
                  "lessonId": 3,
                  "title": "Quick Quiz — The Complete Guide to SEO",
                  "description": "Vilis apostolus cado tantillus conturbo magnam sophismata varius assentator.",
                  "passingScorePercent": 60,
                  "timeLimitMinutes": null,
                  "createdAt": "2024-08-10T09:50:22.416Z",
                  "updatedAt": "2024-09-23T01:34:56.262Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/quizzes/{id}": {
      "get": {
        "summary": "Get one quizzes record by id",
        "operationId": "get-quizzes-by-id",
        "tags": ["quizzes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/QuizzesRecord" },
                "example": {
                  "id": 1,
                  "courseId": 1,
                  "lessonId": 3,
                  "title": "Quick Quiz — The Complete Guide to SEO",
                  "description": "Vilis apostolus cado tantillus conturbo magnam sophismata varius assentator.",
                  "passingScorePercent": 60,
                  "timeLimitMinutes": null,
                  "createdAt": "2024-08-10T09:50:22.416Z",
                  "updatedAt": "2024-09-23T01:34:56.262Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a quizzes record (fake — not persisted)",
        "operationId": "replace-quizzes",
        "tags": ["quizzes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/QuizzesRecord" },
              "example": {
                "id": 1,
                "courseId": 1,
                "lessonId": 3,
                "title": "Quick Quiz — The Complete Guide to SEO",
                "description": "Vilis apostolus cado tantillus conturbo magnam sophismata varius assentator.",
                "passingScorePercent": 60,
                "timeLimitMinutes": null,
                "createdAt": "2024-08-10T09:50:22.416Z",
                "updatedAt": "2024-09-23T01:34:56.262Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/QuizzesRecord" },
                "example": {
                  "id": 1,
                  "courseId": 1,
                  "lessonId": 3,
                  "title": "Quick Quiz — The Complete Guide to SEO",
                  "description": "Vilis apostolus cado tantillus conturbo magnam sophismata varius assentator.",
                  "passingScorePercent": 60,
                  "timeLimitMinutes": null,
                  "createdAt": "2024-08-10T09:50:22.416Z",
                  "updatedAt": "2024-09-23T01:34:56.262Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a quizzes record (fake — not persisted)",
        "operationId": "patch-quizzes",
        "tags": ["quizzes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/QuizzesRecord" },
                "example": {
                  "id": 1,
                  "courseId": 1,
                  "lessonId": 3,
                  "title": "Quick Quiz — The Complete Guide to SEO",
                  "description": "Vilis apostolus cado tantillus conturbo magnam sophismata varius assentator.",
                  "passingScorePercent": 60,
                  "timeLimitMinutes": null,
                  "createdAt": "2024-08-10T09:50:22.416Z",
                  "updatedAt": "2024-09-23T01:34:56.262Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a quizzes record (fake — not persisted)",
        "operationId": "delete-quizzes",
        "tags": ["quizzes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/quiz-questions": {
      "get": {
        "summary": "List quiz-questions",
        "operationId": "list-quiz-questions",
        "tags": ["quiz-questions"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/QuizQuestionsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "quizId": 1,
                      "text": "Correptius doloribus consuasor magnam suffragium patruus incidunt crur allatus campana absorbeo?",
                      "kind": "multiple_choice",
                      "options": ["centum", "tabernus amaritudo", "depopulo", "aliqua verecundia"],
                      "correctAnswer": "tabernus amaritudo",
                      "sortOrder": 0,
                      "createdAt": "2024-08-14T04:21:59.102Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/quiz-questions?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a quiz-questions record (fake — not persisted)",
        "operationId": "create-quiz-questions",
        "tags": ["quiz-questions"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/QuizQuestionsRecord" },
              "example": {
                "id": 1,
                "quizId": 1,
                "text": "Correptius doloribus consuasor magnam suffragium patruus incidunt crur allatus campana absorbeo?",
                "kind": "multiple_choice",
                "options": ["centum", "tabernus amaritudo", "depopulo", "aliqua verecundia"],
                "correctAnswer": "tabernus amaritudo",
                "sortOrder": 0,
                "createdAt": "2024-08-14T04:21:59.102Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/QuizQuestionsRecord" },
                "example": {
                  "id": 1,
                  "quizId": 1,
                  "text": "Correptius doloribus consuasor magnam suffragium patruus incidunt crur allatus campana absorbeo?",
                  "kind": "multiple_choice",
                  "options": ["centum", "tabernus amaritudo", "depopulo", "aliqua verecundia"],
                  "correctAnswer": "tabernus amaritudo",
                  "sortOrder": 0,
                  "createdAt": "2024-08-14T04:21:59.102Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/quiz-questions/{id}": {
      "get": {
        "summary": "Get one quiz-questions record by id",
        "operationId": "get-quiz-questions-by-id",
        "tags": ["quiz-questions"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/QuizQuestionsRecord" },
                "example": {
                  "id": 1,
                  "quizId": 1,
                  "text": "Correptius doloribus consuasor magnam suffragium patruus incidunt crur allatus campana absorbeo?",
                  "kind": "multiple_choice",
                  "options": ["centum", "tabernus amaritudo", "depopulo", "aliqua verecundia"],
                  "correctAnswer": "tabernus amaritudo",
                  "sortOrder": 0,
                  "createdAt": "2024-08-14T04:21:59.102Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a quiz-questions record (fake — not persisted)",
        "operationId": "replace-quiz-questions",
        "tags": ["quiz-questions"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/QuizQuestionsRecord" },
              "example": {
                "id": 1,
                "quizId": 1,
                "text": "Correptius doloribus consuasor magnam suffragium patruus incidunt crur allatus campana absorbeo?",
                "kind": "multiple_choice",
                "options": ["centum", "tabernus amaritudo", "depopulo", "aliqua verecundia"],
                "correctAnswer": "tabernus amaritudo",
                "sortOrder": 0,
                "createdAt": "2024-08-14T04:21:59.102Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/QuizQuestionsRecord" },
                "example": {
                  "id": 1,
                  "quizId": 1,
                  "text": "Correptius doloribus consuasor magnam suffragium patruus incidunt crur allatus campana absorbeo?",
                  "kind": "multiple_choice",
                  "options": ["centum", "tabernus amaritudo", "depopulo", "aliqua verecundia"],
                  "correctAnswer": "tabernus amaritudo",
                  "sortOrder": 0,
                  "createdAt": "2024-08-14T04:21:59.102Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a quiz-questions record (fake — not persisted)",
        "operationId": "patch-quiz-questions",
        "tags": ["quiz-questions"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/QuizQuestionsRecord" },
                "example": {
                  "id": 1,
                  "quizId": 1,
                  "text": "Correptius doloribus consuasor magnam suffragium patruus incidunt crur allatus campana absorbeo?",
                  "kind": "multiple_choice",
                  "options": ["centum", "tabernus amaritudo", "depopulo", "aliqua verecundia"],
                  "correctAnswer": "tabernus amaritudo",
                  "sortOrder": 0,
                  "createdAt": "2024-08-14T04:21:59.102Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a quiz-questions record (fake — not persisted)",
        "operationId": "delete-quiz-questions",
        "tags": ["quiz-questions"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/flashcards": {
      "get": {
        "summary": "List flashcards",
        "operationId": "list-flashcards",
        "tags": ["flashcards"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/FlashcardsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 5,
                      "deckName": "History Dates",
                      "front": "Aliqua apostolus cervus sunt",
                      "back": "Tunc curia numquam corroboro id abeo.",
                      "difficulty": "hard",
                      "lastReviewedAt": "2026-03-31T00:00:00.000Z",
                      "nextReviewAt": "2026-04-14T00:00:00.000Z",
                      "reviewCount": 18,
                      "createdAt": "2026-03-23T17:28:57.944Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/flashcards?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a flashcards record (fake — not persisted)",
        "operationId": "create-flashcards",
        "tags": ["flashcards"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/FlashcardsRecord" },
              "example": {
                "id": 1,
                "userId": 5,
                "deckName": "History Dates",
                "front": "Aliqua apostolus cervus sunt",
                "back": "Tunc curia numquam corroboro id abeo.",
                "difficulty": "hard",
                "lastReviewedAt": "2026-03-31T00:00:00.000Z",
                "nextReviewAt": "2026-04-14T00:00:00.000Z",
                "reviewCount": 18,
                "createdAt": "2026-03-23T17:28:57.944Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FlashcardsRecord" },
                "example": {
                  "id": 1,
                  "userId": 5,
                  "deckName": "History Dates",
                  "front": "Aliqua apostolus cervus sunt",
                  "back": "Tunc curia numquam corroboro id abeo.",
                  "difficulty": "hard",
                  "lastReviewedAt": "2026-03-31T00:00:00.000Z",
                  "nextReviewAt": "2026-04-14T00:00:00.000Z",
                  "reviewCount": 18,
                  "createdAt": "2026-03-23T17:28:57.944Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/flashcards/{id}": {
      "get": {
        "summary": "Get one flashcards record by id",
        "operationId": "get-flashcards-by-id",
        "tags": ["flashcards"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FlashcardsRecord" },
                "example": {
                  "id": 1,
                  "userId": 5,
                  "deckName": "History Dates",
                  "front": "Aliqua apostolus cervus sunt",
                  "back": "Tunc curia numquam corroboro id abeo.",
                  "difficulty": "hard",
                  "lastReviewedAt": "2026-03-31T00:00:00.000Z",
                  "nextReviewAt": "2026-04-14T00:00:00.000Z",
                  "reviewCount": 18,
                  "createdAt": "2026-03-23T17:28:57.944Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a flashcards record (fake — not persisted)",
        "operationId": "replace-flashcards",
        "tags": ["flashcards"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/FlashcardsRecord" },
              "example": {
                "id": 1,
                "userId": 5,
                "deckName": "History Dates",
                "front": "Aliqua apostolus cervus sunt",
                "back": "Tunc curia numquam corroboro id abeo.",
                "difficulty": "hard",
                "lastReviewedAt": "2026-03-31T00:00:00.000Z",
                "nextReviewAt": "2026-04-14T00:00:00.000Z",
                "reviewCount": 18,
                "createdAt": "2026-03-23T17:28:57.944Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FlashcardsRecord" },
                "example": {
                  "id": 1,
                  "userId": 5,
                  "deckName": "History Dates",
                  "front": "Aliqua apostolus cervus sunt",
                  "back": "Tunc curia numquam corroboro id abeo.",
                  "difficulty": "hard",
                  "lastReviewedAt": "2026-03-31T00:00:00.000Z",
                  "nextReviewAt": "2026-04-14T00:00:00.000Z",
                  "reviewCount": 18,
                  "createdAt": "2026-03-23T17:28:57.944Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a flashcards record (fake — not persisted)",
        "operationId": "patch-flashcards",
        "tags": ["flashcards"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/FlashcardsRecord" },
                "example": {
                  "id": 1,
                  "userId": 5,
                  "deckName": "History Dates",
                  "front": "Aliqua apostolus cervus sunt",
                  "back": "Tunc curia numquam corroboro id abeo.",
                  "difficulty": "hard",
                  "lastReviewedAt": "2026-03-31T00:00:00.000Z",
                  "nextReviewAt": "2026-04-14T00:00:00.000Z",
                  "reviewCount": 18,
                  "createdAt": "2026-03-23T17:28:57.944Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a flashcards record (fake — not persisted)",
        "operationId": "delete-flashcards",
        "tags": ["flashcards"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/progress": {
      "get": {
        "summary": "List progress",
        "operationId": "list-progress",
        "tags": ["progress"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ProgressRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 160,
                      "courseId": 74,
                      "lessonId": null,
                      "state": "not_started",
                      "completedAt": null,
                      "updatedAt": "2025-07-26T22:51:26.915Z",
                      "createdAt": "2025-07-26T22:51:26.915Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/progress?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a progress record (fake — not persisted)",
        "operationId": "create-progress",
        "tags": ["progress"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ProgressRecord" },
              "example": {
                "id": 1,
                "userId": 160,
                "courseId": 74,
                "lessonId": null,
                "state": "not_started",
                "completedAt": null,
                "updatedAt": "2025-07-26T22:51:26.915Z",
                "createdAt": "2025-07-26T22:51:26.915Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProgressRecord" },
                "example": {
                  "id": 1,
                  "userId": 160,
                  "courseId": 74,
                  "lessonId": null,
                  "state": "not_started",
                  "completedAt": null,
                  "updatedAt": "2025-07-26T22:51:26.915Z",
                  "createdAt": "2025-07-26T22:51:26.915Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/progress/{id}": {
      "get": {
        "summary": "Get one progress record by id",
        "operationId": "get-progress-by-id",
        "tags": ["progress"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProgressRecord" },
                "example": {
                  "id": 1,
                  "userId": 160,
                  "courseId": 74,
                  "lessonId": null,
                  "state": "not_started",
                  "completedAt": null,
                  "updatedAt": "2025-07-26T22:51:26.915Z",
                  "createdAt": "2025-07-26T22:51:26.915Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a progress record (fake — not persisted)",
        "operationId": "replace-progress",
        "tags": ["progress"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ProgressRecord" },
              "example": {
                "id": 1,
                "userId": 160,
                "courseId": 74,
                "lessonId": null,
                "state": "not_started",
                "completedAt": null,
                "updatedAt": "2025-07-26T22:51:26.915Z",
                "createdAt": "2025-07-26T22:51:26.915Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProgressRecord" },
                "example": {
                  "id": 1,
                  "userId": 160,
                  "courseId": 74,
                  "lessonId": null,
                  "state": "not_started",
                  "completedAt": null,
                  "updatedAt": "2025-07-26T22:51:26.915Z",
                  "createdAt": "2025-07-26T22:51:26.915Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a progress record (fake — not persisted)",
        "operationId": "patch-progress",
        "tags": ["progress"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ProgressRecord" },
                "example": {
                  "id": 1,
                  "userId": 160,
                  "courseId": 74,
                  "lessonId": null,
                  "state": "not_started",
                  "completedAt": null,
                  "updatedAt": "2025-07-26T22:51:26.915Z",
                  "createdAt": "2025-07-26T22:51:26.915Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a progress record (fake — not persisted)",
        "operationId": "delete-progress",
        "tags": ["progress"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/companies": {
      "get": {
        "summary": "List companies",
        "operationId": "list-companies",
        "tags": ["companies"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CompaniesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Schroeder Inc",
                      "slug": "schroeder-inc-1",
                      "description": "Public-key analyzing function",
                      "industryId": 5,
                      "headquartersCountryAlpha2": "FI",
                      "employeeCount": 48076,
                      "foundedYear": 2020,
                      "websiteUrl": "https://www.schroeder-inc.com",
                      "logoUrl": "https://picsum.photos/seed/company-1/200/200",
                      "isHiring": true,
                      "createdAt": "2015-04-14T18:56:49.601Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/companies?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a companies record (fake — not persisted)",
        "operationId": "create-companies",
        "tags": ["companies"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CompaniesRecord" },
              "example": {
                "id": 1,
                "name": "Schroeder Inc",
                "slug": "schroeder-inc-1",
                "description": "Public-key analyzing function",
                "industryId": 5,
                "headquartersCountryAlpha2": "FI",
                "employeeCount": 48076,
                "foundedYear": 2020,
                "websiteUrl": "https://www.schroeder-inc.com",
                "logoUrl": "https://picsum.photos/seed/company-1/200/200",
                "isHiring": true,
                "createdAt": "2015-04-14T18:56:49.601Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CompaniesRecord" },
                "example": {
                  "id": 1,
                  "name": "Schroeder Inc",
                  "slug": "schroeder-inc-1",
                  "description": "Public-key analyzing function",
                  "industryId": 5,
                  "headquartersCountryAlpha2": "FI",
                  "employeeCount": 48076,
                  "foundedYear": 2020,
                  "websiteUrl": "https://www.schroeder-inc.com",
                  "logoUrl": "https://picsum.photos/seed/company-1/200/200",
                  "isHiring": true,
                  "createdAt": "2015-04-14T18:56:49.601Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/companies/{id}": {
      "get": {
        "summary": "Get one companies record by id",
        "operationId": "get-companies-by-id",
        "tags": ["companies"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CompaniesRecord" },
                "example": {
                  "id": 1,
                  "name": "Schroeder Inc",
                  "slug": "schroeder-inc-1",
                  "description": "Public-key analyzing function",
                  "industryId": 5,
                  "headquartersCountryAlpha2": "FI",
                  "employeeCount": 48076,
                  "foundedYear": 2020,
                  "websiteUrl": "https://www.schroeder-inc.com",
                  "logoUrl": "https://picsum.photos/seed/company-1/200/200",
                  "isHiring": true,
                  "createdAt": "2015-04-14T18:56:49.601Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a companies record (fake — not persisted)",
        "operationId": "replace-companies",
        "tags": ["companies"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CompaniesRecord" },
              "example": {
                "id": 1,
                "name": "Schroeder Inc",
                "slug": "schroeder-inc-1",
                "description": "Public-key analyzing function",
                "industryId": 5,
                "headquartersCountryAlpha2": "FI",
                "employeeCount": 48076,
                "foundedYear": 2020,
                "websiteUrl": "https://www.schroeder-inc.com",
                "logoUrl": "https://picsum.photos/seed/company-1/200/200",
                "isHiring": true,
                "createdAt": "2015-04-14T18:56:49.601Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CompaniesRecord" },
                "example": {
                  "id": 1,
                  "name": "Schroeder Inc",
                  "slug": "schroeder-inc-1",
                  "description": "Public-key analyzing function",
                  "industryId": 5,
                  "headquartersCountryAlpha2": "FI",
                  "employeeCount": 48076,
                  "foundedYear": 2020,
                  "websiteUrl": "https://www.schroeder-inc.com",
                  "logoUrl": "https://picsum.photos/seed/company-1/200/200",
                  "isHiring": true,
                  "createdAt": "2015-04-14T18:56:49.601Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a companies record (fake — not persisted)",
        "operationId": "patch-companies",
        "tags": ["companies"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CompaniesRecord" },
                "example": {
                  "id": 1,
                  "name": "Schroeder Inc",
                  "slug": "schroeder-inc-1",
                  "description": "Public-key analyzing function",
                  "industryId": 5,
                  "headquartersCountryAlpha2": "FI",
                  "employeeCount": 48076,
                  "foundedYear": 2020,
                  "websiteUrl": "https://www.schroeder-inc.com",
                  "logoUrl": "https://picsum.photos/seed/company-1/200/200",
                  "isHiring": true,
                  "createdAt": "2015-04-14T18:56:49.601Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a companies record (fake — not persisted)",
        "operationId": "delete-companies",
        "tags": ["companies"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/jobs": {
      "get": {
        "summary": "List jobs",
        "operationId": "list-jobs",
        "tags": ["jobs"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/JobsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "companyId": 1,
                      "title": "UX Researcher",
                      "slug": "ux-researcher-1",
                      "description": "Administratio atque deprimo delibero argentum. Adopto acsi desidero attonbitus corroboro commodo claudeo. Voluptate alter ars tripudio cohaero desolo crastinus.\n\nSublime eligendi vigilo valde velut. Iusto nesciunt cibus despecto sumo totus veritas territo tres subseco. Suadeo suus amaritudo candidus cultellus pel.\n\nArbor credo amiculum certe accedo correptius. Velit terra statim laborum suspendo tactus clementia beneficium strues. Patior casus libero tepidus contigo cotidie adinventitias deprecator adiuvo.\n\nTener cernuus ultio cattus solvo thymbra comis amitto. Officiis adeo valde adipisci vestrum apostolus administratio vulgus. Nobis ocer earum aurum averto culpa advoco adulatio adulescens ipsam.",
                      "employmentType": "internship",
                      "locationType": "hybrid",
                      "location": "Port Aiden, Iran",
                      "salaryMin": 65000,
                      "salaryMax": 80976,
                      "currency": "USD",
                      "isPublished": true,
                      "postedAt": "2025-06-17T20:43:36.601Z",
                      "expiresAt": "2025-07-23T20:43:36.601Z",
                      "createdAt": "2025-06-16T21:10:22.235Z",
                      "updatedAt": "2025-06-20T21:43:03.974Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/jobs?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a jobs record (fake — not persisted)",
        "operationId": "create-jobs",
        "tags": ["jobs"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/JobsRecord" },
              "example": {
                "id": 1,
                "companyId": 1,
                "title": "UX Researcher",
                "slug": "ux-researcher-1",
                "description": "Administratio atque deprimo delibero argentum. Adopto acsi desidero attonbitus corroboro commodo claudeo. Voluptate alter ars tripudio cohaero desolo crastinus.\n\nSublime eligendi vigilo valde velut. Iusto nesciunt cibus despecto sumo totus veritas territo tres subseco. Suadeo suus amaritudo candidus cultellus pel.\n\nArbor credo amiculum certe accedo correptius. Velit terra statim laborum suspendo tactus clementia beneficium strues. Patior casus libero tepidus contigo cotidie adinventitias deprecator adiuvo.\n\nTener cernuus ultio cattus solvo thymbra comis amitto. Officiis adeo valde adipisci vestrum apostolus administratio vulgus. Nobis ocer earum aurum averto culpa advoco adulatio adulescens ipsam.",
                "employmentType": "internship",
                "locationType": "hybrid",
                "location": "Port Aiden, Iran",
                "salaryMin": 65000,
                "salaryMax": 80976,
                "currency": "USD",
                "isPublished": true,
                "postedAt": "2025-06-17T20:43:36.601Z",
                "expiresAt": "2025-07-23T20:43:36.601Z",
                "createdAt": "2025-06-16T21:10:22.235Z",
                "updatedAt": "2025-06-20T21:43:03.974Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/JobsRecord" },
                "example": {
                  "id": 1,
                  "companyId": 1,
                  "title": "UX Researcher",
                  "slug": "ux-researcher-1",
                  "description": "Administratio atque deprimo delibero argentum. Adopto acsi desidero attonbitus corroboro commodo claudeo. Voluptate alter ars tripudio cohaero desolo crastinus.\n\nSublime eligendi vigilo valde velut. Iusto nesciunt cibus despecto sumo totus veritas territo tres subseco. Suadeo suus amaritudo candidus cultellus pel.\n\nArbor credo amiculum certe accedo correptius. Velit terra statim laborum suspendo tactus clementia beneficium strues. Patior casus libero tepidus contigo cotidie adinventitias deprecator adiuvo.\n\nTener cernuus ultio cattus solvo thymbra comis amitto. Officiis adeo valde adipisci vestrum apostolus administratio vulgus. Nobis ocer earum aurum averto culpa advoco adulatio adulescens ipsam.",
                  "employmentType": "internship",
                  "locationType": "hybrid",
                  "location": "Port Aiden, Iran",
                  "salaryMin": 65000,
                  "salaryMax": 80976,
                  "currency": "USD",
                  "isPublished": true,
                  "postedAt": "2025-06-17T20:43:36.601Z",
                  "expiresAt": "2025-07-23T20:43:36.601Z",
                  "createdAt": "2025-06-16T21:10:22.235Z",
                  "updatedAt": "2025-06-20T21:43:03.974Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{id}": {
      "get": {
        "summary": "Get one jobs record by id",
        "operationId": "get-jobs-by-id",
        "tags": ["jobs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/JobsRecord" },
                "example": {
                  "id": 1,
                  "companyId": 1,
                  "title": "UX Researcher",
                  "slug": "ux-researcher-1",
                  "description": "Administratio atque deprimo delibero argentum. Adopto acsi desidero attonbitus corroboro commodo claudeo. Voluptate alter ars tripudio cohaero desolo crastinus.\n\nSublime eligendi vigilo valde velut. Iusto nesciunt cibus despecto sumo totus veritas territo tres subseco. Suadeo suus amaritudo candidus cultellus pel.\n\nArbor credo amiculum certe accedo correptius. Velit terra statim laborum suspendo tactus clementia beneficium strues. Patior casus libero tepidus contigo cotidie adinventitias deprecator adiuvo.\n\nTener cernuus ultio cattus solvo thymbra comis amitto. Officiis adeo valde adipisci vestrum apostolus administratio vulgus. Nobis ocer earum aurum averto culpa advoco adulatio adulescens ipsam.",
                  "employmentType": "internship",
                  "locationType": "hybrid",
                  "location": "Port Aiden, Iran",
                  "salaryMin": 65000,
                  "salaryMax": 80976,
                  "currency": "USD",
                  "isPublished": true,
                  "postedAt": "2025-06-17T20:43:36.601Z",
                  "expiresAt": "2025-07-23T20:43:36.601Z",
                  "createdAt": "2025-06-16T21:10:22.235Z",
                  "updatedAt": "2025-06-20T21:43:03.974Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a jobs record (fake — not persisted)",
        "operationId": "replace-jobs",
        "tags": ["jobs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/JobsRecord" },
              "example": {
                "id": 1,
                "companyId": 1,
                "title": "UX Researcher",
                "slug": "ux-researcher-1",
                "description": "Administratio atque deprimo delibero argentum. Adopto acsi desidero attonbitus corroboro commodo claudeo. Voluptate alter ars tripudio cohaero desolo crastinus.\n\nSublime eligendi vigilo valde velut. Iusto nesciunt cibus despecto sumo totus veritas territo tres subseco. Suadeo suus amaritudo candidus cultellus pel.\n\nArbor credo amiculum certe accedo correptius. Velit terra statim laborum suspendo tactus clementia beneficium strues. Patior casus libero tepidus contigo cotidie adinventitias deprecator adiuvo.\n\nTener cernuus ultio cattus solvo thymbra comis amitto. Officiis adeo valde adipisci vestrum apostolus administratio vulgus. Nobis ocer earum aurum averto culpa advoco adulatio adulescens ipsam.",
                "employmentType": "internship",
                "locationType": "hybrid",
                "location": "Port Aiden, Iran",
                "salaryMin": 65000,
                "salaryMax": 80976,
                "currency": "USD",
                "isPublished": true,
                "postedAt": "2025-06-17T20:43:36.601Z",
                "expiresAt": "2025-07-23T20:43:36.601Z",
                "createdAt": "2025-06-16T21:10:22.235Z",
                "updatedAt": "2025-06-20T21:43:03.974Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/JobsRecord" },
                "example": {
                  "id": 1,
                  "companyId": 1,
                  "title": "UX Researcher",
                  "slug": "ux-researcher-1",
                  "description": "Administratio atque deprimo delibero argentum. Adopto acsi desidero attonbitus corroboro commodo claudeo. Voluptate alter ars tripudio cohaero desolo crastinus.\n\nSublime eligendi vigilo valde velut. Iusto nesciunt cibus despecto sumo totus veritas territo tres subseco. Suadeo suus amaritudo candidus cultellus pel.\n\nArbor credo amiculum certe accedo correptius. Velit terra statim laborum suspendo tactus clementia beneficium strues. Patior casus libero tepidus contigo cotidie adinventitias deprecator adiuvo.\n\nTener cernuus ultio cattus solvo thymbra comis amitto. Officiis adeo valde adipisci vestrum apostolus administratio vulgus. Nobis ocer earum aurum averto culpa advoco adulatio adulescens ipsam.",
                  "employmentType": "internship",
                  "locationType": "hybrid",
                  "location": "Port Aiden, Iran",
                  "salaryMin": 65000,
                  "salaryMax": 80976,
                  "currency": "USD",
                  "isPublished": true,
                  "postedAt": "2025-06-17T20:43:36.601Z",
                  "expiresAt": "2025-07-23T20:43:36.601Z",
                  "createdAt": "2025-06-16T21:10:22.235Z",
                  "updatedAt": "2025-06-20T21:43:03.974Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a jobs record (fake — not persisted)",
        "operationId": "patch-jobs",
        "tags": ["jobs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/JobsRecord" },
                "example": {
                  "id": 1,
                  "companyId": 1,
                  "title": "UX Researcher",
                  "slug": "ux-researcher-1",
                  "description": "Administratio atque deprimo delibero argentum. Adopto acsi desidero attonbitus corroboro commodo claudeo. Voluptate alter ars tripudio cohaero desolo crastinus.\n\nSublime eligendi vigilo valde velut. Iusto nesciunt cibus despecto sumo totus veritas territo tres subseco. Suadeo suus amaritudo candidus cultellus pel.\n\nArbor credo amiculum certe accedo correptius. Velit terra statim laborum suspendo tactus clementia beneficium strues. Patior casus libero tepidus contigo cotidie adinventitias deprecator adiuvo.\n\nTener cernuus ultio cattus solvo thymbra comis amitto. Officiis adeo valde adipisci vestrum apostolus administratio vulgus. Nobis ocer earum aurum averto culpa advoco adulatio adulescens ipsam.",
                  "employmentType": "internship",
                  "locationType": "hybrid",
                  "location": "Port Aiden, Iran",
                  "salaryMin": 65000,
                  "salaryMax": 80976,
                  "currency": "USD",
                  "isPublished": true,
                  "postedAt": "2025-06-17T20:43:36.601Z",
                  "expiresAt": "2025-07-23T20:43:36.601Z",
                  "createdAt": "2025-06-16T21:10:22.235Z",
                  "updatedAt": "2025-06-20T21:43:03.974Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a jobs record (fake — not persisted)",
        "operationId": "delete-jobs",
        "tags": ["jobs"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/applications": {
      "get": {
        "summary": "List applications",
        "operationId": "list-applications",
        "tags": ["applications"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ApplicationsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "jobId": 98,
                      "status": "screening",
                      "coverLetter": "Ager beatus harum deleo truculenter. Aggero quasi suppellex talus sublime subiungo alo solium cariosus. Ullam cupiditate spes vito cohaero virtus tubineus sequi.\n\nArguo villa deludo depraedor auditor voluptatum quia audacia verecundia. Cohaero tempora alienus maiores sum colo excepturi. Vos callide solio.",
                      "appliedAt": "2026-05-05T19:31:00.375Z",
                      "lastUpdatedAt": "2026-05-17T13:03:50.974Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/applications?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a applications record (fake — not persisted)",
        "operationId": "create-applications",
        "tags": ["applications"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ApplicationsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "jobId": 98,
                "status": "screening",
                "coverLetter": "Ager beatus harum deleo truculenter. Aggero quasi suppellex talus sublime subiungo alo solium cariosus. Ullam cupiditate spes vito cohaero virtus tubineus sequi.\n\nArguo villa deludo depraedor auditor voluptatum quia audacia verecundia. Cohaero tempora alienus maiores sum colo excepturi. Vos callide solio.",
                "appliedAt": "2026-05-05T19:31:00.375Z",
                "lastUpdatedAt": "2026-05-17T13:03:50.974Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ApplicationsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "jobId": 98,
                  "status": "screening",
                  "coverLetter": "Ager beatus harum deleo truculenter. Aggero quasi suppellex talus sublime subiungo alo solium cariosus. Ullam cupiditate spes vito cohaero virtus tubineus sequi.\n\nArguo villa deludo depraedor auditor voluptatum quia audacia verecundia. Cohaero tempora alienus maiores sum colo excepturi. Vos callide solio.",
                  "appliedAt": "2026-05-05T19:31:00.375Z",
                  "lastUpdatedAt": "2026-05-17T13:03:50.974Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/applications/{id}": {
      "get": {
        "summary": "Get one applications record by id",
        "operationId": "get-applications-by-id",
        "tags": ["applications"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ApplicationsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "jobId": 98,
                  "status": "screening",
                  "coverLetter": "Ager beatus harum deleo truculenter. Aggero quasi suppellex talus sublime subiungo alo solium cariosus. Ullam cupiditate spes vito cohaero virtus tubineus sequi.\n\nArguo villa deludo depraedor auditor voluptatum quia audacia verecundia. Cohaero tempora alienus maiores sum colo excepturi. Vos callide solio.",
                  "appliedAt": "2026-05-05T19:31:00.375Z",
                  "lastUpdatedAt": "2026-05-17T13:03:50.974Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a applications record (fake — not persisted)",
        "operationId": "replace-applications",
        "tags": ["applications"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ApplicationsRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "jobId": 98,
                "status": "screening",
                "coverLetter": "Ager beatus harum deleo truculenter. Aggero quasi suppellex talus sublime subiungo alo solium cariosus. Ullam cupiditate spes vito cohaero virtus tubineus sequi.\n\nArguo villa deludo depraedor auditor voluptatum quia audacia verecundia. Cohaero tempora alienus maiores sum colo excepturi. Vos callide solio.",
                "appliedAt": "2026-05-05T19:31:00.375Z",
                "lastUpdatedAt": "2026-05-17T13:03:50.974Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ApplicationsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "jobId": 98,
                  "status": "screening",
                  "coverLetter": "Ager beatus harum deleo truculenter. Aggero quasi suppellex talus sublime subiungo alo solium cariosus. Ullam cupiditate spes vito cohaero virtus tubineus sequi.\n\nArguo villa deludo depraedor auditor voluptatum quia audacia verecundia. Cohaero tempora alienus maiores sum colo excepturi. Vos callide solio.",
                  "appliedAt": "2026-05-05T19:31:00.375Z",
                  "lastUpdatedAt": "2026-05-17T13:03:50.974Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a applications record (fake — not persisted)",
        "operationId": "patch-applications",
        "tags": ["applications"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ApplicationsRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "jobId": 98,
                  "status": "screening",
                  "coverLetter": "Ager beatus harum deleo truculenter. Aggero quasi suppellex talus sublime subiungo alo solium cariosus. Ullam cupiditate spes vito cohaero virtus tubineus sequi.\n\nArguo villa deludo depraedor auditor voluptatum quia audacia verecundia. Cohaero tempora alienus maiores sum colo excepturi. Vos callide solio.",
                  "appliedAt": "2026-05-05T19:31:00.375Z",
                  "lastUpdatedAt": "2026-05-17T13:03:50.974Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a applications record (fake — not persisted)",
        "operationId": "delete-applications",
        "tags": ["applications"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/resumes": {
      "get": {
        "summary": "List resumes",
        "operationId": "list-resumes",
        "tags": ["resumes"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ResumesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 1,
                      "title": "Sales Resume",
                      "summary": "Vae sub audacia solutio quam tollo congregatio cohaero. Aufero capio peior ventito vehemens acer tam cavus voco alienus. Unus decipio deinde ipsam curatio approbo nihil.",
                      "isDefault": true,
                      "createdAt": "2023-05-28T08:01:55.110Z",
                      "updatedAt": "2026-02-09T17:22:16.138Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/resumes?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a resumes record (fake — not persisted)",
        "operationId": "create-resumes",
        "tags": ["resumes"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ResumesRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "title": "Sales Resume",
                "summary": "Vae sub audacia solutio quam tollo congregatio cohaero. Aufero capio peior ventito vehemens acer tam cavus voco alienus. Unus decipio deinde ipsam curatio approbo nihil.",
                "isDefault": true,
                "createdAt": "2023-05-28T08:01:55.110Z",
                "updatedAt": "2026-02-09T17:22:16.138Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ResumesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "title": "Sales Resume",
                  "summary": "Vae sub audacia solutio quam tollo congregatio cohaero. Aufero capio peior ventito vehemens acer tam cavus voco alienus. Unus decipio deinde ipsam curatio approbo nihil.",
                  "isDefault": true,
                  "createdAt": "2023-05-28T08:01:55.110Z",
                  "updatedAt": "2026-02-09T17:22:16.138Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/resumes/{id}": {
      "get": {
        "summary": "Get one resumes record by id",
        "operationId": "get-resumes-by-id",
        "tags": ["resumes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ResumesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "title": "Sales Resume",
                  "summary": "Vae sub audacia solutio quam tollo congregatio cohaero. Aufero capio peior ventito vehemens acer tam cavus voco alienus. Unus decipio deinde ipsam curatio approbo nihil.",
                  "isDefault": true,
                  "createdAt": "2023-05-28T08:01:55.110Z",
                  "updatedAt": "2026-02-09T17:22:16.138Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a resumes record (fake — not persisted)",
        "operationId": "replace-resumes",
        "tags": ["resumes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ResumesRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "title": "Sales Resume",
                "summary": "Vae sub audacia solutio quam tollo congregatio cohaero. Aufero capio peior ventito vehemens acer tam cavus voco alienus. Unus decipio deinde ipsam curatio approbo nihil.",
                "isDefault": true,
                "createdAt": "2023-05-28T08:01:55.110Z",
                "updatedAt": "2026-02-09T17:22:16.138Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ResumesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "title": "Sales Resume",
                  "summary": "Vae sub audacia solutio quam tollo congregatio cohaero. Aufero capio peior ventito vehemens acer tam cavus voco alienus. Unus decipio deinde ipsam curatio approbo nihil.",
                  "isDefault": true,
                  "createdAt": "2023-05-28T08:01:55.110Z",
                  "updatedAt": "2026-02-09T17:22:16.138Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a resumes record (fake — not persisted)",
        "operationId": "patch-resumes",
        "tags": ["resumes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ResumesRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "title": "Sales Resume",
                  "summary": "Vae sub audacia solutio quam tollo congregatio cohaero. Aufero capio peior ventito vehemens acer tam cavus voco alienus. Unus decipio deinde ipsam curatio approbo nihil.",
                  "isDefault": true,
                  "createdAt": "2023-05-28T08:01:55.110Z",
                  "updatedAt": "2026-02-09T17:22:16.138Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a resumes record (fake — not persisted)",
        "operationId": "delete-resumes",
        "tags": ["resumes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/agents": {
      "get": {
        "summary": "List agents",
        "operationId": "list-agents",
        "tags": ["agents"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/AgentsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 55,
                      "brokerage": "RE/MAX",
                      "licenseNumber": "HFQC39M9VT",
                      "specialty": "land",
                      "yearsExperience": 15,
                      "rating": 4.8,
                      "ratingCount": 77,
                      "createdAt": "2024-06-01T00:18:28.217Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/agents?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a agents record (fake — not persisted)",
        "operationId": "create-agents",
        "tags": ["agents"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/AgentsRecord" },
              "example": {
                "id": 1,
                "userId": 55,
                "brokerage": "RE/MAX",
                "licenseNumber": "HFQC39M9VT",
                "specialty": "land",
                "yearsExperience": 15,
                "rating": 4.8,
                "ratingCount": 77,
                "createdAt": "2024-06-01T00:18:28.217Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AgentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 55,
                  "brokerage": "RE/MAX",
                  "licenseNumber": "HFQC39M9VT",
                  "specialty": "land",
                  "yearsExperience": 15,
                  "rating": 4.8,
                  "ratingCount": 77,
                  "createdAt": "2024-06-01T00:18:28.217Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/agents/{id}": {
      "get": {
        "summary": "Get one agents record by id",
        "operationId": "get-agents-by-id",
        "tags": ["agents"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AgentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 55,
                  "brokerage": "RE/MAX",
                  "licenseNumber": "HFQC39M9VT",
                  "specialty": "land",
                  "yearsExperience": 15,
                  "rating": 4.8,
                  "ratingCount": 77,
                  "createdAt": "2024-06-01T00:18:28.217Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a agents record (fake — not persisted)",
        "operationId": "replace-agents",
        "tags": ["agents"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/AgentsRecord" },
              "example": {
                "id": 1,
                "userId": 55,
                "brokerage": "RE/MAX",
                "licenseNumber": "HFQC39M9VT",
                "specialty": "land",
                "yearsExperience": 15,
                "rating": 4.8,
                "ratingCount": 77,
                "createdAt": "2024-06-01T00:18:28.217Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AgentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 55,
                  "brokerage": "RE/MAX",
                  "licenseNumber": "HFQC39M9VT",
                  "specialty": "land",
                  "yearsExperience": 15,
                  "rating": 4.8,
                  "ratingCount": 77,
                  "createdAt": "2024-06-01T00:18:28.217Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a agents record (fake — not persisted)",
        "operationId": "patch-agents",
        "tags": ["agents"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AgentsRecord" },
                "example": {
                  "id": 1,
                  "userId": 55,
                  "brokerage": "RE/MAX",
                  "licenseNumber": "HFQC39M9VT",
                  "specialty": "land",
                  "yearsExperience": 15,
                  "rating": 4.8,
                  "ratingCount": 77,
                  "createdAt": "2024-06-01T00:18:28.217Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a agents record (fake — not persisted)",
        "operationId": "delete-agents",
        "tags": ["agents"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/listings": {
      "get": {
        "summary": "List listings",
        "operationId": "list-listings",
        "tags": ["listings"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ListingsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "agentUserId": 55,
                      "propertyType": "apartment",
                      "title": "Apartment in Alizestad",
                      "description": "Attonbitus tener sollicito vorago trucido. Comedo centum cinis capitulus tergeo. Denique confugo nulla temperantia uberrime vulgivagus tego tepesco curiositas.\n\nClaustrum sui cotidie. Delego vae natus decumbo quisquam. Candidus varius animus atrocitas.",
                      "price": 4579200,
                      "currency": "USD",
                      "bedrooms": 5,
                      "bathrooms": 5,
                      "squareFeet": 4891,
                      "address": "2659 Purdy Ramp",
                      "city": "Alizestad",
                      "region": "Colorado",
                      "countryAlpha2": "ID",
                      "latitude": -28.267902,
                      "longitude": 70.893347,
                      "status": "active",
                      "listedAt": "2025-02-08T18:28:05.336Z",
                      "createdAt": "2025-02-08T01:36:23.867Z",
                      "updatedAt": "2026-05-01T08:22:27.194Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/listings?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a listings record (fake — not persisted)",
        "operationId": "create-listings",
        "tags": ["listings"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ListingsRecord" },
              "example": {
                "id": 1,
                "agentUserId": 55,
                "propertyType": "apartment",
                "title": "Apartment in Alizestad",
                "description": "Attonbitus tener sollicito vorago trucido. Comedo centum cinis capitulus tergeo. Denique confugo nulla temperantia uberrime vulgivagus tego tepesco curiositas.\n\nClaustrum sui cotidie. Delego vae natus decumbo quisquam. Candidus varius animus atrocitas.",
                "price": 4579200,
                "currency": "USD",
                "bedrooms": 5,
                "bathrooms": 5,
                "squareFeet": 4891,
                "address": "2659 Purdy Ramp",
                "city": "Alizestad",
                "region": "Colorado",
                "countryAlpha2": "ID",
                "latitude": -28.267902,
                "longitude": 70.893347,
                "status": "active",
                "listedAt": "2025-02-08T18:28:05.336Z",
                "createdAt": "2025-02-08T01:36:23.867Z",
                "updatedAt": "2026-05-01T08:22:27.194Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ListingsRecord" },
                "example": {
                  "id": 1,
                  "agentUserId": 55,
                  "propertyType": "apartment",
                  "title": "Apartment in Alizestad",
                  "description": "Attonbitus tener sollicito vorago trucido. Comedo centum cinis capitulus tergeo. Denique confugo nulla temperantia uberrime vulgivagus tego tepesco curiositas.\n\nClaustrum sui cotidie. Delego vae natus decumbo quisquam. Candidus varius animus atrocitas.",
                  "price": 4579200,
                  "currency": "USD",
                  "bedrooms": 5,
                  "bathrooms": 5,
                  "squareFeet": 4891,
                  "address": "2659 Purdy Ramp",
                  "city": "Alizestad",
                  "region": "Colorado",
                  "countryAlpha2": "ID",
                  "latitude": -28.267902,
                  "longitude": 70.893347,
                  "status": "active",
                  "listedAt": "2025-02-08T18:28:05.336Z",
                  "createdAt": "2025-02-08T01:36:23.867Z",
                  "updatedAt": "2026-05-01T08:22:27.194Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/listings/{id}": {
      "get": {
        "summary": "Get one listings record by id",
        "operationId": "get-listings-by-id",
        "tags": ["listings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ListingsRecord" },
                "example": {
                  "id": 1,
                  "agentUserId": 55,
                  "propertyType": "apartment",
                  "title": "Apartment in Alizestad",
                  "description": "Attonbitus tener sollicito vorago trucido. Comedo centum cinis capitulus tergeo. Denique confugo nulla temperantia uberrime vulgivagus tego tepesco curiositas.\n\nClaustrum sui cotidie. Delego vae natus decumbo quisquam. Candidus varius animus atrocitas.",
                  "price": 4579200,
                  "currency": "USD",
                  "bedrooms": 5,
                  "bathrooms": 5,
                  "squareFeet": 4891,
                  "address": "2659 Purdy Ramp",
                  "city": "Alizestad",
                  "region": "Colorado",
                  "countryAlpha2": "ID",
                  "latitude": -28.267902,
                  "longitude": 70.893347,
                  "status": "active",
                  "listedAt": "2025-02-08T18:28:05.336Z",
                  "createdAt": "2025-02-08T01:36:23.867Z",
                  "updatedAt": "2026-05-01T08:22:27.194Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a listings record (fake — not persisted)",
        "operationId": "replace-listings",
        "tags": ["listings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ListingsRecord" },
              "example": {
                "id": 1,
                "agentUserId": 55,
                "propertyType": "apartment",
                "title": "Apartment in Alizestad",
                "description": "Attonbitus tener sollicito vorago trucido. Comedo centum cinis capitulus tergeo. Denique confugo nulla temperantia uberrime vulgivagus tego tepesco curiositas.\n\nClaustrum sui cotidie. Delego vae natus decumbo quisquam. Candidus varius animus atrocitas.",
                "price": 4579200,
                "currency": "USD",
                "bedrooms": 5,
                "bathrooms": 5,
                "squareFeet": 4891,
                "address": "2659 Purdy Ramp",
                "city": "Alizestad",
                "region": "Colorado",
                "countryAlpha2": "ID",
                "latitude": -28.267902,
                "longitude": 70.893347,
                "status": "active",
                "listedAt": "2025-02-08T18:28:05.336Z",
                "createdAt": "2025-02-08T01:36:23.867Z",
                "updatedAt": "2026-05-01T08:22:27.194Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ListingsRecord" },
                "example": {
                  "id": 1,
                  "agentUserId": 55,
                  "propertyType": "apartment",
                  "title": "Apartment in Alizestad",
                  "description": "Attonbitus tener sollicito vorago trucido. Comedo centum cinis capitulus tergeo. Denique confugo nulla temperantia uberrime vulgivagus tego tepesco curiositas.\n\nClaustrum sui cotidie. Delego vae natus decumbo quisquam. Candidus varius animus atrocitas.",
                  "price": 4579200,
                  "currency": "USD",
                  "bedrooms": 5,
                  "bathrooms": 5,
                  "squareFeet": 4891,
                  "address": "2659 Purdy Ramp",
                  "city": "Alizestad",
                  "region": "Colorado",
                  "countryAlpha2": "ID",
                  "latitude": -28.267902,
                  "longitude": 70.893347,
                  "status": "active",
                  "listedAt": "2025-02-08T18:28:05.336Z",
                  "createdAt": "2025-02-08T01:36:23.867Z",
                  "updatedAt": "2026-05-01T08:22:27.194Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a listings record (fake — not persisted)",
        "operationId": "patch-listings",
        "tags": ["listings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ListingsRecord" },
                "example": {
                  "id": 1,
                  "agentUserId": 55,
                  "propertyType": "apartment",
                  "title": "Apartment in Alizestad",
                  "description": "Attonbitus tener sollicito vorago trucido. Comedo centum cinis capitulus tergeo. Denique confugo nulla temperantia uberrime vulgivagus tego tepesco curiositas.\n\nClaustrum sui cotidie. Delego vae natus decumbo quisquam. Candidus varius animus atrocitas.",
                  "price": 4579200,
                  "currency": "USD",
                  "bedrooms": 5,
                  "bathrooms": 5,
                  "squareFeet": 4891,
                  "address": "2659 Purdy Ramp",
                  "city": "Alizestad",
                  "region": "Colorado",
                  "countryAlpha2": "ID",
                  "latitude": -28.267902,
                  "longitude": 70.893347,
                  "status": "active",
                  "listedAt": "2025-02-08T18:28:05.336Z",
                  "createdAt": "2025-02-08T01:36:23.867Z",
                  "updatedAt": "2026-05-01T08:22:27.194Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a listings record (fake — not persisted)",
        "operationId": "delete-listings",
        "tags": ["listings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/showings": {
      "get": {
        "summary": "List showings",
        "operationId": "list-showings",
        "tags": ["showings"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ShowingsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "listingId": 1,
                      "prospectUserId": 135,
                      "scheduledAt": "2025-08-01T08:26:47.823Z",
                      "status": "cancelled",
                      "notes": "Comis eligendi peccatus error quibusdam.",
                      "createdAt": "2025-08-01T22:59:01.722Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/showings?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a showings record (fake — not persisted)",
        "operationId": "create-showings",
        "tags": ["showings"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ShowingsRecord" },
              "example": {
                "id": 1,
                "listingId": 1,
                "prospectUserId": 135,
                "scheduledAt": "2025-08-01T08:26:47.823Z",
                "status": "cancelled",
                "notes": "Comis eligendi peccatus error quibusdam.",
                "createdAt": "2025-08-01T22:59:01.722Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ShowingsRecord" },
                "example": {
                  "id": 1,
                  "listingId": 1,
                  "prospectUserId": 135,
                  "scheduledAt": "2025-08-01T08:26:47.823Z",
                  "status": "cancelled",
                  "notes": "Comis eligendi peccatus error quibusdam.",
                  "createdAt": "2025-08-01T22:59:01.722Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/showings/{id}": {
      "get": {
        "summary": "Get one showings record by id",
        "operationId": "get-showings-by-id",
        "tags": ["showings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ShowingsRecord" },
                "example": {
                  "id": 1,
                  "listingId": 1,
                  "prospectUserId": 135,
                  "scheduledAt": "2025-08-01T08:26:47.823Z",
                  "status": "cancelled",
                  "notes": "Comis eligendi peccatus error quibusdam.",
                  "createdAt": "2025-08-01T22:59:01.722Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a showings record (fake — not persisted)",
        "operationId": "replace-showings",
        "tags": ["showings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ShowingsRecord" },
              "example": {
                "id": 1,
                "listingId": 1,
                "prospectUserId": 135,
                "scheduledAt": "2025-08-01T08:26:47.823Z",
                "status": "cancelled",
                "notes": "Comis eligendi peccatus error quibusdam.",
                "createdAt": "2025-08-01T22:59:01.722Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ShowingsRecord" },
                "example": {
                  "id": 1,
                  "listingId": 1,
                  "prospectUserId": 135,
                  "scheduledAt": "2025-08-01T08:26:47.823Z",
                  "status": "cancelled",
                  "notes": "Comis eligendi peccatus error quibusdam.",
                  "createdAt": "2025-08-01T22:59:01.722Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a showings record (fake — not persisted)",
        "operationId": "patch-showings",
        "tags": ["showings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ShowingsRecord" },
                "example": {
                  "id": 1,
                  "listingId": 1,
                  "prospectUserId": 135,
                  "scheduledAt": "2025-08-01T08:26:47.823Z",
                  "status": "cancelled",
                  "notes": "Comis eligendi peccatus error quibusdam.",
                  "createdAt": "2025-08-01T22:59:01.722Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a showings record (fake — not persisted)",
        "operationId": "delete-showings",
        "tags": ["showings"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/pet-breeds": {
      "get": {
        "summary": "List pet-breeds",
        "operationId": "list-pet-breeds",
        "tags": ["pet-breeds"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/PetBreedsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Labrador Retriever",
                      "slug": "labrador-retriever",
                      "species": "dog",
                      "origin": "Canada",
                      "temperament": ["Friendly", "Active", "Outgoing"],
                      "lifeExpectancyYears": 12,
                      "isHypoallergenic": false,
                      "createdAt": "2025-09-14T00:42:36.016Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/pet-breeds?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a pet-breeds record (fake — not persisted)",
        "operationId": "create-pet-breeds",
        "tags": ["pet-breeds"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PetBreedsRecord" },
              "example": {
                "id": 1,
                "name": "Labrador Retriever",
                "slug": "labrador-retriever",
                "species": "dog",
                "origin": "Canada",
                "temperament": ["Friendly", "Active", "Outgoing"],
                "lifeExpectancyYears": 12,
                "isHypoallergenic": false,
                "createdAt": "2025-09-14T00:42:36.016Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PetBreedsRecord" },
                "example": {
                  "id": 1,
                  "name": "Labrador Retriever",
                  "slug": "labrador-retriever",
                  "species": "dog",
                  "origin": "Canada",
                  "temperament": ["Friendly", "Active", "Outgoing"],
                  "lifeExpectancyYears": 12,
                  "isHypoallergenic": false,
                  "createdAt": "2025-09-14T00:42:36.016Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/pet-breeds/{id}": {
      "get": {
        "summary": "Get one pet-breeds record by id",
        "operationId": "get-pet-breeds-by-id",
        "tags": ["pet-breeds"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PetBreedsRecord" },
                "example": {
                  "id": 1,
                  "name": "Labrador Retriever",
                  "slug": "labrador-retriever",
                  "species": "dog",
                  "origin": "Canada",
                  "temperament": ["Friendly", "Active", "Outgoing"],
                  "lifeExpectancyYears": 12,
                  "isHypoallergenic": false,
                  "createdAt": "2025-09-14T00:42:36.016Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a pet-breeds record (fake — not persisted)",
        "operationId": "replace-pet-breeds",
        "tags": ["pet-breeds"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PetBreedsRecord" },
              "example": {
                "id": 1,
                "name": "Labrador Retriever",
                "slug": "labrador-retriever",
                "species": "dog",
                "origin": "Canada",
                "temperament": ["Friendly", "Active", "Outgoing"],
                "lifeExpectancyYears": 12,
                "isHypoallergenic": false,
                "createdAt": "2025-09-14T00:42:36.016Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PetBreedsRecord" },
                "example": {
                  "id": 1,
                  "name": "Labrador Retriever",
                  "slug": "labrador-retriever",
                  "species": "dog",
                  "origin": "Canada",
                  "temperament": ["Friendly", "Active", "Outgoing"],
                  "lifeExpectancyYears": 12,
                  "isHypoallergenic": false,
                  "createdAt": "2025-09-14T00:42:36.016Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a pet-breeds record (fake — not persisted)",
        "operationId": "patch-pet-breeds",
        "tags": ["pet-breeds"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PetBreedsRecord" },
                "example": {
                  "id": 1,
                  "name": "Labrador Retriever",
                  "slug": "labrador-retriever",
                  "species": "dog",
                  "origin": "Canada",
                  "temperament": ["Friendly", "Active", "Outgoing"],
                  "lifeExpectancyYears": 12,
                  "isHypoallergenic": false,
                  "createdAt": "2025-09-14T00:42:36.016Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a pet-breeds record (fake — not persisted)",
        "operationId": "delete-pet-breeds",
        "tags": ["pet-breeds"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/pets": {
      "get": {
        "summary": "List pets",
        "operationId": "list-pets",
        "tags": ["pets"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/PetsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "ownerUserId": 1,
                      "name": "Juwan",
                      "species": "reptile",
                      "breedId": 71,
                      "gender": "unknown",
                      "birthDate": "2018-01-10",
                      "weightKg": 5.1,
                      "color": "Yellow",
                      "imageUrl": "https://picsum.photos/seed/pet-1/600/600",
                      "createdAt": "2014-07-16T00:37:39.435Z",
                      "updatedAt": "2021-04-21T04:08:36.863Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/pets?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a pets record (fake — not persisted)",
        "operationId": "create-pets",
        "tags": ["pets"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PetsRecord" },
              "example": {
                "id": 1,
                "ownerUserId": 1,
                "name": "Juwan",
                "species": "reptile",
                "breedId": 71,
                "gender": "unknown",
                "birthDate": "2018-01-10",
                "weightKg": 5.1,
                "color": "Yellow",
                "imageUrl": "https://picsum.photos/seed/pet-1/600/600",
                "createdAt": "2014-07-16T00:37:39.435Z",
                "updatedAt": "2021-04-21T04:08:36.863Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PetsRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 1,
                  "name": "Juwan",
                  "species": "reptile",
                  "breedId": 71,
                  "gender": "unknown",
                  "birthDate": "2018-01-10",
                  "weightKg": 5.1,
                  "color": "Yellow",
                  "imageUrl": "https://picsum.photos/seed/pet-1/600/600",
                  "createdAt": "2014-07-16T00:37:39.435Z",
                  "updatedAt": "2021-04-21T04:08:36.863Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/pets/{id}": {
      "get": {
        "summary": "Get one pets record by id",
        "operationId": "get-pets-by-id",
        "tags": ["pets"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PetsRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 1,
                  "name": "Juwan",
                  "species": "reptile",
                  "breedId": 71,
                  "gender": "unknown",
                  "birthDate": "2018-01-10",
                  "weightKg": 5.1,
                  "color": "Yellow",
                  "imageUrl": "https://picsum.photos/seed/pet-1/600/600",
                  "createdAt": "2014-07-16T00:37:39.435Z",
                  "updatedAt": "2021-04-21T04:08:36.863Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a pets record (fake — not persisted)",
        "operationId": "replace-pets",
        "tags": ["pets"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PetsRecord" },
              "example": {
                "id": 1,
                "ownerUserId": 1,
                "name": "Juwan",
                "species": "reptile",
                "breedId": 71,
                "gender": "unknown",
                "birthDate": "2018-01-10",
                "weightKg": 5.1,
                "color": "Yellow",
                "imageUrl": "https://picsum.photos/seed/pet-1/600/600",
                "createdAt": "2014-07-16T00:37:39.435Z",
                "updatedAt": "2021-04-21T04:08:36.863Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PetsRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 1,
                  "name": "Juwan",
                  "species": "reptile",
                  "breedId": 71,
                  "gender": "unknown",
                  "birthDate": "2018-01-10",
                  "weightKg": 5.1,
                  "color": "Yellow",
                  "imageUrl": "https://picsum.photos/seed/pet-1/600/600",
                  "createdAt": "2014-07-16T00:37:39.435Z",
                  "updatedAt": "2021-04-21T04:08:36.863Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a pets record (fake — not persisted)",
        "operationId": "patch-pets",
        "tags": ["pets"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PetsRecord" },
                "example": {
                  "id": 1,
                  "ownerUserId": 1,
                  "name": "Juwan",
                  "species": "reptile",
                  "breedId": 71,
                  "gender": "unknown",
                  "birthDate": "2018-01-10",
                  "weightKg": 5.1,
                  "color": "Yellow",
                  "imageUrl": "https://picsum.photos/seed/pet-1/600/600",
                  "createdAt": "2014-07-16T00:37:39.435Z",
                  "updatedAt": "2021-04-21T04:08:36.863Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a pets record (fake — not persisted)",
        "operationId": "delete-pets",
        "tags": ["pets"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/cars": {
      "get": {
        "summary": "List cars",
        "operationId": "list-cars",
        "tags": ["cars"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CarsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "make": "Hyundai",
                      "model": "Santa Fe",
                      "year": 2017,
                      "trim": "Limited",
                      "vin": "D0ZR08F8571HZFGPL",
                      "color": "Brown",
                      "mileage": 160265,
                      "price": 45060,
                      "currency": "USD",
                      "transmission": "automatic",
                      "fuelType": "gas",
                      "bodyType": "suv",
                      "listingType": "sale",
                      "city": "Cypress",
                      "region": "Oregon",
                      "countryAlpha2": "KE",
                      "sellerUserId": 176,
                      "isSold": false,
                      "createdAt": "2025-09-20T23:32:17.701Z",
                      "updatedAt": "2025-10-21T08:31:42.231Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/cars?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a cars record (fake — not persisted)",
        "operationId": "create-cars",
        "tags": ["cars"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CarsRecord" },
              "example": {
                "id": 1,
                "make": "Hyundai",
                "model": "Santa Fe",
                "year": 2017,
                "trim": "Limited",
                "vin": "D0ZR08F8571HZFGPL",
                "color": "Brown",
                "mileage": 160265,
                "price": 45060,
                "currency": "USD",
                "transmission": "automatic",
                "fuelType": "gas",
                "bodyType": "suv",
                "listingType": "sale",
                "city": "Cypress",
                "region": "Oregon",
                "countryAlpha2": "KE",
                "sellerUserId": 176,
                "isSold": false,
                "createdAt": "2025-09-20T23:32:17.701Z",
                "updatedAt": "2025-10-21T08:31:42.231Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CarsRecord" },
                "example": {
                  "id": 1,
                  "make": "Hyundai",
                  "model": "Santa Fe",
                  "year": 2017,
                  "trim": "Limited",
                  "vin": "D0ZR08F8571HZFGPL",
                  "color": "Brown",
                  "mileage": 160265,
                  "price": 45060,
                  "currency": "USD",
                  "transmission": "automatic",
                  "fuelType": "gas",
                  "bodyType": "suv",
                  "listingType": "sale",
                  "city": "Cypress",
                  "region": "Oregon",
                  "countryAlpha2": "KE",
                  "sellerUserId": 176,
                  "isSold": false,
                  "createdAt": "2025-09-20T23:32:17.701Z",
                  "updatedAt": "2025-10-21T08:31:42.231Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/cars/{id}": {
      "get": {
        "summary": "Get one cars record by id",
        "operationId": "get-cars-by-id",
        "tags": ["cars"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CarsRecord" },
                "example": {
                  "id": 1,
                  "make": "Hyundai",
                  "model": "Santa Fe",
                  "year": 2017,
                  "trim": "Limited",
                  "vin": "D0ZR08F8571HZFGPL",
                  "color": "Brown",
                  "mileage": 160265,
                  "price": 45060,
                  "currency": "USD",
                  "transmission": "automatic",
                  "fuelType": "gas",
                  "bodyType": "suv",
                  "listingType": "sale",
                  "city": "Cypress",
                  "region": "Oregon",
                  "countryAlpha2": "KE",
                  "sellerUserId": 176,
                  "isSold": false,
                  "createdAt": "2025-09-20T23:32:17.701Z",
                  "updatedAt": "2025-10-21T08:31:42.231Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a cars record (fake — not persisted)",
        "operationId": "replace-cars",
        "tags": ["cars"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CarsRecord" },
              "example": {
                "id": 1,
                "make": "Hyundai",
                "model": "Santa Fe",
                "year": 2017,
                "trim": "Limited",
                "vin": "D0ZR08F8571HZFGPL",
                "color": "Brown",
                "mileage": 160265,
                "price": 45060,
                "currency": "USD",
                "transmission": "automatic",
                "fuelType": "gas",
                "bodyType": "suv",
                "listingType": "sale",
                "city": "Cypress",
                "region": "Oregon",
                "countryAlpha2": "KE",
                "sellerUserId": 176,
                "isSold": false,
                "createdAt": "2025-09-20T23:32:17.701Z",
                "updatedAt": "2025-10-21T08:31:42.231Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CarsRecord" },
                "example": {
                  "id": 1,
                  "make": "Hyundai",
                  "model": "Santa Fe",
                  "year": 2017,
                  "trim": "Limited",
                  "vin": "D0ZR08F8571HZFGPL",
                  "color": "Brown",
                  "mileage": 160265,
                  "price": 45060,
                  "currency": "USD",
                  "transmission": "automatic",
                  "fuelType": "gas",
                  "bodyType": "suv",
                  "listingType": "sale",
                  "city": "Cypress",
                  "region": "Oregon",
                  "countryAlpha2": "KE",
                  "sellerUserId": 176,
                  "isSold": false,
                  "createdAt": "2025-09-20T23:32:17.701Z",
                  "updatedAt": "2025-10-21T08:31:42.231Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a cars record (fake — not persisted)",
        "operationId": "patch-cars",
        "tags": ["cars"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CarsRecord" },
                "example": {
                  "id": 1,
                  "make": "Hyundai",
                  "model": "Santa Fe",
                  "year": 2017,
                  "trim": "Limited",
                  "vin": "D0ZR08F8571HZFGPL",
                  "color": "Brown",
                  "mileage": 160265,
                  "price": 45060,
                  "currency": "USD",
                  "transmission": "automatic",
                  "fuelType": "gas",
                  "bodyType": "suv",
                  "listingType": "sale",
                  "city": "Cypress",
                  "region": "Oregon",
                  "countryAlpha2": "KE",
                  "sellerUserId": 176,
                  "isSold": false,
                  "createdAt": "2025-09-20T23:32:17.701Z",
                  "updatedAt": "2025-10-21T08:31:42.231Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a cars record (fake — not persisted)",
        "operationId": "delete-cars",
        "tags": ["cars"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/cars-saved": {
      "get": {
        "summary": "List cars-saved",
        "operationId": "list-cars-saved",
        "tags": ["cars-saved"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/CarsSavedRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    { "id": 1, "userId": 1, "carId": 46, "savedAt": "2025-06-12T10:13:43.904Z" }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/cars-saved?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a cars-saved record (fake — not persisted)",
        "operationId": "create-cars-saved",
        "tags": ["cars-saved"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CarsSavedRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "carId": 46,
                "savedAt": "2025-06-12T10:13:43.904Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CarsSavedRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "carId": 46,
                  "savedAt": "2025-06-12T10:13:43.904Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/cars-saved/{id}": {
      "get": {
        "summary": "Get one cars-saved record by id",
        "operationId": "get-cars-saved-by-id",
        "tags": ["cars-saved"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CarsSavedRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "carId": 46,
                  "savedAt": "2025-06-12T10:13:43.904Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a cars-saved record (fake — not persisted)",
        "operationId": "replace-cars-saved",
        "tags": ["cars-saved"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/CarsSavedRecord" },
              "example": {
                "id": 1,
                "userId": 1,
                "carId": 46,
                "savedAt": "2025-06-12T10:13:43.904Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CarsSavedRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "carId": 46,
                  "savedAt": "2025-06-12T10:13:43.904Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a cars-saved record (fake — not persisted)",
        "operationId": "patch-cars-saved",
        "tags": ["cars-saved"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CarsSavedRecord" },
                "example": {
                  "id": 1,
                  "userId": 1,
                  "carId": 46,
                  "savedAt": "2025-06-12T10:13:43.904Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a cars-saved record (fake — not persisted)",
        "operationId": "delete-cars-saved",
        "tags": ["cars-saved"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/sneakers": {
      "get": {
        "summary": "List sneakers",
        "operationId": "list-sneakers",
        "tags": ["sneakers"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/SneakersRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "brand": "Nike",
                      "model": "Blazer Mid",
                      "colorway": "Blue/Yellow",
                      "style": "Lifestyle",
                      "releaseDate": "2023-07-14",
                      "retailPrice": 265,
                      "currency": "USD",
                      "imageUrl": "https://picsum.photos/seed/sneaker-1/800/600",
                      "sizesAvailable": ["3.5Y", "4Y", "4.5Y", "5Y", "5.5Y", "6Y", "6.5Y", "7Y"],
                      "gender": "youth",
                      "createdAt": "2023-07-14T03:55:17.628Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/sneakers?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a sneakers record (fake — not persisted)",
        "operationId": "create-sneakers",
        "tags": ["sneakers"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/SneakersRecord" },
              "example": {
                "id": 1,
                "brand": "Nike",
                "model": "Blazer Mid",
                "colorway": "Blue/Yellow",
                "style": "Lifestyle",
                "releaseDate": "2023-07-14",
                "retailPrice": 265,
                "currency": "USD",
                "imageUrl": "https://picsum.photos/seed/sneaker-1/800/600",
                "sizesAvailable": ["3.5Y", "4Y", "4.5Y", "5Y", "5.5Y", "6Y", "6.5Y", "7Y"],
                "gender": "youth",
                "createdAt": "2023-07-14T03:55:17.628Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SneakersRecord" },
                "example": {
                  "id": 1,
                  "brand": "Nike",
                  "model": "Blazer Mid",
                  "colorway": "Blue/Yellow",
                  "style": "Lifestyle",
                  "releaseDate": "2023-07-14",
                  "retailPrice": 265,
                  "currency": "USD",
                  "imageUrl": "https://picsum.photos/seed/sneaker-1/800/600",
                  "sizesAvailable": ["3.5Y", "4Y", "4.5Y", "5Y", "5.5Y", "6Y", "6.5Y", "7Y"],
                  "gender": "youth",
                  "createdAt": "2023-07-14T03:55:17.628Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/sneakers/{id}": {
      "get": {
        "summary": "Get one sneakers record by id",
        "operationId": "get-sneakers-by-id",
        "tags": ["sneakers"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SneakersRecord" },
                "example": {
                  "id": 1,
                  "brand": "Nike",
                  "model": "Blazer Mid",
                  "colorway": "Blue/Yellow",
                  "style": "Lifestyle",
                  "releaseDate": "2023-07-14",
                  "retailPrice": 265,
                  "currency": "USD",
                  "imageUrl": "https://picsum.photos/seed/sneaker-1/800/600",
                  "sizesAvailable": ["3.5Y", "4Y", "4.5Y", "5Y", "5.5Y", "6Y", "6.5Y", "7Y"],
                  "gender": "youth",
                  "createdAt": "2023-07-14T03:55:17.628Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a sneakers record (fake — not persisted)",
        "operationId": "replace-sneakers",
        "tags": ["sneakers"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/SneakersRecord" },
              "example": {
                "id": 1,
                "brand": "Nike",
                "model": "Blazer Mid",
                "colorway": "Blue/Yellow",
                "style": "Lifestyle",
                "releaseDate": "2023-07-14",
                "retailPrice": 265,
                "currency": "USD",
                "imageUrl": "https://picsum.photos/seed/sneaker-1/800/600",
                "sizesAvailable": ["3.5Y", "4Y", "4.5Y", "5Y", "5.5Y", "6Y", "6.5Y", "7Y"],
                "gender": "youth",
                "createdAt": "2023-07-14T03:55:17.628Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SneakersRecord" },
                "example": {
                  "id": 1,
                  "brand": "Nike",
                  "model": "Blazer Mid",
                  "colorway": "Blue/Yellow",
                  "style": "Lifestyle",
                  "releaseDate": "2023-07-14",
                  "retailPrice": 265,
                  "currency": "USD",
                  "imageUrl": "https://picsum.photos/seed/sneaker-1/800/600",
                  "sizesAvailable": ["3.5Y", "4Y", "4.5Y", "5Y", "5.5Y", "6Y", "6.5Y", "7Y"],
                  "gender": "youth",
                  "createdAt": "2023-07-14T03:55:17.628Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a sneakers record (fake — not persisted)",
        "operationId": "patch-sneakers",
        "tags": ["sneakers"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SneakersRecord" },
                "example": {
                  "id": 1,
                  "brand": "Nike",
                  "model": "Blazer Mid",
                  "colorway": "Blue/Yellow",
                  "style": "Lifestyle",
                  "releaseDate": "2023-07-14",
                  "retailPrice": 265,
                  "currency": "USD",
                  "imageUrl": "https://picsum.photos/seed/sneaker-1/800/600",
                  "sizesAvailable": ["3.5Y", "4Y", "4.5Y", "5Y", "5.5Y", "6Y", "6.5Y", "7Y"],
                  "gender": "youth",
                  "createdAt": "2023-07-14T03:55:17.628Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a sneakers record (fake — not persisted)",
        "operationId": "delete-sneakers",
        "tags": ["sneakers"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/places": {
      "get": {
        "summary": "List places",
        "operationId": "list-places",
        "tags": ["places"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/PlacesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Historic District of United States",
                      "slug": "historic-district-of-united-states-1",
                      "kind": "other",
                      "city": "Washington, D.C.",
                      "countryAlpha2": "US",
                      "latitude": -35.576761,
                      "longitude": 24.092559,
                      "rating": 4.7,
                      "ratingCount": 1818,
                      "description": "Ars apto acidus accusantium aliquam vestrum hic cibo ager volup. Coaegresco vacuus vado sustineo clam compono qui ancilla. Defessus cometes aurum deporto coaegresco coruscus caveo ex.",
                      "imageUrl": "https://picsum.photos/seed/place-1/1200/800",
                      "createdAt": "2022-01-01T05:46:47.405Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/places?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a places record (fake — not persisted)",
        "operationId": "create-places",
        "tags": ["places"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PlacesRecord" },
              "example": {
                "id": 1,
                "name": "Historic District of United States",
                "slug": "historic-district-of-united-states-1",
                "kind": "other",
                "city": "Washington, D.C.",
                "countryAlpha2": "US",
                "latitude": -35.576761,
                "longitude": 24.092559,
                "rating": 4.7,
                "ratingCount": 1818,
                "description": "Ars apto acidus accusantium aliquam vestrum hic cibo ager volup. Coaegresco vacuus vado sustineo clam compono qui ancilla. Defessus cometes aurum deporto coaegresco coruscus caveo ex.",
                "imageUrl": "https://picsum.photos/seed/place-1/1200/800",
                "createdAt": "2022-01-01T05:46:47.405Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PlacesRecord" },
                "example": {
                  "id": 1,
                  "name": "Historic District of United States",
                  "slug": "historic-district-of-united-states-1",
                  "kind": "other",
                  "city": "Washington, D.C.",
                  "countryAlpha2": "US",
                  "latitude": -35.576761,
                  "longitude": 24.092559,
                  "rating": 4.7,
                  "ratingCount": 1818,
                  "description": "Ars apto acidus accusantium aliquam vestrum hic cibo ager volup. Coaegresco vacuus vado sustineo clam compono qui ancilla. Defessus cometes aurum deporto coaegresco coruscus caveo ex.",
                  "imageUrl": "https://picsum.photos/seed/place-1/1200/800",
                  "createdAt": "2022-01-01T05:46:47.405Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/places/{id}": {
      "get": {
        "summary": "Get one places record by id",
        "operationId": "get-places-by-id",
        "tags": ["places"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PlacesRecord" },
                "example": {
                  "id": 1,
                  "name": "Historic District of United States",
                  "slug": "historic-district-of-united-states-1",
                  "kind": "other",
                  "city": "Washington, D.C.",
                  "countryAlpha2": "US",
                  "latitude": -35.576761,
                  "longitude": 24.092559,
                  "rating": 4.7,
                  "ratingCount": 1818,
                  "description": "Ars apto acidus accusantium aliquam vestrum hic cibo ager volup. Coaegresco vacuus vado sustineo clam compono qui ancilla. Defessus cometes aurum deporto coaegresco coruscus caveo ex.",
                  "imageUrl": "https://picsum.photos/seed/place-1/1200/800",
                  "createdAt": "2022-01-01T05:46:47.405Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a places record (fake — not persisted)",
        "operationId": "replace-places",
        "tags": ["places"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PlacesRecord" },
              "example": {
                "id": 1,
                "name": "Historic District of United States",
                "slug": "historic-district-of-united-states-1",
                "kind": "other",
                "city": "Washington, D.C.",
                "countryAlpha2": "US",
                "latitude": -35.576761,
                "longitude": 24.092559,
                "rating": 4.7,
                "ratingCount": 1818,
                "description": "Ars apto acidus accusantium aliquam vestrum hic cibo ager volup. Coaegresco vacuus vado sustineo clam compono qui ancilla. Defessus cometes aurum deporto coaegresco coruscus caveo ex.",
                "imageUrl": "https://picsum.photos/seed/place-1/1200/800",
                "createdAt": "2022-01-01T05:46:47.405Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PlacesRecord" },
                "example": {
                  "id": 1,
                  "name": "Historic District of United States",
                  "slug": "historic-district-of-united-states-1",
                  "kind": "other",
                  "city": "Washington, D.C.",
                  "countryAlpha2": "US",
                  "latitude": -35.576761,
                  "longitude": 24.092559,
                  "rating": 4.7,
                  "ratingCount": 1818,
                  "description": "Ars apto acidus accusantium aliquam vestrum hic cibo ager volup. Coaegresco vacuus vado sustineo clam compono qui ancilla. Defessus cometes aurum deporto coaegresco coruscus caveo ex.",
                  "imageUrl": "https://picsum.photos/seed/place-1/1200/800",
                  "createdAt": "2022-01-01T05:46:47.405Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a places record (fake — not persisted)",
        "operationId": "patch-places",
        "tags": ["places"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PlacesRecord" },
                "example": {
                  "id": 1,
                  "name": "Historic District of United States",
                  "slug": "historic-district-of-united-states-1",
                  "kind": "other",
                  "city": "Washington, D.C.",
                  "countryAlpha2": "US",
                  "latitude": -35.576761,
                  "longitude": 24.092559,
                  "rating": 4.7,
                  "ratingCount": 1818,
                  "description": "Ars apto acidus accusantium aliquam vestrum hic cibo ager volup. Coaegresco vacuus vado sustineo clam compono qui ancilla. Defessus cometes aurum deporto coaegresco coruscus caveo ex.",
                  "imageUrl": "https://picsum.photos/seed/place-1/1200/800",
                  "createdAt": "2022-01-01T05:46:47.405Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a places record (fake — not persisted)",
        "operationId": "delete-places",
        "tags": ["places"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/people": {
      "get": {
        "summary": "List people",
        "operationId": "list-people",
        "tags": ["people"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/PeopleRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "fullName": "Ricardo Conn",
                      "firstName": "Ricardo",
                      "lastName": "Conn",
                      "email": "ricardo.conn-1@example.com",
                      "phone": "(589) 958-7500",
                      "occupation": "Dynamic Configuration Technician",
                      "city": "North Crystelborough",
                      "countryAlpha2": "IL",
                      "bio": "coach, photographer, parent",
                      "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=person-1",
                      "createdAt": "2025-12-07T03:26:56.541Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/people?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a people record (fake — not persisted)",
        "operationId": "create-people",
        "tags": ["people"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PeopleRecord" },
              "example": {
                "id": 1,
                "fullName": "Ricardo Conn",
                "firstName": "Ricardo",
                "lastName": "Conn",
                "email": "ricardo.conn-1@example.com",
                "phone": "(589) 958-7500",
                "occupation": "Dynamic Configuration Technician",
                "city": "North Crystelborough",
                "countryAlpha2": "IL",
                "bio": "coach, photographer, parent",
                "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=person-1",
                "createdAt": "2025-12-07T03:26:56.541Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PeopleRecord" },
                "example": {
                  "id": 1,
                  "fullName": "Ricardo Conn",
                  "firstName": "Ricardo",
                  "lastName": "Conn",
                  "email": "ricardo.conn-1@example.com",
                  "phone": "(589) 958-7500",
                  "occupation": "Dynamic Configuration Technician",
                  "city": "North Crystelborough",
                  "countryAlpha2": "IL",
                  "bio": "coach, photographer, parent",
                  "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=person-1",
                  "createdAt": "2025-12-07T03:26:56.541Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/people/{id}": {
      "get": {
        "summary": "Get one people record by id",
        "operationId": "get-people-by-id",
        "tags": ["people"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PeopleRecord" },
                "example": {
                  "id": 1,
                  "fullName": "Ricardo Conn",
                  "firstName": "Ricardo",
                  "lastName": "Conn",
                  "email": "ricardo.conn-1@example.com",
                  "phone": "(589) 958-7500",
                  "occupation": "Dynamic Configuration Technician",
                  "city": "North Crystelborough",
                  "countryAlpha2": "IL",
                  "bio": "coach, photographer, parent",
                  "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=person-1",
                  "createdAt": "2025-12-07T03:26:56.541Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a people record (fake — not persisted)",
        "operationId": "replace-people",
        "tags": ["people"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/PeopleRecord" },
              "example": {
                "id": 1,
                "fullName": "Ricardo Conn",
                "firstName": "Ricardo",
                "lastName": "Conn",
                "email": "ricardo.conn-1@example.com",
                "phone": "(589) 958-7500",
                "occupation": "Dynamic Configuration Technician",
                "city": "North Crystelborough",
                "countryAlpha2": "IL",
                "bio": "coach, photographer, parent",
                "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=person-1",
                "createdAt": "2025-12-07T03:26:56.541Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PeopleRecord" },
                "example": {
                  "id": 1,
                  "fullName": "Ricardo Conn",
                  "firstName": "Ricardo",
                  "lastName": "Conn",
                  "email": "ricardo.conn-1@example.com",
                  "phone": "(589) 958-7500",
                  "occupation": "Dynamic Configuration Technician",
                  "city": "North Crystelborough",
                  "countryAlpha2": "IL",
                  "bio": "coach, photographer, parent",
                  "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=person-1",
                  "createdAt": "2025-12-07T03:26:56.541Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a people record (fake — not persisted)",
        "operationId": "patch-people",
        "tags": ["people"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PeopleRecord" },
                "example": {
                  "id": 1,
                  "fullName": "Ricardo Conn",
                  "firstName": "Ricardo",
                  "lastName": "Conn",
                  "email": "ricardo.conn-1@example.com",
                  "phone": "(589) 958-7500",
                  "occupation": "Dynamic Configuration Technician",
                  "city": "North Crystelborough",
                  "countryAlpha2": "IL",
                  "bio": "coach, photographer, parent",
                  "avatarUrl": "https://api.dicebear.com/9.x/avataaars/svg?seed=person-1",
                  "createdAt": "2025-12-07T03:26:56.541Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a people record (fake — not persisted)",
        "operationId": "delete-people",
        "tags": ["people"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/matchmaking": {
      "get": {
        "summary": "List matchmaking",
        "operationId": "list-matchmaking",
        "tags": ["matchmaking"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/MatchmakingRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "userId": 170,
                      "candidateUserId": 28,
                      "matchScorePercent": 65,
                      "commonInterests": ["Dancing"],
                      "status": "pending",
                      "createdAt": "2025-08-29T11:17:19.015Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/matchmaking?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a matchmaking record (fake — not persisted)",
        "operationId": "create-matchmaking",
        "tags": ["matchmaking"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MatchmakingRecord" },
              "example": {
                "id": 1,
                "userId": 170,
                "candidateUserId": 28,
                "matchScorePercent": 65,
                "commonInterests": ["Dancing"],
                "status": "pending",
                "createdAt": "2025-08-29T11:17:19.015Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MatchmakingRecord" },
                "example": {
                  "id": 1,
                  "userId": 170,
                  "candidateUserId": 28,
                  "matchScorePercent": 65,
                  "commonInterests": ["Dancing"],
                  "status": "pending",
                  "createdAt": "2025-08-29T11:17:19.015Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/matchmaking/{id}": {
      "get": {
        "summary": "Get one matchmaking record by id",
        "operationId": "get-matchmaking-by-id",
        "tags": ["matchmaking"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MatchmakingRecord" },
                "example": {
                  "id": 1,
                  "userId": 170,
                  "candidateUserId": 28,
                  "matchScorePercent": 65,
                  "commonInterests": ["Dancing"],
                  "status": "pending",
                  "createdAt": "2025-08-29T11:17:19.015Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a matchmaking record (fake — not persisted)",
        "operationId": "replace-matchmaking",
        "tags": ["matchmaking"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/MatchmakingRecord" },
              "example": {
                "id": 1,
                "userId": 170,
                "candidateUserId": 28,
                "matchScorePercent": 65,
                "commonInterests": ["Dancing"],
                "status": "pending",
                "createdAt": "2025-08-29T11:17:19.015Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MatchmakingRecord" },
                "example": {
                  "id": 1,
                  "userId": 170,
                  "candidateUserId": 28,
                  "matchScorePercent": 65,
                  "commonInterests": ["Dancing"],
                  "status": "pending",
                  "createdAt": "2025-08-29T11:17:19.015Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a matchmaking record (fake — not persisted)",
        "operationId": "patch-matchmaking",
        "tags": ["matchmaking"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/MatchmakingRecord" },
                "example": {
                  "id": 1,
                  "userId": 170,
                  "candidateUserId": 28,
                  "matchScorePercent": 65,
                  "commonInterests": ["Dancing"],
                  "status": "pending",
                  "createdAt": "2025-08-29T11:17:19.015Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a matchmaking record (fake — not persisted)",
        "operationId": "delete-matchmaking",
        "tags": ["matchmaking"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/stem-figures": {
      "get": {
        "summary": "List stem-figures",
        "operationId": "list-stem-figures",
        "tags": ["stem-figures"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/StemFiguresRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Albert Einstein",
                      "slug": "albert-einstein",
                      "field": "science",
                      "bio": "Altus tempore torrens xiphias dens solitudo curo. Vinitor vindico dolorum. Tredecim strenuus abstergo adsidue utrimque compono cras autem.",
                      "bornYear": 1879,
                      "diedYear": 1955,
                      "country": "Germany",
                      "imageUrl": "https://picsum.photos/seed/stem-1/600/600",
                      "accomplishments": ["Theory of relativity", "Nobel Prize in Physics 1921"],
                      "createdAt": "2024-07-15T10:09:04.988Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/stem-figures?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a stem-figures record (fake — not persisted)",
        "operationId": "create-stem-figures",
        "tags": ["stem-figures"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/StemFiguresRecord" },
              "example": {
                "id": 1,
                "name": "Albert Einstein",
                "slug": "albert-einstein",
                "field": "science",
                "bio": "Altus tempore torrens xiphias dens solitudo curo. Vinitor vindico dolorum. Tredecim strenuus abstergo adsidue utrimque compono cras autem.",
                "bornYear": 1879,
                "diedYear": 1955,
                "country": "Germany",
                "imageUrl": "https://picsum.photos/seed/stem-1/600/600",
                "accomplishments": ["Theory of relativity", "Nobel Prize in Physics 1921"],
                "createdAt": "2024-07-15T10:09:04.988Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StemFiguresRecord" },
                "example": {
                  "id": 1,
                  "name": "Albert Einstein",
                  "slug": "albert-einstein",
                  "field": "science",
                  "bio": "Altus tempore torrens xiphias dens solitudo curo. Vinitor vindico dolorum. Tredecim strenuus abstergo adsidue utrimque compono cras autem.",
                  "bornYear": 1879,
                  "diedYear": 1955,
                  "country": "Germany",
                  "imageUrl": "https://picsum.photos/seed/stem-1/600/600",
                  "accomplishments": ["Theory of relativity", "Nobel Prize in Physics 1921"],
                  "createdAt": "2024-07-15T10:09:04.988Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/stem-figures/{id}": {
      "get": {
        "summary": "Get one stem-figures record by id",
        "operationId": "get-stem-figures-by-id",
        "tags": ["stem-figures"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StemFiguresRecord" },
                "example": {
                  "id": 1,
                  "name": "Albert Einstein",
                  "slug": "albert-einstein",
                  "field": "science",
                  "bio": "Altus tempore torrens xiphias dens solitudo curo. Vinitor vindico dolorum. Tredecim strenuus abstergo adsidue utrimque compono cras autem.",
                  "bornYear": 1879,
                  "diedYear": 1955,
                  "country": "Germany",
                  "imageUrl": "https://picsum.photos/seed/stem-1/600/600",
                  "accomplishments": ["Theory of relativity", "Nobel Prize in Physics 1921"],
                  "createdAt": "2024-07-15T10:09:04.988Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a stem-figures record (fake — not persisted)",
        "operationId": "replace-stem-figures",
        "tags": ["stem-figures"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/StemFiguresRecord" },
              "example": {
                "id": 1,
                "name": "Albert Einstein",
                "slug": "albert-einstein",
                "field": "science",
                "bio": "Altus tempore torrens xiphias dens solitudo curo. Vinitor vindico dolorum. Tredecim strenuus abstergo adsidue utrimque compono cras autem.",
                "bornYear": 1879,
                "diedYear": 1955,
                "country": "Germany",
                "imageUrl": "https://picsum.photos/seed/stem-1/600/600",
                "accomplishments": ["Theory of relativity", "Nobel Prize in Physics 1921"],
                "createdAt": "2024-07-15T10:09:04.988Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StemFiguresRecord" },
                "example": {
                  "id": 1,
                  "name": "Albert Einstein",
                  "slug": "albert-einstein",
                  "field": "science",
                  "bio": "Altus tempore torrens xiphias dens solitudo curo. Vinitor vindico dolorum. Tredecim strenuus abstergo adsidue utrimque compono cras autem.",
                  "bornYear": 1879,
                  "diedYear": 1955,
                  "country": "Germany",
                  "imageUrl": "https://picsum.photos/seed/stem-1/600/600",
                  "accomplishments": ["Theory of relativity", "Nobel Prize in Physics 1921"],
                  "createdAt": "2024-07-15T10:09:04.988Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a stem-figures record (fake — not persisted)",
        "operationId": "patch-stem-figures",
        "tags": ["stem-figures"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/StemFiguresRecord" },
                "example": {
                  "id": 1,
                  "name": "Albert Einstein",
                  "slug": "albert-einstein",
                  "field": "science",
                  "bio": "Altus tempore torrens xiphias dens solitudo curo. Vinitor vindico dolorum. Tredecim strenuus abstergo adsidue utrimque compono cras autem.",
                  "bornYear": 1879,
                  "diedYear": 1955,
                  "country": "Germany",
                  "imageUrl": "https://picsum.photos/seed/stem-1/600/600",
                  "accomplishments": ["Theory of relativity", "Nobel Prize in Physics 1921"],
                  "createdAt": "2024-07-15T10:09:04.988Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a stem-figures record (fake — not persisted)",
        "operationId": "delete-stem-figures",
        "tags": ["stem-figures"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/authors": {
      "get": {
        "summary": "List authors",
        "operationId": "list-authors",
        "tags": ["authors"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/AuthorsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "William Shakespeare",
                      "slug": "william-shakespeare",
                      "bio": "Vilitas thesis caute soleo aliquid aliqua delectatio conventus. Amplus colligo circumvenio voluptas curo consectetur demonstro animus repudiandae. Defleo ater verumtamen credo.",
                      "bornYear": 1564,
                      "diedYear": 1616,
                      "nationality": "English",
                      "genres": ["Drama", "Poetry", "Tragedy"],
                      "notableWorks": ["Hamlet", "Macbeth", "Romeo and Juliet"],
                      "imageUrl": "https://picsum.photos/seed/author-1/600/600",
                      "createdAt": "2024-09-02T12:28:04.676Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/authors?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a authors record (fake — not persisted)",
        "operationId": "create-authors",
        "tags": ["authors"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/AuthorsRecord" },
              "example": {
                "id": 1,
                "name": "William Shakespeare",
                "slug": "william-shakespeare",
                "bio": "Vilitas thesis caute soleo aliquid aliqua delectatio conventus. Amplus colligo circumvenio voluptas curo consectetur demonstro animus repudiandae. Defleo ater verumtamen credo.",
                "bornYear": 1564,
                "diedYear": 1616,
                "nationality": "English",
                "genres": ["Drama", "Poetry", "Tragedy"],
                "notableWorks": ["Hamlet", "Macbeth", "Romeo and Juliet"],
                "imageUrl": "https://picsum.photos/seed/author-1/600/600",
                "createdAt": "2024-09-02T12:28:04.676Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AuthorsRecord" },
                "example": {
                  "id": 1,
                  "name": "William Shakespeare",
                  "slug": "william-shakespeare",
                  "bio": "Vilitas thesis caute soleo aliquid aliqua delectatio conventus. Amplus colligo circumvenio voluptas curo consectetur demonstro animus repudiandae. Defleo ater verumtamen credo.",
                  "bornYear": 1564,
                  "diedYear": 1616,
                  "nationality": "English",
                  "genres": ["Drama", "Poetry", "Tragedy"],
                  "notableWorks": ["Hamlet", "Macbeth", "Romeo and Juliet"],
                  "imageUrl": "https://picsum.photos/seed/author-1/600/600",
                  "createdAt": "2024-09-02T12:28:04.676Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/authors/{id}": {
      "get": {
        "summary": "Get one authors record by id",
        "operationId": "get-authors-by-id",
        "tags": ["authors"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AuthorsRecord" },
                "example": {
                  "id": 1,
                  "name": "William Shakespeare",
                  "slug": "william-shakespeare",
                  "bio": "Vilitas thesis caute soleo aliquid aliqua delectatio conventus. Amplus colligo circumvenio voluptas curo consectetur demonstro animus repudiandae. Defleo ater verumtamen credo.",
                  "bornYear": 1564,
                  "diedYear": 1616,
                  "nationality": "English",
                  "genres": ["Drama", "Poetry", "Tragedy"],
                  "notableWorks": ["Hamlet", "Macbeth", "Romeo and Juliet"],
                  "imageUrl": "https://picsum.photos/seed/author-1/600/600",
                  "createdAt": "2024-09-02T12:28:04.676Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a authors record (fake — not persisted)",
        "operationId": "replace-authors",
        "tags": ["authors"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/AuthorsRecord" },
              "example": {
                "id": 1,
                "name": "William Shakespeare",
                "slug": "william-shakespeare",
                "bio": "Vilitas thesis caute soleo aliquid aliqua delectatio conventus. Amplus colligo circumvenio voluptas curo consectetur demonstro animus repudiandae. Defleo ater verumtamen credo.",
                "bornYear": 1564,
                "diedYear": 1616,
                "nationality": "English",
                "genres": ["Drama", "Poetry", "Tragedy"],
                "notableWorks": ["Hamlet", "Macbeth", "Romeo and Juliet"],
                "imageUrl": "https://picsum.photos/seed/author-1/600/600",
                "createdAt": "2024-09-02T12:28:04.676Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AuthorsRecord" },
                "example": {
                  "id": 1,
                  "name": "William Shakespeare",
                  "slug": "william-shakespeare",
                  "bio": "Vilitas thesis caute soleo aliquid aliqua delectatio conventus. Amplus colligo circumvenio voluptas curo consectetur demonstro animus repudiandae. Defleo ater verumtamen credo.",
                  "bornYear": 1564,
                  "diedYear": 1616,
                  "nationality": "English",
                  "genres": ["Drama", "Poetry", "Tragedy"],
                  "notableWorks": ["Hamlet", "Macbeth", "Romeo and Juliet"],
                  "imageUrl": "https://picsum.photos/seed/author-1/600/600",
                  "createdAt": "2024-09-02T12:28:04.676Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a authors record (fake — not persisted)",
        "operationId": "patch-authors",
        "tags": ["authors"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AuthorsRecord" },
                "example": {
                  "id": 1,
                  "name": "William Shakespeare",
                  "slug": "william-shakespeare",
                  "bio": "Vilitas thesis caute soleo aliquid aliqua delectatio conventus. Amplus colligo circumvenio voluptas curo consectetur demonstro animus repudiandae. Defleo ater verumtamen credo.",
                  "bornYear": 1564,
                  "diedYear": 1616,
                  "nationality": "English",
                  "genres": ["Drama", "Poetry", "Tragedy"],
                  "notableWorks": ["Hamlet", "Macbeth", "Romeo and Juliet"],
                  "imageUrl": "https://picsum.photos/seed/author-1/600/600",
                  "createdAt": "2024-09-02T12:28:04.676Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a authors record (fake — not persisted)",
        "operationId": "delete-authors",
        "tags": ["authors"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/activists": {
      "get": {
        "summary": "List activists",
        "operationId": "list-activists",
        "tags": ["activists"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/ActivistsRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "name": "Nelson Mandela",
                      "slug": "nelson-mandela",
                      "bio": "Solio delinquo sapiente strues bellum. Admiratio comprehendo advoco uxor tamisium utpote fuga apostolus. Tyrannus caelestis capitulus amplitudo cupiditas adhuc.",
                      "bornYear": 1918,
                      "diedYear": 2013,
                      "causes": ["Anti-apartheid", "Civil rights"],
                      "country": "South Africa",
                      "imageUrl": "https://picsum.photos/seed/activist-1/600/600",
                      "accomplishments": [
                        "First Black president of South Africa",
                        "Nobel Peace Prize 1993"
                      ],
                      "createdAt": "2025-07-07T17:21:30.815Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/activists?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a activists record (fake — not persisted)",
        "operationId": "create-activists",
        "tags": ["activists"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ActivistsRecord" },
              "example": {
                "id": 1,
                "name": "Nelson Mandela",
                "slug": "nelson-mandela",
                "bio": "Solio delinquo sapiente strues bellum. Admiratio comprehendo advoco uxor tamisium utpote fuga apostolus. Tyrannus caelestis capitulus amplitudo cupiditas adhuc.",
                "bornYear": 1918,
                "diedYear": 2013,
                "causes": ["Anti-apartheid", "Civil rights"],
                "country": "South Africa",
                "imageUrl": "https://picsum.photos/seed/activist-1/600/600",
                "accomplishments": [
                  "First Black president of South Africa",
                  "Nobel Peace Prize 1993"
                ],
                "createdAt": "2025-07-07T17:21:30.815Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ActivistsRecord" },
                "example": {
                  "id": 1,
                  "name": "Nelson Mandela",
                  "slug": "nelson-mandela",
                  "bio": "Solio delinquo sapiente strues bellum. Admiratio comprehendo advoco uxor tamisium utpote fuga apostolus. Tyrannus caelestis capitulus amplitudo cupiditas adhuc.",
                  "bornYear": 1918,
                  "diedYear": 2013,
                  "causes": ["Anti-apartheid", "Civil rights"],
                  "country": "South Africa",
                  "imageUrl": "https://picsum.photos/seed/activist-1/600/600",
                  "accomplishments": [
                    "First Black president of South Africa",
                    "Nobel Peace Prize 1993"
                  ],
                  "createdAt": "2025-07-07T17:21:30.815Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/activists/{id}": {
      "get": {
        "summary": "Get one activists record by id",
        "operationId": "get-activists-by-id",
        "tags": ["activists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ActivistsRecord" },
                "example": {
                  "id": 1,
                  "name": "Nelson Mandela",
                  "slug": "nelson-mandela",
                  "bio": "Solio delinquo sapiente strues bellum. Admiratio comprehendo advoco uxor tamisium utpote fuga apostolus. Tyrannus caelestis capitulus amplitudo cupiditas adhuc.",
                  "bornYear": 1918,
                  "diedYear": 2013,
                  "causes": ["Anti-apartheid", "Civil rights"],
                  "country": "South Africa",
                  "imageUrl": "https://picsum.photos/seed/activist-1/600/600",
                  "accomplishments": [
                    "First Black president of South Africa",
                    "Nobel Peace Prize 1993"
                  ],
                  "createdAt": "2025-07-07T17:21:30.815Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a activists record (fake — not persisted)",
        "operationId": "replace-activists",
        "tags": ["activists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ActivistsRecord" },
              "example": {
                "id": 1,
                "name": "Nelson Mandela",
                "slug": "nelson-mandela",
                "bio": "Solio delinquo sapiente strues bellum. Admiratio comprehendo advoco uxor tamisium utpote fuga apostolus. Tyrannus caelestis capitulus amplitudo cupiditas adhuc.",
                "bornYear": 1918,
                "diedYear": 2013,
                "causes": ["Anti-apartheid", "Civil rights"],
                "country": "South Africa",
                "imageUrl": "https://picsum.photos/seed/activist-1/600/600",
                "accomplishments": [
                  "First Black president of South Africa",
                  "Nobel Peace Prize 1993"
                ],
                "createdAt": "2025-07-07T17:21:30.815Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ActivistsRecord" },
                "example": {
                  "id": 1,
                  "name": "Nelson Mandela",
                  "slug": "nelson-mandela",
                  "bio": "Solio delinquo sapiente strues bellum. Admiratio comprehendo advoco uxor tamisium utpote fuga apostolus. Tyrannus caelestis capitulus amplitudo cupiditas adhuc.",
                  "bornYear": 1918,
                  "diedYear": 2013,
                  "causes": ["Anti-apartheid", "Civil rights"],
                  "country": "South Africa",
                  "imageUrl": "https://picsum.photos/seed/activist-1/600/600",
                  "accomplishments": [
                    "First Black president of South Africa",
                    "Nobel Peace Prize 1993"
                  ],
                  "createdAt": "2025-07-07T17:21:30.815Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a activists record (fake — not persisted)",
        "operationId": "patch-activists",
        "tags": ["activists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/ActivistsRecord" },
                "example": {
                  "id": 1,
                  "name": "Nelson Mandela",
                  "slug": "nelson-mandela",
                  "bio": "Solio delinquo sapiente strues bellum. Admiratio comprehendo advoco uxor tamisium utpote fuga apostolus. Tyrannus caelestis capitulus amplitudo cupiditas adhuc.",
                  "bornYear": 1918,
                  "diedYear": 2013,
                  "causes": ["Anti-apartheid", "Civil rights"],
                  "country": "South Africa",
                  "imageUrl": "https://picsum.photos/seed/activist-1/600/600",
                  "accomplishments": [
                    "First Black president of South Africa",
                    "Nobel Peace Prize 1993"
                  ],
                  "createdAt": "2025-07-07T17:21:30.815Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a activists record (fake — not persisted)",
        "operationId": "delete-activists",
        "tags": ["activists"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/quotes": {
      "get": {
        "summary": "List quotes",
        "operationId": "list-quotes",
        "tags": ["quotes"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/QuotesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "text": "Be the change that you wish to see in the world.",
                      "authorName": "Mahatma Gandhi",
                      "source": null,
                      "category": "Inspiration",
                      "createdAt": "2025-03-23T18:12:43.329Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": {
                    "self": "/api/v1/quotes?_page=1&_limit=20",
                    "next": null,
                    "prev": null
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a quotes record (fake — not persisted)",
        "operationId": "create-quotes",
        "tags": ["quotes"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/QuotesRecord" },
              "example": {
                "id": 1,
                "text": "Be the change that you wish to see in the world.",
                "authorName": "Mahatma Gandhi",
                "source": null,
                "category": "Inspiration",
                "createdAt": "2025-03-23T18:12:43.329Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/QuotesRecord" },
                "example": {
                  "id": 1,
                  "text": "Be the change that you wish to see in the world.",
                  "authorName": "Mahatma Gandhi",
                  "source": null,
                  "category": "Inspiration",
                  "createdAt": "2025-03-23T18:12:43.329Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/quotes/{id}": {
      "get": {
        "summary": "Get one quotes record by id",
        "operationId": "get-quotes-by-id",
        "tags": ["quotes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/QuotesRecord" },
                "example": {
                  "id": 1,
                  "text": "Be the change that you wish to see in the world.",
                  "authorName": "Mahatma Gandhi",
                  "source": null,
                  "category": "Inspiration",
                  "createdAt": "2025-03-23T18:12:43.329Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a quotes record (fake — not persisted)",
        "operationId": "replace-quotes",
        "tags": ["quotes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/QuotesRecord" },
              "example": {
                "id": 1,
                "text": "Be the change that you wish to see in the world.",
                "authorName": "Mahatma Gandhi",
                "source": null,
                "category": "Inspiration",
                "createdAt": "2025-03-23T18:12:43.329Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/QuotesRecord" },
                "example": {
                  "id": 1,
                  "text": "Be the change that you wish to see in the world.",
                  "authorName": "Mahatma Gandhi",
                  "source": null,
                  "category": "Inspiration",
                  "createdAt": "2025-03-23T18:12:43.329Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a quotes record (fake — not persisted)",
        "operationId": "patch-quotes",
        "tags": ["quotes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/QuotesRecord" },
                "example": {
                  "id": 1,
                  "text": "Be the change that you wish to see in the world.",
                  "authorName": "Mahatma Gandhi",
                  "source": null,
                  "category": "Inspiration",
                  "createdAt": "2025-03-23T18:12:43.329Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a quotes record (fake — not persisted)",
        "operationId": "delete-quotes",
        "tags": ["quotes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/jokes": {
      "get": {
        "summary": "List jokes",
        "operationId": "list-jokes",
        "tags": ["jokes"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 25, "minimum": 1, "maximum": 100 },
            "description": "Maximum number of records to return"
          },
          {
            "name": "page",
            "in": "query",
            "schema": { "type": "integer", "default": 1, "minimum": 1 },
            "description": "Page number (1-based)"
          },
          {
            "name": "q",
            "in": "query",
            "schema": { "type": "string" },
            "description": "Full-text search query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/JokesRecord" }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "total": { "type": "integer" },
                        "page": { "type": "integer" },
                        "limit": { "type": "integer" },
                        "totalPages": { "type": "integer" }
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "self": { "type": "string" },
                        "next": { "type": "string", "nullable": true },
                        "prev": { "type": "string", "nullable": true }
                      }
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "id": 1,
                      "setup": "Why don't scientists trust atoms?",
                      "punchline": "Because they make up everything.",
                      "category": "pun",
                      "rating": 4.8,
                      "createdAt": "2025-08-05T00:49:19.906Z"
                    }
                  ],
                  "meta": { "total": 1, "page": 1, "limit": 20, "totalPages": 1 },
                  "links": { "self": "/api/v1/jokes?_page=1&_limit=20", "next": null, "prev": null }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a jokes record (fake — not persisted)",
        "operationId": "create-jokes",
        "tags": ["jokes"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/JokesRecord" },
              "example": {
                "id": 1,
                "setup": "Why don't scientists trust atoms?",
                "punchline": "Because they make up everything.",
                "category": "pun",
                "rating": 4.8,
                "createdAt": "2025-08-05T00:49:19.906Z"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created (response only; data is not persisted)",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/JokesRecord" },
                "example": {
                  "id": 1,
                  "setup": "Why don't scientists trust atoms?",
                  "punchline": "Because they make up everything.",
                  "category": "pun",
                  "rating": 4.8,
                  "createdAt": "2025-08-05T00:49:19.906Z"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    },
    "/api/v1/jokes/{id}": {
      "get": {
        "summary": "Get one jokes record by id",
        "operationId": "get-jokes-by-id",
        "tags": ["jokes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/JokesRecord" },
                "example": {
                  "id": 1,
                  "setup": "Why don't scientists trust atoms?",
                  "punchline": "Because they make up everything.",
                  "category": "pun",
                  "rating": 4.8,
                  "createdAt": "2025-08-05T00:49:19.906Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "put": {
        "summary": "Replace a jokes record (fake — not persisted)",
        "operationId": "replace-jokes",
        "tags": ["jokes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/JokesRecord" },
              "example": {
                "id": 1,
                "setup": "Why don't scientists trust atoms?",
                "punchline": "Because they make up everything.",
                "category": "pun",
                "rating": 4.8,
                "createdAt": "2025-08-05T00:49:19.906Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/JokesRecord" },
                "example": {
                  "id": 1,
                  "setup": "Why don't scientists trust atoms?",
                  "punchline": "Because they make up everything.",
                  "category": "pun",
                  "rating": 4.8,
                  "createdAt": "2025-08-05T00:49:19.906Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "patch": {
        "summary": "Partial update of a jokes record (fake — not persisted)",
        "operationId": "patch-jokes",
        "tags": ["jokes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "type": "object", "additionalProperties": true } }
          }
        },
        "responses": {
          "200": {
            "description": "Merged",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/JokesRecord" },
                "example": {
                  "id": 1,
                  "setup": "Why don't scientists trust atoms?",
                  "punchline": "Because they make up everything.",
                  "category": "pun",
                  "rating": 4.8,
                  "createdAt": "2025-08-05T00:49:19.906Z"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a jokes record (fake — not persisted)",
        "operationId": "delete-jokes",
        "tags": ["jokes"],
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }
        ],
        "responses": {
          "204": { "description": "Deleted (no content)" },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ProblemDetails": {
        "type": "object",
        "properties": {
          "type": { "type": "string" },
          "title": { "type": "string" },
          "status": { "type": "integer" },
          "detail": { "type": "string" },
          "instance": { "type": "string" },
          "invalidParams": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": { "name": { "type": "string" }, "reason": { "type": "string" } },
              "required": ["name", "reason"]
            }
          }
        },
        "required": ["type", "title", "status"]
      },
      "UsersRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "firstName": { "type": "string" },
          "lastName": { "type": "string" },
          "fullName": { "type": "string" },
          "username": { "type": "string" },
          "email": { "type": "string", "format": "email" },
          "phone": { "type": "string" },
          "bio": { "type": "string" },
          "avatarUrl": { "type": "string", "format": "uri" },
          "thumbnailUrl": { "type": "string", "format": "uri" },
          "coverImageUrl": { "type": "string", "format": "uri" },
          "emailVerified": { "type": "boolean" },
          "isActive": { "type": "boolean" },
          "twitterHandle": { "type": "string", "nullable": true },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "firstName",
          "lastName",
          "fullName",
          "username",
          "email",
          "phone",
          "bio",
          "avatarUrl",
          "thumbnailUrl",
          "coverImageUrl",
          "emailVerified",
          "isActive",
          "twitterHandle",
          "createdAt",
          "updatedAt"
        ]
      },
      "CountriesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "alpha2": { "type": "string" },
          "alpha3": { "type": "string" },
          "numericCode": { "type": "string" },
          "capital": { "type": "string" },
          "region": { "type": "string" },
          "subregion": { "type": "string" },
          "currencyCode": { "type": "string" },
          "callingCode": { "type": "string" },
          "flagEmoji": { "type": "string" }
        },
        "required": [
          "id",
          "name",
          "alpha2",
          "alpha3",
          "numericCode",
          "capital",
          "region",
          "subregion",
          "currencyCode",
          "callingCode",
          "flagEmoji"
        ]
      },
      "PostsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "excerpt": { "type": "string" },
          "content": { "type": "string" },
          "isPublished": { "type": "boolean" },
          "publishedAt": { "type": "string", "format": "date-time", "nullable": true },
          "viewCount": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "title",
          "slug",
          "excerpt",
          "content",
          "isPublished",
          "publishedAt",
          "viewCount",
          "createdAt",
          "updatedAt"
        ]
      },
      "ProductsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "sku": { "type": "string" },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "category": {
            "type": "string",
            "enum": [
              "electronics",
              "clothing",
              "home",
              "kitchen",
              "books",
              "sports",
              "beauty",
              "toys"
            ]
          },
          "brand": { "type": "string" },
          "price": { "type": "number" },
          "salePrice": { "type": "number", "nullable": true },
          "currency": { "type": "string" },
          "inStock": { "type": "boolean" },
          "stockCount": { "type": "integer" },
          "rating": { "type": "number" },
          "ratingCount": { "type": "integer" },
          "imageUrl": { "type": "string", "format": "uri" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "sku",
          "name",
          "slug",
          "description",
          "category",
          "brand",
          "price",
          "salePrice",
          "currency",
          "inStock",
          "stockCount",
          "rating",
          "ratingCount",
          "imageUrl",
          "createdAt",
          "updatedAt"
        ]
      },
      "OrdersRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "status": {
            "type": "string",
            "enum": ["pending", "confirmed", "shipped", "delivered", "cancelled", "refunded"]
          },
          "currency": { "type": "string" },
          "subtotal": { "type": "number" },
          "tax": { "type": "number" },
          "shipping": { "type": "number" },
          "total": { "type": "number" },
          "placedAt": { "type": "string", "format": "date-time" },
          "shippedAt": { "type": "string", "format": "date-time", "nullable": true },
          "deliveredAt": { "type": "string", "format": "date-time", "nullable": true },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "status",
          "currency",
          "subtotal",
          "tax",
          "shipping",
          "total",
          "placedAt",
          "shippedAt",
          "deliveredAt",
          "createdAt",
          "updatedAt"
        ]
      },
      "OrderItemsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "orderId": { "type": "integer" },
          "productId": { "type": "integer" },
          "quantity": { "type": "integer" },
          "unitPrice": { "type": "number" },
          "lineTotal": { "type": "number" }
        },
        "required": ["id", "orderId", "productId", "quantity", "unitPrice", "lineTotal"]
      },
      "RestaurantsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "cuisine": {
            "type": "string",
            "enum": [
              "italian",
              "japanese",
              "mexican",
              "indian",
              "thai",
              "french",
              "american",
              "chinese",
              "mediterranean",
              "vietnamese",
              "korean",
              "ethiopian"
            ]
          },
          "priceRange": { "type": "string", "enum": ["$", "$$", "$$$", "$$$$"] },
          "rating": { "type": "number" },
          "ratingCount": { "type": "integer" },
          "countryAlpha2": { "type": "string" },
          "city": { "type": "string" },
          "neighborhood": { "type": "string" },
          "address": { "type": "string" },
          "phone": { "type": "string" },
          "website": { "type": "string", "format": "uri", "nullable": true },
          "hasDelivery": { "type": "boolean" },
          "isOpen": { "type": "boolean" },
          "latitude": { "type": "number" },
          "longitude": { "type": "number" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "cuisine",
          "priceRange",
          "rating",
          "ratingCount",
          "countryAlpha2",
          "city",
          "neighborhood",
          "address",
          "phone",
          "website",
          "hasDelivery",
          "isOpen",
          "latitude",
          "longitude",
          "createdAt",
          "updatedAt"
        ]
      },
      "RestaurantPhotosRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "restaurantId": { "type": "integer" },
          "url": { "type": "string", "format": "uri" },
          "alt": { "type": "string" },
          "caption": { "type": "string" },
          "isPrimary": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "restaurantId", "url", "alt", "caption", "isPrimary", "createdAt"]
      },
      "RecipesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "cuisine": {
            "type": "string",
            "enum": [
              "italian",
              "japanese",
              "mexican",
              "indian",
              "thai",
              "french",
              "american",
              "chinese",
              "mediterranean",
              "vietnamese"
            ]
          },
          "difficulty": { "type": "string", "enum": ["easy", "medium", "hard"] },
          "prepMinutes": { "type": "integer" },
          "cookMinutes": { "type": "integer" },
          "servings": { "type": "integer" },
          "ingredients": { "type": "array", "items": { "type": "string" } },
          "instructions": { "type": "array", "items": { "type": "string" } },
          "tags": { "type": "array", "items": { "type": "string" } },
          "imageUrl": { "type": "string", "format": "uri" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "title",
          "slug",
          "description",
          "cuisine",
          "difficulty",
          "prepMinutes",
          "cookMinutes",
          "servings",
          "ingredients",
          "instructions",
          "tags",
          "imageUrl",
          "createdAt",
          "updatedAt"
        ]
      },
      "CommentsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "targetType": {
            "type": "string",
            "enum": ["post", "product", "comment", "recipe", "restaurant"]
          },
          "targetId": { "type": "integer" },
          "body": { "type": "string" },
          "isEdited": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "targetType",
          "targetId",
          "body",
          "isEdited",
          "createdAt",
          "updatedAt"
        ]
      },
      "ReactionsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "targetType": {
            "type": "string",
            "enum": ["post", "product", "comment", "recipe", "restaurant"]
          },
          "targetId": { "type": "integer" },
          "type": { "type": "string", "enum": ["like", "love", "laugh", "wow", "sad", "angry"] },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "userId", "targetType", "targetId", "type", "createdAt"]
      },
      "CurrenciesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "code": { "type": "string" },
          "name": { "type": "string" },
          "symbol": { "type": "string" },
          "decimalDigits": { "type": "integer" }
        },
        "required": ["id", "code", "name", "symbol", "decimalDigits"]
      },
      "LanguagesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "code": { "type": "string" },
          "name": { "type": "string" },
          "nativeName": { "type": "string" },
          "direction": { "type": "string", "enum": ["ltr", "rtl"] }
        },
        "required": ["id", "code", "name", "nativeName", "direction"]
      },
      "TimeZonesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "offsetMinutes": { "type": "integer" },
          "abbreviation": { "type": "string" },
          "countryAlpha2": { "type": "string" }
        },
        "required": ["id", "name", "offsetMinutes", "abbreviation", "countryAlpha2"]
      },
      "IndustriesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "sector": { "type": "string" },
          "description": { "type": "string" }
        },
        "required": ["id", "name", "slug", "sector", "description"]
      },
      "CategoriesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "parentId": { "type": "integer", "nullable": true },
          "sortOrder": { "type": "integer" }
        },
        "required": ["id", "name", "slug", "description", "parentId", "sortOrder"]
      },
      "TagsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "color": { "type": "string" },
          "useCount": { "type": "integer" }
        },
        "required": ["id", "name", "slug", "color", "useCount"]
      },
      "FollowersRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "followsUserId": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "userId", "followsUserId", "createdAt"]
      },
      "NotificationsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "type": { "type": "string", "enum": ["follow", "mention", "reply", "like", "system"] },
          "title": { "type": "string" },
          "body": { "type": "string" },
          "isRead": { "type": "boolean" },
          "link": { "type": "string", "nullable": true },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "userId", "type", "title", "body", "isRead", "link", "createdAt"]
      },
      "ConversationsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "title": { "type": "string", "nullable": true },
          "isGroup": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "title", "isGroup", "createdAt", "updatedAt"]
      },
      "MessagesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "conversationId": { "type": "integer" },
          "userId": { "type": "integer" },
          "body": { "type": "string" },
          "isEdited": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "conversationId", "userId", "body", "isEdited", "createdAt", "updatedAt"]
      },
      "ActivitiesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "verb": {
            "type": "string",
            "enum": ["created", "updated", "deleted", "liked", "commented", "shared"]
          },
          "targetType": {
            "type": "string",
            "enum": ["post", "product", "comment", "recipe", "restaurant"]
          },
          "targetId": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "userId", "verb", "targetType", "targetId", "createdAt"]
      },
      "AttachmentsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "targetType": {
            "type": "string",
            "enum": ["post", "product", "comment", "recipe", "restaurant"]
          },
          "targetId": { "type": "integer" },
          "url": { "type": "string" },
          "mimeType": { "type": "string" },
          "sizeBytes": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "targetType",
          "targetId",
          "url",
          "mimeType",
          "sizeBytes",
          "createdAt"
        ]
      },
      "HashtagsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "tag": { "type": "string" },
          "useCount": { "type": "integer" }
        },
        "required": ["id", "tag", "useCount"]
      },
      "GroupsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "memberCount": { "type": "integer" },
          "isPublic": { "type": "boolean" },
          "ownerUserId": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "description",
          "memberCount",
          "isPublic",
          "ownerUserId",
          "createdAt",
          "updatedAt"
        ]
      },
      "GroupMembersRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "groupId": { "type": "integer" },
          "userId": { "type": "integer" },
          "role": { "type": "string", "enum": ["owner", "admin", "moderator", "member"] },
          "joinedAt": { "type": "string", "format": "date-time" }
        },
        "required": ["id", "groupId", "userId", "role", "joinedAt"]
      },
      "StoriesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "mediaUrl": { "type": "string", "format": "uri" },
          "mediaType": { "type": "string", "enum": ["image", "video"] },
          "caption": { "type": "string" },
          "viewCount": { "type": "integer" },
          "expiresAt": { "type": "string", "format": "date-time" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "mediaUrl",
          "mediaType",
          "caption",
          "viewCount",
          "expiresAt",
          "createdAt"
        ]
      },
      "EventsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "location": { "type": "string" },
          "isOnline": { "type": "boolean" },
          "startAt": { "type": "string", "format": "date-time" },
          "endAt": { "type": "string", "format": "date-time" },
          "organizerUserId": { "type": "integer" },
          "attendeeCount": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "title",
          "slug",
          "description",
          "location",
          "isOnline",
          "startAt",
          "endAt",
          "organizerUserId",
          "attendeeCount",
          "createdAt",
          "updatedAt"
        ]
      },
      "EventRsvpsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "eventId": { "type": "integer" },
          "userId": { "type": "integer" },
          "status": { "type": "string", "enum": ["going", "maybe", "declined"] },
          "respondedAt": { "type": "string", "format": "date-time" }
        },
        "required": ["id", "eventId", "userId", "status", "respondedAt"]
      },
      "BrandsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "logoUrl": { "type": "string", "format": "uri" },
          "website": { "type": "string", "format": "uri", "nullable": true },
          "foundedYear": { "type": "integer" },
          "headquartersCountryAlpha2": { "type": "string" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "description",
          "logoUrl",
          "website",
          "foundedYear",
          "headquartersCountryAlpha2",
          "createdAt"
        ]
      },
      "StoresRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "address": { "type": "string" },
          "city": { "type": "string" },
          "region": { "type": "string" },
          "countryAlpha2": { "type": "string" },
          "postalCode": { "type": "string" },
          "phone": { "type": "string" },
          "website": { "type": "string", "format": "uri", "nullable": true },
          "hours": { "type": "string" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "description",
          "address",
          "city",
          "region",
          "countryAlpha2",
          "postalCode",
          "phone",
          "website",
          "hours",
          "createdAt"
        ]
      },
      "AddressesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "label": { "type": "string", "enum": ["home", "work", "billing", "shipping", "other"] },
          "recipient": { "type": "string" },
          "street1": { "type": "string" },
          "street2": { "type": "string", "nullable": true },
          "city": { "type": "string" },
          "region": { "type": "string" },
          "postalCode": { "type": "string" },
          "countryAlpha2": { "type": "string" },
          "isDefault": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "label",
          "recipient",
          "street1",
          "street2",
          "city",
          "region",
          "postalCode",
          "countryAlpha2",
          "isDefault",
          "createdAt"
        ]
      },
      "CouponsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "code": { "type": "string" },
          "discountType": { "type": "string", "enum": ["percent", "fixed"] },
          "value": { "type": "number" },
          "minOrderAmount": { "type": "number", "nullable": true },
          "maxRedemptions": { "type": "integer", "nullable": true },
          "redemptionCount": { "type": "integer" },
          "validFrom": { "type": "string", "format": "date-time" },
          "validUntil": { "type": "string", "format": "date-time" },
          "isActive": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "code",
          "discountType",
          "value",
          "minOrderAmount",
          "maxRedemptions",
          "redemptionCount",
          "validFrom",
          "validUntil",
          "isActive",
          "createdAt"
        ]
      },
      "ProductReviewsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "productId": { "type": "integer" },
          "userId": { "type": "integer" },
          "rating": { "type": "number" },
          "title": { "type": "string" },
          "body": { "type": "string" },
          "isVerified": { "type": "boolean" },
          "helpfulCount": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "productId",
          "userId",
          "rating",
          "title",
          "body",
          "isVerified",
          "helpfulCount",
          "createdAt",
          "updatedAt"
        ]
      },
      "WishlistsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "name": { "type": "string" },
          "isPublic": { "type": "boolean" },
          "productIds": { "type": "array", "items": { "type": "integer" } },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "userId", "name", "isPublic", "productIds", "createdAt", "updatedAt"]
      },
      "CartsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "currency": { "type": "string" },
          "subtotal": { "type": "number" },
          "itemCount": { "type": "integer" },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "userId", "currency", "subtotal", "itemCount", "updatedAt", "createdAt"]
      },
      "CartItemsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "cartId": { "type": "integer" },
          "productId": { "type": "integer" },
          "quantity": { "type": "integer" },
          "unitPrice": { "type": "number" },
          "addedAt": { "type": "string", "format": "date-time" }
        },
        "required": ["id", "cartId", "productId", "quantity", "unitPrice", "addedAt"]
      },
      "ShipmentsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "orderId": { "type": "integer" },
          "carrier": { "type": "string", "enum": ["ups", "usps", "fedex", "dhl"] },
          "trackingNumber": { "type": "string" },
          "status": {
            "type": "string",
            "enum": ["label_created", "in_transit", "out_for_delivery", "delivered", "exception"]
          },
          "shippedAt": { "type": "string", "format": "date-time" },
          "deliveredAt": { "type": "string", "format": "date-time", "nullable": true },
          "estimatedDeliveryAt": { "type": "string", "format": "date-time" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "orderId",
          "carrier",
          "trackingNumber",
          "status",
          "shippedAt",
          "deliveredAt",
          "estimatedDeliveryAt",
          "createdAt"
        ]
      },
      "DestinationsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "countryAlpha2": { "type": "string" },
          "description": { "type": "string" },
          "imageUrl": { "type": "string", "format": "uri" },
          "popularity": { "type": "integer" }
        },
        "required": ["id", "name", "slug", "countryAlpha2", "description", "imageUrl", "popularity"]
      },
      "FlightsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "flightNumber": { "type": "string" },
          "airline": { "type": "string" },
          "departureAirport": { "type": "string" },
          "arrivalAirport": { "type": "string" },
          "departureAt": { "type": "string", "format": "date-time" },
          "arrivalAt": { "type": "string", "format": "date-time" },
          "durationMinutes": { "type": "integer" },
          "status": {
            "type": "string",
            "enum": ["scheduled", "boarding", "in_air", "landed", "cancelled", "delayed"]
          },
          "priceFrom": { "type": "number" },
          "currency": { "type": "string" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "flightNumber",
          "airline",
          "departureAirport",
          "arrivalAirport",
          "departureAt",
          "arrivalAt",
          "durationMinutes",
          "status",
          "priceFrom",
          "currency",
          "createdAt"
        ]
      },
      "HotelsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "brand": { "type": "string", "nullable": true },
          "countryAlpha2": { "type": "string" },
          "city": { "type": "string" },
          "address": { "type": "string" },
          "latitude": { "type": "number" },
          "longitude": { "type": "number" },
          "starRating": { "type": "integer" },
          "rating": { "type": "number" },
          "ratingCount": { "type": "integer" },
          "priceFromPerNight": { "type": "number" },
          "currency": { "type": "string" },
          "amenities": { "type": "array", "items": { "type": "string" } },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "brand",
          "countryAlpha2",
          "city",
          "address",
          "latitude",
          "longitude",
          "starRating",
          "rating",
          "ratingCount",
          "priceFromPerNight",
          "currency",
          "amenities",
          "createdAt"
        ]
      },
      "PropertiesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "type": {
            "type": "string",
            "enum": ["apartment", "house", "villa", "cabin", "loft", "condo"]
          },
          "countryAlpha2": { "type": "string" },
          "city": { "type": "string" },
          "address": { "type": "string" },
          "latitude": { "type": "number" },
          "longitude": { "type": "number" },
          "bedrooms": { "type": "integer" },
          "bathrooms": { "type": "number" },
          "maxGuests": { "type": "integer" },
          "pricePerNight": { "type": "number" },
          "currency": { "type": "string" },
          "rating": { "type": "number" },
          "ratingCount": { "type": "integer" },
          "hostUserId": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "type",
          "countryAlpha2",
          "city",
          "address",
          "latitude",
          "longitude",
          "bedrooms",
          "bathrooms",
          "maxGuests",
          "pricePerNight",
          "currency",
          "rating",
          "ratingCount",
          "hostUserId",
          "createdAt",
          "updatedAt"
        ]
      },
      "PropertiesSavedRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "propertyId": { "type": "integer" },
          "savedAt": { "type": "string", "format": "date-time" }
        },
        "required": ["id", "userId", "propertyId", "savedAt"]
      },
      "TicketsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "eventName": { "type": "string" },
          "venue": { "type": "string" },
          "eventAt": { "type": "string", "format": "date-time" },
          "type": {
            "type": "string",
            "enum": ["vip", "general", "standing", "balcony", "reserved"]
          },
          "price": { "type": "number" },
          "currency": { "type": "string" },
          "sectionCode": { "type": "string" },
          "seatCode": { "type": "string", "nullable": true },
          "isSold": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "eventName",
          "venue",
          "eventAt",
          "type",
          "price",
          "currency",
          "sectionCode",
          "seatCode",
          "isSold",
          "createdAt"
        ]
      },
      "BookingsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "kind": { "type": "string", "enum": ["flight", "hotel", "property"] },
          "referenceId": { "type": "integer" },
          "checkInAt": { "type": "string", "format": "date-time" },
          "checkOutAt": { "type": "string", "format": "date-time" },
          "status": {
            "type": "string",
            "enum": ["confirmed", "pending", "cancelled", "completed"]
          },
          "totalAmount": { "type": "number" },
          "currency": { "type": "string" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "kind",
          "referenceId",
          "checkInAt",
          "checkOutAt",
          "status",
          "totalAmount",
          "currency",
          "createdAt"
        ]
      },
      "ItinerariesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "startDate": { "type": "string" },
          "endDate": { "type": "string" },
          "destinationSlugs": { "type": "array", "items": { "type": "string" } },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "title",
          "slug",
          "description",
          "startDate",
          "endDate",
          "destinationSlugs",
          "createdAt",
          "updatedAt"
        ]
      },
      "FoodCategoriesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "parentId": { "type": "integer", "nullable": true },
          "sortOrder": { "type": "integer" }
        },
        "required": ["id", "name", "slug", "description", "parentId", "sortOrder"]
      },
      "IngredientsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "foodCategoryId": { "type": "integer", "nullable": true },
          "unit": {
            "type": "string",
            "enum": ["g", "kg", "ml", "l", "cup", "tbsp", "tsp", "oz", "lb", "piece"]
          },
          "defaultPricePerUnit": { "type": "number" },
          "currency": { "type": "string" }
        },
        "required": [
          "id",
          "name",
          "slug",
          "foodCategoryId",
          "unit",
          "defaultPricePerUnit",
          "currency"
        ]
      },
      "MenusRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "restaurantId": { "type": "integer" },
          "name": { "type": "string" },
          "description": { "type": "string" },
          "isActive": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "restaurantId",
          "name",
          "description",
          "isActive",
          "createdAt",
          "updatedAt"
        ]
      },
      "MenuItemsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "menuId": { "type": "integer" },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "price": { "type": "number" },
          "currency": { "type": "string" },
          "foodCategoryId": { "type": "integer", "nullable": true },
          "spicyLevel": { "type": "integer" },
          "isVegetarian": { "type": "boolean" },
          "isVegan": { "type": "boolean" },
          "isGlutenFree": { "type": "boolean" },
          "imageUrl": { "type": "string", "format": "uri" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "menuId",
          "name",
          "slug",
          "description",
          "price",
          "currency",
          "foodCategoryId",
          "spicyLevel",
          "isVegetarian",
          "isVegan",
          "isGlutenFree",
          "imageUrl",
          "createdAt"
        ]
      },
      "FoodOrdersRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "restaurantId": { "type": "integer" },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "menuItemId": { "type": "integer" },
                "quantity": { "type": "integer" },
                "unitPrice": { "type": "number" },
                "lineTotal": { "type": "number" }
              },
              "required": ["menuItemId", "quantity", "unitPrice", "lineTotal"]
            }
          },
          "subtotal": { "type": "number" },
          "deliveryFee": { "type": "number" },
          "tip": { "type": "number" },
          "total": { "type": "number" },
          "currency": { "type": "string" },
          "status": {
            "type": "string",
            "enum": ["placed", "preparing", "out_for_delivery", "delivered", "cancelled"]
          },
          "placedAt": { "type": "string", "format": "date-time" },
          "deliveredAt": { "type": "string", "format": "date-time", "nullable": true }
        },
        "required": [
          "id",
          "userId",
          "restaurantId",
          "items",
          "subtotal",
          "deliveryFee",
          "tip",
          "total",
          "currency",
          "status",
          "placedAt",
          "deliveredAt"
        ]
      },
      "OrgsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "industryId": { "type": "integer", "nullable": true },
          "size": { "type": "string", "enum": ["1-10", "11-50", "51-200", "201-1000", "1000+"] },
          "foundedYear": { "type": "integer" },
          "websiteUrl": { "type": "string", "format": "uri", "nullable": true },
          "logoUrl": { "type": "string", "format": "uri" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "description",
          "industryId",
          "size",
          "foundedYear",
          "websiteUrl",
          "logoUrl",
          "createdAt",
          "updatedAt"
        ]
      },
      "TeamsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "orgId": { "type": "integer" },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "memberCount": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "orgId",
          "name",
          "slug",
          "description",
          "memberCount",
          "createdAt",
          "updatedAt"
        ]
      },
      "ProjectsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "orgId": { "type": "integer" },
          "teamId": { "type": "integer", "nullable": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "status": {
            "type": "string",
            "enum": ["planning", "active", "on_hold", "completed", "archived"]
          },
          "startDate": { "type": "string" },
          "dueDate": { "type": "string", "nullable": true },
          "ownerUserId": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "orgId",
          "teamId",
          "name",
          "slug",
          "description",
          "status",
          "startDate",
          "dueDate",
          "ownerUserId",
          "createdAt",
          "updatedAt"
        ]
      },
      "TasksRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "projectId": { "type": "integer" },
          "assigneeUserId": { "type": "integer", "nullable": true },
          "title": { "type": "string" },
          "description": { "type": "string" },
          "status": {
            "type": "string",
            "enum": ["todo", "in_progress", "blocked", "in_review", "done"]
          },
          "priority": { "type": "string", "enum": ["low", "normal", "high", "urgent"] },
          "dueDate": { "type": "string", "nullable": true },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "projectId",
          "assigneeUserId",
          "title",
          "description",
          "status",
          "priority",
          "dueDate",
          "createdAt",
          "updatedAt"
        ]
      },
      "TodoListsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "name": { "type": "string" },
          "isArchived": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "userId", "name", "isArchived", "createdAt", "updatedAt"]
      },
      "TodosRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "todoListId": { "type": "integer" },
          "title": { "type": "string" },
          "isDone": { "type": "boolean" },
          "dueDate": { "type": "string", "nullable": true },
          "completedAt": { "type": "string", "format": "date-time", "nullable": true },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "todoListId",
          "title",
          "isDone",
          "dueDate",
          "completedAt",
          "createdAt",
          "updatedAt"
        ]
      },
      "DocumentsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "ownerUserId": { "type": "integer" },
          "orgId": { "type": "integer", "nullable": true },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "content": { "type": "string" },
          "isPublic": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "ownerUserId",
          "orgId",
          "title",
          "slug",
          "content",
          "isPublic",
          "createdAt",
          "updatedAt"
        ]
      },
      "CalendarEventsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "ownerUserId": { "type": "integer" },
          "title": { "type": "string" },
          "description": { "type": "string" },
          "startAt": { "type": "string", "format": "date-time" },
          "endAt": { "type": "string", "format": "date-time" },
          "isAllDay": { "type": "boolean" },
          "location": { "type": "string", "nullable": true },
          "attendeeUserIds": { "type": "array", "items": { "type": "integer" } },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "ownerUserId",
          "title",
          "description",
          "startAt",
          "endAt",
          "isAllDay",
          "location",
          "attendeeUserIds",
          "createdAt",
          "updatedAt"
        ]
      },
      "TimeEntriesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "taskId": { "type": "integer", "nullable": true },
          "projectId": { "type": "integer", "nullable": true },
          "description": { "type": "string" },
          "startedAt": { "type": "string", "format": "date-time" },
          "endedAt": { "type": "string", "format": "date-time" },
          "durationMinutes": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "taskId",
          "projectId",
          "description",
          "startedAt",
          "endedAt",
          "durationMinutes",
          "createdAt"
        ]
      },
      "KanbanBoardsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "projectId": { "type": "integer" },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "projectId", "name", "slug", "createdAt", "updatedAt"]
      },
      "KanbanColumnsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "boardId": { "type": "integer" },
          "name": { "type": "string" },
          "sortOrder": { "type": "integer" },
          "color": { "type": "string" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "boardId", "name", "sortOrder", "color", "createdAt"]
      },
      "FilesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "ownerUserId": { "type": "integer" },
          "name": { "type": "string" },
          "mimeType": { "type": "string" },
          "sizeBytes": { "type": "integer" },
          "url": { "type": "string", "format": "uri" },
          "parentFolderId": { "type": "integer", "nullable": true },
          "isFolder": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "ownerUserId",
          "name",
          "mimeType",
          "sizeBytes",
          "url",
          "parentFolderId",
          "isFolder",
          "createdAt",
          "updatedAt"
        ]
      },
      "StocksRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "symbol": { "type": "string" },
          "name": { "type": "string" },
          "exchange": { "type": "string", "enum": ["NYSE", "NASDAQ", "LSE", "TSX", "HKEX"] },
          "sector": { "type": "string" },
          "marketCap": { "type": "number" },
          "price": { "type": "number" },
          "priceChangePercent24h": { "type": "number" },
          "volume24h": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "symbol",
          "name",
          "exchange",
          "sector",
          "marketCap",
          "price",
          "priceChangePercent24h",
          "volume24h",
          "createdAt"
        ]
      },
      "CryptoRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "symbol": { "type": "string" },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "marketCap": { "type": "number" },
          "price": { "type": "number" },
          "priceChangePercent24h": { "type": "number" },
          "volume24h": { "type": "integer" },
          "circulatingSupply": { "type": "number" },
          "totalSupply": { "type": "number", "nullable": true },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "symbol",
          "name",
          "slug",
          "marketCap",
          "price",
          "priceChangePercent24h",
          "volume24h",
          "circulatingSupply",
          "totalSupply",
          "createdAt"
        ]
      },
      "StockHoldingsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "stockId": { "type": "integer" },
          "quantity": { "type": "number" },
          "costBasis": { "type": "number" },
          "purchasedAt": { "type": "string", "format": "date-time" }
        },
        "required": ["id", "userId", "stockId", "quantity", "costBasis", "purchasedAt"]
      },
      "CryptoHoldingsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "cryptoId": { "type": "integer" },
          "quantity": { "type": "number" },
          "costBasis": { "type": "number" },
          "purchasedAt": { "type": "string", "format": "date-time" }
        },
        "required": ["id", "userId", "cryptoId", "quantity", "costBasis", "purchasedAt"]
      },
      "AccountsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "name": { "type": "string" },
          "type": {
            "type": "string",
            "enum": ["checking", "savings", "credit_card", "investment", "loan", "other"]
          },
          "balance": { "type": "number" },
          "currency": { "type": "string" },
          "isActive": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "userId", "name", "type", "balance", "currency", "isActive", "createdAt"]
      },
      "TransactionsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "accountId": { "type": "integer" },
          "kind": {
            "type": "string",
            "enum": ["deposit", "withdrawal", "transfer", "payment", "fee", "interest", "refund"]
          },
          "amount": { "type": "number" },
          "currency": { "type": "string" },
          "description": { "type": "string" },
          "status": { "type": "string", "enum": ["pending", "completed", "failed", "cancelled"] },
          "occurredAt": { "type": "string", "format": "date-time" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "accountId",
          "kind",
          "amount",
          "currency",
          "description",
          "status",
          "occurredAt",
          "createdAt"
        ]
      },
      "BudgetsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "name": { "type": "string" },
          "categoryId": { "type": "integer", "nullable": true },
          "amount": { "type": "number" },
          "period": { "type": "string", "enum": ["weekly", "monthly", "quarterly", "yearly"] },
          "spent": { "type": "number" },
          "currency": { "type": "string" },
          "startsAt": { "type": "string" },
          "endsAt": { "type": "string", "nullable": true },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "name",
          "categoryId",
          "amount",
          "period",
          "spent",
          "currency",
          "startsAt",
          "endsAt",
          "createdAt"
        ]
      },
      "InvoicesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "fromUserId": { "type": "integer" },
          "toUserId": { "type": "integer" },
          "invoiceNumber": { "type": "string" },
          "status": {
            "type": "string",
            "enum": ["draft", "sent", "viewed", "paid", "overdue", "cancelled"]
          },
          "issuedAt": { "type": "string", "format": "date-time" },
          "dueAt": { "type": "string", "format": "date-time" },
          "paidAt": { "type": "string", "format": "date-time", "nullable": true },
          "subtotal": { "type": "number" },
          "tax": { "type": "number" },
          "total": { "type": "number" },
          "currency": { "type": "string" },
          "lineItems": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "description": { "type": "string" },
                "quantity": { "type": "integer" },
                "unitPrice": { "type": "number" },
                "lineTotal": { "type": "number" }
              },
              "required": ["description", "quantity", "unitPrice", "lineTotal"]
            }
          },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "fromUserId",
          "toUserId",
          "invoiceNumber",
          "status",
          "issuedAt",
          "dueAt",
          "paidAt",
          "subtotal",
          "tax",
          "total",
          "currency",
          "lineItems",
          "createdAt"
        ]
      },
      "ArticlesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "excerpt": { "type": "string" },
          "content": { "type": "string" },
          "category": { "type": "string" },
          "tags": { "type": "array", "items": { "type": "string" } },
          "readMinutes": { "type": "integer" },
          "imageUrl": { "type": "string", "format": "uri" },
          "isPublished": { "type": "boolean" },
          "publishedAt": { "type": "string", "format": "date-time", "nullable": true },
          "viewCount": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "title",
          "slug",
          "excerpt",
          "content",
          "category",
          "tags",
          "readMinutes",
          "imageUrl",
          "isPublished",
          "publishedAt",
          "viewCount",
          "createdAt",
          "updatedAt"
        ]
      },
      "VideosRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "videoUrl": { "type": "string", "format": "uri" },
          "thumbnailUrl": { "type": "string", "format": "uri" },
          "durationSeconds": { "type": "integer" },
          "viewCount": { "type": "integer" },
          "likeCount": { "type": "integer" },
          "isPublic": { "type": "boolean" },
          "publishedAt": { "type": "string", "format": "date-time" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "title",
          "slug",
          "description",
          "videoUrl",
          "thumbnailUrl",
          "durationSeconds",
          "viewCount",
          "likeCount",
          "isPublic",
          "publishedAt",
          "createdAt"
        ]
      },
      "PodcastsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "hostName": { "type": "string" },
          "category": {
            "type": "string",
            "enum": [
              "tech",
              "comedy",
              "news",
              "business",
              "education",
              "science",
              "health",
              "sports",
              "true-crime",
              "arts"
            ]
          },
          "language": { "type": "string" },
          "coverUrl": { "type": "string", "format": "uri" },
          "episodeCount": { "type": "integer" },
          "isExplicit": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "description",
          "hostName",
          "category",
          "language",
          "coverUrl",
          "episodeCount",
          "isExplicit",
          "createdAt",
          "updatedAt"
        ]
      },
      "PodcastEpisodesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "podcastId": { "type": "integer" },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "audioUrl": { "type": "string", "format": "uri" },
          "durationSeconds": { "type": "integer" },
          "episodeNumber": { "type": "integer" },
          "seasonNumber": { "type": "integer", "nullable": true },
          "publishedAt": { "type": "string", "format": "date-time" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "podcastId",
          "title",
          "slug",
          "description",
          "audioUrl",
          "durationSeconds",
          "episodeNumber",
          "seasonNumber",
          "publishedAt",
          "createdAt"
        ]
      },
      "BooksRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "authors": { "type": "array", "items": { "type": "string" } },
          "isbn": { "type": "string" },
          "publisher": { "type": "string" },
          "publishedYear": { "type": "integer" },
          "pages": { "type": "integer" },
          "language": { "type": "string" },
          "description": { "type": "string" },
          "coverUrl": { "type": "string", "format": "uri" },
          "genres": { "type": "array", "items": { "type": "string" } },
          "rating": { "type": "number" },
          "ratingCount": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "title",
          "slug",
          "authors",
          "isbn",
          "publisher",
          "publishedYear",
          "pages",
          "language",
          "description",
          "coverUrl",
          "genres",
          "rating",
          "ratingCount",
          "createdAt"
        ]
      },
      "BookFavsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "bookId": { "type": "integer" },
          "savedAt": { "type": "string", "format": "date-time" }
        },
        "required": ["id", "userId", "bookId", "savedAt"]
      },
      "MoviesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "year": { "type": "integer" },
          "runtimeMinutes": { "type": "integer" },
          "director": { "type": "string" },
          "cast": { "type": "array", "items": { "type": "string" } },
          "genres": { "type": "array", "items": { "type": "string" } },
          "language": { "type": "string" },
          "plot": { "type": "string" },
          "posterUrl": { "type": "string", "format": "uri" },
          "rating": { "type": "number" },
          "ratingCount": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "title",
          "slug",
          "year",
          "runtimeMinutes",
          "director",
          "cast",
          "genres",
          "language",
          "plot",
          "posterUrl",
          "rating",
          "ratingCount",
          "createdAt"
        ]
      },
      "TvShowsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "firstAired": { "type": "string" },
          "lastAired": { "type": "string", "nullable": true },
          "seasonCount": { "type": "integer" },
          "episodeCount": { "type": "integer" },
          "genres": { "type": "array", "items": { "type": "string" } },
          "language": { "type": "string" },
          "posterUrl": { "type": "string", "format": "uri" },
          "rating": { "type": "number" },
          "ratingCount": { "type": "integer" },
          "status": { "type": "string", "enum": ["running", "ended", "cancelled", "upcoming"] },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "title",
          "slug",
          "firstAired",
          "lastAired",
          "seasonCount",
          "episodeCount",
          "genres",
          "language",
          "posterUrl",
          "rating",
          "ratingCount",
          "status",
          "createdAt"
        ]
      },
      "TvEpisodesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "tvShowId": { "type": "integer" },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "seasonNumber": { "type": "integer" },
          "episodeNumber": { "type": "integer" },
          "airDate": { "type": "string" },
          "runtimeMinutes": { "type": "integer" },
          "description": { "type": "string" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "tvShowId",
          "title",
          "slug",
          "seasonNumber",
          "episodeNumber",
          "airDate",
          "runtimeMinutes",
          "description",
          "createdAt"
        ]
      },
      "ArtistsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "bio": { "type": "string" },
          "genres": { "type": "array", "items": { "type": "string" } },
          "imageUrl": { "type": "string", "format": "uri" },
          "monthlyListeners": { "type": "integer" },
          "formedYear": { "type": "integer" },
          "isVerified": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "bio",
          "genres",
          "imageUrl",
          "monthlyListeners",
          "formedYear",
          "isVerified",
          "createdAt"
        ]
      },
      "AlbumsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "artistId": { "type": "integer" },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "releaseDate": { "type": "string" },
          "trackCount": { "type": "integer" },
          "durationSeconds": { "type": "integer" },
          "genres": { "type": "array", "items": { "type": "string" } },
          "coverUrl": { "type": "string", "format": "uri" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "artistId",
          "title",
          "slug",
          "releaseDate",
          "trackCount",
          "durationSeconds",
          "genres",
          "coverUrl",
          "createdAt"
        ]
      },
      "SongsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "albumId": { "type": "integer" },
          "artistId": { "type": "integer" },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "trackNumber": { "type": "integer" },
          "durationSeconds": { "type": "integer" },
          "isExplicit": { "type": "boolean" },
          "playCount": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "albumId",
          "artistId",
          "title",
          "slug",
          "trackNumber",
          "durationSeconds",
          "isExplicit",
          "playCount",
          "createdAt"
        ]
      },
      "PlaylistsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "songIds": { "type": "array", "items": { "type": "integer" } },
          "isPublic": { "type": "boolean" },
          "coverUrl": { "type": "string", "format": "uri" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "name",
          "slug",
          "description",
          "songIds",
          "isPublic",
          "coverUrl",
          "createdAt",
          "updatedAt"
        ]
      },
      "ExercisesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "muscleGroup": {
            "type": "string",
            "enum": ["chest", "back", "legs", "shoulders", "arms", "core", "full_body", "cardio"]
          },
          "equipment": { "type": "array", "items": { "type": "string" } },
          "description": { "type": "string" },
          "instructions": { "type": "array", "items": { "type": "string" } },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "muscleGroup",
          "equipment",
          "description",
          "instructions",
          "createdAt"
        ]
      },
      "WorkoutsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "kind": {
            "type": "string",
            "enum": ["cardio", "strength", "flexibility", "sports", "mixed"]
          },
          "name": { "type": "string" },
          "durationMinutes": { "type": "integer" },
          "caloriesBurned": { "type": "integer" },
          "intensity": { "type": "string", "enum": ["low", "medium", "high", "very_high"] },
          "notes": { "type": "string" },
          "performedAt": { "type": "string", "format": "date-time" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "kind",
          "name",
          "durationMinutes",
          "caloriesBurned",
          "intensity",
          "notes",
          "performedAt",
          "createdAt"
        ]
      },
      "MealsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "name": { "type": "string" },
          "kind": { "type": "string", "enum": ["breakfast", "lunch", "dinner", "snack"] },
          "calories": { "type": "integer" },
          "proteinGrams": { "type": "number" },
          "carbsGrams": { "type": "number" },
          "fatGrams": { "type": "number" },
          "eatenAt": { "type": "string", "format": "date-time" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "name",
          "kind",
          "calories",
          "proteinGrams",
          "carbsGrams",
          "fatGrams",
          "eatenAt",
          "createdAt"
        ]
      },
      "NutritionLogsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "date": { "type": "string" },
          "totalCalories": { "type": "integer" },
          "totalProteinGrams": { "type": "number" },
          "totalCarbsGrams": { "type": "number" },
          "totalFatGrams": { "type": "number" },
          "waterMl": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "date",
          "totalCalories",
          "totalProteinGrams",
          "totalCarbsGrams",
          "totalFatGrams",
          "waterMl",
          "createdAt"
        ]
      },
      "GoalsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "name": { "type": "string" },
          "category": {
            "type": "string",
            "enum": ["fitness", "nutrition", "sleep", "weight", "habit", "other"]
          },
          "targetValue": { "type": "number" },
          "currentValue": { "type": "number" },
          "unit": { "type": "string" },
          "deadline": { "type": "string", "nullable": true },
          "isCompleted": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "name",
          "category",
          "targetValue",
          "currentValue",
          "unit",
          "deadline",
          "isCompleted",
          "createdAt"
        ]
      },
      "MeasurementsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "kind": {
            "type": "string",
            "enum": [
              "weight",
              "height",
              "body_fat_pct",
              "waist",
              "chest",
              "hip",
              "arm",
              "thigh",
              "resting_hr"
            ]
          },
          "value": { "type": "number" },
          "unit": { "type": "string" },
          "measuredAt": { "type": "string", "format": "date-time" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "userId", "kind", "value", "unit", "measuredAt", "createdAt"]
      },
      "SleepEntriesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "date": { "type": "string" },
          "sleepAt": { "type": "string", "format": "date-time" },
          "wakeAt": { "type": "string", "format": "date-time" },
          "durationMinutes": { "type": "integer" },
          "quality": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "date",
          "sleepAt",
          "wakeAt",
          "durationMinutes",
          "quality",
          "createdAt"
        ]
      },
      "CoursesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "instructorUserId": { "type": "integer" },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "category": {
            "type": "string",
            "enum": [
              "programming",
              "design",
              "business",
              "marketing",
              "data",
              "music",
              "photography",
              "writing"
            ]
          },
          "difficulty": { "type": "string", "enum": ["beginner", "intermediate", "advanced"] },
          "language": { "type": "string" },
          "durationHours": { "type": "number" },
          "priceFrom": { "type": "number" },
          "currency": { "type": "string" },
          "thumbnailUrl": { "type": "string", "format": "uri" },
          "rating": { "type": "number" },
          "ratingCount": { "type": "integer" },
          "enrollmentCount": { "type": "integer" },
          "isPublished": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "instructorUserId",
          "title",
          "slug",
          "description",
          "category",
          "difficulty",
          "language",
          "durationHours",
          "priceFrom",
          "currency",
          "thumbnailUrl",
          "rating",
          "ratingCount",
          "enrollmentCount",
          "isPublished",
          "createdAt",
          "updatedAt"
        ]
      },
      "LessonsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "courseId": { "type": "integer" },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "content": { "type": "string" },
          "sortOrder": { "type": "integer" },
          "durationMinutes": { "type": "integer" },
          "videoUrl": { "type": "string", "format": "uri", "nullable": true },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "courseId",
          "title",
          "slug",
          "description",
          "content",
          "sortOrder",
          "durationMinutes",
          "videoUrl",
          "createdAt",
          "updatedAt"
        ]
      },
      "EnrollmentsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "courseId": { "type": "integer" },
          "enrolledAt": { "type": "string", "format": "date-time" },
          "completedAt": { "type": "string", "format": "date-time", "nullable": true },
          "progressPercent": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "courseId",
          "enrolledAt",
          "completedAt",
          "progressPercent",
          "createdAt"
        ]
      },
      "QuizzesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "courseId": { "type": "integer" },
          "lessonId": { "type": "integer", "nullable": true },
          "title": { "type": "string" },
          "description": { "type": "string" },
          "passingScorePercent": { "type": "integer" },
          "timeLimitMinutes": { "type": "integer", "nullable": true },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "courseId",
          "lessonId",
          "title",
          "description",
          "passingScorePercent",
          "timeLimitMinutes",
          "createdAt",
          "updatedAt"
        ]
      },
      "QuizQuestionsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "quizId": { "type": "integer" },
          "text": { "type": "string" },
          "kind": { "type": "string", "enum": ["multiple_choice", "true_false", "short_answer"] },
          "options": { "type": "array", "items": { "type": "string" } },
          "correctAnswer": { "type": "string" },
          "sortOrder": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "quizId",
          "text",
          "kind",
          "options",
          "correctAnswer",
          "sortOrder",
          "createdAt"
        ]
      },
      "FlashcardsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "deckName": { "type": "string" },
          "front": { "type": "string" },
          "back": { "type": "string" },
          "difficulty": { "type": "string", "enum": ["easy", "medium", "hard"] },
          "lastReviewedAt": { "type": "string", "format": "date-time", "nullable": true },
          "nextReviewAt": { "type": "string", "format": "date-time", "nullable": true },
          "reviewCount": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "deckName",
          "front",
          "back",
          "difficulty",
          "lastReviewedAt",
          "nextReviewAt",
          "reviewCount",
          "createdAt"
        ]
      },
      "ProgressRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "courseId": { "type": "integer" },
          "lessonId": { "type": "integer", "nullable": true },
          "state": { "type": "string", "enum": ["not_started", "in_progress", "completed"] },
          "completedAt": { "type": "string", "format": "date-time", "nullable": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "courseId",
          "lessonId",
          "state",
          "completedAt",
          "updatedAt",
          "createdAt"
        ]
      },
      "CompaniesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "industryId": { "type": "integer", "nullable": true },
          "headquartersCountryAlpha2": { "type": "string" },
          "employeeCount": { "type": "integer" },
          "foundedYear": { "type": "integer" },
          "websiteUrl": { "type": "string", "format": "uri", "nullable": true },
          "logoUrl": { "type": "string", "format": "uri" },
          "isHiring": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "description",
          "industryId",
          "headquartersCountryAlpha2",
          "employeeCount",
          "foundedYear",
          "websiteUrl",
          "logoUrl",
          "isHiring",
          "createdAt"
        ]
      },
      "JobsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "companyId": { "type": "integer" },
          "title": { "type": "string" },
          "slug": { "type": "string" },
          "description": { "type": "string" },
          "employmentType": {
            "type": "string",
            "enum": ["full_time", "part_time", "contract", "internship", "temporary"]
          },
          "locationType": { "type": "string", "enum": ["remote", "hybrid", "onsite"] },
          "location": { "type": "string" },
          "salaryMin": { "type": "number" },
          "salaryMax": { "type": "number" },
          "currency": { "type": "string" },
          "isPublished": { "type": "boolean" },
          "postedAt": { "type": "string", "format": "date-time" },
          "expiresAt": { "type": "string", "format": "date-time", "nullable": true },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "companyId",
          "title",
          "slug",
          "description",
          "employmentType",
          "locationType",
          "location",
          "salaryMin",
          "salaryMax",
          "currency",
          "isPublished",
          "postedAt",
          "expiresAt",
          "createdAt",
          "updatedAt"
        ]
      },
      "ApplicationsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "jobId": { "type": "integer" },
          "status": {
            "type": "string",
            "enum": [
              "applied",
              "screening",
              "interview",
              "offer",
              "accepted",
              "rejected",
              "withdrawn"
            ]
          },
          "coverLetter": { "type": "string" },
          "appliedAt": { "type": "string", "format": "date-time" },
          "lastUpdatedAt": { "type": "string", "format": "date-time" }
        },
        "required": ["id", "userId", "jobId", "status", "coverLetter", "appliedAt", "lastUpdatedAt"]
      },
      "ResumesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "title": { "type": "string" },
          "summary": { "type": "string" },
          "isDefault": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "userId", "title", "summary", "isDefault", "createdAt", "updatedAt"]
      },
      "AgentsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "brokerage": { "type": "string" },
          "licenseNumber": { "type": "string" },
          "specialty": {
            "type": "string",
            "enum": ["residential", "commercial", "luxury", "rental", "land"]
          },
          "yearsExperience": { "type": "integer" },
          "rating": { "type": "number" },
          "ratingCount": { "type": "integer" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "brokerage",
          "licenseNumber",
          "specialty",
          "yearsExperience",
          "rating",
          "ratingCount",
          "createdAt"
        ]
      },
      "ListingsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "agentUserId": { "type": "integer" },
          "propertyType": {
            "type": "string",
            "enum": ["house", "condo", "townhouse", "apartment", "land", "commercial"]
          },
          "title": { "type": "string" },
          "description": { "type": "string" },
          "price": { "type": "number" },
          "currency": { "type": "string" },
          "bedrooms": { "type": "integer" },
          "bathrooms": { "type": "number" },
          "squareFeet": { "type": "integer" },
          "address": { "type": "string" },
          "city": { "type": "string" },
          "region": { "type": "string" },
          "countryAlpha2": { "type": "string" },
          "latitude": { "type": "number" },
          "longitude": { "type": "number" },
          "status": {
            "type": "string",
            "enum": ["active", "pending", "sold", "withdrawn", "off_market"]
          },
          "listedAt": { "type": "string", "format": "date-time" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "agentUserId",
          "propertyType",
          "title",
          "description",
          "price",
          "currency",
          "bedrooms",
          "bathrooms",
          "squareFeet",
          "address",
          "city",
          "region",
          "countryAlpha2",
          "latitude",
          "longitude",
          "status",
          "listedAt",
          "createdAt",
          "updatedAt"
        ]
      },
      "ShowingsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "listingId": { "type": "integer" },
          "prospectUserId": { "type": "integer" },
          "scheduledAt": { "type": "string", "format": "date-time" },
          "status": {
            "type": "string",
            "enum": ["scheduled", "completed", "cancelled", "no_show"]
          },
          "notes": { "type": "string" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "listingId",
          "prospectUserId",
          "scheduledAt",
          "status",
          "notes",
          "createdAt"
        ]
      },
      "PetBreedsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "species": {
            "type": "string",
            "enum": ["dog", "cat", "bird", "fish", "reptile", "rabbit", "other"]
          },
          "origin": { "type": "string" },
          "temperament": { "type": "array", "items": { "type": "string" } },
          "lifeExpectancyYears": { "type": "integer" },
          "isHypoallergenic": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "species",
          "origin",
          "temperament",
          "lifeExpectancyYears",
          "isHypoallergenic",
          "createdAt"
        ]
      },
      "PetsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "ownerUserId": { "type": "integer" },
          "name": { "type": "string" },
          "species": {
            "type": "string",
            "enum": ["dog", "cat", "bird", "fish", "reptile", "rabbit", "other"]
          },
          "breedId": { "type": "integer", "nullable": true },
          "gender": { "type": "string", "enum": ["male", "female", "unknown"] },
          "birthDate": { "type": "string", "nullable": true },
          "weightKg": { "type": "number" },
          "color": { "type": "string" },
          "imageUrl": { "type": "string", "format": "uri" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "ownerUserId",
          "name",
          "species",
          "breedId",
          "gender",
          "birthDate",
          "weightKg",
          "color",
          "imageUrl",
          "createdAt",
          "updatedAt"
        ]
      },
      "CarsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "make": { "type": "string" },
          "model": { "type": "string" },
          "year": { "type": "integer" },
          "trim": { "type": "string", "nullable": true },
          "vin": { "type": "string" },
          "color": { "type": "string" },
          "mileage": { "type": "integer" },
          "price": { "type": "number" },
          "currency": { "type": "string" },
          "transmission": { "type": "string", "enum": ["automatic", "manual", "cvt"] },
          "fuelType": {
            "type": "string",
            "enum": ["gas", "diesel", "electric", "hybrid", "plugin_hybrid"]
          },
          "bodyType": {
            "type": "string",
            "enum": ["sedan", "suv", "truck", "coupe", "hatchback", "van", "convertible", "wagon"]
          },
          "listingType": { "type": "string", "enum": ["sale", "rent"] },
          "city": { "type": "string" },
          "region": { "type": "string" },
          "countryAlpha2": { "type": "string" },
          "sellerUserId": { "type": "integer" },
          "isSold": { "type": "boolean" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true },
          "updatedAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "make",
          "model",
          "year",
          "trim",
          "vin",
          "color",
          "mileage",
          "price",
          "currency",
          "transmission",
          "fuelType",
          "bodyType",
          "listingType",
          "city",
          "region",
          "countryAlpha2",
          "sellerUserId",
          "isSold",
          "createdAt",
          "updatedAt"
        ]
      },
      "CarsSavedRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "carId": { "type": "integer" },
          "savedAt": { "type": "string", "format": "date-time" }
        },
        "required": ["id", "userId", "carId", "savedAt"]
      },
      "SneakersRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "brand": { "type": "string" },
          "model": { "type": "string" },
          "colorway": { "type": "string" },
          "style": { "type": "string" },
          "releaseDate": { "type": "string" },
          "retailPrice": { "type": "number" },
          "currency": { "type": "string" },
          "imageUrl": { "type": "string", "format": "uri" },
          "sizesAvailable": { "type": "array", "items": { "type": "string" } },
          "gender": { "type": "string", "enum": ["men", "women", "unisex", "youth"] },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "brand",
          "model",
          "colorway",
          "style",
          "releaseDate",
          "retailPrice",
          "currency",
          "imageUrl",
          "sizesAvailable",
          "gender",
          "createdAt"
        ]
      },
      "PlacesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "kind": {
            "type": "string",
            "enum": [
              "park",
              "beach",
              "landmark",
              "museum",
              "cafe",
              "restaurant",
              "shopping",
              "viewpoint",
              "hiking",
              "other"
            ]
          },
          "city": { "type": "string" },
          "countryAlpha2": { "type": "string" },
          "latitude": { "type": "number" },
          "longitude": { "type": "number" },
          "rating": { "type": "number" },
          "ratingCount": { "type": "integer" },
          "description": { "type": "string" },
          "imageUrl": { "type": "string", "format": "uri" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "kind",
          "city",
          "countryAlpha2",
          "latitude",
          "longitude",
          "rating",
          "ratingCount",
          "description",
          "imageUrl",
          "createdAt"
        ]
      },
      "PeopleRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "fullName": { "type": "string" },
          "firstName": { "type": "string" },
          "lastName": { "type": "string" },
          "email": { "type": "string", "format": "email" },
          "phone": { "type": "string" },
          "occupation": { "type": "string" },
          "city": { "type": "string" },
          "countryAlpha2": { "type": "string" },
          "bio": { "type": "string" },
          "avatarUrl": { "type": "string", "format": "uri" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "fullName",
          "firstName",
          "lastName",
          "email",
          "phone",
          "occupation",
          "city",
          "countryAlpha2",
          "bio",
          "avatarUrl",
          "createdAt"
        ]
      },
      "MatchmakingRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "userId": { "type": "integer" },
          "candidateUserId": { "type": "integer" },
          "matchScorePercent": { "type": "integer" },
          "commonInterests": { "type": "array", "items": { "type": "string" } },
          "status": {
            "type": "string",
            "enum": ["pending", "liked", "passed", "matched", "blocked"]
          },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "userId",
          "candidateUserId",
          "matchScorePercent",
          "commonInterests",
          "status",
          "createdAt"
        ]
      },
      "StemFiguresRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "field": {
            "type": "string",
            "enum": ["science", "technology", "engineering", "mathematics"]
          },
          "bio": { "type": "string" },
          "bornYear": { "type": "integer" },
          "diedYear": { "type": "integer", "nullable": true },
          "country": { "type": "string" },
          "imageUrl": { "type": "string", "format": "uri" },
          "accomplishments": { "type": "array", "items": { "type": "string" } },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "field",
          "bio",
          "bornYear",
          "diedYear",
          "country",
          "imageUrl",
          "accomplishments",
          "createdAt"
        ]
      },
      "AuthorsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "bio": { "type": "string" },
          "bornYear": { "type": "integer" },
          "diedYear": { "type": "integer", "nullable": true },
          "nationality": { "type": "string" },
          "genres": { "type": "array", "items": { "type": "string" } },
          "notableWorks": { "type": "array", "items": { "type": "string" } },
          "imageUrl": { "type": "string", "format": "uri" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "bio",
          "bornYear",
          "diedYear",
          "nationality",
          "genres",
          "notableWorks",
          "imageUrl",
          "createdAt"
        ]
      },
      "ActivistsRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "name": { "type": "string" },
          "slug": { "type": "string" },
          "bio": { "type": "string" },
          "bornYear": { "type": "integer" },
          "diedYear": { "type": "integer", "nullable": true },
          "causes": { "type": "array", "items": { "type": "string" } },
          "country": { "type": "string" },
          "imageUrl": { "type": "string", "format": "uri" },
          "accomplishments": { "type": "array", "items": { "type": "string" } },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": [
          "id",
          "name",
          "slug",
          "bio",
          "bornYear",
          "diedYear",
          "causes",
          "country",
          "imageUrl",
          "accomplishments",
          "createdAt"
        ]
      },
      "QuotesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "text": { "type": "string" },
          "authorName": { "type": "string" },
          "source": { "type": "string", "nullable": true },
          "category": { "type": "string" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "text", "authorName", "source", "category", "createdAt"]
      },
      "JokesRecord": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "readOnly": true },
          "setup": { "type": "string" },
          "punchline": { "type": "string" },
          "category": {
            "type": "string",
            "enum": ["pun", "dad", "observational", "one_liner", "knock_knock", "other"]
          },
          "rating": { "type": "number" },
          "createdAt": { "type": "string", "format": "date-time", "readOnly": true }
        },
        "required": ["id", "setup", "punchline", "category", "rating", "createdAt"]
      }
    }
  }
}
