{
  "openapi": "3.0.0",
  "info": {
    "title": "BACKEND PIEMCOL",
    "version": "1.0.0",
    "description": "Backend RBAC",
    "contact": {
      "name": "DAMELO"
    }
  },
  "paths": {
    "/addresses/my": {
      "get": {
        "x-controller-name": "AddressController",
        "x-operation-name": "findMyAddresses",
        "tags": [
          "AddressController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AddressController.findMyAddresses"
          }
        },
        "operationId": "AddressController.findMyAddresses"
      }
    },
    "/addresses/{id}/default": {
      "patch": {
        "x-controller-name": "AddressController",
        "x-operation-name": "setDefaultAddress",
        "tags": [
          "AddressController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AddressController.setDefaultAddress"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "AddressController.setDefaultAddress"
      }
    },
    "/addresses/{id}": {
      "patch": {
        "x-controller-name": "AddressController",
        "x-operation-name": "updateAddress",
        "tags": [
          "AddressController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AddressController.updateAddress"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "AddressController.updateAddress"
      },
      "delete": {
        "x-controller-name": "AddressController",
        "x-operation-name": "deleteAddress",
        "tags": [
          "AddressController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AddressController.deleteAddress"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "AddressController.deleteAddress"
      }
    },
    "/addresses": {
      "post": {
        "x-controller-name": "AddressController",
        "x-operation-name": "createAddress",
        "tags": [
          "AddressController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AddressController.createAddress"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "label",
                  "recipientName",
                  "line1",
                  "city",
                  "country",
                  "latitude",
                  "longitude"
                ],
                "properties": {
                  "label": {
                    "type": "string"
                  },
                  "recipientName": {
                    "type": "string"
                  },
                  "phone": {
                    "type": "string"
                  },
                  "line1": {
                    "type": "string"
                  },
                  "line2": {
                    "type": "string"
                  },
                  "city": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string"
                  },
                  "country": {
                    "type": "string"
                  },
                  "postalCode": {
                    "type": "string"
                  },
                  "latitude": {
                    "type": "number"
                  },
                  "longitude": {
                    "type": "number"
                  },
                  "isDefault": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "operationId": "AddressController.createAddress"
      }
    },
    "/banners/active": {
      "get": {
        "x-controller-name": "BannerController",
        "x-operation-name": "getActiveBanners",
        "tags": [
          "BannerController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BannerController.getActiveBanners"
          }
        },
        "operationId": "BannerController.getActiveBanners"
      }
    },
    "/banners/schedule": {
      "put": {
        "x-controller-name": "BannerController",
        "x-operation-name": "updateSchedule",
        "tags": [
          "BannerController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BannerController.updateSchedule"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "BannerController.updateSchedule"
      }
    },
    "/banners/settings": {
      "put": {
        "x-controller-name": "BannerController",
        "x-operation-name": "updateSettings",
        "tags": [
          "BannerController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BannerController.updateSettings"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "BannerController.updateSettings"
      }
    },
    "/banners/upload": {
      "post": {
        "x-controller-name": "BannerController",
        "x-operation-name": "uploadBannerAsset",
        "tags": [
          "BannerController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BannerController.uploadBannerAsset"
          }
        },
        "operationId": "BannerController.uploadBannerAsset"
      },
      "options": {
        "x-controller-name": "BannerController",
        "x-operation-name": "uploadBannerAssetOptions",
        "tags": [
          "BannerController"
        ],
        "responses": {
          "204": {
            "description": "CORS preflight accepted"
          }
        },
        "operationId": "BannerController.uploadBannerAssetOptions"
      }
    },
    "/banners/{id}": {
      "patch": {
        "x-controller-name": "BannerController",
        "x-operation-name": "updateById",
        "tags": [
          "BannerController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BannerController.updateById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "BannerController.updateById"
      },
      "delete": {
        "x-controller-name": "BannerController",
        "x-operation-name": "deleteById",
        "tags": [
          "BannerController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BannerController.deleteById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "BannerController.deleteById"
      }
    },
    "/banners": {
      "post": {
        "x-controller-name": "BannerController",
        "x-operation-name": "create",
        "tags": [
          "BannerController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BannerController.create"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "BannerController.create"
      },
      "get": {
        "x-controller-name": "BannerController",
        "x-operation-name": "find",
        "tags": [
          "BannerController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BannerController.find"
          }
        },
        "operationId": "BannerController.find"
      }
    },
    "/health": {
      "get": {
        "x-controller-name": "HealthController",
        "x-operation-name": "health",
        "tags": [
          "HealthController"
        ],
        "responses": {
          "200": {
            "description": "Backend health status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string"
                    },
                    "uptime": {
                      "type": "number"
                    },
                    "timestamp": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "HealthController.health"
      }
    },
    "/list-projects": {
      "get": {
        "x-controller-name": "ProjectController",
        "x-operation-name": "listProjects",
        "tags": [
          "ProjectController"
        ],
        "responses": {
          "200": {
            "description": "List all the project model instances without balance",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectPublic"
                  }
                }
              }
            }
          }
        },
        "operationId": "ProjectController.listProjects"
      }
    },
    "/orders/manage/logs": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "getOrderLogs",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Return value of OrderController.getOrderLogs"
          }
        },
        "parameters": [
          {
            "name": "orderId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "OrderController.getOrderLogs"
      }
    },
    "/orders/manage/owner-metrics": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "getOwnerMetrics",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Return value of OrderController.getOwnerMetrics"
          }
        },
        "operationId": "OrderController.getOwnerMetrics"
      }
    },
    "/orders/manage/summary": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "getManagementSummary",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Return value of OrderController.getManagementSummary"
          }
        },
        "operationId": "OrderController.getManagementSummary"
      }
    },
    "/orders/manage": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "findForManagement",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Return value of OrderController.findForManagement"
          }
        },
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "OrderController.findForManagement"
      }
    },
    "/orders/my": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "findMyOrders",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Return value of OrderController.findMyOrders"
          }
        },
        "operationId": "OrderController.findMyOrders"
      }
    },
    "/orders/{id}/status": {
      "patch": {
        "x-controller-name": "OrderController",
        "x-operation-name": "updateOrderStatus",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Return value of OrderController.updateOrderStatus"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "OrderController.updateOrderStatus"
      }
    },
    "/orders": {
      "post": {
        "x-controller-name": "OrderController",
        "x-operation-name": "createOrder",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Return value of OrderController.createOrder"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status",
                  "placedAt",
                  "total",
                  "shippingAddress",
                  "latitude",
                  "longitude",
                  "items"
                ],
                "properties": {
                  "status": {
                    "type": "string"
                  },
                  "placedAt": {
                    "type": "string"
                  },
                  "total": {
                    "type": "number"
                  },
                  "currency": {
                    "type": "string"
                  },
                  "shippingAddress": {
                    "type": "string"
                  },
                  "latitude": {
                    "type": "number"
                  },
                  "longitude": {
                    "type": "number"
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object"
                    }
                  },
                  "previewImage": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "OrderController.createOrder"
      }
    },
    "/payments/wompi/checkout-link": {
      "post": {
        "x-controller-name": "PaymentController",
        "x-operation-name": "createWompiCheckoutLink",
        "tags": [
          "PaymentController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PaymentController.createWompiCheckoutLink"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "customer": {
                    "type": "object"
                  },
                  "shippingAddress": {
                    "type": "object"
                  },
                  "shippingOption": {
                    "type": "object"
                  },
                  "shippingQuote": {
                    "type": "object"
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object"
                    }
                  },
                  "totals": {
                    "type": "object"
                  },
                  "previewImage": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "PaymentController.createWompiCheckoutLink"
      }
    },
    "/payments/wompi/events": {
      "post": {
        "x-controller-name": "PaymentController",
        "x-operation-name": "handleWompiEvent",
        "tags": [
          "PaymentController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PaymentController.handleWompiEvent"
          }
        },
        "parameters": [
          {
            "name": "x-event-checksum",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "PaymentController.handleWompiEvent"
      }
    },
    "/payments/wompi/orders/reference/{reference}": {
      "get": {
        "x-controller-name": "PaymentController",
        "x-operation-name": "getOrderByPaymentReference",
        "tags": [
          "PaymentController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PaymentController.getOrderByPaymentReference"
          }
        },
        "parameters": [
          {
            "name": "reference",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "PaymentController.getOrderByPaymentReference"
      }
    },
    "/payments/wompi/transactions/{transactionId}": {
      "get": {
        "x-controller-name": "PaymentController",
        "x-operation-name": "getWompiTransactionStatus",
        "tags": [
          "PaymentController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PaymentController.getWompiTransactionStatus"
          }
        },
        "parameters": [
          {
            "name": "transactionId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "PaymentController.getWompiTransactionStatus"
      }
    },
    "/product-subcategories": {
      "get": {
        "x-controller-name": "ProductController",
        "x-operation-name": "getProductSubcategories",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.getProductSubcategories"
          }
        },
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "ProductController.getProductSubcategories"
      }
    },
    "/product-types": {
      "get": {
        "x-controller-name": "ProductController",
        "x-operation-name": "getProductTypes",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.getProductTypes"
          }
        },
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "ProductController.getProductTypes"
      }
    },
    "/products/catalog": {
      "get": {
        "x-controller-name": "ProductController",
        "x-operation-name": "catalog",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.catalog"
          }
        },
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "productType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subcategory",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "brand",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "colors",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sizes",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "minPrice",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "maxPrice",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "ProductController.catalog"
      }
    },
    "/products/change-logs": {
      "get": {
        "x-controller-name": "ProductAuditLogController",
        "x-operation-name": "find",
        "tags": [
          "ProductAuditLogController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductAuditLogController.find"
          }
        },
        "parameters": [
          {
            "name": "productId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ownerId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "eventType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "changedBy",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "ProductAuditLogController.find"
      }
    },
    "/products/manage/export": {
      "get": {
        "x-controller-name": "ProductController",
        "x-operation-name": "exportWorkbook",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.exportWorkbook"
          }
        },
        "parameters": [
          {
            "name": "ownerId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "ProductController.exportWorkbook"
      }
    },
    "/products/manage/field-suggestions": {
      "get": {
        "x-controller-name": "ProductController",
        "x-operation-name": "getFieldSuggestions",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.getFieldSuggestions"
          }
        },
        "parameters": [
          {
            "name": "field",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "ProductController.getFieldSuggestions"
      }
    },
    "/products/manage/import-apply": {
      "post": {
        "x-controller-name": "ProductController",
        "x-operation-name": "applyImport",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.applyImport"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "replaceOwnerCatalog": {
                    "type": "boolean"
                  },
                  "rows": {
                    "type": "array",
                    "items": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "ProductController.applyImport"
      }
    },
    "/products/manage/import-preview": {
      "post": {
        "x-controller-name": "ProductController",
        "x-operation-name": "previewImport",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.previewImport"
          }
        },
        "parameters": [
          {
            "name": "ownerId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "ProductController.previewImport"
      }
    },
    "/products/manage/owners": {
      "get": {
        "x-controller-name": "ProductController",
        "x-operation-name": "getOwnerSummaries",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.getOwnerSummaries"
          }
        },
        "operationId": "ProductController.getOwnerSummaries"
      }
    },
    "/products/manage/unification-apply": {
      "post": {
        "x-controller-name": "ProductController",
        "x-operation-name": "applyOwnerUnification",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.applyOwnerUnification"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "candidates": {
                    "type": "array",
                    "items": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "ProductController.applyOwnerUnification"
      }
    },
    "/products/manage/unification-preview": {
      "get": {
        "x-controller-name": "ProductController",
        "x-operation-name": "previewOwnerUnification",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.previewOwnerUnification"
          }
        },
        "parameters": [
          {
            "name": "ownerId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "ProductController.previewOwnerUnification"
      }
    },
    "/products/manage": {
      "get": {
        "x-controller-name": "ProductController",
        "x-operation-name": "findForManagement",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.findForManagement"
          }
        },
        "operationId": "ProductController.findForManagement"
      }
    },
    "/products/{id}/available": {
      "patch": {
        "x-controller-name": "ProductController",
        "x-operation-name": "updateAvailable",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.updateAvailable"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ProductController.updateAvailable"
      }
    },
    "/products/{id}/media": {
      "post": {
        "x-controller-name": "ProductController",
        "x-operation-name": "replaceProductMediaById",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.replaceProductMediaById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "assets": {
                    "type": "array",
                    "items": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ProductController.replaceProductMediaById"
      }
    },
    "/products/{id}": {
      "patch": {
        "x-controller-name": "ProductController",
        "x-operation-name": "updateById",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.updateById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true,
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "sku": {
                    "type": "string"
                  },
                  "externalRef": {
                    "type": "string"
                  },
                  "price": {
                    "type": "number"
                  },
                  "currency": {
                    "type": "string"
                  },
                  "category": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "trade": {
                    "type": "string"
                  },
                  "image": {
                    "type": "string"
                  },
                  "productType": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "size": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "quantity": {
                    "type": "array",
                    "items": {
                      "type": "number"
                    }
                  },
                  "colors": {
                    "type": "array",
                    "items": {
                      "type": "object"
                    }
                  },
                  "images": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "details": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "available": {
                    "type": "boolean"
                  },
                  "source": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ProductController.updateById"
      },
      "get": {
        "x-controller-name": "ProductController",
        "x-operation-name": "findById",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.findById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ProductController.findById"
      },
      "delete": {
        "x-controller-name": "ProductController",
        "x-operation-name": "deleteById",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.deleteById"
          }
        },
        "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": "Return value of ProductController.create"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductExcluding_id-ownerId_"
              }
            }
          }
        },
        "operationId": "ProductController.create"
      },
      "get": {
        "x-controller-name": "ProductController",
        "x-operation-name": "find",
        "tags": [
          "ProductController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProductController.find"
          }
        },
        "operationId": "ProductController.find"
      }
    },
    "/projects/{id}/donate": {
      "patch": {
        "x-controller-name": "ProjectController",
        "x-operation-name": "donateById",
        "tags": [
          "ProjectController"
        ],
        "responses": {
          "204": {
            "description": "Project donate success"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "amount",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "ProjectController.donateById"
      }
    },
    "/projects/{id}/show-balance": {
      "get": {
        "x-controller-name": "ProjectController",
        "x-operation-name": "findById",
        "tags": [
          "ProjectController"
        ],
        "responses": {
          "200": {
            "description": "show balance of a project",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Project"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ProjectController.findById"
      }
    },
    "/projects/{id}/withdraw": {
      "patch": {
        "x-controller-name": "ProjectController",
        "x-operation-name": "withdrawById",
        "tags": [
          "ProjectController"
        ],
        "responses": {
          "204": {
            "description": "Project withdraw success"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "amount",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "ProjectController.withdrawById"
      }
    },
    "/users/firebase-login": {
      "post": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "firebaseLogin",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserManagementController.firebaseLogin"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "UserManagementController.firebaseLogin"
      }
    },
    "/users/forgot-password": {
      "put": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "forgotPassword",
        "tags": [
          "UserManagementController"
        ],
        "security": [
          {
            "jwt": []
          }
        ],
        "responses": {
          "200": {
            "description": "The updated user profile",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "id"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "email": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email",
                  "password"
                ],
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email"
                  },
                  "password": {
                    "type": "string",
                    "minLength": 8
                  }
                }
              }
            }
          },
          "description": "The input of password reset function",
          "required": true
        },
        "operationId": "UserManagementController.forgotPassword"
      }
    },
    "/users/login": {
      "post": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "login",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserManagementController.login"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email",
                  "password"
                ],
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email"
                  },
                  "password": {
                    "type": "string",
                    "minLength": 8
                  }
                }
              }
            }
          },
          "description": "The input of login function",
          "required": true
        },
        "operationId": "UserManagementController.login"
      }
    },
    "/users/manage/summary": {
      "get": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "usersSummary",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserManagementController.usersSummary"
          }
        },
        "operationId": "UserManagementController.usersSummary"
      }
    },
    "/users/me/wishlist/{productId}": {
      "post": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "addWishlistItem",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserManagementController.addWishlistItem"
          }
        },
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "UserManagementController.addWishlistItem"
      },
      "delete": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "removeWishlistItem",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserManagementController.removeWishlistItem"
          }
        },
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "UserManagementController.removeWishlistItem"
      }
    },
    "/users/me/wishlist": {
      "get": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "getWishlist",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserManagementController.getWishlist"
          }
        },
        "operationId": "UserManagementController.getWishlist"
      }
    },
    "/users/me": {
      "get": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "me",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserManagementController.me"
          }
        },
        "operationId": "UserManagementController.me"
      }
    },
    "/users/refresh-token/local": {
      "post": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "refreshLocalToken",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserManagementController.refreshLocalToken"
          }
        },
        "operationId": "UserManagementController.refreshLocalToken"
      }
    },
    "/users/refresh-token": {
      "post": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "refreshToken",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserManagementController.refreshToken"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "UserManagementController.refreshToken"
      }
    },
    "/users/resend-verification": {
      "post": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "resendVerification",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserManagementController.resendVerification"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email"
                ],
                "properties": {
                  "email": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "UserManagementController.resendVerification"
      }
    },
    "/users/reset-password/finish": {
      "put": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "resetPasswordFinish",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "A successful password reset response"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KeyAndPassword"
              }
            }
          }
        },
        "operationId": "UserManagementController.resetPasswordFinish"
      }
    },
    "/users/reset-password/init": {
      "post": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "resetPasswordInit",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Confirmation that reset password email has been sent"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResetPasswordInit"
              }
            }
          }
        },
        "operationId": "UserManagementController.resetPasswordInit"
      }
    },
    "/users/verify-email": {
      "get": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "verifyEmail",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserManagementController.verifyEmail"
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "UserManagementController.verifyEmail"
      }
    },
    "/users/{userId}/recommend": {
      "get": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "productRecommendations",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Products",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Product"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "UserManagementController.productRecommendations"
      }
    },
    "/users/{userId}": {
      "put": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "set",
        "tags": [
          "UserManagementController"
        ],
        "security": [
          {
            "jwt": []
          }
        ],
        "responses": {
          "200": {
            "description": "User",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "description": "update user",
          "x-parameter-index": 1
        },
        "operationId": "UserManagementController.set"
      },
      "get": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "findById",
        "tags": [
          "UserManagementController"
        ],
        "security": [
          {
            "jwt": []
          }
        ],
        "responses": {
          "200": {
            "description": "User",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "UserManagementController.findById"
      }
    },
    "/users": {
      "post": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "create",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserManagementController.create"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewUserRequest"
              }
            }
          }
        },
        "operationId": "UserManagementController.create"
      },
      "get": {
        "x-controller-name": "UserManagementController",
        "x-operation-name": "findUsers",
        "tags": [
          "UserManagementController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserManagementController.findUsers"
          }
        },
        "operationId": "UserManagementController.findUsers"
      }
    },
    "/view-all-projects": {
      "get": {
        "x-controller-name": "ProjectController",
        "x-operation-name": "viewAll",
        "tags": [
          "ProjectController"
        ],
        "responses": {
          "200": {
            "description": "Array of all Project model instances including balance",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Project"
                  }
                }
              }
            }
          }
        },
        "operationId": "ProjectController.viewAll"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "jwt": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "schemas": {
      "NewUserRequest": {
        "title": "NewUserRequest",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "realm": {
            "type": "string"
          },
          "username": {
            "type": "string"
          },
          "civility": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "phoneNumber": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "emailVerified": {
            "type": "boolean"
          },
          "verificationToken": {
            "type": "string"
          },
          "verificationTokenCreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "provider": {
            "type": "string",
            "enum": [
              "local",
              "google",
              "hybrid"
            ]
          },
          "firebaseUid": {
            "type": "string"
          },
          "isExternalAuth": {
            "type": "boolean"
          },
          "lastLoginAt": {
            "type": "string",
            "format": "date-time"
          },
          "resetCount": {
            "type": "number"
          },
          "resetTimestamp": {
            "type": "string"
          },
          "resetKey": {
            "type": "string"
          },
          "resetKeyTimestamp": {
            "type": "string"
          },
          "wishlist": {
            "type": "string"
          },
          "roles": {
            "type": "string"
          },
          "password": {
            "type": "string"
          }
        },
        "required": [
          "email",
          "password"
        ],
        "additionalProperties": false
      },
      "User": {
        "title": "User",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "realm": {
            "type": "string"
          },
          "username": {
            "type": "string"
          },
          "civility": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "phoneNumber": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "emailVerified": {
            "type": "boolean"
          },
          "verificationToken": {
            "type": "string"
          },
          "verificationTokenCreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "provider": {
            "type": "string",
            "enum": [
              "local",
              "google",
              "hybrid"
            ]
          },
          "firebaseUid": {
            "type": "string"
          },
          "isExternalAuth": {
            "type": "boolean"
          },
          "lastLoginAt": {
            "type": "string",
            "format": "date-time"
          },
          "resetCount": {
            "type": "number"
          },
          "resetTimestamp": {
            "type": "string"
          },
          "resetKey": {
            "type": "string"
          },
          "resetKeyTimestamp": {
            "type": "string"
          },
          "wishlist": {
            "type": "string"
          },
          "roles": {
            "type": "string"
          }
        },
        "required": [
          "email"
        ],
        "additionalProperties": false
      },
      "Product": {
        "title": "Product",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "size": {
            "type": "string"
          },
          "price": {
            "type": "number"
          },
          "quantity": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "image": {
            "type": "string"
          },
          "colors": {
            "type": "string"
          },
          "productType": {
            "type": "string"
          },
          "trade": {
            "type": "string"
          },
          "sku": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "externalRef": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "department": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "images": {
            "type": "string"
          },
          "details": {
            "type": "string"
          },
          "ownerId": {
            "type": "string"
          },
          "available": {
            "type": "boolean"
          },
          "archived": {
            "type": "boolean"
          },
          "archivedAt": {
            "type": "string",
            "format": "date-time"
          },
          "archivedBy": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "size",
          "price",
          "quantity",
          "description",
          "image",
          "colors",
          "productType",
          "trade",
          "images",
          "details"
        ],
        "additionalProperties": false
      },
      "ResetPasswordInit": {
        "title": "ResetPasswordInit",
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          }
        },
        "required": [
          "email"
        ],
        "additionalProperties": false
      },
      "KeyAndPassword": {
        "title": "KeyAndPassword",
        "type": "object",
        "properties": {
          "resetKey": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "confirmPassword": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ProjectPublic": {
        "title": "ProjectPublic",
        "type": "object",
        "description": "(tsType: Omit<Project, 'balance'>, schemaOptions: { title: 'ProjectPublic', exclude: [ 'balance' ] })",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "ownerId": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Omit<Project, 'balance'>"
      },
      "Project": {
        "title": "Project",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "balance": {
            "type": "number"
          },
          "ownerId": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ProductExcluding_id-ownerId_": {
        "title": "ProductExcluding_id-ownerId_",
        "type": "object",
        "description": "(tsType: Omit<Product, 'id' | 'ownerId'>, schemaOptions: { exclude: [ 'id', 'ownerId' ] })",
        "properties": {
          "name": {
            "type": "string"
          },
          "size": {
            "type": "string"
          },
          "price": {
            "type": "number"
          },
          "quantity": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "image": {
            "type": "string"
          },
          "colors": {
            "type": "string"
          },
          "productType": {
            "type": "string"
          },
          "trade": {
            "type": "string"
          },
          "sku": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "externalRef": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "department": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "images": {
            "type": "string"
          },
          "details": {
            "type": "string"
          },
          "available": {
            "type": "boolean"
          },
          "archived": {
            "type": "boolean"
          },
          "archivedAt": {
            "type": "string",
            "format": "date-time"
          },
          "archivedBy": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "size",
          "price",
          "quantity",
          "description",
          "image",
          "colors",
          "productType",
          "trade",
          "images",
          "details"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Product, 'id' | 'ownerId'>"
      }
    }
  },
  "security": [
    {
      "jwt": []
    }
  ],
  "servers": [
    {
      "url": "https://www.api.damelo.lat"
    }
  ]
}