{
  "openapi": "3.0.0",
  "info": {
    "title": "That Skin API",
    "version": "1.0.0",
    "description": "API pour la plateforme skincare personnalisée",
    "contact": {}
  },
  "paths": {
    "/appointments/count": {
      "get": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "count",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Appointment model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Appointment.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Appointment>"
                }
              }
            }
          }
        ],
        "operationId": "AppointmentController.count"
      }
    },
    "/appointments/guest": {
      "post": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "createGuestAppointment",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Create appointment without an account",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Appointment"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "guestFirstName",
                  "guestLastName",
                  "guestEmail",
                  "appointmentType",
                  "scheduledAt"
                ],
                "properties": {
                  "guestFirstName": {
                    "type": "string"
                  },
                  "guestLastName": {
                    "type": "string"
                  },
                  "guestEmail": {
                    "type": "string",
                    "format": "email"
                  },
                  "guestPhone": {
                    "type": "string"
                  },
                  "appointmentType": {
                    "type": "string"
                  },
                  "scheduledAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "duration": {
                    "type": "number",
                    "default": 60
                  },
                  "notes": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "AppointmentController.createGuestAppointment"
      }
    },
    "/appointments/guest-status": {
      "get": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "getGuestAppointmentStatus",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Get guest appointment status by ID (no auth required)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Appointment"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "appointmentId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "AppointmentController.getGuestAppointmentStatus"
      }
    },
    "/appointments/my-pending": {
      "get": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "getMyPendingAppointment",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Get current user pending/paid appointment for Calendly flow",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Appointment"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "clientId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "AppointmentController.getMyPendingAppointment"
      }
    },
    "/appointments/test-google-calendar": {
      "get": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "testGoogleCalendar",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Test Google Calendar integration",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "available": {
                      "type": "boolean"
                    },
                    "error": {
                      "type": "string"
                    },
                    "envVarsPresent": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "AppointmentController.testGoogleCalendar"
      }
    },
    "/appointments/test-meet-link": {
      "get": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "testMeetLink",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Test creating a calendar event with Google Meet link"
                }
              }
            }
          }
        },
        "operationId": "AppointmentController.testMeetLink"
      }
    },
    "/appointments/{id}/approve": {
      "post": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "approveAppointment",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Approve appointment and create Google Meet link",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Appointment"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "adminUserId"
                ],
                "properties": {
                  "adminUserId": {
                    "type": "string",
                    "description": "Admin user ID approving the appointment"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "AppointmentController.approveAppointment"
      }
    },
    "/appointments/{id}/confirm-payment": {
      "post": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "confirmPayment",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Admin confirms payment for an appointment",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Appointment"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "adminUserId"
                ],
                "properties": {
                  "adminUserId": {
                    "type": "string",
                    "description": "Admin user ID confirming payment"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "AppointmentController.confirmPayment"
      }
    },
    "/appointments/{id}/mark-scheduled": {
      "post": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "markAsScheduled",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Mark appointment as scheduled after Calendly booking",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Appointment"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "AppointmentController.markAsScheduled"
      }
    },
    "/appointments/{id}/reject": {
      "post": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "rejectAppointment",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Reject appointment",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Appointment"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "adminUserId",
                  "reason"
                ],
                "properties": {
                  "adminUserId": {
                    "type": "string",
                    "description": "Admin user ID rejecting the appointment"
                  },
                  "reason": {
                    "type": "string",
                    "description": "Reason for rejection"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "AppointmentController.rejectAppointment"
      }
    },
    "/appointments/{id}": {
      "put": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "replaceById",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Appointment PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Appointment"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "AppointmentController.replaceById"
      },
      "patch": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "updateById",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Appointment PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppointmentPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "AppointmentController.updateById"
      },
      "get": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "findById",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Appointment model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppointmentWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Appointment.Filter"
                }
              }
            }
          }
        ],
        "operationId": "AppointmentController.findById"
      },
      "delete": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "deleteById",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Appointment DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "AppointmentController.deleteById"
      }
    },
    "/appointments": {
      "post": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "create",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Appointment model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Appointment"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "clientId",
                  "appointmentType",
                  "scheduledAt"
                ],
                "properties": {
                  "clientId": {
                    "type": "string"
                  },
                  "assistantId": {
                    "type": "string"
                  },
                  "appointmentType": {
                    "type": "string"
                  },
                  "scheduledAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "duration": {
                    "type": "number",
                    "default": 60
                  },
                  "notes": {
                    "type": "string"
                  },
                  "createMeetLink": {
                    "type": "boolean",
                    "default": true
                  }
                }
              }
            }
          }
        },
        "operationId": "AppointmentController.create"
      },
      "patch": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "updateAll",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Appointment PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Appointment.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Appointment>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppointmentPartial"
              }
            }
          }
        },
        "operationId": "AppointmentController.updateAll"
      },
      "get": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "find",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Array of Appointment model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AppointmentWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Appointment.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "AppointmentController.find"
      }
    },
    "/articles/count": {
      "get": {
        "x-controller-name": "ArticleController",
        "x-operation-name": "count",
        "tags": [
          "ArticleController"
        ],
        "responses": {
          "200": {
            "description": "Article model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Article.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Article>"
                }
              }
            }
          }
        ],
        "operationId": "ArticleController.count"
      }
    },
    "/articles/slug/{slug}": {
      "get": {
        "x-controller-name": "ArticleController",
        "x-operation-name": "findBySlug",
        "tags": [
          "ArticleController"
        ],
        "responses": {
          "200": {
            "description": "Article model instance by slug",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ArticleController.findBySlug"
      }
    },
    "/articles/{id}": {
      "put": {
        "x-controller-name": "ArticleController",
        "x-operation-name": "replaceById",
        "tags": [
          "ArticleController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Article PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Article"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ArticleController.replaceById"
      },
      "patch": {
        "x-controller-name": "ArticleController",
        "x-operation-name": "updateById",
        "tags": [
          "ArticleController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Article PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArticlePartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ArticleController.updateById"
      },
      "get": {
        "x-controller-name": "ArticleController",
        "x-operation-name": "findById",
        "tags": [
          "ArticleController"
        ],
        "responses": {
          "200": {
            "description": "Article model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Article.Filter"
                }
              }
            }
          }
        ],
        "operationId": "ArticleController.findById"
      },
      "delete": {
        "x-controller-name": "ArticleController",
        "x-operation-name": "deleteById",
        "tags": [
          "ArticleController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Article DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ArticleController.deleteById"
      }
    },
    "/articles": {
      "post": {
        "x-controller-name": "ArticleController",
        "x-operation-name": "create",
        "tags": [
          "ArticleController"
        ],
        "responses": {
          "200": {
            "description": "Article model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Article"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewArticle"
              }
            }
          }
        },
        "operationId": "ArticleController.create"
      },
      "patch": {
        "x-controller-name": "ArticleController",
        "x-operation-name": "updateAll",
        "tags": [
          "ArticleController"
        ],
        "responses": {
          "200": {
            "description": "Article PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Article.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Article>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArticlePartial"
              }
            }
          }
        },
        "operationId": "ArticleController.updateAll"
      },
      "get": {
        "x-controller-name": "ArticleController",
        "x-operation-name": "find",
        "tags": [
          "ArticleController"
        ],
        "responses": {
          "200": {
            "description": "Array of Article model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ArticleWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Article.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "ArticleController.find"
      }
    },
    "/auth/change-password": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "changePassword",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Changement de mot de passe pour utilisateur connecté"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "currentPassword",
                  "newPassword"
                ],
                "properties": {
                  "currentPassword": {
                    "type": "string"
                  },
                  "newPassword": {
                    "type": "string",
                    "minLength": 8
                  }
                }
              }
            }
          },
          "description": "Mot de passe actuel et nouveau",
          "required": true
        },
        "operationId": "AuthController.changePassword"
      }
    },
    "/auth/complete-onboarding": {
      "post": {
        "x-controller-name": "SkinprofilController",
        "x-operation-name": "completeOnboarding",
        "tags": [
          "SkinprofilController"
        ],
        "responses": {
          "200": {
            "description": "Compléter l'onboarding skincare",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    },
                    "user": {
                      "type": "object"
                    },
                    "profile": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "skinType",
                  "skinConcerns",
                  "primaryConcern",
                  "skinGoals",
                  "primaryGoal",
                  "skincareExperience",
                  "budgetRange",
                  "timeCommitment",
                  "motivation"
                ],
                "properties": {
                  "skinType": {
                    "type": "string",
                    "enum": [
                      "seche",
                      "grasse",
                      "mixte",
                      "sensible",
                      "normale",
                      "ne_sais_pas"
                    ]
                  },
                  "skinConcerns": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "acne",
                        "vieillissement",
                        "taches_brunes",
                        "secheresse",
                        "exces_sebum",
                        "sensibilite",
                        "pores_dilates",
                        "rougeurs",
                        "terne",
                        "texture_irreguliere",
                        "cernes",
                        "rides_fines"
                      ]
                    }
                  },
                  "primaryConcern": {
                    "type": "string"
                  },
                  "skinGoals": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "peau_nette",
                        "anti_age",
                        "hydratation",
                        "eclat",
                        "teint_uniforme",
                        "texture_lisse",
                        "resserrer_pores",
                        "apaiser_sensibilite",
                        "prevention"
                      ]
                    }
                  },
                  "primaryGoal": {
                    "type": "string"
                  },
                  "skincareExperience": {
                    "type": "string",
                    "enum": [
                      "debutant",
                      "intermediaire",
                      "avance"
                    ]
                  },
                  "budgetRange": {
                    "type": "string",
                    "enum": [
                      "petit",
                      "moyen",
                      "eleve",
                      "luxe"
                    ]
                  },
                  "timeCommitment": {
                    "type": "number",
                    "minimum": 5,
                    "maximum": 60
                  },
                  "motivation": {
                    "type": "string"
                  },
                  "currentRoutine": {
                    "type": "string"
                  },
                  "currentProducts": {
                    "type": "string"
                  },
                  "allergies": {
                    "type": "string"
                  },
                  "productPreferences": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "lifestyleFactors": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "environmentalFactors": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "challenges": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "description": "Données d'onboarding skincare",
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "SkinprofilController.completeOnboarding"
      }
    },
    "/auth/forgot-password": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "forgotPassword",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Demande de réinitialisation de mot de passe"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email"
                ],
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email"
                  }
                }
              }
            }
          },
          "description": "Email pour la réinitialisation",
          "required": true
        },
        "operationId": "AuthController.forgotPassword"
      }
    },
    "/auth/login": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "login",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Connexion utilisateur"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email",
                  "password"
                ],
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email"
                  },
                  "password": {
                    "type": "string",
                    "minLength": 8
                  }
                }
              }
            }
          },
          "description": "Identifiants de connexion",
          "required": true
        },
        "operationId": "AuthController.login"
      }
    },
    "/auth/logout": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "logout",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Déconnexion utilisateur"
                }
              }
            }
          }
        },
        "operationId": "AuthController.logout"
      }
    },
    "/auth/profile": {
      "get": {
        "x-controller-name": "AuthController",
        "x-operation-name": "getProfile",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Profil utilisateur"
                }
              }
            }
          }
        },
        "operationId": "AuthController.getProfile"
      }
    },
    "/auth/refresh": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "refresh",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Renouveler le token d'accès via le refresh token"
                }
              }
            }
          }
        },
        "operationId": "AuthController.refresh"
      }
    },
    "/auth/register": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "register",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Inscription utilisateur - Email de vérification envoyé"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email",
                  "password",
                  "firstName",
                  "lastName",
                  "phone"
                ],
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email"
                  },
                  "password": {
                    "type": "string",
                    "minLength": 8
                  },
                  "firstName": {
                    "type": "string"
                  },
                  "lastName": {
                    "type": "string"
                  },
                  "phone": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "description": "Données d'inscription",
          "required": true
        },
        "operationId": "AuthController.register"
      }
    },
    "/auth/resend-verification": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "resendVerificationEmail",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Renvoyer l'email de vérification"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email"
                ],
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email"
                  }
                }
              }
            }
          },
          "description": "Email de l'utilisateur",
          "required": true
        },
        "operationId": "AuthController.resendVerificationEmail"
      }
    },
    "/auth/reset-password": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "resetPassword",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Réinitialisation du mot de passe"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "token",
                  "newPassword"
                ],
                "properties": {
                  "token": {
                    "type": "string"
                  },
                  "newPassword": {
                    "type": "string",
                    "minLength": 8
                  }
                }
              }
            }
          },
          "description": "Token et nouveau mot de passe",
          "required": true
        },
        "operationId": "AuthController.resetPassword"
      }
    },
    "/auth/verify-email": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "verifyEmail",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Vérification de l'email utilisateur"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "token"
                ],
                "properties": {
                  "token": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "description": "Token de vérification",
          "required": true
        },
        "operationId": "AuthController.verifyEmail"
      }
    },
    "/auth/verify-token": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "verifyToken",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Vérifier la validité d'un token"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "token": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": false
        },
        "operationId": "AuthController.verifyToken"
      }
    },
    "/cart-items/count": {
      "get": {
        "x-controller-name": "CartItemController",
        "x-operation-name": "count",
        "tags": [
          "CartItemController"
        ],
        "responses": {
          "200": {
            "description": "CartItem model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "CartItem.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<CartItem>"
                }
              }
            }
          }
        ],
        "operationId": "CartItemController.count"
      }
    },
    "/cart-items/{id}": {
      "put": {
        "x-controller-name": "CartItemController",
        "x-operation-name": "replaceById",
        "tags": [
          "CartItemController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "CartItem PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CartItem"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "CartItemController.replaceById"
      },
      "patch": {
        "x-controller-name": "CartItemController",
        "x-operation-name": "updateById",
        "tags": [
          "CartItemController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "CartItem PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CartItemPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "CartItemController.updateById"
      },
      "get": {
        "x-controller-name": "CartItemController",
        "x-operation-name": "findById",
        "tags": [
          "CartItemController"
        ],
        "responses": {
          "200": {
            "description": "CartItem model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CartItemWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CartItem.Filter"
                }
              }
            }
          }
        ],
        "operationId": "CartItemController.findById"
      },
      "delete": {
        "x-controller-name": "CartItemController",
        "x-operation-name": "deleteById",
        "tags": [
          "CartItemController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "CartItem DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "CartItemController.deleteById"
      }
    },
    "/cart-items": {
      "post": {
        "x-controller-name": "CartItemController",
        "x-operation-name": "create",
        "tags": [
          "CartItemController"
        ],
        "responses": {
          "200": {
            "description": "CartItem model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CartItem"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewCartItem"
              }
            }
          }
        },
        "operationId": "CartItemController.create"
      },
      "patch": {
        "x-controller-name": "CartItemController",
        "x-operation-name": "updateAll",
        "tags": [
          "CartItemController"
        ],
        "responses": {
          "200": {
            "description": "CartItem PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "CartItem.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<CartItem>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CartItemPartial"
              }
            }
          }
        },
        "operationId": "CartItemController.updateAll"
      },
      "get": {
        "x-controller-name": "CartItemController",
        "x-operation-name": "find",
        "tags": [
          "CartItemController"
        ],
        "responses": {
          "200": {
            "description": "Array of CartItem model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CartItemWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CartItem.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "CartItemController.find"
      }
    },
    "/edition-soya/archive": {
      "get": {
        "x-controller-name": "EditionSoyaController",
        "x-operation-name": "archive",
        "tags": [
          "EditionSoyaController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Liste des éditions publiées (pour la bande archive)"
                }
              }
            }
          }
        },
        "operationId": "EditionSoyaController.archive"
      }
    },
    "/edition-soya/by-month/{month}": {
      "get": {
        "x-controller-name": "EditionSoyaController",
        "x-operation-name": "byMonth",
        "tags": [
          "EditionSoyaController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Édition Soya publiée pour un mois donné, produits résolus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "month",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "EditionSoyaController.byMonth"
      }
    },
    "/edition-soya/count": {
      "get": {
        "x-controller-name": "EditionSoyaController",
        "x-operation-name": "count",
        "tags": [
          "EditionSoyaController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "EditionSoya.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<EditionSoya>"
                }
              }
            }
          }
        ],
        "operationId": "EditionSoyaController.count"
      }
    },
    "/edition-soya/current": {
      "get": {
        "x-controller-name": "EditionSoyaController",
        "x-operation-name": "current",
        "tags": [
          "EditionSoyaController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Édition Soya publiée la plus récente, produits résolus"
                }
              }
            }
          }
        },
        "operationId": "EditionSoyaController.current"
      }
    },
    "/edition-soya/{id}": {
      "patch": {
        "x-controller-name": "EditionSoyaController",
        "x-operation-name": "updateById",
        "tags": [
          "EditionSoyaController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "EditionSoya PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditionSoyaPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "EditionSoyaController.updateById"
      },
      "get": {
        "x-controller-name": "EditionSoyaController",
        "x-operation-name": "findById",
        "tags": [
          "EditionSoyaController"
        ],
        "responses": {
          "200": {
            "description": "EditionSoya model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EditionSoya"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "EditionSoyaController.findById"
      },
      "delete": {
        "x-controller-name": "EditionSoyaController",
        "x-operation-name": "deleteById",
        "tags": [
          "EditionSoyaController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "EditionSoya DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "EditionSoyaController.deleteById"
      }
    },
    "/edition-soya": {
      "post": {
        "x-controller-name": "EditionSoyaController",
        "x-operation-name": "create",
        "tags": [
          "EditionSoyaController"
        ],
        "responses": {
          "200": {
            "description": "EditionSoya model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EditionSoya"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewEditionSoya"
              }
            }
          }
        },
        "operationId": "EditionSoyaController.create"
      },
      "get": {
        "x-controller-name": "EditionSoyaController",
        "x-operation-name": "find",
        "tags": [
          "EditionSoyaController"
        ],
        "responses": {
          "200": {
            "description": "Array of EditionSoya model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EditionSoya"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EditionSoya.Filter"
                }
              }
            }
          }
        ],
        "operationId": "EditionSoyaController.find"
      }
    },
    "/my-cart/discount": {
      "post": {
        "x-controller-name": "MyCartController",
        "x-operation-name": "applyDiscount",
        "tags": [
          "MyCartController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Appliquer un code de réduction"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "discountCode"
                ],
                "properties": {
                  "discountCode": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "MyCartController.applyDiscount"
      }
    },
    "/my-cart/items/{itemId}": {
      "patch": {
        "x-controller-name": "MyCartController",
        "x-operation-name": "updateCartItem",
        "tags": [
          "MyCartController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Mettre à jour un article du panier"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "itemId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "quantity": {
                    "type": "number",
                    "minimum": 1
                  }
                }
              }
            }
          },
          "x-parameter-index": 2
        },
        "operationId": "MyCartController.updateCartItem"
      },
      "delete": {
        "x-controller-name": "MyCartController",
        "x-operation-name": "removeFromCart",
        "tags": [
          "MyCartController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Supprimer un article du panier"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "itemId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "MyCartController.removeFromCart"
      }
    },
    "/my-cart/items": {
      "post": {
        "x-controller-name": "MyCartController",
        "x-operation-name": "addToCart",
        "tags": [
          "MyCartController"
        ],
        "responses": {
          "200": {
            "description": "Ajouter un article au panier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CartItem"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "productId",
                  "quantity",
                  "price"
                ],
                "properties": {
                  "productId": {
                    "type": "string"
                  },
                  "quantity": {
                    "type": "number",
                    "minimum": 1
                  },
                  "price": {
                    "type": "number",
                    "minimum": 0
                  },
                  "variantId": {
                    "type": "string"
                  },
                  "customOptions": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "MyCartController.addToCart"
      }
    },
    "/my-cart": {
      "get": {
        "x-controller-name": "MyCartController",
        "x-operation-name": "getMyCart",
        "tags": [
          "MyCartController"
        ],
        "responses": {
          "200": {
            "description": "Mon panier avec tous les articles",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CartWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "MyCartController.getMyCart"
      },
      "delete": {
        "x-controller-name": "MyCartController",
        "x-operation-name": "clearCart",
        "tags": [
          "MyCartController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Vider mon panier"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "MyCartController.clearCart"
      }
    },
    "/my-orders/all": {
      "get": {
        "x-controller-name": "MyOrderController",
        "x-operation-name": "getAllOrders",
        "tags": [
          "MyOrderController"
        ],
        "responses": {
          "200": {
            "description": "Get all orders (Admin only)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderWithRelations"
                  }
                }
              }
            }
          }
        },
        "operationId": "MyOrderController.getAllOrders"
      }
    },
    "/my-orders/{id}/cancel": {
      "patch": {
        "x-controller-name": "MyOrderController",
        "x-operation-name": "cancelOrder",
        "tags": [
          "MyOrderController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Commande annulée"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "MyOrderController.cancelOrder"
      }
    },
    "/my-orders/{orderId}/payment": {
      "post": {
        "x-controller-name": "MyOrderController",
        "x-operation-name": "initiatePayment",
        "tags": [
          "MyOrderController"
        ],
        "responses": {
          "200": {
            "description": "Paiement PayDunya initié",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "transactionId": {
                      "type": "string"
                    },
                    "checkoutUrl": {
                      "type": "string"
                    },
                    "token": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "customerName": {
                    "type": "string"
                  },
                  "customerEmail": {
                    "type": "string"
                  },
                  "customerPhone": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "MyOrderController.initiatePayment"
      }
    },
    "/my-orders/{id}/payment-status": {
      "get": {
        "x-controller-name": "MyOrderController",
        "x-operation-name": "checkPaymentStatus",
        "tags": [
          "MyOrderController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Statut du paiement"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "MyOrderController.checkPaymentStatus"
      }
    },
    "/my-orders/{id}/ship": {
      "patch": {
        "x-controller-name": "MyOrderController",
        "x-operation-name": "markAsShipped",
        "tags": [
          "MyOrderController"
        ],
        "responses": {
          "200": {
            "description": "Order marked as shipped",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "trackingNumber": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "MyOrderController.markAsShipped"
      }
    },
    "/my-orders/{id}/status": {
      "patch": {
        "x-controller-name": "MyOrderController",
        "x-operation-name": "updateOrderStatus",
        "tags": [
          "MyOrderController"
        ],
        "responses": {
          "200": {
            "description": "Order status updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "pending",
                      "confirmed",
                      "processing",
                      "shipped",
                      "delivered",
                      "cancelled"
                    ]
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "MyOrderController.updateOrderStatus"
      }
    },
    "/my-orders/{id}/verify-payment": {
      "post": {
        "x-controller-name": "MyOrderController",
        "x-operation-name": "verifyPayment",
        "tags": [
          "MyOrderController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Payment verification result"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "MyOrderController.verifyPayment"
      }
    },
    "/my-orders/{id}": {
      "get": {
        "x-controller-name": "MyOrderController",
        "x-operation-name": "getOrderById",
        "tags": [
          "MyOrderController"
        ],
        "responses": {
          "200": {
            "description": "Détails de la commande",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "MyOrderController.getOrderById"
      },
      "delete": {
        "x-controller-name": "MyOrderController",
        "x-operation-name": "deleteOrder",
        "tags": [
          "MyOrderController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Commande supprimée"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "MyOrderController.deleteOrder"
      }
    },
    "/my-orders": {
      "post": {
        "x-controller-name": "MyOrderController",
        "x-operation-name": "createOrder",
        "tags": [
          "MyOrderController"
        ],
        "responses": {
          "200": {
            "description": "Commande créée avec succès",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderWithRelations"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "shippingAddress"
                ],
                "properties": {
                  "shippingAddress": {
                    "type": "object",
                    "required": [
                      "firstName",
                      "lastName",
                      "address",
                      "city",
                      "phone"
                    ],
                    "properties": {
                      "firstName": {
                        "type": "string"
                      },
                      "lastName": {
                        "type": "string"
                      },
                      "address": {
                        "type": "string"
                      },
                      "city": {
                        "type": "string"
                      },
                      "postalCode": {
                        "type": "string"
                      },
                      "country": {
                        "type": "string"
                      },
                      "phone": {
                        "type": "string"
                      }
                    }
                  },
                  "billingAddress": {
                    "type": "object"
                  },
                  "paymentMethod": {
                    "type": "string",
                    "default": "paydunya"
                  }
                }
              }
            }
          }
        },
        "operationId": "MyOrderController.createOrder"
      },
      "get": {
        "x-controller-name": "MyOrderController",
        "x-operation-name": "getMyOrders",
        "tags": [
          "MyOrderController"
        ],
        "responses": {
          "200": {
            "description": "Liste de mes commandes",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderWithRelations"
                  }
                }
              }
            }
          }
        },
        "operationId": "MyOrderController.getMyOrders"
      }
    },
    "/newsletter/subscribe": {
      "post": {
        "x-controller-name": "NewsletterController",
        "x-operation-name": "subscribe",
        "tags": [
          "NewsletterController"
        ],
        "responses": {
          "202": {
            "description": "E-mail de confirmation envoyé (ou contact déjà inscrit)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string",
                      "enum": [
                        "pending",
                        "already"
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email"
                ],
                "properties": {
                  "email": {
                    "type": "string",
                    "maxLength": 150
                  },
                  "source": {
                    "type": "string",
                    "maxLength": 40
                  }
                }
              }
            }
          }
        },
        "operationId": "NewsletterController.subscribe"
      }
    },
    "/notifications/count": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "count",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Notification model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Notification.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Notification>"
                }
              }
            }
          }
        ],
        "operationId": "NotificationController.count"
      }
    },
    "/notifications/{id}": {
      "put": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "replaceById",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Notification PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Notification"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "NotificationController.replaceById"
      },
      "patch": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "updateById",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Notification PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "NotificationController.updateById"
      },
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "findById",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Notification model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Notification.Filter"
                }
              }
            }
          }
        ],
        "operationId": "NotificationController.findById"
      },
      "delete": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "deleteById",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Notification DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "NotificationController.deleteById"
      }
    },
    "/notifications": {
      "post": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "create",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Notification model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Notification"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewNotification"
              }
            }
          }
        },
        "operationId": "NotificationController.create"
      },
      "patch": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "updateAll",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Notification PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Notification.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Notification>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationPartial"
              }
            }
          }
        },
        "operationId": "NotificationController.updateAll"
      },
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "find",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Array of Notification model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/NotificationWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Notification.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "NotificationController.find"
      }
    },
    "/order-items/count": {
      "get": {
        "x-controller-name": "OrderItemController",
        "x-operation-name": "count",
        "tags": [
          "OrderItemController"
        ],
        "responses": {
          "200": {
            "description": "OrderItem model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "OrderItem.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<OrderItem>"
                }
              }
            }
          }
        ],
        "operationId": "OrderItemController.count"
      }
    },
    "/order-items/{id}": {
      "put": {
        "x-controller-name": "OrderItemController",
        "x-operation-name": "replaceById",
        "tags": [
          "OrderItemController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "OrderItem PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderItem"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "OrderItemController.replaceById"
      },
      "patch": {
        "x-controller-name": "OrderItemController",
        "x-operation-name": "updateById",
        "tags": [
          "OrderItemController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "OrderItem PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderItemPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "OrderItemController.updateById"
      },
      "get": {
        "x-controller-name": "OrderItemController",
        "x-operation-name": "findById",
        "tags": [
          "OrderItemController"
        ],
        "responses": {
          "200": {
            "description": "OrderItem model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderItemWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderItem.Filter"
                }
              }
            }
          }
        ],
        "operationId": "OrderItemController.findById"
      },
      "delete": {
        "x-controller-name": "OrderItemController",
        "x-operation-name": "deleteById",
        "tags": [
          "OrderItemController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "OrderItem DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "OrderItemController.deleteById"
      }
    },
    "/order-items": {
      "post": {
        "x-controller-name": "OrderItemController",
        "x-operation-name": "create",
        "tags": [
          "OrderItemController"
        ],
        "responses": {
          "200": {
            "description": "OrderItem model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderItem"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewOrderItem"
              }
            }
          }
        },
        "operationId": "OrderItemController.create"
      },
      "patch": {
        "x-controller-name": "OrderItemController",
        "x-operation-name": "updateAll",
        "tags": [
          "OrderItemController"
        ],
        "responses": {
          "200": {
            "description": "OrderItem PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "OrderItem.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<OrderItem>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderItemPartial"
              }
            }
          }
        },
        "operationId": "OrderItemController.updateAll"
      },
      "get": {
        "x-controller-name": "OrderItemController",
        "x-operation-name": "find",
        "tags": [
          "OrderItemController"
        ],
        "responses": {
          "200": {
            "description": "Array of OrderItem model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderItemWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderItem.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "OrderItemController.find"
      }
    },
    "/orders/count": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "count",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Order model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Order.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Order>"
                }
              }
            }
          }
        ],
        "operationId": "OrderController.count"
      }
    },
    "/orders/{id}": {
      "put": {
        "x-controller-name": "OrderController",
        "x-operation-name": "replaceById",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Order PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Order"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "OrderController.replaceById"
      },
      "patch": {
        "x-controller-name": "OrderController",
        "x-operation-name": "updateById",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Order PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "OrderController.updateById"
      },
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "findById",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Order model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order.Filter"
                }
              }
            }
          }
        ],
        "operationId": "OrderController.findById"
      },
      "delete": {
        "x-controller-name": "OrderController",
        "x-operation-name": "deleteById",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Order DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "OrderController.deleteById"
      }
    },
    "/orders": {
      "post": {
        "x-controller-name": "OrderController",
        "x-operation-name": "create",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Order model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewOrder"
              }
            }
          }
        },
        "operationId": "OrderController.create"
      },
      "patch": {
        "x-controller-name": "OrderController",
        "x-operation-name": "updateAll",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Order PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Order.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Order>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderPartial"
              }
            }
          }
        },
        "operationId": "OrderController.updateAll"
      },
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "find",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Array of Order model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "OrderController.find"
      }
    },
    "/page-content/{page}": {
      "put": {
        "x-controller-name": "PageContentController",
        "x-operation-name": "upsert",
        "tags": [
          "PageContentController"
        ],
        "responses": {
          "200": {
            "description": "Textes éditoriaux enregistrés",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PageContent"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "page",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "fields": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "PageContentController.upsert"
      },
      "get": {
        "x-controller-name": "PageContentController",
        "x-operation-name": "getByPage",
        "tags": [
          "PageContentController"
        ],
        "responses": {
          "200": {
            "description": "Textes éditoriaux de la page (objet vide si rien de personnalisé)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "page": {
                      "type": "string"
                    },
                    "fields": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "page",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "PageContentController.getByPage"
      }
    },
    "/password/check-strength": {
      "post": {
        "x-controller-name": "PasswordController",
        "x-operation-name": "checkPasswordStrength",
        "tags": [
          "PasswordController"
        ],
        "responses": {
          "200": {
            "description": "Vérifier la force d'un mot de passe",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "isValid": {
                      "type": "boolean"
                    },
                    "errors": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "strength": {
                      "type": "string",
                      "enum": [
                        "weak",
                        "medium",
                        "strong"
                      ]
                    },
                    "score": {
                      "type": "number"
                    },
                    "suggestions": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "crackTime": {
                      "type": "string"
                    },
                    "isCommon": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "password"
                ],
                "properties": {
                  "password": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "description": "Mot de passe à vérifier",
          "required": true
        },
        "operationId": "PasswordController.checkPasswordStrength"
      }
    },
    "/password/generate": {
      "get": {
        "x-controller-name": "PasswordController",
        "x-operation-name": "generatePassword",
        "tags": [
          "PasswordController"
        ],
        "responses": {
          "200": {
            "description": "Générer un mot de passe sécurisé",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "password": {
                      "type": "string"
                    },
                    "strength": {
                      "type": "string"
                    },
                    "score": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "PasswordController.generatePassword"
      }
    },
    "/password/generate-custom": {
      "post": {
        "x-controller-name": "PasswordController",
        "x-operation-name": "generateCustomPassword",
        "tags": [
          "PasswordController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Générer un mot de passe sécurisé avec longueur personnalisée"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "length": {
                    "type": "number",
                    "minimum": 8,
                    "maximum": 128,
                    "default": 16
                  }
                }
              }
            }
          },
          "description": "Options de génération",
          "required": false
        },
        "operationId": "PasswordController.generateCustomPassword"
      }
    },
    "/paydunya/create-invoice": {
      "post": {
        "x-controller-name": "PaydunyaController",
        "x-operation-name": "createInvoice",
        "tags": [
          "PaydunyaController"
        ],
        "responses": {
          "200": {
            "description": "Facture PayDunya créée avec succès",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaydunyaTransaction"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "orderId"
                ],
                "properties": {
                  "orderId": {
                    "type": "string"
                  },
                  "customerName": {
                    "type": "string"
                  },
                  "customerEmail": {
                    "type": "string"
                  },
                  "customerPhone": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "PaydunyaController.createInvoice"
      }
    },
    "/paydunya/transactions/{token}/status": {
      "get": {
        "x-controller-name": "PaydunyaController",
        "x-operation-name": "checkStatus",
        "tags": [
          "PaydunyaController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Statut de la transaction PayDunya"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "PaydunyaController.checkStatus"
      }
    },
    "/paydunya/transactions/{id}": {
      "get": {
        "x-controller-name": "PaydunyaController",
        "x-operation-name": "getTransactionById",
        "tags": [
          "PaydunyaController"
        ],
        "responses": {
          "200": {
            "description": "Transaction PayDunya",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaydunyaTransaction"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "PaydunyaController.getTransactionById"
      },
      "delete": {
        "x-controller-name": "PaydunyaController",
        "x-operation-name": "cancelTransaction",
        "tags": [
          "PaydunyaController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Transaction annulée"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "PaydunyaController.cancelTransaction"
      }
    },
    "/paydunya/transactions": {
      "get": {
        "x-controller-name": "PaydunyaController",
        "x-operation-name": "getUserTransactions",
        "tags": [
          "PaydunyaController"
        ],
        "responses": {
          "200": {
            "description": "Liste des transactions PayDunya",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PaydunyaTransaction"
                  }
                }
              }
            }
          }
        },
        "operationId": "PaydunyaController.getUserTransactions"
      }
    },
    "/ping": {
      "get": {
        "x-controller-name": "PingController",
        "x-operation-name": "ping",
        "tags": [
          "PingController"
        ],
        "responses": {
          "200": {
            "description": "Ping Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PingResponse"
                }
              }
            }
          }
        },
        "operationId": "PingController.ping"
      }
    },
    "/products/count": {
      "get": {
        "x-controller-name": "ProductController",
        "x-operation-name": "count",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Product model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Product.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Product>"
                }
              }
            }
          }
        ],
        "operationId": "ProductController.count"
      }
    },
    "/products/{id}": {
      "put": {
        "x-controller-name": "ProductController",
        "x-operation-name": "replaceById",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Product PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Product"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ProductController.replaceById"
      },
      "patch": {
        "x-controller-name": "ProductController",
        "x-operation-name": "updateById",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Product PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ProductController.updateById"
      },
      "get": {
        "x-controller-name": "ProductController",
        "x-operation-name": "findById",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Product model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Product.Filter"
                }
              }
            }
          }
        ],
        "operationId": "ProductController.findById"
      },
      "delete": {
        "x-controller-name": "ProductController",
        "x-operation-name": "deleteById",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Product DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ProductController.deleteById"
      }
    },
    "/products": {
      "post": {
        "x-controller-name": "ProductController",
        "x-operation-name": "create",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Product model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Product"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewProduct"
              }
            }
          }
        },
        "operationId": "ProductController.create"
      },
      "patch": {
        "x-controller-name": "ProductController",
        "x-operation-name": "updateAll",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Product PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Product.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Product>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductPartial"
              }
            }
          }
        },
        "operationId": "ProductController.updateAll"
      },
      "get": {
        "x-controller-name": "ProductController",
        "x-operation-name": "find",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Array of Product model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProductWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Product.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "ProductController.find"
      }
    },
    "/reviews/count": {
      "get": {
        "x-controller-name": "ReviewController",
        "x-operation-name": "count",
        "tags": [
          "ReviewController"
        ],
        "responses": {
          "200": {
            "description": "Review model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Review.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Review>"
                }
              }
            }
          }
        ],
        "operationId": "ReviewController.count"
      }
    },
    "/reviews/{id}": {
      "put": {
        "x-controller-name": "ReviewController",
        "x-operation-name": "replaceById",
        "tags": [
          "ReviewController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Review PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Review"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ReviewController.replaceById"
      },
      "patch": {
        "x-controller-name": "ReviewController",
        "x-operation-name": "updateById",
        "tags": [
          "ReviewController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Review PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReviewPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ReviewController.updateById"
      },
      "get": {
        "x-controller-name": "ReviewController",
        "x-operation-name": "findById",
        "tags": [
          "ReviewController"
        ],
        "responses": {
          "200": {
            "description": "Review model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReviewWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Review.Filter"
                }
              }
            }
          }
        ],
        "operationId": "ReviewController.findById"
      },
      "delete": {
        "x-controller-name": "ReviewController",
        "x-operation-name": "deleteById",
        "tags": [
          "ReviewController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Review DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ReviewController.deleteById"
      }
    },
    "/reviews": {
      "post": {
        "x-controller-name": "ReviewController",
        "x-operation-name": "create",
        "tags": [
          "ReviewController"
        ],
        "responses": {
          "200": {
            "description": "Review model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Review"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewReview"
              }
            }
          }
        },
        "operationId": "ReviewController.create"
      },
      "patch": {
        "x-controller-name": "ReviewController",
        "x-operation-name": "updateAll",
        "tags": [
          "ReviewController"
        ],
        "responses": {
          "200": {
            "description": "Review PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Review.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Review>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReviewPartial"
              }
            }
          }
        },
        "operationId": "ReviewController.updateAll"
      },
      "get": {
        "x-controller-name": "ReviewController",
        "x-operation-name": "find",
        "tags": [
          "ReviewController"
        ],
        "responses": {
          "200": {
            "description": "Array of Review model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReviewWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Review.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "ReviewController.find"
      }
    },
    "/routine-steps/count": {
      "get": {
        "x-controller-name": "RoutinestepController",
        "x-operation-name": "count",
        "tags": [
          "RoutinestepController"
        ],
        "responses": {
          "200": {
            "description": "RoutineStep model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "RoutineStep.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<RoutineStep>"
                }
              }
            }
          }
        ],
        "operationId": "RoutinestepController.count"
      }
    },
    "/routine-steps/{id}": {
      "put": {
        "x-controller-name": "RoutinestepController",
        "x-operation-name": "replaceById",
        "tags": [
          "RoutinestepController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "RoutineStep PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutineStep"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "RoutinestepController.replaceById"
      },
      "patch": {
        "x-controller-name": "RoutinestepController",
        "x-operation-name": "updateById",
        "tags": [
          "RoutinestepController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "RoutineStep PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutineStepPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "RoutinestepController.updateById"
      },
      "get": {
        "x-controller-name": "RoutinestepController",
        "x-operation-name": "findById",
        "tags": [
          "RoutinestepController"
        ],
        "responses": {
          "200": {
            "description": "RoutineStep model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoutineStepWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoutineStep.Filter"
                }
              }
            }
          }
        ],
        "operationId": "RoutinestepController.findById"
      },
      "delete": {
        "x-controller-name": "RoutinestepController",
        "x-operation-name": "deleteById",
        "tags": [
          "RoutinestepController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "RoutineStep DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "RoutinestepController.deleteById"
      }
    },
    "/routine-steps": {
      "post": {
        "x-controller-name": "RoutinestepController",
        "x-operation-name": "create",
        "tags": [
          "RoutinestepController"
        ],
        "responses": {
          "200": {
            "description": "RoutineStep model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoutineStep"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewRoutineStep"
              }
            }
          }
        },
        "operationId": "RoutinestepController.create"
      },
      "patch": {
        "x-controller-name": "RoutinestepController",
        "x-operation-name": "updateAll",
        "tags": [
          "RoutinestepController"
        ],
        "responses": {
          "200": {
            "description": "RoutineStep PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "RoutineStep.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<RoutineStep>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutineStepPartial"
              }
            }
          }
        },
        "operationId": "RoutinestepController.updateAll"
      },
      "get": {
        "x-controller-name": "RoutinestepController",
        "x-operation-name": "find",
        "tags": [
          "RoutinestepController"
        ],
        "responses": {
          "200": {
            "description": "Array of RoutineStep model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoutineStepWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoutineStep.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "RoutinestepController.find"
      }
    },
    "/routines/count": {
      "get": {
        "x-controller-name": "RoutineController",
        "x-operation-name": "count",
        "tags": [
          "RoutineController"
        ],
        "responses": {
          "200": {
            "description": "Routine model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Routine.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Routine>"
                }
              }
            }
          }
        ],
        "operationId": "RoutineController.count"
      }
    },
    "/routines/{id}": {
      "put": {
        "x-controller-name": "RoutineController",
        "x-operation-name": "replaceById",
        "tags": [
          "RoutineController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Routine PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Routine"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "RoutineController.replaceById"
      },
      "patch": {
        "x-controller-name": "RoutineController",
        "x-operation-name": "updateById",
        "tags": [
          "RoutineController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Routine PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutinePartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "RoutineController.updateById"
      },
      "get": {
        "x-controller-name": "RoutineController",
        "x-operation-name": "findById",
        "tags": [
          "RoutineController"
        ],
        "responses": {
          "200": {
            "description": "Routine model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoutineWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Routine.Filter"
                }
              }
            }
          }
        ],
        "operationId": "RoutineController.findById"
      },
      "delete": {
        "x-controller-name": "RoutineController",
        "x-operation-name": "deleteById",
        "tags": [
          "RoutineController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Routine DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "RoutineController.deleteById"
      }
    },
    "/routines": {
      "post": {
        "x-controller-name": "RoutineController",
        "x-operation-name": "create",
        "tags": [
          "RoutineController"
        ],
        "responses": {
          "200": {
            "description": "Routine model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Routine"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewRoutine"
              }
            }
          }
        },
        "operationId": "RoutineController.create"
      },
      "patch": {
        "x-controller-name": "RoutineController",
        "x-operation-name": "updateAll",
        "tags": [
          "RoutineController"
        ],
        "responses": {
          "200": {
            "description": "Routine PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Routine.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Routine>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutinePartial"
              }
            }
          }
        },
        "operationId": "RoutineController.updateAll"
      },
      "get": {
        "x-controller-name": "RoutineController",
        "x-operation-name": "find",
        "tags": [
          "RoutineController"
        ],
        "responses": {
          "200": {
            "description": "Array of Routine model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoutineWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Routine.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "RoutineController.find"
      }
    },
    "/skin-assessments/count": {
      "get": {
        "x-controller-name": "SkinAssessmentController",
        "x-operation-name": "count",
        "tags": [
          "SkinAssessmentController"
        ],
        "responses": {
          "200": {
            "description": "SkinAssessment model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "SkinAssessment.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<SkinAssessment>"
                }
              }
            }
          }
        ],
        "operationId": "SkinAssessmentController.count"
      }
    },
    "/skin-assessments/{id}": {
      "put": {
        "x-controller-name": "SkinAssessmentController",
        "x-operation-name": "replaceById",
        "tags": [
          "SkinAssessmentController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "SkinAssessment PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SkinAssessment"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "SkinAssessmentController.replaceById"
      },
      "patch": {
        "x-controller-name": "SkinAssessmentController",
        "x-operation-name": "updateById",
        "tags": [
          "SkinAssessmentController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "SkinAssessment PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SkinAssessmentPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "SkinAssessmentController.updateById"
      },
      "get": {
        "x-controller-name": "SkinAssessmentController",
        "x-operation-name": "findById",
        "tags": [
          "SkinAssessmentController"
        ],
        "responses": {
          "200": {
            "description": "SkinAssessment model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SkinAssessmentWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SkinAssessment.Filter"
                }
              }
            }
          }
        ],
        "operationId": "SkinAssessmentController.findById"
      },
      "delete": {
        "x-controller-name": "SkinAssessmentController",
        "x-operation-name": "deleteById",
        "tags": [
          "SkinAssessmentController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "SkinAssessment DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "SkinAssessmentController.deleteById"
      }
    },
    "/skin-assessments": {
      "post": {
        "x-controller-name": "SkinAssessmentController",
        "x-operation-name": "create",
        "tags": [
          "SkinAssessmentController"
        ],
        "responses": {
          "200": {
            "description": "SkinAssessment model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SkinAssessment"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewSkinAssessment"
              }
            }
          }
        },
        "operationId": "SkinAssessmentController.create"
      },
      "patch": {
        "x-controller-name": "SkinAssessmentController",
        "x-operation-name": "updateAll",
        "tags": [
          "SkinAssessmentController"
        ],
        "responses": {
          "200": {
            "description": "SkinAssessment PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "SkinAssessment.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<SkinAssessment>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SkinAssessmentPartial"
              }
            }
          }
        },
        "operationId": "SkinAssessmentController.updateAll"
      },
      "get": {
        "x-controller-name": "SkinAssessmentController",
        "x-operation-name": "find",
        "tags": [
          "SkinAssessmentController"
        ],
        "responses": {
          "200": {
            "description": "Array of SkinAssessment model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SkinAssessmentWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SkinAssessment.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "SkinAssessmentController.find"
      }
    },
    "/skin-profiles/count": {
      "get": {
        "x-controller-name": "SkinprofilController",
        "x-operation-name": "count",
        "tags": [
          "SkinprofilController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Nombre de profils (Admin only)"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "SkinProfile.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<SkinProfile>"
                }
              }
            }
          }
        ],
        "operationId": "SkinprofilController.count"
      }
    },
    "/skin-profiles/my-clients": {
      "get": {
        "x-controller-name": "SkinprofilController",
        "x-operation-name": "getMyClientsProfiles",
        "tags": [
          "SkinprofilController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Profils de mes clients (Coach/Admin only)"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "SkinprofilController.getMyClientsProfiles"
      }
    },
    "/skin-profiles/my-profile": {
      "patch": {
        "x-controller-name": "SkinprofilController",
        "x-operation-name": "updateMyProfile",
        "tags": [
          "SkinprofilController"
        ],
        "responses": {
          "200": {
            "description": "Mettre à jour mon profil de peau",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SkinProfile"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SkinProfilePartialExcluding_id-userId-coachReviewed-lastCoachReview_"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "SkinprofilController.updateMyProfile"
      },
      "get": {
        "x-controller-name": "SkinprofilController",
        "x-operation-name": "getMyProfile",
        "tags": [
          "SkinprofilController"
        ],
        "responses": {
          "200": {
            "description": "Mon profil de peau complet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SkinProfileWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "SkinprofilController.getMyProfile"
      }
    },
    "/skin-profiles/my-recommendations": {
      "get": {
        "x-controller-name": "SkinprofilController",
        "x-operation-name": "getMyRecommendations",
        "tags": [
          "SkinprofilController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Mes recommandations basées sur mon profil"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "SkinprofilController.getMyRecommendations"
      }
    },
    "/skin-profiles/{id}/coach-review": {
      "patch": {
        "x-controller-name": "SkinprofilController",
        "x-operation-name": "addCoachReview",
        "tags": [
          "SkinprofilController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Analyse coach du profil (Coach/Admin only)"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "detailedAnalysis": {
                    "type": "object"
                  },
                  "recommendedRoutine": {
                    "type": "object"
                  },
                  "progressTracking": {
                    "type": "object"
                  },
                  "notes": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "x-parameter-index": 2
        },
        "operationId": "SkinprofilController.addCoachReview"
      }
    },
    "/skin-profiles/{id}": {
      "get": {
        "x-controller-name": "SkinprofilController",
        "x-operation-name": "findById",
        "tags": [
          "SkinprofilController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Profil par ID (Admin only)"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SkinProfile.Filter"
                }
              }
            }
          }
        ],
        "operationId": "SkinprofilController.findById"
      },
      "delete": {
        "x-controller-name": "SkinprofilController",
        "x-operation-name": "deleteById",
        "tags": [
          "SkinprofilController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Supprimer un profil (Admin only)"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "SkinprofilController.deleteById"
      }
    },
    "/skin-profiles": {
      "get": {
        "x-controller-name": "SkinprofilController",
        "x-operation-name": "find",
        "tags": [
          "SkinprofilController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Tous les profils (Admin only)"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SkinProfile.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "SkinprofilController.find"
      }
    },
    "/soya-favorites/active": {
      "get": {
        "x-controller-name": "SoyaFavoriteController",
        "x-operation-name": "active",
        "tags": [
          "SoyaFavoriteController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Favoris de Soya actifs, produits résolus"
                }
              }
            }
          }
        },
        "operationId": "SoyaFavoriteController.active"
      }
    },
    "/soya-favorites/count": {
      "get": {
        "x-controller-name": "SoyaFavoriteController",
        "x-operation-name": "count",
        "tags": [
          "SoyaFavoriteController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "SoyaFavorite.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<SoyaFavorite>"
                }
              }
            }
          }
        ],
        "operationId": "SoyaFavoriteController.count"
      }
    },
    "/soya-favorites/{id}": {
      "patch": {
        "x-controller-name": "SoyaFavoriteController",
        "x-operation-name": "updateById",
        "tags": [
          "SoyaFavoriteController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "SoyaFavorite PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SoyaFavoritePartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "SoyaFavoriteController.updateById"
      },
      "get": {
        "x-controller-name": "SoyaFavoriteController",
        "x-operation-name": "findById",
        "tags": [
          "SoyaFavoriteController"
        ],
        "responses": {
          "200": {
            "description": "SoyaFavorite model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SoyaFavorite"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "SoyaFavoriteController.findById"
      },
      "delete": {
        "x-controller-name": "SoyaFavoriteController",
        "x-operation-name": "deleteById",
        "tags": [
          "SoyaFavoriteController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "SoyaFavorite DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "SoyaFavoriteController.deleteById"
      }
    },
    "/soya-favorites": {
      "post": {
        "x-controller-name": "SoyaFavoriteController",
        "x-operation-name": "create",
        "tags": [
          "SoyaFavoriteController"
        ],
        "responses": {
          "200": {
            "description": "SoyaFavorite model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SoyaFavorite"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewSoyaFavorite"
              }
            }
          }
        },
        "operationId": "SoyaFavoriteController.create"
      },
      "get": {
        "x-controller-name": "SoyaFavoriteController",
        "x-operation-name": "find",
        "tags": [
          "SoyaFavoriteController"
        ],
        "responses": {
          "200": {
            "description": "Array of SoyaFavorite model instances (admin — non résolu)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SoyaFavorite"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SoyaFavorite.Filter"
                }
              }
            }
          }
        ],
        "operationId": "SoyaFavoriteController.find"
      }
    },
    "/transformations/count": {
      "get": {
        "x-controller-name": "TransformationController",
        "x-operation-name": "count",
        "tags": [
          "TransformationController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Transformation.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Transformation>"
                }
              }
            }
          }
        ],
        "operationId": "TransformationController.count"
      }
    },
    "/transformations/{id}": {
      "put": {
        "x-controller-name": "TransformationController",
        "x-operation-name": "replaceById",
        "tags": [
          "TransformationController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Transformation PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Transformation"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "TransformationController.replaceById"
      },
      "patch": {
        "x-controller-name": "TransformationController",
        "x-operation-name": "updateById",
        "tags": [
          "TransformationController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Transformation PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransformationPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "TransformationController.updateById"
      },
      "get": {
        "x-controller-name": "TransformationController",
        "x-operation-name": "findById",
        "tags": [
          "TransformationController"
        ],
        "responses": {
          "200": {
            "description": "Transformation model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transformation"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transformation.Filter"
                }
              }
            }
          }
        ],
        "operationId": "TransformationController.findById"
      },
      "delete": {
        "x-controller-name": "TransformationController",
        "x-operation-name": "deleteById",
        "tags": [
          "TransformationController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Transformation DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "TransformationController.deleteById"
      }
    },
    "/transformations": {
      "post": {
        "x-controller-name": "TransformationController",
        "x-operation-name": "create",
        "tags": [
          "TransformationController"
        ],
        "responses": {
          "200": {
            "description": "Transformation model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transformation"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewTransformation"
              }
            }
          }
        },
        "operationId": "TransformationController.create"
      },
      "get": {
        "x-controller-name": "TransformationController",
        "x-operation-name": "find",
        "tags": [
          "TransformationController"
        ],
        "responses": {
          "200": {
            "description": "Array of Transformation model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Transformation"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transformation.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "TransformationController.find"
      }
    },
    "/upload/product-image": {
      "post": {
        "x-controller-name": "UploadController",
        "x-operation-name": "uploadProductImage",
        "tags": [
          "UploadController"
        ],
        "responses": {
          "200": {
            "description": "Upload a product image to Cloudinary",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "url": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "UploadController.uploadProductImage"
      }
    },
    "/users/available-assistants": {
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "getAvailableAssistants",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Array of available assistant User instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserExcluding_password_"
                  }
                }
              }
            }
          }
        },
        "operationId": "UserController.getAvailableAssistants"
      }
    },
    "/users/count": {
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "count",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "User model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "User.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<User>"
                }
              }
            }
          }
        ],
        "operationId": "UserController.count"
      }
    },
    "/users/{id}/appointments": {
      "get": {
        "x-controller-name": "AppointmentController",
        "x-operation-name": "findAppointmentsByUserId",
        "tags": [
          "AppointmentController"
        ],
        "responses": {
          "200": {
            "description": "Array of Appointment model instances for a user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AppointmentWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Appointment.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "AppointmentController.findAppointmentsByUserId"
      }
    },
    "/users/{id}": {
      "put": {
        "x-controller-name": "UserController",
        "x-operation-name": "replaceById",
        "tags": [
          "UserController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "User PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "UserController.replaceById"
      },
      "patch": {
        "x-controller-name": "UserController",
        "x-operation-name": "updateById",
        "tags": [
          "UserController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "User PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "UserController.updateById"
      },
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "findById",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "User model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User.Filter"
                }
              }
            }
          }
        ],
        "operationId": "UserController.findById"
      },
      "delete": {
        "x-controller-name": "UserController",
        "x-operation-name": "deleteById",
        "tags": [
          "UserController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "User DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "UserController.deleteById"
      }
    },
    "/users": {
      "post": {
        "x-controller-name": "UserController",
        "x-operation-name": "create",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "User model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewUser"
              }
            }
          }
        },
        "operationId": "UserController.create"
      },
      "patch": {
        "x-controller-name": "UserController",
        "x-operation-name": "updateAll",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "User PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "User.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<User>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPartial"
              }
            }
          }
        },
        "operationId": "UserController.updateAll"
      },
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "find",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Array of User model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "UserController.find"
      }
    },
    "/wave-webhooks/count": {
      "get": {
        "x-controller-name": "WavewebhookController",
        "x-operation-name": "count",
        "tags": [
          "WavewebhookController"
        ],
        "responses": {
          "200": {
            "description": "WaveWebhook model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "PaydunyaWebhook.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<PaydunyaWebhook>"
                }
              }
            }
          }
        ],
        "operationId": "WavewebhookController.count"
      }
    },
    "/wave-webhooks/{id}": {
      "put": {
        "x-controller-name": "WavewebhookController",
        "x-operation-name": "replaceById",
        "tags": [
          "WavewebhookController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "WaveWebhook PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaydunyaWebhook"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "WavewebhookController.replaceById"
      },
      "patch": {
        "x-controller-name": "WavewebhookController",
        "x-operation-name": "updateById",
        "tags": [
          "WavewebhookController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "WaveWebhook PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaydunyaWebhookPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "WavewebhookController.updateById"
      },
      "get": {
        "x-controller-name": "WavewebhookController",
        "x-operation-name": "findById",
        "tags": [
          "WavewebhookController"
        ],
        "responses": {
          "200": {
            "description": "WaveWebhook model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaydunyaWebhookWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaydunyaWebhook.Filter"
                }
              }
            }
          }
        ],
        "operationId": "WavewebhookController.findById"
      },
      "delete": {
        "x-controller-name": "WavewebhookController",
        "x-operation-name": "deleteById",
        "tags": [
          "WavewebhookController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "WaveWebhook DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "WavewebhookController.deleteById"
      }
    },
    "/wave-webhooks": {
      "post": {
        "x-controller-name": "WavewebhookController",
        "x-operation-name": "create",
        "tags": [
          "WavewebhookController"
        ],
        "responses": {
          "200": {
            "description": "WaveWebhook model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaydunyaWebhook"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewWaveWebhook"
              }
            }
          }
        },
        "operationId": "WavewebhookController.create"
      },
      "patch": {
        "x-controller-name": "WavewebhookController",
        "x-operation-name": "updateAll",
        "tags": [
          "WavewebhookController"
        ],
        "responses": {
          "200": {
            "description": "WaveWebhook PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "PaydunyaWebhook.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<PaydunyaWebhook>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaydunyaWebhookPartial"
              }
            }
          }
        },
        "operationId": "WavewebhookController.updateAll"
      },
      "get": {
        "x-controller-name": "WavewebhookController",
        "x-operation-name": "find",
        "tags": [
          "WavewebhookController"
        ],
        "responses": {
          "200": {
            "description": "Array of WaveWebhook model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PaydunyaWebhookWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaydunyaWebhook.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "WavewebhookController.find"
      }
    },
    "/webhooks/paydunya": {
      "post": {
        "x-controller-name": "PaydunyaController",
        "x-operation-name": "handleWebhook",
        "tags": [
          "PaydunyaController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Webhook PayDunya traité"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "PaydunyaController.handleWebhook"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "jwt": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "schemas": {
      "RoutineWithRelations": {
        "title": "RoutineWithRelations",
        "type": "object",
        "description": "(tsType: RoutineWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "user": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "foreignKey": {},
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutineStepWithRelations"
            }
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false,
        "x-typescript-type": "RoutineWithRelations"
      },
      "ReviewWithRelations": {
        "title": "ReviewWithRelations",
        "type": "object",
        "description": "(tsType: ReviewWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "rating": {
            "type": "number",
            "minimum": 1,
            "maximum": 5
          },
          "title": {
            "type": "string"
          },
          "comment": {
            "type": "string"
          },
          "isVerifiedPurchase": {
            "type": "boolean"
          },
          "helpfulCount": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "user": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "foreignKey": {},
          "product": {
            "$ref": "#/components/schemas/ProductWithRelations"
          }
        },
        "required": [
          "rating"
        ],
        "additionalProperties": false,
        "x-typescript-type": "ReviewWithRelations"
      },
      "OrderItemWithRelations": {
        "title": "OrderItemWithRelations",
        "type": "object",
        "description": "(tsType: OrderItemWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "orderId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "unitPrice": {
            "type": "number"
          },
          "totalPrice": {
            "type": "number"
          },
          "order": {
            "$ref": "#/components/schemas/OrderWithRelations"
          },
          "foreignKey": {},
          "product": {
            "$ref": "#/components/schemas/ProductWithRelations"
          }
        },
        "required": [
          "quantity",
          "unitPrice",
          "totalPrice"
        ],
        "additionalProperties": false,
        "x-typescript-type": "OrderItemWithRelations"
      },
      "RoutineStepWithRelations": {
        "title": "RoutineStepWithRelations",
        "type": "object",
        "description": "(tsType: RoutineStepWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "routineId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "stepOrder": {
            "type": "number"
          },
          "instructions": {
            "type": "string"
          },
          "frequency": {
            "type": "string",
            "enum": [
              "daily",
              "weekly",
              "as_needed"
            ]
          },
          "amount": {
            "type": "string"
          },
          "routine": {
            "$ref": "#/components/schemas/RoutineWithRelations"
          },
          "foreignKey": {},
          "product": {
            "$ref": "#/components/schemas/ProductWithRelations"
          }
        },
        "required": [
          "stepOrder"
        ],
        "additionalProperties": false,
        "x-typescript-type": "RoutineStepWithRelations"
      },
      "ProductWithRelations": {
        "title": "ProductWithRelations",
        "type": "object",
        "description": "(tsType: ProductWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "Nettoyant",
              "Tonique",
              "Sérum",
              "Crème",
              "Hydratant",
              "Solaire",
              "Protection solaire",
              "Masque",
              "Masques",
              "Exfoliant",
              "Traitement",
              "Contour des yeux",
              "Essences",
              "Gel de douche",
              "Gel de Douche",
              "Gommage",
              "Lait de Corps",
              "Beurre corporel",
              "Huile corporelle",
              "Déodorant",
              "Accessoires",
              "Compléments alimentaires"
            ]
          },
          "skinTypes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "ingredients": {
            "type": "string"
          },
          "activeIngredients": {
            "type": "object"
          },
          "price": {
            "type": "number"
          },
          "stock": {
            "type": "number"
          },
          "images": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rating": {
            "type": "number"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "reviews": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReviewWithRelations"
            }
          },
          "orderItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderItemWithRelations"
            }
          },
          "routineSteps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutineStepWithRelations"
            }
          }
        },
        "required": [
          "name",
          "price"
        ],
        "additionalProperties": false,
        "x-typescript-type": "ProductWithRelations"
      },
      "CartItemWithRelations": {
        "title": "CartItemWithRelations",
        "type": "object",
        "description": "(tsType: CartItemWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "cartId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "price": {
            "type": "number"
          },
          "subtotal": {
            "type": "number"
          },
          "variantId": {
            "type": "string"
          },
          "customOptions": {
            "type": "object"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "cart": {
            "$ref": "#/components/schemas/CartWithRelations"
          },
          "foreignKey": {},
          "product": {
            "$ref": "#/components/schemas/ProductWithRelations"
          }
        },
        "required": [
          "quantity",
          "price"
        ],
        "additionalProperties": false,
        "x-typescript-type": "CartItemWithRelations"
      },
      "CartWithRelations": {
        "title": "CartWithRelations",
        "type": "object",
        "description": "(tsType: CartWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "totalAmount": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "abandoned",
              "converted"
            ]
          },
          "lastModifiedBy": {
            "type": "string"
          },
          "discountCode": {
            "type": "string"
          },
          "discountAmount": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "user": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "foreignKey": {},
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CartItemWithRelations"
            }
          }
        },
        "required": [
          "totalAmount"
        ],
        "additionalProperties": false,
        "x-typescript-type": "CartWithRelations"
      },
      "SkinProfileWithRelations": {
        "title": "SkinProfileWithRelations",
        "type": "object",
        "description": "(tsType: SkinProfileWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "skinType": {
            "type": "string",
            "enum": [
              "seche",
              "grasse",
              "mixte",
              "sensible",
              "normale",
              "ne_sais_pas"
            ]
          },
          "skinConcerns": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "primaryConcern": {
            "type": "string"
          },
          "skinGoals": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "primaryGoal": {
            "type": "string"
          },
          "skincareExperience": {
            "type": "string",
            "enum": [
              "debutant",
              "intermediaire",
              "avance"
            ]
          },
          "budgetRange": {
            "type": "string",
            "enum": [
              "petit",
              "moyen",
              "eleve",
              "luxe"
            ]
          },
          "timeCommitment": {
            "type": "number"
          },
          "motivation": {
            "type": "string"
          },
          "currentRoutine": {
            "type": "string"
          },
          "currentProducts": {
            "type": "string"
          },
          "allergies": {
            "type": "string"
          },
          "productPreferences": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "lifestyleFactors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "environmentalFactors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "challenges": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "detailedAnalysis": {
            "type": "object"
          },
          "recommendedRoutine": {
            "type": "object"
          },
          "progressTracking": {
            "type": "object"
          },
          "onboardingCompleted": {
            "type": "boolean"
          },
          "coachReviewed": {
            "type": "boolean"
          },
          "onboardingCompletedAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastCoachReview": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "user": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "foreignKey": {}
        },
        "required": [
          "skinType",
          "skinConcerns",
          "primaryConcern",
          "skinGoals",
          "primaryGoal",
          "skincareExperience",
          "budgetRange",
          "timeCommitment",
          "motivation"
        ],
        "additionalProperties": false,
        "x-typescript-type": "SkinProfileWithRelations"
      },
      "PaydunyaTransactionWithRelations": {
        "title": "PaydunyaTransactionWithRelations",
        "type": "object",
        "description": "(tsType: PaydunyaTransactionWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "orderId": {
            "type": "string"
          },
          "paydunyaToken": {
            "type": "string"
          },
          "paydunyaTransactionId": {
            "type": "string"
          },
          "transactionType": {
            "type": "string",
            "enum": [
              "checkout",
              "payout"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "processing",
              "completed",
              "failed",
              "cancelled"
            ]
          },
          "amount": {
            "type": "number"
          },
          "currency": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "checkoutUrl": {
            "type": "string"
          },
          "customerName": {
            "type": "string"
          },
          "customerEmail": {
            "type": "string"
          },
          "customerPhone": {
            "type": "string"
          },
          "paydunyaResponse": {
            "type": "object"
          },
          "failureReason": {
            "type": "string"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "user": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "foreignKey": {},
          "order": {
            "$ref": "#/components/schemas/OrderWithRelations"
          }
        },
        "required": [
          "paydunyaToken",
          "transactionType",
          "status",
          "amount"
        ],
        "additionalProperties": false,
        "x-typescript-type": "PaydunyaTransactionWithRelations"
      },
      "UserWithRelations": {
        "title": "UserWithRelations",
        "type": "object",
        "description": "(tsType: UserWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "phone": {
            "type": "string"
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date-time"
          },
          "gender": {
            "type": "string",
            "enum": [
              "F",
              "M",
              "Other"
            ]
          },
          "role": {
            "type": "string",
            "enum": [
              "admin",
              "assistant",
              "client"
            ]
          },
          "isActive": {
            "type": "boolean"
          },
          "onboardingCompleted": {
            "type": "boolean"
          },
          "emailVerified": {
            "type": "boolean"
          },
          "avatar": {
            "type": "string"
          },
          "emailVerificationToken": {
            "type": "string"
          },
          "emailVerificationExpires": {
            "type": "string",
            "format": "date-time"
          },
          "passwordResetToken": {
            "type": "string"
          },
          "passwordResetExpires": {
            "type": "string",
            "format": "date-time"
          },
          "refreshToken": {
            "type": "string"
          },
          "refreshTokenExpires": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "cart": {
            "$ref": "#/components/schemas/CartWithRelations"
          },
          "foreignKey": {},
          "skinProfile": {
            "$ref": "#/components/schemas/SkinProfileWithRelations"
          },
          "routines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutineWithRelations"
            }
          },
          "orders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderWithRelations"
            }
          },
          "reviews": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReviewWithRelations"
            }
          },
          "paydunyaTransactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaydunyaTransactionWithRelations"
            }
          }
        },
        "required": [
          "email",
          "password",
          "firstName",
          "lastName",
          "role"
        ],
        "additionalProperties": false,
        "x-typescript-type": "UserWithRelations"
      },
      "OrderWithRelations": {
        "title": "OrderWithRelations",
        "type": "object",
        "description": "(tsType: OrderWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "totalAmount": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "confirmed",
              "shipped",
              "delivered",
              "cancelled"
            ]
          },
          "shippingAddress": {
            "type": "object"
          },
          "billingAddress": {
            "type": "object"
          },
          "paymentMethod": {
            "type": "string"
          },
          "paymentStatus": {
            "type": "string",
            "enum": [
              "pending",
              "paid",
              "failed",
              "refunded"
            ]
          },
          "trackingNumber": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "cartId": {
            "type": "string"
          },
          "paydunyaTransactionId": {
            "type": "string"
          },
          "user": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "foreignKey": {},
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderItemWithRelations"
            }
          },
          "paydunyaTransaction": {
            "$ref": "#/components/schemas/PaydunyaTransactionWithRelations"
          }
        },
        "required": [
          "totalAmount"
        ],
        "additionalProperties": false,
        "x-typescript-type": "OrderWithRelations"
      },
      "User": {
        "title": "User",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "phone": {
            "type": "string"
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date-time"
          },
          "gender": {
            "type": "string",
            "enum": [
              "F",
              "M",
              "Other"
            ]
          },
          "role": {
            "type": "string",
            "enum": [
              "admin",
              "assistant",
              "client"
            ]
          },
          "isActive": {
            "type": "boolean"
          },
          "onboardingCompleted": {
            "type": "boolean"
          },
          "emailVerified": {
            "type": "boolean"
          },
          "avatar": {
            "type": "string"
          },
          "emailVerificationToken": {
            "type": "string"
          },
          "emailVerificationExpires": {
            "type": "string",
            "format": "date-time"
          },
          "passwordResetToken": {
            "type": "string"
          },
          "passwordResetExpires": {
            "type": "string",
            "format": "date-time"
          },
          "refreshToken": {
            "type": "string"
          },
          "refreshTokenExpires": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "email",
          "password",
          "firstName",
          "lastName",
          "role"
        ],
        "additionalProperties": false
      },
      "NewUser": {
        "title": "NewUser",
        "type": "object",
        "description": "(tsType: Omit<User, 'id'>, schemaOptions: { title: 'NewUser', exclude: [ 'id' ] })",
        "properties": {
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "phone": {
            "type": "string"
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date-time"
          },
          "gender": {
            "type": "string",
            "enum": [
              "F",
              "M",
              "Other"
            ]
          },
          "role": {
            "type": "string",
            "enum": [
              "admin",
              "assistant",
              "client"
            ]
          },
          "isActive": {
            "type": "boolean"
          },
          "onboardingCompleted": {
            "type": "boolean"
          },
          "emailVerified": {
            "type": "boolean"
          },
          "avatar": {
            "type": "string"
          },
          "emailVerificationToken": {
            "type": "string"
          },
          "emailVerificationExpires": {
            "type": "string",
            "format": "date-time"
          },
          "passwordResetToken": {
            "type": "string"
          },
          "passwordResetExpires": {
            "type": "string",
            "format": "date-time"
          },
          "refreshToken": {
            "type": "string"
          },
          "refreshTokenExpires": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "email",
          "password",
          "firstName",
          "lastName",
          "role"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<User, 'id'>"
      },
      "UserExcluding_password_": {
        "title": "UserExcluding_password_",
        "type": "object",
        "description": "(tsType: Omit<User, 'password'>, schemaOptions: { exclude: [ 'password' ] })",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "phone": {
            "type": "string"
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date-time"
          },
          "gender": {
            "type": "string",
            "enum": [
              "F",
              "M",
              "Other"
            ]
          },
          "role": {
            "type": "string",
            "enum": [
              "admin",
              "assistant",
              "client"
            ]
          },
          "isActive": {
            "type": "boolean"
          },
          "onboardingCompleted": {
            "type": "boolean"
          },
          "emailVerified": {
            "type": "boolean"
          },
          "avatar": {
            "type": "string"
          },
          "emailVerificationToken": {
            "type": "string"
          },
          "emailVerificationExpires": {
            "type": "string",
            "format": "date-time"
          },
          "passwordResetToken": {
            "type": "string"
          },
          "passwordResetExpires": {
            "type": "string",
            "format": "date-time"
          },
          "refreshToken": {
            "type": "string"
          },
          "refreshTokenExpires": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "email",
          "firstName",
          "lastName",
          "role"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<User, 'password'>"
      },
      "UserPartial": {
        "title": "UserPartial",
        "type": "object",
        "description": "(tsType: Partial<User>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "phone": {
            "type": "string"
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date-time"
          },
          "gender": {
            "type": "string",
            "enum": [
              "F",
              "M",
              "Other"
            ]
          },
          "role": {
            "type": "string",
            "enum": [
              "admin",
              "assistant",
              "client"
            ]
          },
          "isActive": {
            "type": "boolean"
          },
          "onboardingCompleted": {
            "type": "boolean"
          },
          "emailVerified": {
            "type": "boolean"
          },
          "avatar": {
            "type": "string"
          },
          "emailVerificationToken": {
            "type": "string"
          },
          "emailVerificationExpires": {
            "type": "string",
            "format": "date-time"
          },
          "passwordResetToken": {
            "type": "string"
          },
          "passwordResetExpires": {
            "type": "string",
            "format": "date-time"
          },
          "refreshToken": {
            "type": "string"
          },
          "refreshTokenExpires": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<User>"
      },
      "Transformation": {
        "title": "Transformation",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "beforeImage": {
            "type": "string"
          },
          "afterImage": {
            "type": "string"
          },
          "concern": {
            "type": "string"
          },
          "durationWeeks": {
            "type": "number"
          },
          "quote": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "age": {
            "type": "number"
          },
          "displayOrder": {
            "type": "number"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "beforeImage",
          "afterImage",
          "concern",
          "quote"
        ],
        "additionalProperties": false
      },
      "NewTransformation": {
        "title": "NewTransformation",
        "type": "object",
        "description": "(tsType: Omit<Transformation, 'id'>, schemaOptions: { title: 'NewTransformation', exclude: [ 'id' ] })",
        "properties": {
          "beforeImage": {
            "type": "string"
          },
          "afterImage": {
            "type": "string"
          },
          "concern": {
            "type": "string"
          },
          "durationWeeks": {
            "type": "number"
          },
          "quote": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "age": {
            "type": "number"
          },
          "displayOrder": {
            "type": "number"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "beforeImage",
          "afterImage",
          "concern",
          "quote"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Transformation, 'id'>"
      },
      "TransformationPartial": {
        "title": "TransformationPartial",
        "type": "object",
        "description": "(tsType: Partial<Transformation>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "beforeImage": {
            "type": "string"
          },
          "afterImage": {
            "type": "string"
          },
          "concern": {
            "type": "string"
          },
          "durationWeeks": {
            "type": "number"
          },
          "quote": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "age": {
            "type": "number"
          },
          "displayOrder": {
            "type": "number"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Transformation>"
      },
      "SoyaFavorite": {
        "title": "SoyaFavorite",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "badge": {
            "type": "string"
          },
          "why": {
            "type": "string"
          },
          "displayOrder": {
            "type": "number"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "productId"
        ],
        "additionalProperties": false
      },
      "NewSoyaFavorite": {
        "title": "NewSoyaFavorite",
        "type": "object",
        "description": "(tsType: Omit<SoyaFavorite, 'id'>, schemaOptions: { title: 'NewSoyaFavorite', exclude: [ 'id' ] })",
        "properties": {
          "productId": {
            "type": "string"
          },
          "badge": {
            "type": "string"
          },
          "why": {
            "type": "string"
          },
          "displayOrder": {
            "type": "number"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "productId"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<SoyaFavorite, 'id'>"
      },
      "SoyaFavoritePartial": {
        "title": "SoyaFavoritePartial",
        "type": "object",
        "description": "(tsType: Partial<SoyaFavorite>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "badge": {
            "type": "string"
          },
          "why": {
            "type": "string"
          },
          "displayOrder": {
            "type": "number"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<SoyaFavorite>"
      },
      "SkinProfile": {
        "title": "SkinProfile",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "skinType": {
            "type": "string",
            "enum": [
              "seche",
              "grasse",
              "mixte",
              "sensible",
              "normale",
              "ne_sais_pas"
            ]
          },
          "skinConcerns": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "primaryConcern": {
            "type": "string"
          },
          "skinGoals": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "primaryGoal": {
            "type": "string"
          },
          "skincareExperience": {
            "type": "string",
            "enum": [
              "debutant",
              "intermediaire",
              "avance"
            ]
          },
          "budgetRange": {
            "type": "string",
            "enum": [
              "petit",
              "moyen",
              "eleve",
              "luxe"
            ]
          },
          "timeCommitment": {
            "type": "number"
          },
          "motivation": {
            "type": "string"
          },
          "currentRoutine": {
            "type": "string"
          },
          "currentProducts": {
            "type": "string"
          },
          "allergies": {
            "type": "string"
          },
          "productPreferences": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "lifestyleFactors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "environmentalFactors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "challenges": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "detailedAnalysis": {
            "type": "object"
          },
          "recommendedRoutine": {
            "type": "object"
          },
          "progressTracking": {
            "type": "object"
          },
          "onboardingCompleted": {
            "type": "boolean"
          },
          "coachReviewed": {
            "type": "boolean"
          },
          "onboardingCompletedAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastCoachReview": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "skinType",
          "skinConcerns",
          "primaryConcern",
          "skinGoals",
          "primaryGoal",
          "skincareExperience",
          "budgetRange",
          "timeCommitment",
          "motivation"
        ],
        "additionalProperties": false
      },
      "SkinProfilePartialExcluding_id-userId-coachReviewed-lastCoachReview_": {
        "title": "SkinProfilePartialExcluding_id-userId-coachReviewed-lastCoachReview_",
        "type": "object",
        "description": "(tsType: Omit<Partial<SkinProfile>, 'id' | 'userId' | 'coachReviewed' | 'lastCoachReview'>, schemaOptions: { partial: true, exclude: [ 'id', 'userId', 'coachReviewed', 'lastCoachReview' ] })",
        "properties": {
          "skinType": {
            "type": "string",
            "enum": [
              "seche",
              "grasse",
              "mixte",
              "sensible",
              "normale",
              "ne_sais_pas"
            ]
          },
          "skinConcerns": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "primaryConcern": {
            "type": "string"
          },
          "skinGoals": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "primaryGoal": {
            "type": "string"
          },
          "skincareExperience": {
            "type": "string",
            "enum": [
              "debutant",
              "intermediaire",
              "avance"
            ]
          },
          "budgetRange": {
            "type": "string",
            "enum": [
              "petit",
              "moyen",
              "eleve",
              "luxe"
            ]
          },
          "timeCommitment": {
            "type": "number"
          },
          "motivation": {
            "type": "string"
          },
          "currentRoutine": {
            "type": "string"
          },
          "currentProducts": {
            "type": "string"
          },
          "allergies": {
            "type": "string"
          },
          "productPreferences": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "lifestyleFactors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "environmentalFactors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "challenges": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "detailedAnalysis": {
            "type": "object"
          },
          "recommendedRoutine": {
            "type": "object"
          },
          "progressTracking": {
            "type": "object"
          },
          "onboardingCompleted": {
            "type": "boolean"
          },
          "onboardingCompletedAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Omit<Partial<SkinProfile>, 'id' | 'userId' | 'coachReviewed' | 'lastCoachReview'>"
      },
      "SkinAssessment": {
        "title": "SkinAssessment",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "assessmentDate": {
            "type": "string",
            "format": "date-time"
          },
          "skinCondition": {
            "type": "object"
          },
          "photos": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "notes": {
            "type": "string"
          },
          "recommendedProducts": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "nextAssessmentDate": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "userId"
        ],
        "additionalProperties": false
      },
      "NewSkinAssessment": {
        "title": "NewSkinAssessment",
        "type": "object",
        "description": "(tsType: Omit<SkinAssessment, 'id'>, schemaOptions: { title: 'NewSkinAssessment', exclude: [ 'id' ] })",
        "properties": {
          "userId": {
            "type": "string"
          },
          "assessmentDate": {
            "type": "string",
            "format": "date-time"
          },
          "skinCondition": {
            "type": "object"
          },
          "photos": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "notes": {
            "type": "string"
          },
          "recommendedProducts": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "nextAssessmentDate": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "userId"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<SkinAssessment, 'id'>"
      },
      "SkinAssessmentWithRelations": {
        "title": "SkinAssessmentWithRelations",
        "type": "object",
        "description": "(tsType: SkinAssessmentWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "assessmentDate": {
            "type": "string",
            "format": "date-time"
          },
          "skinCondition": {
            "type": "object"
          },
          "photos": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "notes": {
            "type": "string"
          },
          "recommendedProducts": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "nextAssessmentDate": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "user": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "foreignKey": {}
        },
        "required": [
          "userId"
        ],
        "additionalProperties": false,
        "x-typescript-type": "SkinAssessmentWithRelations"
      },
      "SkinAssessmentPartial": {
        "title": "SkinAssessmentPartial",
        "type": "object",
        "description": "(tsType: Partial<SkinAssessment>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "assessmentDate": {
            "type": "string",
            "format": "date-time"
          },
          "skinCondition": {
            "type": "object"
          },
          "photos": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "notes": {
            "type": "string"
          },
          "recommendedProducts": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "nextAssessmentDate": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<SkinAssessment>"
      },
      "RoutineStep": {
        "title": "RoutineStep",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "routineId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "stepOrder": {
            "type": "number"
          },
          "instructions": {
            "type": "string"
          },
          "frequency": {
            "type": "string",
            "enum": [
              "daily",
              "weekly",
              "as_needed"
            ]
          },
          "amount": {
            "type": "string"
          }
        },
        "required": [
          "stepOrder"
        ],
        "additionalProperties": false
      },
      "NewRoutineStep": {
        "title": "NewRoutineStep",
        "type": "object",
        "description": "(tsType: Omit<RoutineStep, 'id'>, schemaOptions: { title: 'NewRoutineStep', exclude: [ 'id' ] })",
        "properties": {
          "routineId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "stepOrder": {
            "type": "number"
          },
          "instructions": {
            "type": "string"
          },
          "frequency": {
            "type": "string",
            "enum": [
              "daily",
              "weekly",
              "as_needed"
            ]
          },
          "amount": {
            "type": "string"
          }
        },
        "required": [
          "stepOrder"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<RoutineStep, 'id'>"
      },
      "RoutineStepPartial": {
        "title": "RoutineStepPartial",
        "type": "object",
        "description": "(tsType: Partial<RoutineStep>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "routineId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "stepOrder": {
            "type": "number"
          },
          "instructions": {
            "type": "string"
          },
          "frequency": {
            "type": "string",
            "enum": [
              "daily",
              "weekly",
              "as_needed"
            ]
          },
          "amount": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<RoutineStep>"
      },
      "Routine": {
        "title": "Routine",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "NewRoutine": {
        "title": "NewRoutine",
        "type": "object",
        "description": "(tsType: Omit<Routine, 'id'>, schemaOptions: { title: 'NewRoutine', exclude: [ 'id' ] })",
        "properties": {
          "userId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Routine, 'id'>"
      },
      "RoutinePartial": {
        "title": "RoutinePartial",
        "type": "object",
        "description": "(tsType: Partial<Routine>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Routine>"
      },
      "Review": {
        "title": "Review",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "rating": {
            "type": "number",
            "minimum": 1,
            "maximum": 5
          },
          "title": {
            "type": "string"
          },
          "comment": {
            "type": "string"
          },
          "isVerifiedPurchase": {
            "type": "boolean"
          },
          "helpfulCount": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "rating"
        ],
        "additionalProperties": false
      },
      "NewReview": {
        "title": "NewReview",
        "type": "object",
        "description": "(tsType: Omit<Review, 'id'>, schemaOptions: { title: 'NewReview', exclude: [ 'id' ] })",
        "properties": {
          "userId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "rating": {
            "type": "number",
            "minimum": 1,
            "maximum": 5
          },
          "title": {
            "type": "string"
          },
          "comment": {
            "type": "string"
          },
          "isVerifiedPurchase": {
            "type": "boolean"
          },
          "helpfulCount": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "rating"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Review, 'id'>"
      },
      "ReviewPartial": {
        "title": "ReviewPartial",
        "type": "object",
        "description": "(tsType: Partial<Review>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "rating": {
            "type": "number",
            "minimum": 1,
            "maximum": 5
          },
          "title": {
            "type": "string"
          },
          "comment": {
            "type": "string"
          },
          "isVerifiedPurchase": {
            "type": "boolean"
          },
          "helpfulCount": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Review>"
      },
      "Product": {
        "title": "Product",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "Nettoyant",
              "Tonique",
              "Sérum",
              "Crème",
              "Hydratant",
              "Solaire",
              "Protection solaire",
              "Masque",
              "Masques",
              "Exfoliant",
              "Traitement",
              "Contour des yeux",
              "Essences",
              "Gel de douche",
              "Gel de Douche",
              "Gommage",
              "Lait de Corps",
              "Beurre corporel",
              "Huile corporelle",
              "Déodorant",
              "Accessoires",
              "Compléments alimentaires"
            ]
          },
          "skinTypes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "ingredients": {
            "type": "string"
          },
          "activeIngredients": {
            "type": "object"
          },
          "price": {
            "type": "number"
          },
          "stock": {
            "type": "number"
          },
          "images": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rating": {
            "type": "number"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "name",
          "price"
        ],
        "additionalProperties": false
      },
      "NewProduct": {
        "title": "NewProduct",
        "type": "object",
        "description": "(tsType: Omit<Product, 'id'>, schemaOptions: { title: 'NewProduct', exclude: [ 'id' ] })",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "Nettoyant",
              "Tonique",
              "Sérum",
              "Crème",
              "Hydratant",
              "Solaire",
              "Protection solaire",
              "Masque",
              "Masques",
              "Exfoliant",
              "Traitement",
              "Contour des yeux",
              "Essences",
              "Gel de douche",
              "Gel de Douche",
              "Gommage",
              "Lait de Corps",
              "Beurre corporel",
              "Huile corporelle",
              "Déodorant",
              "Accessoires",
              "Compléments alimentaires"
            ]
          },
          "skinTypes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "ingredients": {
            "type": "string"
          },
          "activeIngredients": {
            "type": "object"
          },
          "price": {
            "type": "number"
          },
          "stock": {
            "type": "number"
          },
          "images": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rating": {
            "type": "number"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "name",
          "price"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Product, 'id'>"
      },
      "ProductPartial": {
        "title": "ProductPartial",
        "type": "object",
        "description": "(tsType: Partial<Product>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "Nettoyant",
              "Tonique",
              "Sérum",
              "Crème",
              "Hydratant",
              "Solaire",
              "Protection solaire",
              "Masque",
              "Masques",
              "Exfoliant",
              "Traitement",
              "Contour des yeux",
              "Essences",
              "Gel de douche",
              "Gel de Douche",
              "Gommage",
              "Lait de Corps",
              "Beurre corporel",
              "Huile corporelle",
              "Déodorant",
              "Accessoires",
              "Compléments alimentaires"
            ]
          },
          "skinTypes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "ingredients": {
            "type": "string"
          },
          "activeIngredients": {
            "type": "object"
          },
          "price": {
            "type": "number"
          },
          "stock": {
            "type": "number"
          },
          "images": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rating": {
            "type": "number"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Product>"
      },
      "PaydunyaWebhook": {
        "title": "PaydunyaWebhook",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "paydunyaToken": {
            "type": "string"
          },
          "paydunyaTransactionId": {
            "type": "string"
          },
          "eventType": {
            "type": "string"
          },
          "payload": {
            "type": "object"
          },
          "status": {
            "type": "string",
            "enum": [
              "received",
              "processed",
              "failed",
              "ignored"
            ]
          },
          "processingError": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "paydunyaToken",
          "eventType",
          "payload"
        ],
        "additionalProperties": false
      },
      "NewWaveWebhook": {
        "title": "NewWaveWebhook",
        "type": "object",
        "description": "(tsType: Omit<PaydunyaWebhook, 'id'>, schemaOptions: { title: 'NewWaveWebhook', exclude: [ 'id' ] })",
        "properties": {
          "paydunyaToken": {
            "type": "string"
          },
          "paydunyaTransactionId": {
            "type": "string"
          },
          "eventType": {
            "type": "string"
          },
          "payload": {
            "type": "object"
          },
          "status": {
            "type": "string",
            "enum": [
              "received",
              "processed",
              "failed",
              "ignored"
            ]
          },
          "processingError": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "paydunyaToken",
          "eventType",
          "payload"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<PaydunyaWebhook, 'id'>"
      },
      "PaydunyaWebhookWithRelations": {
        "title": "PaydunyaWebhookWithRelations",
        "type": "object",
        "description": "(tsType: PaydunyaWebhookWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "paydunyaToken": {
            "type": "string"
          },
          "paydunyaTransactionId": {
            "type": "string"
          },
          "eventType": {
            "type": "string"
          },
          "payload": {
            "type": "object"
          },
          "status": {
            "type": "string",
            "enum": [
              "received",
              "processed",
              "failed",
              "ignored"
            ]
          },
          "processingError": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "paydunyaToken",
          "eventType",
          "payload"
        ],
        "additionalProperties": false,
        "x-typescript-type": "PaydunyaWebhookWithRelations"
      },
      "PaydunyaWebhookPartial": {
        "title": "PaydunyaWebhookPartial",
        "type": "object",
        "description": "(tsType: Partial<PaydunyaWebhook>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "paydunyaToken": {
            "type": "string"
          },
          "paydunyaTransactionId": {
            "type": "string"
          },
          "eventType": {
            "type": "string"
          },
          "payload": {
            "type": "object"
          },
          "status": {
            "type": "string",
            "enum": [
              "received",
              "processed",
              "failed",
              "ignored"
            ]
          },
          "processingError": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<PaydunyaWebhook>"
      },
      "PaydunyaTransaction": {
        "title": "PaydunyaTransaction",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "orderId": {
            "type": "string"
          },
          "paydunyaToken": {
            "type": "string"
          },
          "paydunyaTransactionId": {
            "type": "string"
          },
          "transactionType": {
            "type": "string",
            "enum": [
              "checkout",
              "payout"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "processing",
              "completed",
              "failed",
              "cancelled"
            ]
          },
          "amount": {
            "type": "number"
          },
          "currency": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "checkoutUrl": {
            "type": "string"
          },
          "customerName": {
            "type": "string"
          },
          "customerEmail": {
            "type": "string"
          },
          "customerPhone": {
            "type": "string"
          },
          "paydunyaResponse": {
            "type": "object"
          },
          "failureReason": {
            "type": "string"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "paydunyaToken",
          "transactionType",
          "status",
          "amount"
        ],
        "additionalProperties": false
      },
      "PageContent": {
        "title": "PageContent",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "page": {
            "type": "string"
          },
          "fields": {
            "type": "object"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "page"
        ],
        "additionalProperties": false
      },
      "Order": {
        "title": "Order",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "totalAmount": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "confirmed",
              "shipped",
              "delivered",
              "cancelled"
            ]
          },
          "shippingAddress": {
            "type": "object"
          },
          "billingAddress": {
            "type": "object"
          },
          "paymentMethod": {
            "type": "string"
          },
          "paymentStatus": {
            "type": "string",
            "enum": [
              "pending",
              "paid",
              "failed",
              "refunded"
            ]
          },
          "trackingNumber": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "cartId": {
            "type": "string"
          },
          "paydunyaTransactionId": {
            "type": "string"
          }
        },
        "required": [
          "totalAmount"
        ],
        "additionalProperties": false
      },
      "NewOrder": {
        "title": "NewOrder",
        "type": "object",
        "description": "(tsType: Omit<Order, 'id'>, schemaOptions: { title: 'NewOrder', exclude: [ 'id' ] })",
        "properties": {
          "userId": {
            "type": "string"
          },
          "totalAmount": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "confirmed",
              "shipped",
              "delivered",
              "cancelled"
            ]
          },
          "shippingAddress": {
            "type": "object"
          },
          "billingAddress": {
            "type": "object"
          },
          "paymentMethod": {
            "type": "string"
          },
          "paymentStatus": {
            "type": "string",
            "enum": [
              "pending",
              "paid",
              "failed",
              "refunded"
            ]
          },
          "trackingNumber": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "cartId": {
            "type": "string"
          },
          "paydunyaTransactionId": {
            "type": "string"
          }
        },
        "required": [
          "totalAmount"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Order, 'id'>"
      },
      "OrderPartial": {
        "title": "OrderPartial",
        "type": "object",
        "description": "(tsType: Partial<Order>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "totalAmount": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "confirmed",
              "shipped",
              "delivered",
              "cancelled"
            ]
          },
          "shippingAddress": {
            "type": "object"
          },
          "billingAddress": {
            "type": "object"
          },
          "paymentMethod": {
            "type": "string"
          },
          "paymentStatus": {
            "type": "string",
            "enum": [
              "pending",
              "paid",
              "failed",
              "refunded"
            ]
          },
          "trackingNumber": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "cartId": {
            "type": "string"
          },
          "paydunyaTransactionId": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Order>"
      },
      "OrderItem": {
        "title": "OrderItem",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "orderId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "unitPrice": {
            "type": "number"
          },
          "totalPrice": {
            "type": "number"
          }
        },
        "required": [
          "quantity",
          "unitPrice",
          "totalPrice"
        ],
        "additionalProperties": false
      },
      "NewOrderItem": {
        "title": "NewOrderItem",
        "type": "object",
        "description": "(tsType: Omit<OrderItem, 'id'>, schemaOptions: { title: 'NewOrderItem', exclude: [ 'id' ] })",
        "properties": {
          "orderId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "unitPrice": {
            "type": "number"
          },
          "totalPrice": {
            "type": "number"
          }
        },
        "required": [
          "quantity",
          "unitPrice",
          "totalPrice"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<OrderItem, 'id'>"
      },
      "OrderItemPartial": {
        "title": "OrderItemPartial",
        "type": "object",
        "description": "(tsType: Partial<OrderItem>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "orderId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "unitPrice": {
            "type": "number"
          },
          "totalPrice": {
            "type": "number"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<OrderItem>"
      },
      "Notification": {
        "title": "Notification",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "appointment",
              "order",
              "routine_reminder",
              "educational"
            ]
          },
          "title": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "isRead": {
            "type": "boolean"
          },
          "actionUrl": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "title"
        ],
        "additionalProperties": false
      },
      "NewNotification": {
        "title": "NewNotification",
        "type": "object",
        "description": "(tsType: Omit<Notification, 'id'>, schemaOptions: { title: 'NewNotification', exclude: [ 'id' ] })",
        "properties": {
          "userId": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "appointment",
              "order",
              "routine_reminder",
              "educational"
            ]
          },
          "title": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "isRead": {
            "type": "boolean"
          },
          "actionUrl": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "title"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Notification, 'id'>"
      },
      "NotificationWithRelations": {
        "title": "NotificationWithRelations",
        "type": "object",
        "description": "(tsType: NotificationWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "appointment",
              "order",
              "routine_reminder",
              "educational"
            ]
          },
          "title": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "isRead": {
            "type": "boolean"
          },
          "actionUrl": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "user": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "foreignKey": {}
        },
        "required": [
          "title"
        ],
        "additionalProperties": false,
        "x-typescript-type": "NotificationWithRelations"
      },
      "NotificationPartial": {
        "title": "NotificationPartial",
        "type": "object",
        "description": "(tsType: Partial<Notification>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "appointment",
              "order",
              "routine_reminder",
              "educational"
            ]
          },
          "title": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "isRead": {
            "type": "boolean"
          },
          "actionUrl": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Notification>"
      },
      "EditionSoya": {
        "title": "EditionSoya",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "month": {
            "type": "string"
          },
          "monthLabel": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ]
          },
          "introQuote": {
            "type": "string"
          },
          "introImage": {
            "type": "string"
          },
          "coverImage": {
            "type": "string"
          },
          "copy": {
            "type": "object"
          },
          "sections": {
            "type": "object"
          },
          "favorites": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "seasonal": {
            "type": "object"
          },
          "justDiscoveredIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "routine": {
            "type": "object"
          },
          "special": {
            "type": "object"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "month"
        ],
        "additionalProperties": false
      },
      "NewEditionSoya": {
        "title": "NewEditionSoya",
        "type": "object",
        "description": "(tsType: Omit<EditionSoya, 'id'>, schemaOptions: { title: 'NewEditionSoya', exclude: [ 'id' ] })",
        "properties": {
          "month": {
            "type": "string"
          },
          "monthLabel": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ]
          },
          "introQuote": {
            "type": "string"
          },
          "introImage": {
            "type": "string"
          },
          "coverImage": {
            "type": "string"
          },
          "copy": {
            "type": "object"
          },
          "sections": {
            "type": "object"
          },
          "favorites": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "seasonal": {
            "type": "object"
          },
          "justDiscoveredIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "routine": {
            "type": "object"
          },
          "special": {
            "type": "object"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "month"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<EditionSoya, 'id'>"
      },
      "EditionSoyaPartial": {
        "title": "EditionSoyaPartial",
        "type": "object",
        "description": "(tsType: Partial<EditionSoya>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "month": {
            "type": "string"
          },
          "monthLabel": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ]
          },
          "introQuote": {
            "type": "string"
          },
          "introImage": {
            "type": "string"
          },
          "coverImage": {
            "type": "string"
          },
          "copy": {
            "type": "object"
          },
          "sections": {
            "type": "object"
          },
          "favorites": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "seasonal": {
            "type": "object"
          },
          "justDiscoveredIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "routine": {
            "type": "object"
          },
          "special": {
            "type": "object"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<EditionSoya>"
      },
      "CartItem": {
        "title": "CartItem",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "cartId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "price": {
            "type": "number"
          },
          "subtotal": {
            "type": "number"
          },
          "variantId": {
            "type": "string"
          },
          "customOptions": {
            "type": "object"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "quantity",
          "price"
        ],
        "additionalProperties": false
      },
      "NewCartItem": {
        "title": "NewCartItem",
        "type": "object",
        "description": "(tsType: Omit<CartItem, 'id'>, schemaOptions: { title: 'NewCartItem', exclude: [ 'id' ] })",
        "properties": {
          "cartId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "price": {
            "type": "number"
          },
          "subtotal": {
            "type": "number"
          },
          "variantId": {
            "type": "string"
          },
          "customOptions": {
            "type": "object"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "quantity",
          "price"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<CartItem, 'id'>"
      },
      "CartItemPartial": {
        "title": "CartItemPartial",
        "type": "object",
        "description": "(tsType: Partial<CartItem>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "cartId": {
            "type": "string"
          },
          "productId": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "price": {
            "type": "number"
          },
          "subtotal": {
            "type": "number"
          },
          "variantId": {
            "type": "string"
          },
          "customOptions": {
            "type": "object"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<CartItem>"
      },
      "Article": {
        "title": "Article",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "authorId": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "excerpt": {
            "type": "string"
          },
          "featuredImage": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "skincare_basics",
              "ingredient_guide",
              "routine_tips",
              "skin_conditions"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rubrique": {
            "type": "string",
            "enum": [
              "skincare",
              "acne",
              "hyperpigmentation",
              "hydratation",
              "corps",
              "avis",
              "conseils_soya"
            ]
          },
          "featured": {
            "type": "boolean"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published",
              "archived"
            ]
          },
          "viewCount": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "title",
          "slug"
        ],
        "additionalProperties": false
      },
      "NewArticle": {
        "title": "NewArticle",
        "type": "object",
        "description": "(tsType: Omit<Article, 'id'>, schemaOptions: { title: 'NewArticle', exclude: [ 'id' ] })",
        "properties": {
          "authorId": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "excerpt": {
            "type": "string"
          },
          "featuredImage": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "skincare_basics",
              "ingredient_guide",
              "routine_tips",
              "skin_conditions"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rubrique": {
            "type": "string",
            "enum": [
              "skincare",
              "acne",
              "hyperpigmentation",
              "hydratation",
              "corps",
              "avis",
              "conseils_soya"
            ]
          },
          "featured": {
            "type": "boolean"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published",
              "archived"
            ]
          },
          "viewCount": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "title",
          "slug"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Article, 'id'>"
      },
      "ArticleWithRelations": {
        "title": "ArticleWithRelations",
        "type": "object",
        "description": "(tsType: ArticleWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "authorId": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "excerpt": {
            "type": "string"
          },
          "featuredImage": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "skincare_basics",
              "ingredient_guide",
              "routine_tips",
              "skin_conditions"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rubrique": {
            "type": "string",
            "enum": [
              "skincare",
              "acne",
              "hyperpigmentation",
              "hydratation",
              "corps",
              "avis",
              "conseils_soya"
            ]
          },
          "featured": {
            "type": "boolean"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published",
              "archived"
            ]
          },
          "viewCount": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "author": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "foreignKey": {}
        },
        "required": [
          "title",
          "slug"
        ],
        "additionalProperties": false,
        "x-typescript-type": "ArticleWithRelations"
      },
      "ArticlePartial": {
        "title": "ArticlePartial",
        "type": "object",
        "description": "(tsType: Partial<Article>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "authorId": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "excerpt": {
            "type": "string"
          },
          "featuredImage": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "skincare_basics",
              "ingredient_guide",
              "routine_tips",
              "skin_conditions"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rubrique": {
            "type": "string",
            "enum": [
              "skincare",
              "acne",
              "hyperpigmentation",
              "hydratation",
              "corps",
              "avis",
              "conseils_soya"
            ]
          },
          "featured": {
            "type": "boolean"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published",
              "archived"
            ]
          },
          "viewCount": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Article>"
      },
      "Appointment": {
        "title": "Appointment",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "clientId": {
            "type": "string"
          },
          "guestFirstName": {
            "type": "string"
          },
          "guestLastName": {
            "type": "string"
          },
          "guestEmail": {
            "type": "string"
          },
          "guestPhone": {
            "type": "string"
          },
          "assistantId": {
            "type": "string"
          },
          "appointmentType": {
            "type": "string",
            "enum": [
              "consultation",
              "follow_up",
              "product_advice",
              "glow_reset",
              "skin_bloom"
            ]
          },
          "scheduledAt": {
            "type": "string",
            "format": "date-time"
          },
          "duration": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending_approval",
              "pending_payment",
              "confirmed",
              "scheduled",
              "completed",
              "cancelled",
              "rejected"
            ]
          },
          "notes": {
            "type": "string"
          },
          "paymentConfirmed": {
            "type": "boolean"
          },
          "approvedBy": {
            "type": "string"
          },
          "rejectionReason": {
            "type": "string"
          },
          "meetingLink": {
            "type": "string"
          },
          "price": {
            "type": "number"
          },
          "approvedAt": {
            "type": "string",
            "format": "date-time"
          },
          "approvalNotes": {
            "type": "string"
          },
          "approvedById": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "scheduledAt"
        ],
        "additionalProperties": false
      },
      "AppointmentWithRelations": {
        "title": "AppointmentWithRelations",
        "type": "object",
        "description": "(tsType: AppointmentWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "clientId": {
            "type": "string"
          },
          "guestFirstName": {
            "type": "string"
          },
          "guestLastName": {
            "type": "string"
          },
          "guestEmail": {
            "type": "string"
          },
          "guestPhone": {
            "type": "string"
          },
          "assistantId": {
            "type": "string"
          },
          "appointmentType": {
            "type": "string",
            "enum": [
              "consultation",
              "follow_up",
              "product_advice",
              "glow_reset",
              "skin_bloom"
            ]
          },
          "scheduledAt": {
            "type": "string",
            "format": "date-time"
          },
          "duration": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending_approval",
              "pending_payment",
              "confirmed",
              "scheduled",
              "completed",
              "cancelled",
              "rejected"
            ]
          },
          "notes": {
            "type": "string"
          },
          "paymentConfirmed": {
            "type": "boolean"
          },
          "approvedBy": {
            "type": "string"
          },
          "rejectionReason": {
            "type": "string"
          },
          "meetingLink": {
            "type": "string"
          },
          "price": {
            "type": "number"
          },
          "approvedAt": {
            "type": "string",
            "format": "date-time"
          },
          "approvalNotes": {
            "type": "string"
          },
          "approvedById": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "client": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "foreignKey": {},
          "assistant": {
            "$ref": "#/components/schemas/UserWithRelations"
          }
        },
        "required": [
          "scheduledAt"
        ],
        "additionalProperties": false,
        "x-typescript-type": "AppointmentWithRelations"
      },
      "AppointmentPartial": {
        "title": "AppointmentPartial",
        "type": "object",
        "description": "(tsType: Partial<Appointment>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "string"
          },
          "clientId": {
            "type": "string"
          },
          "guestFirstName": {
            "type": "string"
          },
          "guestLastName": {
            "type": "string"
          },
          "guestEmail": {
            "type": "string"
          },
          "guestPhone": {
            "type": "string"
          },
          "assistantId": {
            "type": "string"
          },
          "appointmentType": {
            "type": "string",
            "enum": [
              "consultation",
              "follow_up",
              "product_advice",
              "glow_reset",
              "skin_bloom"
            ]
          },
          "scheduledAt": {
            "type": "string",
            "format": "date-time"
          },
          "duration": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending_approval",
              "pending_payment",
              "confirmed",
              "scheduled",
              "completed",
              "cancelled",
              "rejected"
            ]
          },
          "notes": {
            "type": "string"
          },
          "paymentConfirmed": {
            "type": "boolean"
          },
          "approvedBy": {
            "type": "string"
          },
          "rejectionReason": {
            "type": "string"
          },
          "meetingLink": {
            "type": "string"
          },
          "price": {
            "type": "number"
          },
          "approvedAt": {
            "type": "string",
            "format": "date-time"
          },
          "approvalNotes": {
            "type": "string"
          },
          "approvedById": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Appointment>"
      },
      "loopback.Count": {
        "type": "object",
        "title": "loopback.Count",
        "x-typescript-type": "@loopback/repository#Count",
        "properties": {
          "count": {
            "type": "number"
          }
        }
      },
      "Appointment.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "Appointment.ScopeFilter"
      },
      "Appointment.IncludeFilter.Items": {
        "title": "Appointment.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "client",
              "assistant",
              "approvedBy"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Appointment.ScopeFilter"
          }
        }
      },
      "Appointment.Filter": {
        "type": "object",
        "title": "Appointment.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "clientId": {
                    "type": "boolean"
                  },
                  "guestFirstName": {
                    "type": "boolean"
                  },
                  "guestLastName": {
                    "type": "boolean"
                  },
                  "guestEmail": {
                    "type": "boolean"
                  },
                  "guestPhone": {
                    "type": "boolean"
                  },
                  "assistantId": {
                    "type": "boolean"
                  },
                  "appointmentType": {
                    "type": "boolean"
                  },
                  "scheduledAt": {
                    "type": "boolean"
                  },
                  "duration": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "notes": {
                    "type": "boolean"
                  },
                  "paymentConfirmed": {
                    "type": "boolean"
                  },
                  "approvedBy": {
                    "type": "boolean"
                  },
                  "rejectionReason": {
                    "type": "boolean"
                  },
                  "meetingLink": {
                    "type": "boolean"
                  },
                  "price": {
                    "type": "boolean"
                  },
                  "approvedAt": {
                    "type": "boolean"
                  },
                  "approvalNotes": {
                    "type": "boolean"
                  },
                  "approvedById": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "clientId",
                    "guestFirstName",
                    "guestLastName",
                    "guestEmail",
                    "guestPhone",
                    "assistantId",
                    "appointmentType",
                    "scheduledAt",
                    "duration",
                    "status",
                    "notes",
                    "paymentConfirmed",
                    "approvedBy",
                    "rejectionReason",
                    "meetingLink",
                    "price",
                    "approvedAt",
                    "approvalNotes",
                    "approvedById",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Appointment.Fields"
          },
          "include": {
            "title": "Appointment.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Appointment.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Appointment>"
      },
      "Appointment.Filter1": {
        "type": "object",
        "title": "Appointment.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "Appointment.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "clientId": {
                    "type": "boolean"
                  },
                  "guestFirstName": {
                    "type": "boolean"
                  },
                  "guestLastName": {
                    "type": "boolean"
                  },
                  "guestEmail": {
                    "type": "boolean"
                  },
                  "guestPhone": {
                    "type": "boolean"
                  },
                  "assistantId": {
                    "type": "boolean"
                  },
                  "appointmentType": {
                    "type": "boolean"
                  },
                  "scheduledAt": {
                    "type": "boolean"
                  },
                  "duration": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "notes": {
                    "type": "boolean"
                  },
                  "paymentConfirmed": {
                    "type": "boolean"
                  },
                  "approvedBy": {
                    "type": "boolean"
                  },
                  "rejectionReason": {
                    "type": "boolean"
                  },
                  "meetingLink": {
                    "type": "boolean"
                  },
                  "price": {
                    "type": "boolean"
                  },
                  "approvedAt": {
                    "type": "boolean"
                  },
                  "approvalNotes": {
                    "type": "boolean"
                  },
                  "approvedById": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "clientId",
                    "guestFirstName",
                    "guestLastName",
                    "guestEmail",
                    "guestPhone",
                    "assistantId",
                    "appointmentType",
                    "scheduledAt",
                    "duration",
                    "status",
                    "notes",
                    "paymentConfirmed",
                    "approvedBy",
                    "rejectionReason",
                    "meetingLink",
                    "price",
                    "approvedAt",
                    "approvalNotes",
                    "approvedById",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Appointment.Fields"
          },
          "include": {
            "title": "Appointment.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Appointment.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Appointment>"
      },
      "Article.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "Article.ScopeFilter"
      },
      "Article.IncludeFilter.Items": {
        "title": "Article.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "author"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Article.ScopeFilter"
          }
        }
      },
      "Article.Filter": {
        "type": "object",
        "title": "Article.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "authorId": {
                    "type": "boolean"
                  },
                  "title": {
                    "type": "boolean"
                  },
                  "slug": {
                    "type": "boolean"
                  },
                  "content": {
                    "type": "boolean"
                  },
                  "excerpt": {
                    "type": "boolean"
                  },
                  "featuredImage": {
                    "type": "boolean"
                  },
                  "category": {
                    "type": "boolean"
                  },
                  "tags": {
                    "type": "boolean"
                  },
                  "rubrique": {
                    "type": "boolean"
                  },
                  "featured": {
                    "type": "boolean"
                  },
                  "publishedAt": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "viewCount": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "authorId",
                    "title",
                    "slug",
                    "content",
                    "excerpt",
                    "featuredImage",
                    "category",
                    "tags",
                    "rubrique",
                    "featured",
                    "publishedAt",
                    "status",
                    "viewCount",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Article.Fields"
          },
          "include": {
            "title": "Article.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Article.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Article>"
      },
      "Article.Filter1": {
        "type": "object",
        "title": "Article.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "Article.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "authorId": {
                    "type": "boolean"
                  },
                  "title": {
                    "type": "boolean"
                  },
                  "slug": {
                    "type": "boolean"
                  },
                  "content": {
                    "type": "boolean"
                  },
                  "excerpt": {
                    "type": "boolean"
                  },
                  "featuredImage": {
                    "type": "boolean"
                  },
                  "category": {
                    "type": "boolean"
                  },
                  "tags": {
                    "type": "boolean"
                  },
                  "rubrique": {
                    "type": "boolean"
                  },
                  "featured": {
                    "type": "boolean"
                  },
                  "publishedAt": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "viewCount": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "authorId",
                    "title",
                    "slug",
                    "content",
                    "excerpt",
                    "featuredImage",
                    "category",
                    "tags",
                    "rubrique",
                    "featured",
                    "publishedAt",
                    "status",
                    "viewCount",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Article.Fields"
          },
          "include": {
            "title": "Article.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Article.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Article>"
      },
      "CartItem.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "CartItem.ScopeFilter"
      },
      "CartItem.IncludeFilter.Items": {
        "title": "CartItem.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "cart",
              "product"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/CartItem.ScopeFilter"
          }
        }
      },
      "CartItem.Filter": {
        "type": "object",
        "title": "CartItem.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "cartId": {
                    "type": "boolean"
                  },
                  "productId": {
                    "type": "boolean"
                  },
                  "quantity": {
                    "type": "boolean"
                  },
                  "price": {
                    "type": "boolean"
                  },
                  "subtotal": {
                    "type": "boolean"
                  },
                  "variantId": {
                    "type": "boolean"
                  },
                  "customOptions": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "cartId",
                    "productId",
                    "quantity",
                    "price",
                    "subtotal",
                    "variantId",
                    "customOptions",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "CartItem.Fields"
          },
          "include": {
            "title": "CartItem.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/CartItem.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<CartItem>"
      },
      "CartItem.Filter1": {
        "type": "object",
        "title": "CartItem.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "CartItem.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "cartId": {
                    "type": "boolean"
                  },
                  "productId": {
                    "type": "boolean"
                  },
                  "quantity": {
                    "type": "boolean"
                  },
                  "price": {
                    "type": "boolean"
                  },
                  "subtotal": {
                    "type": "boolean"
                  },
                  "variantId": {
                    "type": "boolean"
                  },
                  "customOptions": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "cartId",
                    "productId",
                    "quantity",
                    "price",
                    "subtotal",
                    "variantId",
                    "customOptions",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "CartItem.Fields"
          },
          "include": {
            "title": "CartItem.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/CartItem.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<CartItem>"
      },
      "EditionSoya.Filter": {
        "type": "object",
        "title": "EditionSoya.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "EditionSoya.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "month": {
                    "type": "boolean"
                  },
                  "monthLabel": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "introQuote": {
                    "type": "boolean"
                  },
                  "introImage": {
                    "type": "boolean"
                  },
                  "coverImage": {
                    "type": "boolean"
                  },
                  "copy": {
                    "type": "boolean"
                  },
                  "sections": {
                    "type": "boolean"
                  },
                  "favorites": {
                    "type": "boolean"
                  },
                  "seasonal": {
                    "type": "boolean"
                  },
                  "justDiscoveredIds": {
                    "type": "boolean"
                  },
                  "routine": {
                    "type": "boolean"
                  },
                  "special": {
                    "type": "boolean"
                  },
                  "publishedAt": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "month",
                    "monthLabel",
                    "status",
                    "introQuote",
                    "introImage",
                    "coverImage",
                    "copy",
                    "sections",
                    "favorites",
                    "seasonal",
                    "justDiscoveredIds",
                    "routine",
                    "special",
                    "publishedAt",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "EditionSoya.Fields"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<EditionSoya>"
      },
      "Notification.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "Notification.ScopeFilter"
      },
      "Notification.IncludeFilter.Items": {
        "title": "Notification.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "user"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Notification.ScopeFilter"
          }
        }
      },
      "Notification.Filter": {
        "type": "object",
        "title": "Notification.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "type": {
                    "type": "boolean"
                  },
                  "title": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "boolean"
                  },
                  "isRead": {
                    "type": "boolean"
                  },
                  "actionUrl": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "type",
                    "title",
                    "message",
                    "isRead",
                    "actionUrl",
                    "createdAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Notification.Fields"
          },
          "include": {
            "title": "Notification.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Notification.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Notification>"
      },
      "Notification.Filter1": {
        "type": "object",
        "title": "Notification.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "Notification.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "type": {
                    "type": "boolean"
                  },
                  "title": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "boolean"
                  },
                  "isRead": {
                    "type": "boolean"
                  },
                  "actionUrl": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "type",
                    "title",
                    "message",
                    "isRead",
                    "actionUrl",
                    "createdAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Notification.Fields"
          },
          "include": {
            "title": "Notification.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Notification.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Notification>"
      },
      "OrderItem.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "OrderItem.ScopeFilter"
      },
      "OrderItem.IncludeFilter.Items": {
        "title": "OrderItem.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "order",
              "product"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/OrderItem.ScopeFilter"
          }
        }
      },
      "OrderItem.Filter": {
        "type": "object",
        "title": "OrderItem.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "orderId": {
                    "type": "boolean"
                  },
                  "productId": {
                    "type": "boolean"
                  },
                  "quantity": {
                    "type": "boolean"
                  },
                  "unitPrice": {
                    "type": "boolean"
                  },
                  "totalPrice": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "orderId",
                    "productId",
                    "quantity",
                    "unitPrice",
                    "totalPrice"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "OrderItem.Fields"
          },
          "include": {
            "title": "OrderItem.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/OrderItem.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<OrderItem>"
      },
      "OrderItem.Filter1": {
        "type": "object",
        "title": "OrderItem.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "OrderItem.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "orderId": {
                    "type": "boolean"
                  },
                  "productId": {
                    "type": "boolean"
                  },
                  "quantity": {
                    "type": "boolean"
                  },
                  "unitPrice": {
                    "type": "boolean"
                  },
                  "totalPrice": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "orderId",
                    "productId",
                    "quantity",
                    "unitPrice",
                    "totalPrice"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "OrderItem.Fields"
          },
          "include": {
            "title": "OrderItem.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/OrderItem.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<OrderItem>"
      },
      "Order.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "Order.ScopeFilter"
      },
      "Order.IncludeFilter.Items": {
        "title": "Order.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "user",
              "items",
              "paydunyaTransaction"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Order.ScopeFilter"
          }
        }
      },
      "Order.Filter": {
        "type": "object",
        "title": "Order.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "totalAmount": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "shippingAddress": {
                    "type": "boolean"
                  },
                  "billingAddress": {
                    "type": "boolean"
                  },
                  "paymentMethod": {
                    "type": "boolean"
                  },
                  "paymentStatus": {
                    "type": "boolean"
                  },
                  "trackingNumber": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  },
                  "cartId": {
                    "type": "boolean"
                  },
                  "paydunyaTransactionId": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "totalAmount",
                    "status",
                    "shippingAddress",
                    "billingAddress",
                    "paymentMethod",
                    "paymentStatus",
                    "trackingNumber",
                    "createdAt",
                    "updatedAt",
                    "cartId",
                    "paydunyaTransactionId"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Order.Fields"
          },
          "include": {
            "title": "Order.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Order.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Order>"
      },
      "Order.Filter1": {
        "type": "object",
        "title": "Order.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "Order.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "totalAmount": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "shippingAddress": {
                    "type": "boolean"
                  },
                  "billingAddress": {
                    "type": "boolean"
                  },
                  "paymentMethod": {
                    "type": "boolean"
                  },
                  "paymentStatus": {
                    "type": "boolean"
                  },
                  "trackingNumber": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  },
                  "cartId": {
                    "type": "boolean"
                  },
                  "paydunyaTransactionId": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "totalAmount",
                    "status",
                    "shippingAddress",
                    "billingAddress",
                    "paymentMethod",
                    "paymentStatus",
                    "trackingNumber",
                    "createdAt",
                    "updatedAt",
                    "cartId",
                    "paydunyaTransactionId"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Order.Fields"
          },
          "include": {
            "title": "Order.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Order.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Order>"
      },
      "PingResponse": {
        "type": "object",
        "title": "PingResponse",
        "properties": {
          "greeting": {
            "type": "string"
          },
          "date": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "headers": {
            "type": "object",
            "properties": {
              "Content-Type": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        }
      },
      "Product.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "Product.ScopeFilter"
      },
      "Product.IncludeFilter.Items": {
        "title": "Product.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "reviews",
              "orderItems",
              "routineSteps"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Product.ScopeFilter"
          }
        }
      },
      "Product.Filter": {
        "type": "object",
        "title": "Product.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "name": {
                    "type": "boolean"
                  },
                  "description": {
                    "type": "boolean"
                  },
                  "brand": {
                    "type": "boolean"
                  },
                  "category": {
                    "type": "boolean"
                  },
                  "skinTypes": {
                    "type": "boolean"
                  },
                  "ingredients": {
                    "type": "boolean"
                  },
                  "activeIngredients": {
                    "type": "boolean"
                  },
                  "price": {
                    "type": "boolean"
                  },
                  "stock": {
                    "type": "boolean"
                  },
                  "images": {
                    "type": "boolean"
                  },
                  "rating": {
                    "type": "boolean"
                  },
                  "isActive": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "name",
                    "description",
                    "brand",
                    "category",
                    "skinTypes",
                    "ingredients",
                    "activeIngredients",
                    "price",
                    "stock",
                    "images",
                    "rating",
                    "isActive",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Product.Fields"
          },
          "include": {
            "title": "Product.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Product.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Product>"
      },
      "Product.Filter1": {
        "type": "object",
        "title": "Product.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "Product.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "name": {
                    "type": "boolean"
                  },
                  "description": {
                    "type": "boolean"
                  },
                  "brand": {
                    "type": "boolean"
                  },
                  "category": {
                    "type": "boolean"
                  },
                  "skinTypes": {
                    "type": "boolean"
                  },
                  "ingredients": {
                    "type": "boolean"
                  },
                  "activeIngredients": {
                    "type": "boolean"
                  },
                  "price": {
                    "type": "boolean"
                  },
                  "stock": {
                    "type": "boolean"
                  },
                  "images": {
                    "type": "boolean"
                  },
                  "rating": {
                    "type": "boolean"
                  },
                  "isActive": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "name",
                    "description",
                    "brand",
                    "category",
                    "skinTypes",
                    "ingredients",
                    "activeIngredients",
                    "price",
                    "stock",
                    "images",
                    "rating",
                    "isActive",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Product.Fields"
          },
          "include": {
            "title": "Product.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Product.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Product>"
      },
      "Review.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "Review.ScopeFilter"
      },
      "Review.IncludeFilter.Items": {
        "title": "Review.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "user",
              "product"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Review.ScopeFilter"
          }
        }
      },
      "Review.Filter": {
        "type": "object",
        "title": "Review.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "productId": {
                    "type": "boolean"
                  },
                  "rating": {
                    "type": "boolean"
                  },
                  "title": {
                    "type": "boolean"
                  },
                  "comment": {
                    "type": "boolean"
                  },
                  "isVerifiedPurchase": {
                    "type": "boolean"
                  },
                  "helpfulCount": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "productId",
                    "rating",
                    "title",
                    "comment",
                    "isVerifiedPurchase",
                    "helpfulCount",
                    "createdAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Review.Fields"
          },
          "include": {
            "title": "Review.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Review.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Review>"
      },
      "Review.Filter1": {
        "type": "object",
        "title": "Review.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "Review.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "productId": {
                    "type": "boolean"
                  },
                  "rating": {
                    "type": "boolean"
                  },
                  "title": {
                    "type": "boolean"
                  },
                  "comment": {
                    "type": "boolean"
                  },
                  "isVerifiedPurchase": {
                    "type": "boolean"
                  },
                  "helpfulCount": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "productId",
                    "rating",
                    "title",
                    "comment",
                    "isVerifiedPurchase",
                    "helpfulCount",
                    "createdAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Review.Fields"
          },
          "include": {
            "title": "Review.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Review.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Review>"
      },
      "RoutineStep.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "RoutineStep.ScopeFilter"
      },
      "RoutineStep.IncludeFilter.Items": {
        "title": "RoutineStep.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "routine",
              "product"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/RoutineStep.ScopeFilter"
          }
        }
      },
      "RoutineStep.Filter": {
        "type": "object",
        "title": "RoutineStep.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "routineId": {
                    "type": "boolean"
                  },
                  "productId": {
                    "type": "boolean"
                  },
                  "stepOrder": {
                    "type": "boolean"
                  },
                  "instructions": {
                    "type": "boolean"
                  },
                  "frequency": {
                    "type": "boolean"
                  },
                  "amount": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "routineId",
                    "productId",
                    "stepOrder",
                    "instructions",
                    "frequency",
                    "amount"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "RoutineStep.Fields"
          },
          "include": {
            "title": "RoutineStep.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/RoutineStep.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<RoutineStep>"
      },
      "RoutineStep.Filter1": {
        "type": "object",
        "title": "RoutineStep.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "RoutineStep.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "routineId": {
                    "type": "boolean"
                  },
                  "productId": {
                    "type": "boolean"
                  },
                  "stepOrder": {
                    "type": "boolean"
                  },
                  "instructions": {
                    "type": "boolean"
                  },
                  "frequency": {
                    "type": "boolean"
                  },
                  "amount": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "routineId",
                    "productId",
                    "stepOrder",
                    "instructions",
                    "frequency",
                    "amount"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "RoutineStep.Fields"
          },
          "include": {
            "title": "RoutineStep.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/RoutineStep.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<RoutineStep>"
      },
      "Routine.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "Routine.ScopeFilter"
      },
      "Routine.IncludeFilter.Items": {
        "title": "Routine.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "user",
              "steps"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Routine.ScopeFilter"
          }
        }
      },
      "Routine.Filter": {
        "type": "object",
        "title": "Routine.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "name": {
                    "type": "boolean"
                  },
                  "description": {
                    "type": "boolean"
                  },
                  "isActive": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "name",
                    "description",
                    "isActive",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Routine.Fields"
          },
          "include": {
            "title": "Routine.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Routine.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Routine>"
      },
      "Routine.Filter1": {
        "type": "object",
        "title": "Routine.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "Routine.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "name": {
                    "type": "boolean"
                  },
                  "description": {
                    "type": "boolean"
                  },
                  "isActive": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "name",
                    "description",
                    "isActive",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Routine.Fields"
          },
          "include": {
            "title": "Routine.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Routine.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Routine>"
      },
      "SkinAssessment.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "SkinAssessment.ScopeFilter"
      },
      "SkinAssessment.IncludeFilter.Items": {
        "title": "SkinAssessment.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "user"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/SkinAssessment.ScopeFilter"
          }
        }
      },
      "SkinAssessment.Filter": {
        "type": "object",
        "title": "SkinAssessment.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "assessmentDate": {
                    "type": "boolean"
                  },
                  "skinCondition": {
                    "type": "boolean"
                  },
                  "photos": {
                    "type": "boolean"
                  },
                  "notes": {
                    "type": "boolean"
                  },
                  "recommendedProducts": {
                    "type": "boolean"
                  },
                  "nextAssessmentDate": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "assessmentDate",
                    "skinCondition",
                    "photos",
                    "notes",
                    "recommendedProducts",
                    "nextAssessmentDate",
                    "createdAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "SkinAssessment.Fields"
          },
          "include": {
            "title": "SkinAssessment.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/SkinAssessment.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<SkinAssessment>"
      },
      "SkinAssessment.Filter1": {
        "type": "object",
        "title": "SkinAssessment.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "SkinAssessment.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "assessmentDate": {
                    "type": "boolean"
                  },
                  "skinCondition": {
                    "type": "boolean"
                  },
                  "photos": {
                    "type": "boolean"
                  },
                  "notes": {
                    "type": "boolean"
                  },
                  "recommendedProducts": {
                    "type": "boolean"
                  },
                  "nextAssessmentDate": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "assessmentDate",
                    "skinCondition",
                    "photos",
                    "notes",
                    "recommendedProducts",
                    "nextAssessmentDate",
                    "createdAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "SkinAssessment.Fields"
          },
          "include": {
            "title": "SkinAssessment.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/SkinAssessment.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<SkinAssessment>"
      },
      "SkinProfile.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "SkinProfile.ScopeFilter"
      },
      "SkinProfile.IncludeFilter.Items": {
        "title": "SkinProfile.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "user"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/SkinProfile.ScopeFilter"
          }
        }
      },
      "SkinProfile.Filter": {
        "type": "object",
        "title": "SkinProfile.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "skinType": {
                    "type": "boolean"
                  },
                  "skinConcerns": {
                    "type": "boolean"
                  },
                  "primaryConcern": {
                    "type": "boolean"
                  },
                  "skinGoals": {
                    "type": "boolean"
                  },
                  "primaryGoal": {
                    "type": "boolean"
                  },
                  "skincareExperience": {
                    "type": "boolean"
                  },
                  "budgetRange": {
                    "type": "boolean"
                  },
                  "timeCommitment": {
                    "type": "boolean"
                  },
                  "motivation": {
                    "type": "boolean"
                  },
                  "currentRoutine": {
                    "type": "boolean"
                  },
                  "currentProducts": {
                    "type": "boolean"
                  },
                  "allergies": {
                    "type": "boolean"
                  },
                  "productPreferences": {
                    "type": "boolean"
                  },
                  "lifestyleFactors": {
                    "type": "boolean"
                  },
                  "environmentalFactors": {
                    "type": "boolean"
                  },
                  "challenges": {
                    "type": "boolean"
                  },
                  "detailedAnalysis": {
                    "type": "boolean"
                  },
                  "recommendedRoutine": {
                    "type": "boolean"
                  },
                  "progressTracking": {
                    "type": "boolean"
                  },
                  "onboardingCompleted": {
                    "type": "boolean"
                  },
                  "coachReviewed": {
                    "type": "boolean"
                  },
                  "onboardingCompletedAt": {
                    "type": "boolean"
                  },
                  "lastCoachReview": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "skinType",
                    "skinConcerns",
                    "primaryConcern",
                    "skinGoals",
                    "primaryGoal",
                    "skincareExperience",
                    "budgetRange",
                    "timeCommitment",
                    "motivation",
                    "currentRoutine",
                    "currentProducts",
                    "allergies",
                    "productPreferences",
                    "lifestyleFactors",
                    "environmentalFactors",
                    "challenges",
                    "detailedAnalysis",
                    "recommendedRoutine",
                    "progressTracking",
                    "onboardingCompleted",
                    "coachReviewed",
                    "onboardingCompletedAt",
                    "lastCoachReview",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "SkinProfile.Fields"
          },
          "include": {
            "title": "SkinProfile.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/SkinProfile.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<SkinProfile>"
      },
      "SkinProfile.Filter1": {
        "type": "object",
        "title": "SkinProfile.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "SkinProfile.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "skinType": {
                    "type": "boolean"
                  },
                  "skinConcerns": {
                    "type": "boolean"
                  },
                  "primaryConcern": {
                    "type": "boolean"
                  },
                  "skinGoals": {
                    "type": "boolean"
                  },
                  "primaryGoal": {
                    "type": "boolean"
                  },
                  "skincareExperience": {
                    "type": "boolean"
                  },
                  "budgetRange": {
                    "type": "boolean"
                  },
                  "timeCommitment": {
                    "type": "boolean"
                  },
                  "motivation": {
                    "type": "boolean"
                  },
                  "currentRoutine": {
                    "type": "boolean"
                  },
                  "currentProducts": {
                    "type": "boolean"
                  },
                  "allergies": {
                    "type": "boolean"
                  },
                  "productPreferences": {
                    "type": "boolean"
                  },
                  "lifestyleFactors": {
                    "type": "boolean"
                  },
                  "environmentalFactors": {
                    "type": "boolean"
                  },
                  "challenges": {
                    "type": "boolean"
                  },
                  "detailedAnalysis": {
                    "type": "boolean"
                  },
                  "recommendedRoutine": {
                    "type": "boolean"
                  },
                  "progressTracking": {
                    "type": "boolean"
                  },
                  "onboardingCompleted": {
                    "type": "boolean"
                  },
                  "coachReviewed": {
                    "type": "boolean"
                  },
                  "onboardingCompletedAt": {
                    "type": "boolean"
                  },
                  "lastCoachReview": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "skinType",
                    "skinConcerns",
                    "primaryConcern",
                    "skinGoals",
                    "primaryGoal",
                    "skincareExperience",
                    "budgetRange",
                    "timeCommitment",
                    "motivation",
                    "currentRoutine",
                    "currentProducts",
                    "allergies",
                    "productPreferences",
                    "lifestyleFactors",
                    "environmentalFactors",
                    "challenges",
                    "detailedAnalysis",
                    "recommendedRoutine",
                    "progressTracking",
                    "onboardingCompleted",
                    "coachReviewed",
                    "onboardingCompletedAt",
                    "lastCoachReview",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "SkinProfile.Fields"
          },
          "include": {
            "title": "SkinProfile.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/SkinProfile.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<SkinProfile>"
      },
      "SoyaFavorite.Filter": {
        "type": "object",
        "title": "SoyaFavorite.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "SoyaFavorite.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "productId": {
                    "type": "boolean"
                  },
                  "badge": {
                    "type": "boolean"
                  },
                  "why": {
                    "type": "boolean"
                  },
                  "displayOrder": {
                    "type": "boolean"
                  },
                  "isActive": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "productId",
                    "badge",
                    "why",
                    "displayOrder",
                    "isActive",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "SoyaFavorite.Fields"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<SoyaFavorite>"
      },
      "Transformation.Filter": {
        "type": "object",
        "title": "Transformation.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "beforeImage": {
                    "type": "boolean"
                  },
                  "afterImage": {
                    "type": "boolean"
                  },
                  "concern": {
                    "type": "boolean"
                  },
                  "durationWeeks": {
                    "type": "boolean"
                  },
                  "quote": {
                    "type": "boolean"
                  },
                  "firstName": {
                    "type": "boolean"
                  },
                  "age": {
                    "type": "boolean"
                  },
                  "displayOrder": {
                    "type": "boolean"
                  },
                  "isActive": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "beforeImage",
                    "afterImage",
                    "concern",
                    "durationWeeks",
                    "quote",
                    "firstName",
                    "age",
                    "displayOrder",
                    "isActive",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Transformation.Fields"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Transformation>"
      },
      "Transformation.Filter1": {
        "type": "object",
        "title": "Transformation.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "Transformation.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "beforeImage": {
                    "type": "boolean"
                  },
                  "afterImage": {
                    "type": "boolean"
                  },
                  "concern": {
                    "type": "boolean"
                  },
                  "durationWeeks": {
                    "type": "boolean"
                  },
                  "quote": {
                    "type": "boolean"
                  },
                  "firstName": {
                    "type": "boolean"
                  },
                  "age": {
                    "type": "boolean"
                  },
                  "displayOrder": {
                    "type": "boolean"
                  },
                  "isActive": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "beforeImage",
                    "afterImage",
                    "concern",
                    "durationWeeks",
                    "quote",
                    "firstName",
                    "age",
                    "displayOrder",
                    "isActive",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Transformation.Fields"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Transformation>"
      },
      "User.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "User.ScopeFilter"
      },
      "User.IncludeFilter.Items": {
        "title": "User.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "cart",
              "skinProfile",
              "routines",
              "orders",
              "reviews",
              "paydunyaTransactions"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/User.ScopeFilter"
          }
        }
      },
      "User.Filter": {
        "type": "object",
        "title": "User.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "email": {
                    "type": "boolean"
                  },
                  "password": {
                    "type": "boolean"
                  },
                  "firstName": {
                    "type": "boolean"
                  },
                  "lastName": {
                    "type": "boolean"
                  },
                  "phone": {
                    "type": "boolean"
                  },
                  "dateOfBirth": {
                    "type": "boolean"
                  },
                  "gender": {
                    "type": "boolean"
                  },
                  "role": {
                    "type": "boolean"
                  },
                  "isActive": {
                    "type": "boolean"
                  },
                  "onboardingCompleted": {
                    "type": "boolean"
                  },
                  "emailVerified": {
                    "type": "boolean"
                  },
                  "avatar": {
                    "type": "boolean"
                  },
                  "emailVerificationToken": {
                    "type": "boolean"
                  },
                  "emailVerificationExpires": {
                    "type": "boolean"
                  },
                  "passwordResetToken": {
                    "type": "boolean"
                  },
                  "passwordResetExpires": {
                    "type": "boolean"
                  },
                  "refreshToken": {
                    "type": "boolean"
                  },
                  "refreshTokenExpires": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "email",
                    "password",
                    "firstName",
                    "lastName",
                    "phone",
                    "dateOfBirth",
                    "gender",
                    "role",
                    "isActive",
                    "onboardingCompleted",
                    "emailVerified",
                    "avatar",
                    "emailVerificationToken",
                    "emailVerificationExpires",
                    "passwordResetToken",
                    "passwordResetExpires",
                    "refreshToken",
                    "refreshTokenExpires",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "User.Fields"
          },
          "include": {
            "title": "User.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/User.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<User>"
      },
      "User.Filter1": {
        "type": "object",
        "title": "User.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "User.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "email": {
                    "type": "boolean"
                  },
                  "password": {
                    "type": "boolean"
                  },
                  "firstName": {
                    "type": "boolean"
                  },
                  "lastName": {
                    "type": "boolean"
                  },
                  "phone": {
                    "type": "boolean"
                  },
                  "dateOfBirth": {
                    "type": "boolean"
                  },
                  "gender": {
                    "type": "boolean"
                  },
                  "role": {
                    "type": "boolean"
                  },
                  "isActive": {
                    "type": "boolean"
                  },
                  "onboardingCompleted": {
                    "type": "boolean"
                  },
                  "emailVerified": {
                    "type": "boolean"
                  },
                  "avatar": {
                    "type": "boolean"
                  },
                  "emailVerificationToken": {
                    "type": "boolean"
                  },
                  "emailVerificationExpires": {
                    "type": "boolean"
                  },
                  "passwordResetToken": {
                    "type": "boolean"
                  },
                  "passwordResetExpires": {
                    "type": "boolean"
                  },
                  "refreshToken": {
                    "type": "boolean"
                  },
                  "refreshTokenExpires": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "email",
                    "password",
                    "firstName",
                    "lastName",
                    "phone",
                    "dateOfBirth",
                    "gender",
                    "role",
                    "isActive",
                    "onboardingCompleted",
                    "emailVerified",
                    "avatar",
                    "emailVerificationToken",
                    "emailVerificationExpires",
                    "passwordResetToken",
                    "passwordResetExpires",
                    "refreshToken",
                    "refreshTokenExpires",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "User.Fields"
          },
          "include": {
            "title": "User.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/User.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<User>"
      },
      "PaydunyaWebhook.Filter": {
        "type": "object",
        "title": "PaydunyaWebhook.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "paydunyaToken": {
                    "type": "boolean"
                  },
                  "paydunyaTransactionId": {
                    "type": "boolean"
                  },
                  "eventType": {
                    "type": "boolean"
                  },
                  "payload": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "processingError": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "paydunyaToken",
                    "paydunyaTransactionId",
                    "eventType",
                    "payload",
                    "status",
                    "processingError",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "PaydunyaWebhook.Fields"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<PaydunyaWebhook>"
      },
      "PaydunyaWebhook.Filter1": {
        "type": "object",
        "title": "PaydunyaWebhook.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "PaydunyaWebhook.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "paydunyaToken": {
                    "type": "boolean"
                  },
                  "paydunyaTransactionId": {
                    "type": "boolean"
                  },
                  "eventType": {
                    "type": "boolean"
                  },
                  "payload": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "processingError": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "paydunyaToken",
                    "paydunyaTransactionId",
                    "eventType",
                    "payload",
                    "status",
                    "processingError",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "PaydunyaWebhook.Fields"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<PaydunyaWebhook>"
      }
    }
  },
  "security": [
    {
      "jwt": []
    }
  ],
  "servers": [
    {
      "url": "https://api.soya-skin.com"
    }
  ]
}