{
  "openapi": "3.0.0",
  "info": {
    "title": "Goviral Application",
    "version": "1.0.0",
    "description": "Desta Promotion backend (LoopBack 4)",
    "contact": {
      "name": "makano",
      "email": "makanobush@gmail.com"
    }
  },
  "paths": {
    "/activity-logs/count": {
      "get": {
        "x-controller-name": "ActivityLogController",
        "x-operation-name": "count",
        "tags": [
          "ActivityLogController"
        ],
        "responses": {
          "200": {
            "description": "ActivityLog model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "ActivityLog.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<ActivityLog>"
                }
              }
            }
          }
        ],
        "operationId": "ActivityLogController.count"
      }
    },
    "/activity-logs/{id}/user": {
      "get": {
        "x-controller-name": "ActivityLogUserController",
        "x-operation-name": "getUser",
        "tags": [
          "ActivityLogUserController"
        ],
        "responses": {
          "200": {
            "description": "User belonging to ActivityLog",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ActivityLogUserController.getUser"
      }
    },
    "/activity-logs/{id}": {
      "put": {
        "x-controller-name": "ActivityLogController",
        "x-operation-name": "replaceById",
        "tags": [
          "ActivityLogController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "ActivityLog PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityLog"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ActivityLogController.replaceById"
      },
      "patch": {
        "x-controller-name": "ActivityLogController",
        "x-operation-name": "updateById",
        "tags": [
          "ActivityLogController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "ActivityLog PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityLogPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ActivityLogController.updateById"
      },
      "get": {
        "x-controller-name": "ActivityLogController",
        "x-operation-name": "findById",
        "tags": [
          "ActivityLogController"
        ],
        "responses": {
          "200": {
            "description": "ActivityLog model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActivityLogWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActivityLog.Filter"
                }
              }
            }
          }
        ],
        "operationId": "ActivityLogController.findById"
      },
      "delete": {
        "x-controller-name": "ActivityLogController",
        "x-operation-name": "deleteById",
        "tags": [
          "ActivityLogController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "ActivityLog DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ActivityLogController.deleteById"
      }
    },
    "/activity-logs": {
      "post": {
        "x-controller-name": "ActivityLogController",
        "x-operation-name": "create",
        "tags": [
          "ActivityLogController"
        ],
        "responses": {
          "200": {
            "description": "ActivityLog model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActivityLog"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewActivityLog"
              }
            }
          }
        },
        "operationId": "ActivityLogController.create"
      },
      "patch": {
        "x-controller-name": "ActivityLogController",
        "x-operation-name": "updateAll",
        "tags": [
          "ActivityLogController"
        ],
        "responses": {
          "200": {
            "description": "ActivityLog PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "ActivityLog.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<ActivityLog>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityLogPartial"
              }
            }
          }
        },
        "operationId": "ActivityLogController.updateAll"
      },
      "get": {
        "x-controller-name": "ActivityLogController",
        "x-operation-name": "find",
        "tags": [
          "ActivityLogController"
        ],
        "responses": {
          "200": {
            "description": "Array of ActivityLog model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ActivityLogWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActivityLog.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "ActivityLogController.find"
      }
    },
    "/admin/order-bank-with-receipt": {
      "post": {
        "x-controller-name": "OrderDualPaymentController",
        "x-operation-name": "adminCreateBankOrderWithReceipt",
        "tags": [
          "OrderDualPaymentController"
        ],
        "responses": {
          "200": {
            "description": "Admin creates bank order with receipt on behalf of customer",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "x-parser": "stream",
              "schema": {
                "type": "object"
              }
            }
          },
          "description": "multipart/form-data — customer userId, order fields + receipt file",
          "required": true
        },
        "operationId": "OrderDualPaymentController.adminCreateBankOrderWithReceipt"
      }
    },
    "/admin/order-chapa/{orderId}/recover": {
      "post": {
        "x-controller-name": "OrderChapaController",
        "x-operation-name": "recoverChapaOrder",
        "tags": [
          "OrderChapaController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Recover a stuck Chapa order by re-verifying with Chapa API"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "OrderChapaController.recoverChapaOrder"
      }
    },
    "/admin/orders/profit-summary": {
      "get": {
        "x-controller-name": "ProfitSummaryController",
        "x-operation-name": "getProfitSummary",
        "tags": [
          "ProfitSummaryController"
        ],
        "responses": {
          "200": {
            "description": "Total profit and per-tier breakdown from package tier orders in the given date range",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "ProfitSummaryController.getProfitSummary"
      }
    },
    "/admin/orders/{id}/provider-cancel": {
      "post": {
        "x-controller-name": "ProviderActionsController",
        "x-operation-name": "cancelAtProvider",
        "tags": [
          "ProviderActionsController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProviderActionsController.cancelAtProvider"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ProviderActionsController.cancelAtProvider"
      }
    },
    "/admin/orders/{id}/provider-refill": {
      "post": {
        "x-controller-name": "ProviderActionsController",
        "x-operation-name": "createRefill",
        "tags": [
          "ProviderActionsController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProviderActionsController.createRefill"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ProviderActionsController.createRefill"
      }
    },
    "/admin/orders/{id}/provider-refill-status": {
      "get": {
        "x-controller-name": "ProviderActionsController",
        "x-operation-name": "getRefillStatus",
        "tags": [
          "ProviderActionsController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProviderActionsController.getRefillStatus"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ProviderActionsController.getRefillStatus"
      }
    },
    "/admin/orders/{id}/provider-status": {
      "get": {
        "x-controller-name": "ProviderActionsController",
        "x-operation-name": "getProviderStatus",
        "tags": [
          "ProviderActionsController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProviderActionsController.getProviderStatus"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ProviderActionsController.getProviderStatus"
      }
    },
    "/admin/packages/{id}/tiers/{tid}": {
      "patch": {
        "x-controller-name": "PackageController",
        "x-operation-name": "updateTier",
        "tags": [
          "PackageController"
        ],
        "responses": {
          "200": {
            "description": "Update tier",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "tid",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "label": {
                    "type": "string"
                  },
                  "priceEtb": {
                    "type": "number"
                  },
                  "serviceId": {
                    "type": "number"
                  },
                  "quantity": {
                    "type": "number"
                  },
                  "displayOrder": {
                    "type": "number"
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "profitEtb": {
                    "type": "number"
                  }
                }
              }
            }
          },
          "x-parameter-index": 2
        },
        "operationId": "PackageController.updateTier"
      },
      "delete": {
        "x-controller-name": "PackageController",
        "x-operation-name": "deleteTier",
        "tags": [
          "PackageController"
        ],
        "responses": {
          "200": {
            "description": "Delete tier",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "tid",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "PackageController.deleteTier"
      }
    },
    "/admin/packages/{id}/tiers": {
      "post": {
        "x-controller-name": "PackageController",
        "x-operation-name": "addTier",
        "tags": [
          "PackageController"
        ],
        "responses": {
          "200": {
            "description": "Add tier to package",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "label",
                  "priceEtb",
                  "serviceId",
                  "quantity"
                ],
                "properties": {
                  "label": {
                    "type": "string"
                  },
                  "priceEtb": {
                    "type": "number"
                  },
                  "serviceId": {
                    "type": "number"
                  },
                  "quantity": {
                    "type": "number"
                  },
                  "displayOrder": {
                    "type": "number"
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "profitEtb": {
                    "type": "number"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "PackageController.addTier"
      }
    },
    "/admin/packages/{id}": {
      "patch": {
        "x-controller-name": "PackageController",
        "x-operation-name": "update",
        "tags": [
          "PackageController"
        ],
        "responses": {
          "200": {
            "description": "Update package",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "platform": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "displayOrder": {
                    "type": "number"
                  },
                  "active": {
                    "type": "boolean"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "PackageController.update"
      },
      "delete": {
        "x-controller-name": "PackageController",
        "x-operation-name": "softDelete",
        "tags": [
          "PackageController"
        ],
        "responses": {
          "200": {
            "description": "Soft delete package",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "PackageController.softDelete"
      }
    },
    "/admin/packages": {
      "post": {
        "x-controller-name": "PackageController",
        "x-operation-name": "create",
        "tags": [
          "PackageController"
        ],
        "responses": {
          "200": {
            "description": "Create package",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "platform"
                ],
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "platform": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "displayOrder": {
                    "type": "number"
                  },
                  "active": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "operationId": "PackageController.create"
      },
      "get": {
        "x-controller-name": "PackageController",
        "x-operation-name": "adminList",
        "tags": [
          "PackageController"
        ],
        "responses": {
          "200": {
            "description": "All packages (admin)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array"
                }
              }
            }
          }
        },
        "operationId": "PackageController.adminList"
      }
    },
    "/analytics/customers": {
      "get": {
        "x-controller-name": "AnalyticsController",
        "x-operation-name": "getCustomersReport",
        "tags": [
          "AnalyticsController"
        ],
        "responses": {
          "200": {
            "description": "Paginated customers report",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "minOrders",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "AnalyticsController.getCustomersReport"
      }
    },
    "/analytics/dashboard": {
      "get": {
        "x-controller-name": "AnalyticsController",
        "x-operation-name": "getDashboardAnalytics",
        "tags": [
          "AnalyticsController"
        ],
        "responses": {
          "200": {
            "description": "Dashboard analytics data",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "AnalyticsController.getDashboardAnalytics"
      }
    },
    "/analytics/services": {
      "get": {
        "x-controller-name": "AnalyticsController",
        "x-operation-name": "getServicesReport",
        "tags": [
          "AnalyticsController"
        ],
        "responses": {
          "200": {
            "description": "Paginated services report",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "platform",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serviceType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "AnalyticsController.getServicesReport"
      }
    },
    "/analytics/staff-sales": {
      "get": {
        "x-controller-name": "AnalyticsController",
        "x-operation-name": "getStaffSalesReport",
        "tags": [
          "AnalyticsController"
        ],
        "responses": {
          "200": {
            "description": "Sales per staff member",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "staffId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "all",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "operationId": "AnalyticsController.getStaffSalesReport"
      }
    },
    "/banks/count": {
      "get": {
        "x-controller-name": "BankController",
        "x-operation-name": "count",
        "tags": [
          "BankController"
        ],
        "responses": {
          "200": {
            "description": "Bank model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Bank.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Bank>"
                }
              }
            }
          }
        ],
        "operationId": "BankController.count"
      }
    },
    "/banks/statuses": {
      "get": {
        "x-controller-name": "BankController",
        "x-operation-name": "getStatuses",
        "tags": [
          "BankController"
        ],
        "responses": {
          "200": {
            "description": "Available bank statuses",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statuses": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "BankController.getStatuses"
      }
    },
    "/banks/{id}/logo": {
      "post": {
        "x-controller-name": "BankController",
        "x-operation-name": "uploadLogo",
        "tags": [
          "BankController"
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    },
                    "logoPath": {
                      "type": "string"
                    }
                  }
                }
              }
            },
            "description": "Bank logo upload"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "x-parser": "stream",
              "schema": {
                "type": "object"
              }
            }
          },
          "description": "multipart/form-data value.",
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "BankController.uploadLogo"
      },
      "get": {
        "x-controller-name": "BankController",
        "x-operation-name": "getLogo",
        "tags": [
          "BankController"
        ],
        "responses": {
          "200": {
            "description": "Get bank logo",
            "content": {
              "image/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "BankController.getLogo"
      }
    },
    "/banks/{id}": {
      "put": {
        "x-controller-name": "BankController",
        "x-operation-name": "replaceById",
        "tags": [
          "BankController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Bank PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Bank"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "BankController.replaceById"
      },
      "patch": {
        "x-controller-name": "BankController",
        "x-operation-name": "updateById",
        "tags": [
          "BankController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Bank PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BankPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "BankController.updateById"
      },
      "get": {
        "x-controller-name": "BankController",
        "x-operation-name": "findById",
        "tags": [
          "BankController"
        ],
        "responses": {
          "200": {
            "description": "Bank model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BankWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bank.Filter"
                }
              }
            }
          }
        ],
        "operationId": "BankController.findById"
      },
      "delete": {
        "x-controller-name": "BankController",
        "x-operation-name": "deleteById",
        "tags": [
          "BankController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Bank DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "BankController.deleteById"
      }
    },
    "/banks": {
      "post": {
        "x-controller-name": "BankController",
        "x-operation-name": "create",
        "tags": [
          "BankController"
        ],
        "responses": {
          "200": {
            "description": "Bank model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bank"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewBank"
              }
            }
          }
        },
        "operationId": "BankController.create"
      },
      "patch": {
        "x-controller-name": "BankController",
        "x-operation-name": "updateAll",
        "tags": [
          "BankController"
        ],
        "responses": {
          "200": {
            "description": "Bank PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Bank.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Bank>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BankPartial"
              }
            }
          }
        },
        "operationId": "BankController.updateAll"
      },
      "get": {
        "x-controller-name": "BankController",
        "x-operation-name": "find",
        "tags": [
          "BankController"
        ],
        "responses": {
          "200": {
            "description": "Array of Bank model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BankWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bank.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "BankController.find"
      }
    },
    "/bot/admin/customers/telegram-ids": {
      "get": {
        "x-controller-name": "BotAdminController",
        "x-operation-name": "telegramIds",
        "tags": [
          "BotAdminController"
        ],
        "responses": {
          "200": {
            "description": "Active customers with a telegramId (paged)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "BotAdminController.telegramIds"
      }
    },
    "/bot/admin/deposits/{transactionId}/approve": {
      "post": {
        "x-controller-name": "BotAdminController",
        "x-operation-name": "approveDeposit",
        "tags": [
          "BotAdminController"
        ],
        "responses": {
          "200": {
            "description": "Approve a pending deposit (credits the wallet)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "transactionId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "BotAdminController.approveDeposit"
      }
    },
    "/bot/admin/deposits/{transactionId}/reject": {
      "post": {
        "x-controller-name": "BotAdminController",
        "x-operation-name": "rejectDeposit",
        "tags": [
          "BotAdminController"
        ],
        "responses": {
          "200": {
            "description": "Reject a pending deposit",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "transactionId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "BotAdminController.rejectDeposit"
      }
    },
    "/bot/admin/orders/{id}/approve": {
      "post": {
        "x-controller-name": "BotAdminController",
        "x-operation-name": "approveOrder",
        "tags": [
          "BotAdminController"
        ],
        "responses": {
          "200": {
            "description": "Approve a pending bank-receipt order",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "BotAdminController.approveOrder"
      }
    },
    "/bot/admin/orders/{id}/reject": {
      "post": {
        "x-controller-name": "BotAdminController",
        "x-operation-name": "rejectOrder",
        "tags": [
          "BotAdminController"
        ],
        "responses": {
          "200": {
            "description": "Reject a pending bank-receipt order",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "BotAdminController.rejectOrder"
      }
    },
    "/bot/catalog": {
      "get": {
        "x-controller-name": "BotController",
        "x-operation-name": "getCatalog",
        "tags": [
          "BotController"
        ],
        "responses": {
          "200": {
            "description": "Active packages, tiers and banks",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "BotController.getCatalog"
      }
    },
    "/bot/deposits": {
      "post": {
        "x-controller-name": "BotController",
        "x-operation-name": "createDeposit",
        "tags": [
          "BotController"
        ],
        "responses": {
          "200": {
            "description": "Submit a wallet deposit receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "x-parser": "stream",
              "schema": {
                "type": "object"
              }
            }
          },
          "description": "multipart/form-data",
          "required": true
        },
        "operationId": "BotController.createDeposit"
      }
    },
    "/bot/languages": {
      "get": {
        "x-controller-name": "BotController",
        "x-operation-name": "getLanguages",
        "tags": [
          "BotController"
        ],
        "responses": {
          "200": {
            "description": "Same rows as GET /languages",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array"
                }
              }
            }
          }
        },
        "operationId": "BotController.getLanguages"
      }
    },
    "/bot/orders/receipt": {
      "post": {
        "x-controller-name": "BotController",
        "x-operation-name": "placeReceiptOrder",
        "tags": [
          "BotController"
        ],
        "responses": {
          "200": {
            "description": "Place a bank/telebirr order with a receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "x-parser": "stream",
              "schema": {
                "type": "object"
              }
            }
          },
          "description": "multipart/form-data",
          "required": true
        },
        "operationId": "BotController.placeReceiptOrder"
      }
    },
    "/bot/orders/wallet": {
      "post": {
        "x-controller-name": "BotController",
        "x-operation-name": "placeWalletOrder",
        "tags": [
          "BotController"
        ],
        "responses": {
          "200": {
            "description": "Place a wallet-paid order",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "BotController.placeWalletOrder"
      }
    },
    "/bot/orders/{id}": {
      "get": {
        "x-controller-name": "BotController",
        "x-operation-name": "getOrder",
        "tags": [
          "BotController"
        ],
        "responses": {
          "200": {
            "description": "One of my orders",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "telegramId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "BotController.getOrder"
      }
    },
    "/bot/orders": {
      "get": {
        "x-controller-name": "BotController",
        "x-operation-name": "listOrders",
        "tags": [
          "BotController"
        ],
        "responses": {
          "200": {
            "description": "My orders (newest first)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "telegramId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "BotController.listOrders"
      }
    },
    "/bot/users/ensure": {
      "post": {
        "x-controller-name": "BotController",
        "x-operation-name": "ensureUser",
        "tags": [
          "BotController"
        ],
        "responses": {
          "200": {
            "description": "Find-or-create the customer",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "BotController.ensureUser"
      }
    },
    "/bot/users/{telegramId}": {
      "patch": {
        "x-controller-name": "BotController",
        "x-operation-name": "updateUser",
        "tags": [
          "BotController"
        ],
        "responses": {
          "200": {
            "description": "Update language / phone",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "telegramId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "BotController.updateUser"
      }
    },
    "/bot/wallet": {
      "get": {
        "x-controller-name": "BotController",
        "x-operation-name": "getWallet",
        "tags": [
          "BotController"
        ],
        "responses": {
          "200": {
            "description": "Balance + last 5 transactions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "telegramId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "BotController.getWallet"
      }
    },
    "/campaigns/channel-comparison": {
      "get": {
        "x-controller-name": "CampaignController",
        "x-operation-name": "channelComparison",
        "tags": [
          "CampaignController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Average metrics grouped by campaign type"
                }
              }
            }
          }
        },
        "operationId": "CampaignController.channelComparison"
      }
    },
    "/campaigns/customer-summary": {
      "get": {
        "x-controller-name": "CampaignController",
        "x-operation-name": "customerSummary",
        "tags": [
          "CampaignController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "KPI summary for customer analytics cards"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "CampaignController.customerSummary"
      }
    },
    "/campaigns/daily-registrations": {
      "get": {
        "x-controller-name": "CampaignController",
        "x-operation-name": "dailyRegistrations",
        "tags": [
          "CampaignController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "New customer registrations per day"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "CampaignController.dailyRegistrations"
      }
    },
    "/campaigns/{id}": {
      "delete": {
        "x-controller-name": "CampaignController",
        "x-operation-name": "delete",
        "tags": [
          "CampaignController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Deleted"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "CampaignController.delete"
      }
    },
    "/campaigns": {
      "post": {
        "x-controller-name": "CampaignController",
        "x-operation-name": "create",
        "tags": [
          "CampaignController"
        ],
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Campaign created"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "CampaignController.create"
      },
      "get": {
        "x-controller-name": "CampaignController",
        "x-operation-name": "list",
        "tags": [
          "CampaignController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Campaigns with performance metrics"
                }
              }
            }
          }
        },
        "operationId": "CampaignController.list"
      }
    },
    "/categories/all": {
      "get": {
        "x-controller-name": "CategoryController",
        "x-operation-name": "getAll",
        "tags": [
          "CategoryController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "All categories including inactive (admin)"
                }
              }
            }
          }
        },
        "operationId": "CategoryController.getAll"
      }
    },
    "/categories/reorder": {
      "patch": {
        "x-controller-name": "CategoryController",
        "x-operation-name": "reorder",
        "tags": [
          "CategoryController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Reorder categories"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "CategoryController.reorder"
      }
    },
    "/categories/{id}/set-default": {
      "patch": {
        "x-controller-name": "CategoryController",
        "x-operation-name": "setDefault",
        "tags": [
          "CategoryController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Set a category as the default tab"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "CategoryController.setDefault"
      }
    },
    "/categories/{id}": {
      "patch": {
        "x-controller-name": "CategoryController",
        "x-operation-name": "updateById",
        "tags": [
          "CategoryController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Update a category"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "CategoryController.updateById"
      },
      "delete": {
        "x-controller-name": "CategoryController",
        "x-operation-name": "deleteById",
        "tags": [
          "CategoryController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Delete a category"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "CategoryController.deleteById"
      }
    },
    "/categories": {
      "post": {
        "x-controller-name": "CategoryController",
        "x-operation-name": "create",
        "tags": [
          "CategoryController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Create a new category"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "CategoryController.create"
      },
      "get": {
        "x-controller-name": "CategoryController",
        "x-operation-name": "getActive",
        "tags": [
          "CategoryController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Active categories for mini-app tabs"
                }
              }
            }
          }
        },
        "operationId": "CategoryController.getActive"
      }
    },
    "/chapa/callback": {
      "get": {
        "x-controller-name": "OrderChapaController",
        "x-operation-name": "chapaCallback",
        "tags": [
          "OrderChapaController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Chapa payment callback handler"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "trx_ref",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ref_id",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "OrderChapaController.chapaCallback"
      }
    },
    "/customers/create": {
      "post": {
        "x-controller-name": "UserController",
        "x-operation-name": "createCustomer",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Customer User Created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "user": {
                      "$ref": "#/definitions/User"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "firstName",
                  "email",
                  "password"
                ],
                "properties": {
                  "firstName": {
                    "type": "string"
                  },
                  "lastName": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "password": {
                    "type": "string"
                  },
                  "username": {
                    "type": "string"
                  },
                  "mobilePhone": {
                    "type": "string"
                  },
                  "telegramId": {
                    "type": "string"
                  },
                  "telegramUsername": {
                    "type": "string"
                  },
                  "initialBalance": {
                    "type": "number",
                    "minimum": 0
                  }
                }
              }
            }
          }
        },
        "operationId": "UserController.createCustomer"
      }
    },
    "/customers/me": {
      "patch": {
        "x-controller-name": "CustomerSelfController",
        "x-operation-name": "updateMe",
        "tags": [
          "CustomerSelfController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Updated customer profile"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "firstName": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "lastName": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "email": {
                    "type": "string",
                    "maxLength": 160
                  },
                  "mobilePhone": {
                    "type": "string",
                    "maxLength": 32
                  }
                }
              }
            }
          }
        },
        "operationId": "CustomerSelfController.updateMe"
      },
      "get": {
        "x-controller-name": "CustomerSelfController",
        "x-operation-name": "me",
        "tags": [
          "CustomerSelfController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Current customer profile"
                }
              }
            }
          }
        },
        "operationId": "CustomerSelfController.me"
      }
    },
    "/languages/bulk": {
      "post": {
        "x-controller-name": "LanguageControllerController",
        "x-operation-name": "createBulk",
        "tags": [
          "LanguageControllerController"
        ],
        "responses": {
          "200": {
            "description": "Language model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Language"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NewLanguage"
                }
              }
            }
          }
        },
        "operationId": "LanguageControllerController.createBulk"
      }
    },
    "/languages/count": {
      "get": {
        "x-controller-name": "LanguageControllerController",
        "x-operation-name": "count",
        "tags": [
          "LanguageControllerController"
        ],
        "responses": {
          "200": {
            "description": "Language model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Language.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Language>"
                }
              }
            }
          }
        ],
        "operationId": "LanguageControllerController.count"
      }
    },
    "/languages/{id}": {
      "put": {
        "x-controller-name": "LanguageControllerController",
        "x-operation-name": "replaceById",
        "tags": [
          "LanguageControllerController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Language PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Language"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "LanguageControllerController.replaceById"
      },
      "patch": {
        "x-controller-name": "LanguageControllerController",
        "x-operation-name": "updateById",
        "tags": [
          "LanguageControllerController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Language PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LanguagePartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "LanguageControllerController.updateById"
      },
      "get": {
        "x-controller-name": "LanguageControllerController",
        "x-operation-name": "findById",
        "tags": [
          "LanguageControllerController"
        ],
        "responses": {
          "200": {
            "description": "Language model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LanguageWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Language.Filter"
                }
              }
            }
          }
        ],
        "operationId": "LanguageControllerController.findById"
      },
      "delete": {
        "x-controller-name": "LanguageControllerController",
        "x-operation-name": "deleteById",
        "tags": [
          "LanguageControllerController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Language DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "LanguageControllerController.deleteById"
      }
    },
    "/languages": {
      "post": {
        "x-controller-name": "LanguageControllerController",
        "x-operation-name": "create",
        "tags": [
          "LanguageControllerController"
        ],
        "responses": {
          "200": {
            "description": "Language model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Language"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewLanguage"
              }
            }
          }
        },
        "operationId": "LanguageControllerController.create"
      },
      "patch": {
        "x-controller-name": "LanguageControllerController",
        "x-operation-name": "updateAll",
        "tags": [
          "LanguageControllerController"
        ],
        "responses": {
          "200": {
            "description": "Language PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Language.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Language>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LanguagePartial"
              }
            }
          }
        },
        "operationId": "LanguageControllerController.updateAll"
      },
      "get": {
        "x-controller-name": "LanguageControllerController",
        "x-operation-name": "find",
        "tags": [
          "LanguageControllerController"
        ],
        "responses": {
          "200": {
            "description": "Array of Language model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LanguageWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Language.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "LanguageControllerController.find"
      }
    },
    "/login": {
      "post": {
        "x-controller-name": "UserController",
        "x-operation-name": "login",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "token": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "UserController.login"
      }
    },
    "/notifications/broadcast": {
      "post": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "broadcastNotification",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Broadcast notification to all connected users"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "title",
                  "content"
                ],
                "properties": {
                  "title": {
                    "type": "string"
                  },
                  "content": {
                    "type": "string"
                  },
                  "type": {
                    "type": "string"
                  },
                  "priority": {
                    "type": "string",
                    "enum": [
                      "low",
                      "medium",
                      "high",
                      "urgent"
                    ]
                  },
                  "saveToDatabase": {
                    "type": "boolean"
                  },
                  "notificationFrom": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "NotificationController.broadcastNotification"
      }
    },
    "/notifications/bulk-update": {
      "patch": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "bulkUpdateNotifications",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Bulk update multiple notifications",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "notificationIds",
                  "updates"
                ],
                "properties": {
                  "notificationIds": {
                    "type": "array",
                    "items": {
                      "type": "number"
                    }
                  },
                  "updates": {
                    "type": "object",
                    "properties": {
                      "is_read": {
                        "type": "boolean"
                      },
                      "is_deleted": {
                        "type": "boolean"
                      },
                      "priority": {
                        "type": "string"
                      },
                      "category": {
                        "type": "string"
                      },
                      "is_active": {
                        "type": "boolean"
                      }
                    }
                  },
                  "userId": {
                    "type": "number"
                  }
                }
              }
            }
          }
        },
        "operationId": "NotificationController.bulkUpdateNotifications"
      }
    },
    "/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/debug/websocket": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "debugWebSocket",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Debug WebSocket server state"
                }
              }
            }
          }
        },
        "operationId": "NotificationController.debugWebSocket"
      }
    },
    "/notifications/send-to-user/{userId}": {
      "post": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "sendToUser",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Send real-time notification to specific user"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "title",
                  "content"
                ],
                "properties": {
                  "title": {
                    "type": "string"
                  },
                  "content": {
                    "type": "string"
                  },
                  "type": {
                    "type": "string"
                  },
                  "priority": {
                    "type": "string",
                    "enum": [
                      "low",
                      "medium",
                      "high",
                      "urgent"
                    ]
                  },
                  "saveToDb": {
                    "type": "boolean"
                  },
                  "notificationFrom": {
                    "type": "string"
                  },
                  "sendEmail": {
                    "type": "boolean"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "NotificationController.sendToUser"
      }
    },
    "/notifications/system/health": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "systemHealthCheck",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "System health check for notifications",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "NotificationController.systemHealthCheck"
      }
    },
    "/notifications/test/{userId}": {
      "post": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "sendTestNotification",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Send test notification to user"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "NotificationController.sendTestNotification"
      }
    },
    "/notifications/user/{userId}/analytics": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "getNotificationAnalytics",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Get notification analytics for user"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "days",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "NotificationController.getNotificationAnalytics"
      }
    },
    "/notifications/user/{userId}/clear-all": {
      "patch": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "clearAllNotifications",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Clear all notifications for a user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "reason",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "NotificationController.clearAllNotifications"
      }
    },
    "/notifications/user/{userId}/enhanced": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "getEnhancedNotifications",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Get enhanced notifications for user with pagination and analytics"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "includeRead",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "operationId": "NotificationController.getEnhancedNotifications"
      }
    },
    "/notifications/user/{userId}/mark-all-read": {
      "patch": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "markAllAsRead",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Mark all notifications as read for a user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "NotificationController.markAllAsRead"
      }
    },
    "/notifications/user/{userId}/preferences": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "getUserPreferences",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Get user notification preferences",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "NotificationController.getUserPreferences"
      }
    },
    "/notifications/user/{userId}/recent": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "getRecentNotifications",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Get recent notifications for a user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "hours",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "NotificationController.getRecentNotifications"
      }
    },
    "/notifications/user/{userId}/snooze/{id}": {
      "post": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "snoozeNotification",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Snooze a notification",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "snoozeUntil": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "snoozeMinutes": {
                    "type": "number"
                  },
                  "reason": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "x-parameter-index": 2
        },
        "operationId": "NotificationController.snoozeNotification"
      }
    },
    "/notifications/user/{userId}/snoozed": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "getSnoozedNotifications",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Get snoozed notifications for a user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "NotificationController.getSnoozedNotifications"
      }
    },
    "/notifications/user/{userId}/unread-count": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "getUnreadCount",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Count of unread notifications for a user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "NotificationController.getUnreadCount"
      }
    },
    "/notifications/user/{userId}": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "getUserNotifications",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Get notifications for a specific user with advanced filtering",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "priority",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sortOrder",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateFrom",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateTo",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "NotificationController.getUserNotifications"
      }
    },
    "/notifications/websocket/stats": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "getWebSocketStats",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "WebSocket connection statistics"
                }
              }
            }
          }
        },
        "operationId": "NotificationController.getWebSocketStats"
      }
    },
    "/notifications/websocket/test-connection": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "testWebSocketConnection",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Test WebSocket connection endpoint with instructions"
                }
              }
            }
          }
        },
        "operationId": "NotificationController.testWebSocketConnection"
      }
    },
    "/notifications/websocket/user/{userId}/status": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "getUserConnectionStatus",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Check if user is connected to WebSocket"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "NotificationController.getUserConnectionStatus"
      }
    },
    "/notifications/{id}/mark-read": {
      "patch": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "markNotificationAsRead",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Mark notification as read"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "NotificationController.markNotificationAsRead"
      }
    },
    "/notifications/{id}/mark-unread": {
      "patch": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "markNotificationAsUnread",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Mark notification as unread"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "NotificationController.markNotificationAsUnread"
      }
    },
    "/notifications/{id}/restore": {
      "patch": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "restoreNotification",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Restore a soft-deleted notification",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "NotificationController.restoreNotification"
      }
    },
    "/notifications/{id}/soft-delete": {
      "patch": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "softDeleteNotification",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Soft delete notification"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "reason",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "NotificationController.softDeleteNotification"
      }
    },
    "/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": "number"
            },
            "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": "number"
            },
            "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": "number"
            },
            "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": "number"
            },
            "required": true
          }
        ],
        "operationId": "NotificationController.deleteById"
      }
    },
    "/notifications": {
      "post": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "create",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Notification model instance with real-time delivery",
            "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-bank-with-receipt": {
      "post": {
        "x-controller-name": "OrderDualPaymentController",
        "x-operation-name": "createBankOrderWithReceipt",
        "tags": [
          "OrderDualPaymentController"
        ],
        "responses": {
          "200": {
            "description": "Create bank order with receipt atomically",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "x-parser": "stream",
              "schema": {
                "type": "object"
              }
            }
          },
          "description": "multipart/form-data — order fields + receipt file",
          "required": true
        },
        "operationId": "OrderDualPaymentController.createBankOrderWithReceipt"
      }
    },
    "/order-chapa/verify-by-txref": {
      "post": {
        "x-controller-name": "OrderChapaController",
        "x-operation-name": "verifyByTxRef",
        "tags": [
          "OrderChapaController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Verify Chapa payment by tx_ref (no auth required)"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "tx_ref"
                ],
                "properties": {
                  "tx_ref": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "OrderChapaController.verifyByTxRef"
      }
    },
    "/order-chapa/{orderId}/status": {
      "get": {
        "x-controller-name": "OrderChapaController",
        "x-operation-name": "getChapaOrderStatus",
        "tags": [
          "OrderChapaController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Get current status of a Chapa order"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "OrderChapaController.getChapaOrderStatus"
      }
    },
    "/order-chapa/{orderId}/verify": {
      "post": {
        "x-controller-name": "OrderChapaController",
        "x-operation-name": "verifyChapaOrder",
        "tags": [
          "OrderChapaController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Verify Chapa payment and process order if paid"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "OrderChapaController.verifyChapaOrder"
      }
    },
    "/order-chapa": {
      "post": {
        "x-controller-name": "OrderChapaController",
        "x-operation-name": "createChapaOrder",
        "tags": [
          "OrderChapaController"
        ],
        "responses": {
          "200": {
            "description": "Create an order and return Chapa checkout URL",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "orderId": {
                      "type": "number"
                    },
                    "orderNumber": {
                      "type": "string"
                    },
                    "checkout_url": {
                      "type": "string"
                    },
                    "totalPriceEtb": {
                      "type": "number"
                    },
                    "tx_ref": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "targetUrl"
                ],
                "properties": {
                  "serviceId": {
                    "type": "number"
                  },
                  "packageTierId": {
                    "type": "number"
                  },
                  "targetUrl": {
                    "type": "string"
                  },
                  "quantity": {
                    "type": "number"
                  },
                  "notes": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "OrderChapaController.createChapaOrder"
      }
    },
    "/order-dual-payment/pending-payment-verification": {
      "get": {
        "x-controller-name": "OrderDualPaymentController",
        "x-operation-name": "getPendingPaymentOrders",
        "tags": [
          "OrderDualPaymentController"
        ],
        "responses": {
          "200": {
            "description": "Get orders pending payment verification",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderWithRelations"
                  }
                }
              }
            }
          }
        },
        "operationId": "OrderDualPaymentController.getPendingPaymentOrders"
      }
    },
    "/order-dual-payment/{id}/approve-payment": {
      "patch": {
        "x-controller-name": "OrderDualPaymentController",
        "x-operation-name": "approvePaymentOrder",
        "tags": [
          "OrderDualPaymentController"
        ],
        "responses": {
          "200": {
            "description": "Approve bank payment and send order to provider",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "OrderDualPaymentController.approvePaymentOrder"
      }
    },
    "/order-dual-payment/{id}/reject-payment": {
      "patch": {
        "x-controller-name": "OrderDualPaymentController",
        "x-operation-name": "rejectPaymentOrder",
        "tags": [
          "OrderDualPaymentController"
        ],
        "responses": {
          "200": {
            "description": "Reject bank payment",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "reason"
                ],
                "properties": {
                  "reason": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "OrderDualPaymentController.rejectPaymentOrder"
      }
    },
    "/order-dual-payment": {
      "post": {
        "x-controller-name": "OrderDualPaymentController",
        "x-operation-name": "createDualPaymentOrder",
        "tags": [
          "OrderDualPaymentController"
        ],
        "responses": {
          "200": {
            "description": "Create order with dual payment flow (Bank or Wallet)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderWithRelations"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "targetUrl",
                  "paymentMethod"
                ],
                "properties": {
                  "serviceId": {
                    "type": "number"
                  },
                  "packageTierId": {
                    "type": "number"
                  },
                  "targetUrl": {
                    "type": "string"
                  },
                  "quantity": {
                    "type": "number"
                  },
                  "paymentMethod": {
                    "type": "string",
                    "enum": [
                      "BANK",
                      "WALLET"
                    ]
                  },
                  "bankId": {
                    "type": "number"
                  },
                  "notes": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "OrderDualPaymentController.createDualPaymentOrder"
      }
    },
    "/orders/calculate": {
      "post": {
        "x-controller-name": "OrderController",
        "x-operation-name": "calculateOrder",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Calculate order pricing"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "serviceId",
                  "quantity"
                ],
                "properties": {
                  "serviceId": {
                    "type": "number"
                  },
                  "quantity": {
                    "type": "number"
                  }
                }
              }
            }
          }
        },
        "operationId": "OrderController.calculateOrder"
      }
    },
    "/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/manual": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "getManualOrders",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Started manual service orders (in progress / completed)"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serviceId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "approvedFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "approvedTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "OrderController.getManualOrders"
      }
    },
    "/orders/manual-queue": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "getManualQueue",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "List of manual service orders pending admin processing"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "approvedFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "approvedTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "operationId": "OrderController.getManualQueue"
      }
    },
    "/orders/my-orders": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "findMyOrders",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Array of orders belonging to the current user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "number"
                      },
                      "userId": {
                        "type": "number"
                      },
                      "serviceId": {
                        "type": "number"
                      },
                      "transactionId": {
                        "type": "number"
                      },
                      "orderNumber": {
                        "type": "string"
                      },
                      "targetUrl": {
                        "type": "string"
                      },
                      "quantity": {
                        "type": "number"
                      },
                      "totalPriceEtb": {
                        "type": "string"
                      },
                      "status": {
                        "type": "string"
                      },
                      "paymentStatus": {
                        "type": "string"
                      },
                      "providerOrderId": {
                        "type": "string"
                      },
                      "startCount": {
                        "type": "number",
                        "nullable": true
                      },
                      "remains": {
                        "type": "number",
                        "nullable": true
                      },
                      "notes": {
                        "type": "string"
                      },
                      "failureReason": {
                        "type": "string",
                        "nullable": true
                      },
                      "startedAt": {
                        "type": "string",
                        "nullable": true
                      },
                      "completedAt": {
                        "type": "string",
                        "nullable": true
                      },
                      "createdAt": {
                        "type": "string"
                      },
                      "updatedAt": {
                        "type": "string"
                      },
                      "service": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "number"
                          },
                          "platform": {
                            "type": "string"
                          },
                          "service_type": {
                            "type": "string"
                          },
                          "description": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "category": {
                            "type": "string"
                          },
                          "active": {
                            "type": "boolean"
                          }
                        }
                      },
                      "transaction": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "number"
                          },
                          "transactionId": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "amount": {
                            "type": "string"
                          },
                          "status": {
                            "type": "string"
                          },
                          "paymentMethod": {
                            "type": "string"
                          },
                          "description": {
                            "type": "string"
                          },
                          "reference": {
                            "type": "string"
                          },
                          "balanceBefore": {
                            "type": "string"
                          },
                          "balanceAfter": {
                            "type": "string"
                          },
                          "processedAt": {
                            "type": "string"
                          },
                          "createdAt": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order.Filter"
                }
              }
            }
          }
        ],
        "operationId": "OrderController.findMyOrders"
      }
    },
    "/orders/paid-fixed-amount": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "getPaidFixedAmountOrders",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Get total amount of paid orders with fixed price",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "number"
                    },
                    "totalAmount": {
                      "type": "number"
                    },
                    "orders": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Order"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "operationId": "OrderController.getPaidFixedAmountOrders"
      }
    },
    "/orders/payment-statuses": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "getPaymentStatuses",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Array of PaymentStatus enum values",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "OrderController.getPaymentStatuses"
      }
    },
    "/orders/statistics": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "getOrderStatistics",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Get order statistics"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "OrderController.getOrderStatistics"
      }
    },
    "/orders/statuses": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "getStatuses",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Array of OrderStatus enum values",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "OrderController.getStatuses"
      }
    },
    "/orders/summary": {
      "get": {
        "x-controller-name": "OrderController",
        "x-operation-name": "getOrderSummary",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Get order summary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "OrderController.getOrderSummary"
      }
    },
    "/orders/{id}/cancel": {
      "post": {
        "x-controller-name": "OrderController",
        "x-operation-name": "cancelOrder",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Cancel order with provider"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "OrderController.cancelOrder"
      }
    },
    "/orders/{orderId}/manual-progress": {
      "patch": {
        "x-controller-name": "OrderController",
        "x-operation-name": "updateManualOrderProgress",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Update manual order progress"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "remains",
                  "status"
                ],
                "properties": {
                  "remains": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "in_progress",
                      "completed"
                    ]
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "OrderController.updateManualOrderProgress"
      }
    },
    "/orders/{orderId}/manual-status": {
      "patch": {
        "x-controller-name": "OrderController",
        "x-operation-name": "updateManualOrderStatus",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Update manual order status"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "in_progress",
                      "completed",
                      "failed"
                    ]
                  },
                  "failureReason": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "OrderController.updateManualOrderStatus"
      }
    },
    "/orders/{id}/process": {
      "post": {
        "x-controller-name": "OrderController",
        "x-operation-name": "processOrder",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Process order after payment completion"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "OrderController.processOrder"
      }
    },
    "/orders/{id}/receipt": {
      "post": {
        "x-controller-name": "OrderDualPaymentController",
        "x-operation-name": "uploadOrderReceipt",
        "tags": [
          "OrderDualPaymentController"
        ],
        "responses": {
          "200": {
            "description": "Upload a receipt image/PDF for an order",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "x-parser": "stream",
              "schema": {
                "type": "object"
              }
            }
          },
          "description": "multipart/form-data with a receipt file",
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "OrderDualPaymentController.uploadOrderReceipt"
      }
    },
    "/orders/{id}/status": {
      "post": {
        "x-controller-name": "OrderController",
        "x-operation-name": "getOrderStatus",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Get order status from provider"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "OrderController.getOrderStatus"
      }
    },
    "/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": "number"
            },
            "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": "number"
            },
            "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": "number"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order.Filter1"
                }
              }
            }
          }
        ],
        "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": "number"
            },
            "required": true
          }
        ],
        "operationId": "OrderController.deleteById"
      }
    },
    "/orders": {
      "post": {
        "x-controller-name": "OrderController",
        "x-operation-name": "create",
        "tags": [
          "OrderController"
        ],
        "responses": {
          "200": {
            "description": "Order model instance with dual payment support",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "serviceId",
                  "targetUrl",
                  "quantity"
                ],
                "properties": {
                  "serviceId": {
                    "type": "number"
                  },
                  "targetUrl": {
                    "type": "string"
                  },
                  "quantity": {
                    "type": "number"
                  },
                  "transactionId": {
                    "type": "number"
                  },
                  "paymentMethod": {
                    "type": "string",
                    "enum": [
                      "BANK",
                      "WALLET"
                    ]
                  },
                  "userId": {
                    "type": "number"
                  },
                  "notes": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "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": "Paginated array of Order model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/OrderWithRelations"
                      }
                    },
                    "total": {
                      "type": "number"
                    },
                    "page": {
                      "type": "number"
                    },
                    "limit": {
                      "type": "number"
                    },
                    "totalPages": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "orderNumber",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "providerOrderId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userName",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "telegramId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "paymentStatus",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "paymentMethod",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serviceId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "fromDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "approvedFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "approvedTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "isManual",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "staffId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order.Filter"
                }
              }
            }
          }
        ],
        "operationId": "OrderController.find"
      }
    },
    "/packages/active": {
      "get": {
        "x-controller-name": "PackageController",
        "x-operation-name": "listActive",
        "tags": [
          "PackageController"
        ],
        "responses": {
          "200": {
            "description": "Active packages with tiers",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array"
                }
              }
            }
          }
        },
        "operationId": "PackageController.listActive"
      }
    },
    "/packages/{id}": {
      "get": {
        "x-controller-name": "PackageController",
        "x-operation-name": "getOne",
        "tags": [
          "PackageController"
        ],
        "responses": {
          "200": {
            "description": "Single package with tiers",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "PackageController.getOne"
      }
    },
    "/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"
      }
    },
    "/platforms": {
      "get": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "getPlatforms",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Available platforms",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "platforms": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "ServiceController.getPlatforms"
      }
    },
    "/provider-finance/balance/{providerId}": {
      "post": {
        "x-controller-name": "ProviderFinanceController",
        "x-operation-name": "refreshBalance",
        "tags": [
          "ProviderFinanceController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Live balance from provider API"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ProviderFinanceController.refreshBalance"
      },
      "get": {
        "x-controller-name": "ProviderFinanceController",
        "x-operation-name": "getLatestBalance",
        "tags": [
          "ProviderFinanceController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Latest balance snapshot"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ProviderFinanceController.getLatestBalance"
      }
    },
    "/provider-finance/cost-report": {
      "get": {
        "x-controller-name": "ProviderFinanceController",
        "x-operation-name": "getCostReport",
        "tags": [
          "ProviderFinanceController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Provider cost report"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "ProviderFinanceController.getCostReport"
      }
    },
    "/provider-finance/deposits/{id}": {
      "delete": {
        "x-controller-name": "ProviderFinanceController",
        "x-operation-name": "deleteDeposit",
        "tags": [
          "ProviderFinanceController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Deleted"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ProviderFinanceController.deleteDeposit"
      }
    },
    "/provider-finance/deposits": {
      "post": {
        "x-controller-name": "ProviderFinanceController",
        "x-operation-name": "createDeposit",
        "tags": [
          "ProviderFinanceController"
        ],
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Deposit saved"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "ProviderFinanceController.createDeposit"
      },
      "get": {
        "x-controller-name": "ProviderFinanceController",
        "x-operation-name": "listDeposits",
        "tags": [
          "ProviderFinanceController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Deposit records"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "providerId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "ProviderFinanceController.listDeposits"
      }
    },
    "/providers/count": {
      "get": {
        "x-controller-name": "ProviderController",
        "x-operation-name": "count",
        "tags": [
          "ProviderController"
        ],
        "responses": {
          "200": {
            "description": "Provider model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Provider.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Provider>"
                }
              }
            }
          }
        ],
        "operationId": "ProviderController.count"
      }
    },
    "/providers/{providerId}/import-services": {
      "post": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "importProviderServices",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Import services from a provider API"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "platform": {
                    "type": "string"
                  },
                  "serviceType": {
                    "type": "string"
                  },
                  "exchangeRate": {
                    "type": "number"
                  },
                  "profitMargin": {
                    "type": "number"
                  },
                  "batchSize": {
                    "type": "number"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ServiceController.importProviderServices"
      }
    },
    "/providers/{providerId}/services": {
      "get": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "fetchProviderServices",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Fetch services from provider API",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "page": {
                          "type": "number"
                        },
                        "limit": {
                          "type": "number"
                        },
                        "total": {
                          "type": "number"
                        },
                        "totalPages": {
                          "type": "number"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "providerId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "platform",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serviceType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "exchangeRate",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "sellingRate",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "ServiceController.fetchProviderServices"
      }
    },
    "/providers/{id}": {
      "put": {
        "x-controller-name": "ProviderController",
        "x-operation-name": "replaceById",
        "tags": [
          "ProviderController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Provider PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Provider"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ProviderController.replaceById"
      },
      "patch": {
        "x-controller-name": "ProviderController",
        "x-operation-name": "updateById",
        "tags": [
          "ProviderController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Provider PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProviderPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ProviderController.updateById"
      },
      "get": {
        "x-controller-name": "ProviderController",
        "x-operation-name": "findById",
        "tags": [
          "ProviderController"
        ],
        "responses": {
          "200": {
            "description": "Provider model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProviderWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Provider.Filter"
                }
              }
            }
          }
        ],
        "operationId": "ProviderController.findById"
      },
      "delete": {
        "x-controller-name": "ProviderController",
        "x-operation-name": "deleteById",
        "tags": [
          "ProviderController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Provider DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ProviderController.deleteById"
      }
    },
    "/providers": {
      "post": {
        "x-controller-name": "ProviderController",
        "x-operation-name": "create",
        "tags": [
          "ProviderController"
        ],
        "responses": {
          "200": {
            "description": "Provider model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Provider"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewProvider"
              }
            }
          }
        },
        "operationId": "ProviderController.create"
      },
      "patch": {
        "x-controller-name": "ProviderController",
        "x-operation-name": "updateAll",
        "tags": [
          "ProviderController"
        ],
        "responses": {
          "200": {
            "description": "Provider PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Provider.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Provider>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProviderPartial"
              }
            }
          }
        },
        "operationId": "ProviderController.updateAll"
      },
      "get": {
        "x-controller-name": "ProviderController",
        "x-operation-name": "find",
        "tags": [
          "ProviderController"
        ],
        "responses": {
          "200": {
            "description": "Array of Provider model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProviderWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Provider.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "ProviderController.find"
      }
    },
    "/receipts/count": {
      "get": {
        "x-controller-name": "ReceiptController",
        "x-operation-name": "count",
        "tags": [
          "ReceiptController"
        ],
        "responses": {
          "200": {
            "description": "Receipt model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Receipt.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Receipt>"
                }
              }
            }
          }
        ],
        "operationId": "ReceiptController.count"
      }
    },
    "/receipts/pending": {
      "get": {
        "x-controller-name": "ReceiptController",
        "x-operation-name": "findPending",
        "tags": [
          "ReceiptController"
        ],
        "responses": {
          "200": {
            "description": "Array of pending Receipt model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReceiptWithRelations"
                  }
                }
              }
            }
          }
        },
        "operationId": "ReceiptController.findPending"
      }
    },
    "/receipts/stats": {
      "get": {
        "x-controller-name": "ReceiptController",
        "x-operation-name": "getStats",
        "tags": [
          "ReceiptController"
        ],
        "responses": {
          "200": {
            "description": "Receipt statistics",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "total": {
                      "type": "number"
                    },
                    "pending": {
                      "type": "number"
                    },
                    "approved": {
                      "type": "number"
                    },
                    "rejected": {
                      "type": "number"
                    },
                    "underReview": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "ReceiptController.getStats"
      }
    },
    "/receipts/upload": {
      "post": {
        "x-controller-name": "ReceiptController",
        "x-operation-name": "uploadReceipt",
        "tags": [
          "ReceiptController"
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    },
                    "receiptId": {
                      "type": "number"
                    },
                    "screenshotPath": {
                      "type": "string"
                    }
                  }
                }
              }
            },
            "description": "Receipt with screenshot upload"
          }
        },
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "x-parser": "stream",
              "schema": {
                "type": "object"
              }
            }
          },
          "description": "multipart/form-data value.",
          "required": true
        },
        "operationId": "ReceiptController.uploadReceipt"
      }
    },
    "/receipts/{id}/approve": {
      "patch": {
        "x-controller-name": "ReceiptController",
        "x-operation-name": "approveReceipt",
        "tags": [
          "ReceiptController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Receipt approval success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "processedByUserId": {
                    "type": "number"
                  },
                  "adminNotes": {
                    "type": "string"
                  }
                },
                "required": [
                  "processedByUserId"
                ]
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ReceiptController.approveReceipt"
      }
    },
    "/receipts/{id}/reject": {
      "patch": {
        "x-controller-name": "ReceiptController",
        "x-operation-name": "rejectReceipt",
        "tags": [
          "ReceiptController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Receipt rejection success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "processedByUserId": {
                    "type": "number"
                  },
                  "rejectionReason": {
                    "type": "string"
                  },
                  "adminNotes": {
                    "type": "string"
                  }
                },
                "required": [
                  "processedByUserId",
                  "rejectionReason"
                ]
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ReceiptController.rejectReceipt"
      }
    },
    "/receipts/{id}/screenshot": {
      "get": {
        "x-controller-name": "ReceiptController",
        "x-operation-name": "getScreenshot",
        "tags": [
          "ReceiptController"
        ],
        "responses": {
          "200": {
            "description": "Get receipt screenshot",
            "content": {
              "image/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ReceiptController.getScreenshot"
      }
    },
    "/receipts/{id}": {
      "get": {
        "x-controller-name": "ReceiptController",
        "x-operation-name": "findById",
        "tags": [
          "ReceiptController"
        ],
        "responses": {
          "200": {
            "description": "Receipt model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceiptWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Receipt.Filter"
                }
              }
            }
          }
        ],
        "operationId": "ReceiptController.findById"
      },
      "delete": {
        "x-controller-name": "ReceiptController",
        "x-operation-name": "deleteById",
        "tags": [
          "ReceiptController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Receipt DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ReceiptController.deleteById"
      }
    },
    "/receipts": {
      "post": {
        "x-controller-name": "ReceiptController",
        "x-operation-name": "create",
        "tags": [
          "ReceiptController"
        ],
        "responses": {
          "200": {
            "description": "Receipt model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Receipt"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewReceipt"
              }
            }
          }
        },
        "operationId": "ReceiptController.create"
      },
      "get": {
        "x-controller-name": "ReceiptController",
        "x-operation-name": "find",
        "tags": [
          "ReceiptController"
        ],
        "responses": {
          "200": {
            "description": "Array of Receipt model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReceiptWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Receipt.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "ReceiptController.find"
      }
    },
    "/seed": {
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "seed",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Seed data created"
                }
              }
            }
          }
        },
        "operationId": "UserController.seed"
      }
    },
    "/service-types": {
      "get": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "getServiceTypes",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Available service types",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "serviceTypes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "ServiceController.getServiceTypes"
      }
    },
    "/services/active": {
      "get": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "findActiveServices",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Array of active Service model instances with platform filtering",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ServiceWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "platform",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serviceType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "exchangeRate",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "ServiceController.findActiveServices"
      }
    },
    "/services/bulk-update-exchange-rate": {
      "patch": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "bulkUpdateExchangeRate",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Bulk update exchange rate for services",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "updated": {
                      "type": "number"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "exchangeRate": {
                    "type": "number"
                  },
                  "serviceIds": {
                    "type": "array",
                    "items": {
                      "type": "number"
                    }
                  },
                  "providerId": {
                    "type": "number"
                  }
                },
                "required": [
                  "exchangeRate"
                ]
              }
            }
          }
        },
        "operationId": "ServiceController.bulkUpdateExchangeRate"
      }
    },
    "/services/bulk-update-selling-rate": {
      "patch": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "bulkUpdateSellingRate",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Bulk update selling rate for services",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "updated": {
                      "type": "number"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sellingRate": {
                    "type": "number"
                  },
                  "serviceIds": {
                    "type": "array",
                    "items": {
                      "type": "number"
                    }
                  },
                  "providerId": {
                    "type": "number"
                  },
                  "platform": {
                    "type": "string"
                  },
                  "serviceType": {
                    "type": "string"
                  }
                },
                "required": [
                  "sellingRate"
                ]
              }
            }
          }
        },
        "operationId": "ServiceController.bulkUpdateSellingRate"
      }
    },
    "/services/count": {
      "get": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "count",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Service model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Service.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Service>"
                }
              }
            }
          }
        ],
        "operationId": "ServiceController.count"
      }
    },
    "/services/pricing-stats": {
      "get": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "getPricingStats",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Get pricing statistics for services",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "totalServices": {
                      "type": "number"
                    },
                    "averageProfitMargin": {
                      "type": "number"
                    },
                    "totalPotentialProfit": {
                      "type": "number"
                    },
                    "byPlatform": {
                      "type": "object"
                    },
                    "byServiceType": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "providerId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "platform",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serviceType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "ServiceController.getPricingStats"
      }
    },
    "/services/simulate-pricing": {
      "post": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "simulatePricingChanges",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Simulate pricing changes for services",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "simulation": {
                      "type": "object"
                    },
                    "affectedServices": {
                      "type": "array"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "exchangeRate": {
                    "type": "number"
                  },
                  "sellingRate": {
                    "type": "number"
                  },
                  "serviceIds": {
                    "type": "array",
                    "items": {
                      "type": "number"
                    }
                  },
                  "providerId": {
                    "type": "number"
                  },
                  "platform": {
                    "type": "string"
                  },
                  "serviceType": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "ServiceController.simulatePricingChanges"
      }
    },
    "/services/{id}/detailed": {
      "get": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "findByIdDetailed",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Service model instance with detailed pricing breakdown",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "exchangeRate",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Service.Filter"
                }
              }
            }
          }
        ],
        "operationId": "ServiceController.findByIdDetailed"
      }
    },
    "/services/{id}/pricing": {
      "get": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "calculatePricing",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Calculate pricing for a service",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "quantity": {
                      "type": "number"
                    },
                    "unitPriceEtb": {
                      "type": "number"
                    },
                    "totalPriceEtb": {
                      "type": "number"
                    },
                    "providerCostUsd": {
                      "type": "number"
                    },
                    "providerCostEtb": {
                      "type": "number"
                    },
                    "profitEtb": {
                      "type": "number"
                    },
                    "profitMarginPercentage": {
                      "type": "number"
                    },
                    "exchangeRate": {
                      "type": "number"
                    },
                    "pricing_breakdown": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "quantity",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "exchangeRate",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "ServiceController.calculatePricing"
      }
    },
    "/services/{id}": {
      "put": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "replaceById",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Service PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Service"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ServiceController.replaceById"
      },
      "patch": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "updateById",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Service PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServicePartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ServiceController.updateById"
      },
      "get": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "findById",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Service model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Service.Filter"
                }
              }
            }
          }
        ],
        "operationId": "ServiceController.findById"
      },
      "delete": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "deleteById",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Service DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "ServiceController.deleteById"
      }
    },
    "/services": {
      "post": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "create",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Service model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Service"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewService"
              }
            }
          }
        },
        "operationId": "ServiceController.create"
      },
      "get": {
        "x-controller-name": "ServiceController",
        "x-operation-name": "find",
        "tags": [
          "ServiceController"
        ],
        "responses": {
          "200": {
            "description": "Array of Service model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ServiceWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Service.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "ServiceController.find"
      }
    },
    "/staff/create": {
      "post": {
        "x-controller-name": "UserController",
        "x-operation-name": "createStaff",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Staff User Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/definitions/User"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "firstName",
                  "email",
                  "password",
                  "permissions"
                ],
                "properties": {
                  "firstName": {
                    "type": "string"
                  },
                  "lastName": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "password": {
                    "type": "string"
                  },
                  "username": {
                    "type": "string"
                  },
                  "mobilePhone": {
                    "type": "string"
                  },
                  "permissions": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "UserController.createStaff"
      }
    },
    "/staff/{id}": {
      "patch": {
        "x-controller-name": "StaffController",
        "x-operation-name": "update",
        "tags": [
          "StaffController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Updated staff member"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "phone": {
                    "type": "string",
                    "maxLength": 30,
                    "nullable": true
                  },
                  "isActive": {
                    "type": "boolean"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "StaffController.update"
      }
    },
    "/staff": {
      "post": {
        "x-controller-name": "StaffController",
        "x-operation-name": "create",
        "tags": [
          "StaffController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Created staff member"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "phone": {
                    "type": "string",
                    "maxLength": 30,
                    "nullable": true
                  }
                }
              }
            }
          }
        },
        "operationId": "StaffController.create"
      },
      "get": {
        "x-controller-name": "StaffController",
        "x-operation-name": "find",
        "tags": [
          "StaffController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Staff list (active=true → only active, for the New Order select)"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "active",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "operationId": "StaffController.find"
      }
    },
    "/support/bulk-auto-reply": {
      "post": {
        "x-controller-name": "SupportController",
        "x-operation-name": "bulkAutoReply",
        "tags": [
          "SupportController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Auto-reply sent to all unread conversations"
                }
              }
            }
          }
        },
        "operationId": "SupportController.bulkAutoReply"
      }
    },
    "/support/conversations/bulk-read-noise": {
      "post": {
        "x-controller-name": "SupportController",
        "x-operation-name": "bulkReadNoise",
        "tags": [
          "SupportController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Noise messages marked as read"
                }
              }
            }
          }
        },
        "operationId": "SupportController.bulkReadNoise"
      }
    },
    "/support/conversations/{telegramId}/read": {
      "patch": {
        "x-controller-name": "SupportController",
        "x-operation-name": "markRead",
        "tags": [
          "SupportController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Marked as read"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "telegramId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "SupportController.markRead"
      }
    },
    "/support/conversations/{telegramId}": {
      "get": {
        "x-controller-name": "SupportController",
        "x-operation-name": "thread",
        "tags": [
          "SupportController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Full message thread"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "telegramId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "SupportController.thread"
      }
    },
    "/support/conversations": {
      "get": {
        "x-controller-name": "SupportController",
        "x-operation-name": "conversations",
        "tags": [
          "SupportController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "List of support conversations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "SupportController.conversations"
      }
    },
    "/support/messages/inbound": {
      "post": {
        "x-controller-name": "SupportController",
        "x-operation-name": "inbound",
        "tags": [
          "SupportController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Message saved"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "SupportController.inbound"
      }
    },
    "/support/reply": {
      "post": {
        "x-controller-name": "SupportController",
        "x-operation-name": "reply",
        "tags": [
          "SupportController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Reply sent"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "SupportController.reply"
      }
    },
    "/support/unread-count": {
      "get": {
        "x-controller-name": "SupportController",
        "x-operation-name": "unreadCount",
        "tags": [
          "SupportController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Number of conversations with unread messages"
                }
              }
            }
          }
        },
        "operationId": "SupportController.unreadCount"
      }
    },
    "/telegram/order-webhook": {
      "post": {
        "x-controller-name": "TelegramOrderWebhookController",
        "x-operation-name": "handleWebhook",
        "tags": [
          "TelegramOrderWebhookController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "OK"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "TelegramOrderWebhookController.handleWebhook"
      }
    },
    "/telegram-auth": {
      "post": {
        "x-controller-name": "TelegramAuthController",
        "x-operation-name": "telegramAuth",
        "tags": [
          "TelegramAuthController"
        ],
        "responses": {
          "200": {
            "description": "Telegram authentication successful",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "token": {
                      "type": "string"
                    },
                    "userProfile": {
                      "type": "object"
                    },
                    "wallet": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "initData"
                ],
                "properties": {
                  "initData": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "TelegramAuthController.telegramAuth"
      }
    },
    "/telegram-user-info": {
      "post": {
        "x-controller-name": "TelegramAuthController",
        "x-operation-name": "telegramUserInfo",
        "tags": [
          "TelegramAuthController"
        ],
        "responses": {
          "200": {
            "description": "Get user info by Telegram ID",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "telegramId"
                ],
                "properties": {
                  "telegramId": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "TelegramAuthController.telegramUserInfo"
      }
    },
    "/transactions/count": {
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "count",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Transaction model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Transaction.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Transaction>"
                }
              }
            }
          }
        ],
        "operationId": "TransactionController.count"
      }
    },
    "/transactions/deposit-request": {
      "post": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "requestDeposit",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Deposit request created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "amount",
                  "bankId",
                  "reference"
                ],
                "properties": {
                  "amount": {
                    "type": "number",
                    "minimum": 0.01
                  },
                  "bankId": {
                    "type": "number"
                  },
                  "reference": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "metadata": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "operationId": "TransactionController.requestDeposit"
      }
    },
    "/transactions/my-transactions": {
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "getMyTransactions",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Current user transaction history with pagination",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TransactionWithRelations"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "totalCount": {
                          "type": "number"
                        },
                        "limit": {
                          "type": "number"
                        },
                        "offset": {
                          "type": "number"
                        },
                        "page": {
                          "type": "number"
                        },
                        "totalPages": {
                          "type": "number"
                        },
                        "hasMore": {
                          "type": "boolean"
                        }
                      }
                    },
                    "filters": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "minAmount",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "maxAmount",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "dateFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dateTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sortOrder",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "TransactionController.getMyTransactions"
      }
    },
    "/transactions/payment-methods": {
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "getPaymentMethods",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Get all payment methods",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "TransactionController.getPaymentMethods"
      }
    },
    "/transactions/pending-deposits": {
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "getPendingDeposits",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Pending deposit transactions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TransactionWithRelations"
                  }
                }
              }
            }
          }
        },
        "operationId": "TransactionController.getPendingDeposits"
      }
    },
    "/transactions/purchase": {
      "post": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "createPurchase",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Create purchase transaction",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "userId",
                  "amount",
                  "description"
                ],
                "properties": {
                  "userId": {
                    "type": "number"
                  },
                  "amount": {
                    "type": "number",
                    "minimum": 0.01
                  },
                  "description": {
                    "type": "string"
                  },
                  "reference": {
                    "type": "string"
                  },
                  "metadata": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "operationId": "TransactionController.createPurchase"
      }
    },
    "/transactions/refund": {
      "post": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "createRefund",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Create refund transaction",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "userId",
                  "amount",
                  "description"
                ],
                "properties": {
                  "userId": {
                    "type": "number"
                  },
                  "amount": {
                    "type": "number",
                    "minimum": 0.01
                  },
                  "description": {
                    "type": "string"
                  },
                  "reference": {
                    "type": "string"
                  },
                  "originalTransactionId": {
                    "type": "string"
                  },
                  "metadata": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "operationId": "TransactionController.createRefund"
      }
    },
    "/transactions/statistics": {
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "getTransactionStatistics",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Transaction statistics",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "totalTransactions": {
                      "type": "number"
                    },
                    "totalAmount": {
                      "type": "number"
                    },
                    "totalDeposits": {
                      "type": "number"
                    },
                    "totalWithdrawals": {
                      "type": "number"
                    },
                    "totalTransfers": {
                      "type": "number"
                    },
                    "totalRefunds": {
                      "type": "number"
                    },
                    "byStatus": {
                      "type": "object"
                    },
                    "byType": {
                      "type": "object"
                    },
                    "byPaymentMethod": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "TransactionController.getTransactionStatistics"
      }
    },
    "/transactions/statuses": {
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "getTransactionStatuses",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Get all transaction statuses",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "TransactionController.getTransactionStatuses"
      }
    },
    "/transactions/transfer": {
      "post": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "createTransfer",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Create transfer transaction",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "senderTransaction": {
                      "$ref": "#/components/schemas/Transaction"
                    },
                    "receiverTransaction": {
                      "$ref": "#/components/schemas/Transaction"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "senderId",
                  "recipientId",
                  "amount"
                ],
                "properties": {
                  "senderId": {
                    "type": "number"
                  },
                  "recipientId": {
                    "type": "number"
                  },
                  "amount": {
                    "type": "number",
                    "minimum": 0.01
                  },
                  "description": {
                    "type": "string"
                  },
                  "reference": {
                    "type": "string"
                  },
                  "metadata": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "operationId": "TransactionController.createTransfer"
      }
    },
    "/transactions/types": {
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "getTransactionTypes",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Get all transaction types",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "TransactionController.getTransactionTypes"
      }
    },
    "/transactions/user/{userId}": {
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "getUserTransactions",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "User transaction history with pagination",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TransactionWithRelations"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "totalCount": {
                          "type": "number"
                        },
                        "limit": {
                          "type": "number"
                        },
                        "offset": {
                          "type": "number"
                        },
                        "page": {
                          "type": "number"
                        },
                        "totalPages": {
                          "type": "number"
                        },
                        "hasMore": {
                          "type": "boolean"
                        }
                      }
                    },
                    "filters": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "minAmount",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "maxAmount",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "dateFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dateTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sortOrder",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "TransactionController.getUserTransactions"
      }
    },
    "/transactions/{id}/approve": {
      "patch": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "approveDeposit",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Transaction approved"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "TransactionController.approveDeposit"
      }
    },
    "/transactions/{customerId}/deposit": {
      "post": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "createDepositForCustomer",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Create deposit transaction for customer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "amount",
                  "paymentMethod"
                ],
                "properties": {
                  "amount": {
                    "type": "number",
                    "minimum": 0.01
                  },
                  "paymentMethod": {
                    "type": "string",
                    "enum": [
                      "MANUAL_BANK",
                      "CHAPA_GATEWAY",
                      "WALLET_TRANSFER",
                      "CASH",
                      "ADMIN_ADJUSTMENT"
                    ]
                  },
                  "description": {
                    "type": "string"
                  },
                  "reference": {
                    "type": "string"
                  },
                  "metadata": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "TransactionController.createDepositForCustomer"
      }
    },
    "/transactions/{id}/reject": {
      "patch": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "rejectDeposit",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Transaction rejected"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "TransactionController.rejectDeposit"
      }
    },
    "/transactions/{id}/status": {
      "patch": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "updateTransactionStatus",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Transaction status updated"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "PENDING",
                      "COMPLETED",
                      "FAILED",
                      "CANCELLED",
                      "REJECTED"
                    ]
                  },
                  "reason": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "TransactionController.updateTransactionStatus"
      }
    },
    "/transactions/{customerId}/withdraw": {
      "post": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "createWithdrawalForCustomer",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Create withdrawal transaction for customer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "amount",
                  "paymentMethod"
                ],
                "properties": {
                  "amount": {
                    "type": "number",
                    "minimum": 0.01
                  },
                  "paymentMethod": {
                    "type": "string",
                    "enum": [
                      "MANUAL_BANK",
                      "CHAPA_GATEWAY",
                      "WALLET_TRANSFER",
                      "CASH",
                      "ADMIN_ADJUSTMENT"
                    ]
                  },
                  "description": {
                    "type": "string"
                  },
                  "reference": {
                    "type": "string"
                  },
                  "recipientInfo": {
                    "type": "string"
                  },
                  "metadata": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "TransactionController.createWithdrawalForCustomer"
      }
    },
    "/transactions/{id}": {
      "patch": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "updateById",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Transaction PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "TransactionController.updateById"
      },
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "findById",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Transaction model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction.Filter"
                }
              }
            }
          }
        ],
        "operationId": "TransactionController.findById"
      },
      "delete": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "deleteById",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Transaction DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "TransactionController.deleteById"
      }
    },
    "/transactions": {
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "find",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Array of Transaction model instances with pagination",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TransactionWithRelations"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "totalCount": {
                          "type": "number"
                        },
                        "limit": {
                          "type": "number"
                        },
                        "offset": {
                          "type": "number"
                        },
                        "page": {
                          "type": "number"
                        },
                        "totalPages": {
                          "type": "number"
                        },
                        "hasMore": {
                          "type": "boolean"
                        }
                      }
                    },
                    "filters": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "paymentMethod",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "recipientUserId",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "minAmount",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "maxAmount",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "amount",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "customerName",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateRange",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dateTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sortOrder",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "TransactionController.find"
      }
    },
    "/users/check-duplicate": {
      "post": {
        "x-controller-name": "UserController",
        "x-operation-name": "checkDuplicate",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Check for duplicate users"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "UserController.checkDuplicate"
      }
    },
    "/users/customers/telegram-ids": {
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "getTelegramIds",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Get total customer count and their telegram IDs with pagination",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "totalCount": {
                      "type": "number"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "telegramId": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "number"
                        },
                        "offset": {
                          "type": "number"
                        },
                        "hasMore": {
                          "type": "boolean"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "operationId": "UserController.getTelegramIds"
      }
    },
    "/users/customers/{id}/wallet": {
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "getCustomerWallet",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Get customer wallet information",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/definitions/Wallet"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "UserController.getCustomerWallet"
      }
    },
    "/users/customers/{id}": {
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "getCustomerById",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Get customer by ID with wallet information",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "UserController.getCustomerById"
      }
    },
    "/users/customers": {
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "findCustomers",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Get all customers with their wallet information",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "number"
                      },
                      "telegramId": {
                        "type": "string"
                      },
                      "telegramUsername": {
                        "type": "string"
                      },
                      "email": {
                        "type": "string"
                      },
                      "firstName": {
                        "type": "string"
                      },
                      "lastName": {
                        "type": "string"
                      },
                      "username": {
                        "type": "string"
                      },
                      "mobilePhone": {
                        "type": "string"
                      },
                      "permissions": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "userType": {
                        "type": "string"
                      },
                      "isActive": {
                        "type": "boolean"
                      },
                      "createdAt": {
                        "type": "string"
                      },
                      "updatedAt": {
                        "type": "string"
                      },
                      "wallet": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "number"
                          },
                          "userId": {
                            "type": "number"
                          },
                          "balanceBirr": {
                            "type": "number"
                          },
                          "createdAt": {
                            "type": "string"
                          },
                          "updatedAt": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "operationId": "UserController.findCustomers"
      }
    },
    "/users/customers-with-wallets": {
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "findCustomersWithWallets",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Get all customers with their wallet information (with pagination and filters)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "totalCount": {
                          "type": "number"
                        },
                        "limit": {
                          "type": "number"
                        },
                        "offset": {
                          "type": "number"
                        },
                        "page": {
                          "type": "number"
                        },
                        "totalPages": {
                          "type": "number"
                        },
                        "hasMore": {
                          "type": "boolean"
                        }
                      }
                    },
                    "filters": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "isActive",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "hasWallet",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "minBalance",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "maxBalance",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sortOrder",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dateTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "operationId": "UserController.findCustomersWithWallets"
      }
    },
    "/users/me/change-password": {
      "post": {
        "x-controller-name": "UserController",
        "x-operation-name": "changeMyPassword",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Change the signed-in user's password"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "currentPassword",
                  "newPassword"
                ],
                "properties": {
                  "currentPassword": {
                    "type": "string"
                  },
                  "newPassword": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "UserController.changeMyPassword"
      }
    },
    "/users/me": {
      "patch": {
        "x-controller-name": "UserController",
        "x-operation-name": "updateMe",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Update the signed-in user's own profile"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "firstName": {
                    "type": "string"
                  },
                  "lastName": {
                    "type": "string"
                  },
                  "username": {
                    "type": "string"
                  },
                  "mobilePhone": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "UserController.updateMe"
      },
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "me",
        "tags": [
          "UserController"
        ],
        "security": [
          {
            "jwt": []
          }
        ],
        "responses": {
          "200": {
            "description": "The current user profile",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/definitions/User"
                }
              }
            }
          }
        },
        "operationId": "UserController.me"
      }
    },
    "/users/staff": {
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "findStaff",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Get all staff members",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/User"
                  }
                }
              }
            }
          }
        },
        "operationId": "UserController.findStaff"
      }
    },
    "/users/{id}/activity-logs": {
      "post": {
        "x-controller-name": "UserActivityLogController",
        "x-operation-name": "create",
        "tags": [
          "UserActivityLogController"
        ],
        "responses": {
          "200": {
            "description": "User model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActivityLog"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewActivityLogInUser"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "UserActivityLogController.create"
      },
      "patch": {
        "x-controller-name": "UserActivityLogController",
        "x-operation-name": "patch",
        "tags": [
          "UserActivityLogController"
        ],
        "responses": {
          "200": {
            "description": "User.ActivityLog PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "ActivityLog.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<ActivityLog>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityLogPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "UserActivityLogController.patch"
      },
      "get": {
        "x-controller-name": "UserActivityLogController",
        "x-operation-name": "find",
        "tags": [
          "UserActivityLogController"
        ],
        "responses": {
          "200": {
            "description": "Array of User has many ActivityLog",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ActivityLog"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        ],
        "operationId": "UserActivityLogController.find"
      },
      "delete": {
        "x-controller-name": "UserActivityLogController",
        "x-operation-name": "delete",
        "tags": [
          "UserActivityLogController"
        ],
        "responses": {
          "200": {
            "description": "User.ActivityLog DELETE success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "ActivityLog.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<ActivityLog>"
                }
              }
            }
          }
        ],
        "operationId": "UserActivityLogController.delete"
      }
    },
    "/users/{id}": {
      "patch": {
        "x-controller-name": "UserController",
        "x-operation-name": "updateUser",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "User updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/definitions/User"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "firstName": {
                    "type": "string"
                  },
                  "lastName": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "username": {
                    "type": "string"
                  },
                  "mobilePhone": {
                    "type": "string"
                  },
                  "permissions": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "isActive": {
                    "type": "boolean"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "UserController.updateUser"
      },
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "getUserById",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "User by ID",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/definitions/User"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "UserController.getUserById"
      },
      "delete": {
        "x-controller-name": "UserController",
        "x-operation-name": "deleteUser",
        "tags": [
          "UserController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "User deleted successfully"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "UserController.deleteUser"
      }
    },
    "/wallets/count": {
      "get": {
        "x-controller-name": "WalletController",
        "x-operation-name": "count",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "200": {
            "description": "Wallet model count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Wallet.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Wallet>"
                }
              }
            }
          }
        ],
        "operationId": "WalletController.count"
      }
    },
    "/wallets/create-for-user": {
      "post": {
        "x-controller-name": "WalletController",
        "x-operation-name": "createWalletForUser",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "200": {
            "description": "Create wallet for existing user",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Wallet"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "userId"
                ],
                "properties": {
                  "userId": {
                    "type": "number"
                  },
                  "initialBalance": {
                    "type": "number",
                    "default": 0
                  }
                }
              }
            }
          }
        },
        "operationId": "WalletController.createWalletForUser"
      }
    },
    "/wallets/my-wallet": {
      "get": {
        "x-controller-name": "WalletController",
        "x-operation-name": "getMyWallet",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "200": {
            "description": "Current user wallet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletWithRelations"
                }
              }
            }
          }
        },
        "operationId": "WalletController.getMyWallet"
      }
    },
    "/wallets/user/{userId}": {
      "get": {
        "x-controller-name": "WalletController",
        "x-operation-name": "getWalletByUserId",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "200": {
            "description": "Get wallet by user ID",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "WalletController.getWalletByUserId"
      }
    },
    "/wallets/with-users": {
      "get": {
        "x-controller-name": "WalletController",
        "x-operation-name": "findWalletsWithUsers",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "200": {
            "description": "Array of Wallet model instances with user information",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WalletWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Wallet.Filter"
                }
              }
            }
          }
        ],
        "operationId": "WalletController.findWalletsWithUsers"
      }
    },
    "/wallets/{id}/add-balance": {
      "patch": {
        "x-controller-name": "WalletController",
        "x-operation-name": "addBalance",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "200": {
            "description": "Add balance to wallet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Wallet"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "amount"
                ],
                "properties": {
                  "amount": {
                    "type": "number",
                    "minimum": 0.01
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "WalletController.addBalance"
      }
    },
    "/wallets/{id}/deduct-balance": {
      "patch": {
        "x-controller-name": "WalletController",
        "x-operation-name": "deductBalance",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "200": {
            "description": "Deduct balance from wallet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Wallet"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "amount"
                ],
                "properties": {
                  "amount": {
                    "type": "number",
                    "minimum": 0.01
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "WalletController.deductBalance"
      }
    },
    "/wallets/{id}": {
      "put": {
        "x-controller-name": "WalletController",
        "x-operation-name": "replaceById",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Wallet PUT success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Wallet"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "WalletController.replaceById"
      },
      "patch": {
        "x-controller-name": "WalletController",
        "x-operation-name": "updateById",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Wallet PATCH success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WalletPartial"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "WalletController.updateById"
      },
      "get": {
        "x-controller-name": "WalletController",
        "x-operation-name": "findById",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "200": {
            "description": "Wallet model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WalletWithRelations"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Wallet.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "WalletController.findById"
      },
      "delete": {
        "x-controller-name": "WalletController",
        "x-operation-name": "deleteById",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Wallet DELETE success"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "number"
            },
            "required": true
          }
        ],
        "operationId": "WalletController.deleteById"
      }
    },
    "/wallets": {
      "post": {
        "x-controller-name": "WalletController",
        "x-operation-name": "create",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "200": {
            "description": "Wallet model instance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Wallet"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewWallet"
              }
            }
          }
        },
        "operationId": "WalletController.create"
      },
      "patch": {
        "x-controller-name": "WalletController",
        "x-operation-name": "updateAll",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "200": {
            "description": "Wallet PATCH success count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/loopback.Count"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "where",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Wallet.WhereFilter",
                  "additionalProperties": true,
                  "x-typescript-type": "@loopback/repository#Where<Wallet>"
                }
              }
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WalletPartial"
              }
            }
          }
        },
        "operationId": "WalletController.updateAll"
      },
      "get": {
        "x-controller-name": "WalletController",
        "x-operation-name": "find",
        "tags": [
          "WalletController"
        ],
        "responses": {
          "200": {
            "description": "Array of Wallet model instances",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WalletWithRelations"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Wallet.Filter"
                }
              }
            }
          }
        ],
        "operationId": "WalletController.find"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "jwt": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "schemas": {
      "Wallet": {
        "title": "Wallet",
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "balanceBirr": {
            "type": "number",
            "minimum": 0
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          }
        },
        "additionalProperties": true
      },
      "NewWallet": {
        "title": "NewWallet",
        "type": "object",
        "description": "(tsType: Omit<Wallet, 'id'>, schemaOptions: { title: 'NewWallet', exclude: [ 'id' ] })",
        "properties": {
          "balanceBirr": {
            "type": "number",
            "minimum": 0
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          }
        },
        "additionalProperties": true,
        "x-typescript-type": "Omit<Wallet, 'id'>"
      },
      "BankWithRelations": {
        "title": "BankWithRelations",
        "type": "object",
        "description": "(tsType: BankWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "bank_name": {
            "type": "string"
          },
          "shortName": {
            "type": "string"
          },
          "logo": {
            "type": "string"
          },
          "account_holder": {
            "type": "string"
          },
          "accountNumber": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "suspended",
              "pending"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "bank_name",
          "accountNumber"
        ],
        "additionalProperties": false,
        "x-typescript-type": "BankWithRelations"
      },
      "ActivityLogWithRelations": {
        "title": "ActivityLogWithRelations",
        "type": "object",
        "description": "(tsType: ActivityLogWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "action": {
            "type": "string"
          },
          "module": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          },
          "user": {
            "$ref": "#/components/schemas/UserWithRelations"
          }
        },
        "required": [
          "action",
          "module"
        ],
        "additionalProperties": false,
        "x-typescript-type": "ActivityLogWithRelations"
      },
      "ReceiptWithRelations": {
        "title": "ReceiptWithRelations",
        "type": "object",
        "description": "(tsType: ReceiptWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "receiptId": {
            "type": "string"
          },
          "amount": {
            "type": "number",
            "minimum": 0.01
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "APPROVED",
              "REJECTED",
              "UNDER_REVIEW"
            ]
          },
          "customerName": {
            "type": "string"
          },
          "customerPhone": {
            "type": "string"
          },
          "customerEmail": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "screenshotPath": {
            "type": "string"
          },
          "adminNotes": {
            "type": "string"
          },
          "rejectionReason": {
            "type": "string"
          },
          "processedByUserId": {
            "type": "number"
          },
          "processedAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          },
          "bankId": {
            "type": "number"
          },
          "transactionId": {
            "type": "number"
          },
          "processedBy": {
            "type": "number"
          },
          "user": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "bank": {
            "$ref": "#/components/schemas/BankWithRelations"
          },
          "transaction": {
            "$ref": "#/components/schemas/TransactionWithRelations"
          }
        },
        "required": [
          "receiptId",
          "amount",
          "status",
          "customerName",
          "screenshotPath"
        ],
        "additionalProperties": true,
        "x-typescript-type": "ReceiptWithRelations"
      },
      "TransactionWithRelations": {
        "title": "TransactionWithRelations",
        "type": "object",
        "description": "(tsType: TransactionWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "transactionId": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "DEPOSIT",
              "WITHDRAWAL",
              "PURCHASE",
              "TRANSFER_OUT",
              "TRANSFER_IN",
              "REFUND",
              "ADJUSTMENT"
            ]
          },
          "amount": {
            "type": "number",
            "minimum": 0.01
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "COMPLETED",
              "FAILED",
              "CANCELLED",
              "REJECTED"
            ]
          },
          "paymentMethod": {
            "type": "string",
            "enum": [
              "MANUAL_BANK",
              "CHAPA_GATEWAY",
              "WALLET_TRANSFER",
              "CASH",
              "ADMIN_ADJUSTMENT"
            ]
          },
          "description": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "recipientUserId": {
            "type": "number"
          },
          "recipientInfo": {
            "type": "string"
          },
          "balanceBefore": {
            "type": "number"
          },
          "balanceAfter": {
            "type": "number"
          },
          "metadata": {
            "type": "object"
          },
          "processedByUserId": {
            "type": "number"
          },
          "processedAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          },
          "recipientUser": {
            "type": "number"
          },
          "processedBy": {
            "type": "number"
          },
          "bankId": {
            "type": "number"
          },
          "receiptId": {
            "type": "number"
          },
          "user": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "recipient": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "bank": {
            "$ref": "#/components/schemas/BankWithRelations"
          },
          "receipt": {
            "$ref": "#/components/schemas/ReceiptWithRelations"
          }
        },
        "required": [
          "transactionId",
          "type",
          "amount",
          "status",
          "paymentMethod"
        ],
        "additionalProperties": true,
        "x-typescript-type": "TransactionWithRelations"
      },
      "UserWithRelations": {
        "title": "UserWithRelations",
        "type": "object",
        "description": "(tsType: UserWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "telegramId": {
            "type": "string"
          },
          "telegramUsername": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "username": {
            "type": "string"
          },
          "mobilePhone": {
            "type": "string"
          },
          "language": {
            "type": "string",
            "enum": [
              "am",
              "en"
            ]
          },
          "permissions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "userType": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "activityLogs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ActivityLogWithRelations"
            }
          },
          "wallet": {
            "$ref": "#/components/schemas/WalletWithRelations"
          },
          "transactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionWithRelations"
            }
          }
        },
        "required": [
          "firstName"
        ],
        "additionalProperties": true,
        "x-typescript-type": "UserWithRelations"
      },
      "WalletWithRelations": {
        "title": "WalletWithRelations",
        "type": "object",
        "description": "(tsType: WalletWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "balanceBirr": {
            "type": "number",
            "minimum": 0
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          },
          "user": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "transactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionWithRelations"
            }
          }
        },
        "additionalProperties": true,
        "x-typescript-type": "WalletWithRelations"
      },
      "WalletPartial": {
        "title": "WalletPartial",
        "type": "object",
        "description": "(tsType: Partial<Wallet>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "balanceBirr": {
            "type": "number",
            "minimum": 0
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          }
        },
        "additionalProperties": true,
        "x-typescript-type": "Partial<Wallet>"
      },
      "User": {
        "title": "User",
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "telegramId": {
            "type": "string"
          },
          "telegramUsername": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "username": {
            "type": "string"
          },
          "mobilePhone": {
            "type": "string"
          },
          "language": {
            "type": "string",
            "enum": [
              "am",
              "en"
            ]
          },
          "permissions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "userType": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "firstName"
        ],
        "additionalProperties": true
      },
      "Date": {},
      "ActivityLog": {
        "title": "ActivityLog",
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "action": {
            "type": "string"
          },
          "module": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          }
        },
        "required": [
          "action",
          "module"
        ],
        "additionalProperties": false
      },
      "NewActivityLogInUser": {
        "title": "NewActivityLogInUser",
        "type": "object",
        "description": "(tsType: @loopback/repository-json-schema#Optional<Omit<ActivityLog, 'id'>, 'userId'>, schemaOptions: { title: 'NewActivityLogInUser', exclude: [ 'id' ], optional: [ 'userId' ] })",
        "properties": {
          "action": {
            "type": "string"
          },
          "module": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          }
        },
        "required": [
          "action",
          "module"
        ],
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository-json-schema#Optional<Omit<ActivityLog, 'id'>, 'userId'>"
      },
      "ActivityLogPartial": {
        "title": "ActivityLogPartial",
        "type": "object",
        "description": "(tsType: Partial<ActivityLog>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "action": {
            "type": "string"
          },
          "module": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<ActivityLog>"
      },
      "Transaction": {
        "title": "Transaction",
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "transactionId": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "DEPOSIT",
              "WITHDRAWAL",
              "PURCHASE",
              "TRANSFER_OUT",
              "TRANSFER_IN",
              "REFUND",
              "ADJUSTMENT"
            ]
          },
          "amount": {
            "type": "number",
            "minimum": 0.01
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "COMPLETED",
              "FAILED",
              "CANCELLED",
              "REJECTED"
            ]
          },
          "paymentMethod": {
            "type": "string",
            "enum": [
              "MANUAL_BANK",
              "CHAPA_GATEWAY",
              "WALLET_TRANSFER",
              "CASH",
              "ADMIN_ADJUSTMENT"
            ]
          },
          "description": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "recipientUserId": {
            "type": "number"
          },
          "recipientInfo": {
            "type": "string"
          },
          "balanceBefore": {
            "type": "number"
          },
          "balanceAfter": {
            "type": "number"
          },
          "metadata": {
            "type": "object"
          },
          "processedByUserId": {
            "type": "number"
          },
          "processedAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          },
          "recipientUser": {
            "type": "number"
          },
          "processedBy": {
            "type": "number"
          },
          "bankId": {
            "type": "number"
          },
          "receiptId": {
            "type": "number"
          }
        },
        "required": [
          "transactionId",
          "type",
          "amount",
          "status",
          "paymentMethod"
        ],
        "additionalProperties": true
      },
      "TransactionPartial": {
        "title": "TransactionPartial",
        "type": "object",
        "description": "(tsType: Partial<Transaction>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "transactionId": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "DEPOSIT",
              "WITHDRAWAL",
              "PURCHASE",
              "TRANSFER_OUT",
              "TRANSFER_IN",
              "REFUND",
              "ADJUSTMENT"
            ]
          },
          "amount": {
            "type": "number",
            "minimum": 0.01
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "COMPLETED",
              "FAILED",
              "CANCELLED",
              "REJECTED"
            ]
          },
          "paymentMethod": {
            "type": "string",
            "enum": [
              "MANUAL_BANK",
              "CHAPA_GATEWAY",
              "WALLET_TRANSFER",
              "CASH",
              "ADMIN_ADJUSTMENT"
            ]
          },
          "description": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "recipientUserId": {
            "type": "number"
          },
          "recipientInfo": {
            "type": "string"
          },
          "balanceBefore": {
            "type": "number"
          },
          "balanceAfter": {
            "type": "number"
          },
          "metadata": {
            "type": "object"
          },
          "processedByUserId": {
            "type": "number"
          },
          "processedAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          },
          "recipientUser": {
            "type": "number"
          },
          "processedBy": {
            "type": "number"
          },
          "bankId": {
            "type": "number"
          },
          "receiptId": {
            "type": "number"
          }
        },
        "additionalProperties": true,
        "x-typescript-type": "Partial<Transaction>"
      },
      "Service": {
        "title": "Service",
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "platform": {
            "type": "string"
          },
          "service_type": {
            "type": "string",
            "enum": [
              "followers",
              "likes",
              "views",
              "comments",
              "reactions",
              "members",
              "share"
            ]
          },
          "providerId": {
            "type": "number"
          },
          "service_id": {
            "type": "string"
          },
          "provider_rate_usd": {
            "type": "number"
          },
          "selling_rate_etb": {
            "type": "number"
          },
          "exchange_rate": {
            "type": "number"
          },
          "min": {
            "type": "number"
          },
          "max": {
            "type": "number"
          },
          "provider_cost_etb_per_1000": {
            "type": "number"
          },
          "profit_etb_per_1000": {
            "type": "number"
          },
          "actual_profit_margin_percentage": {
            "type": "number"
          },
          "rate_dollar": {
            "type": "number"
          },
          "rate_birr": {
            "type": "number"
          },
          "description": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "active": {
            "type": "boolean"
          },
          "isManual": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "platform",
          "service_type",
          "service_id",
          "provider_rate_usd",
          "selling_rate_etb",
          "min",
          "max"
        ],
        "additionalProperties": false
      },
      "NewService": {
        "title": "NewService",
        "type": "object",
        "description": "(tsType: Omit<Service, 'id' | 'createdAt' | 'updatedAt'>, schemaOptions: { title: 'NewService', exclude: [ 'id', 'createdAt', 'updatedAt' ] })",
        "properties": {
          "platform": {
            "type": "string"
          },
          "service_type": {
            "type": "string",
            "enum": [
              "followers",
              "likes",
              "views",
              "comments",
              "reactions",
              "members",
              "share"
            ]
          },
          "providerId": {
            "type": "number"
          },
          "service_id": {
            "type": "string"
          },
          "provider_rate_usd": {
            "type": "number"
          },
          "selling_rate_etb": {
            "type": "number"
          },
          "exchange_rate": {
            "type": "number"
          },
          "min": {
            "type": "number"
          },
          "max": {
            "type": "number"
          },
          "provider_cost_etb_per_1000": {
            "type": "number"
          },
          "profit_etb_per_1000": {
            "type": "number"
          },
          "actual_profit_margin_percentage": {
            "type": "number"
          },
          "rate_dollar": {
            "type": "number"
          },
          "rate_birr": {
            "type": "number"
          },
          "description": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "active": {
            "type": "boolean"
          },
          "isManual": {
            "type": "boolean"
          }
        },
        "required": [
          "platform",
          "service_type",
          "service_id",
          "provider_rate_usd",
          "selling_rate_etb",
          "min",
          "max"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Service, 'id' | 'createdAt' | 'updatedAt'>"
      },
      "ProviderWithRelations": {
        "title": "ProviderWithRelations",
        "type": "object",
        "description": "(tsType: ProviderWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "api": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "name",
          "api",
          "key"
        ],
        "additionalProperties": false,
        "x-typescript-type": "ProviderWithRelations"
      },
      "StaffWithRelations": {
        "title": "StaffWithRelations",
        "type": "object",
        "description": "(tsType: StaffWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "phone": {
            "type": "string",
            "nullable": true,
            "maxLength": 30
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false,
        "x-typescript-type": "StaffWithRelations"
      },
      "OrderWithRelations": {
        "title": "OrderWithRelations",
        "type": "object",
        "description": "(tsType: OrderWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "userId": {
            "type": "number"
          },
          "serviceId": {
            "type": "number"
          },
          "transactionId": {
            "type": "number"
          },
          "providerId": {
            "type": "number"
          },
          "orderNumber": {
            "type": "string"
          },
          "targetUrl": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "unitPriceEtb": {
            "type": "number"
          },
          "totalPriceEtb": {
            "type": "number"
          },
          "providerCostUsd": {
            "type": "number"
          },
          "profitEtb": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "processing",
              "in_progress",
              "completed",
              "cancelled",
              "failed",
              "refunded",
              "partial"
            ]
          },
          "paymentStatus": {
            "type": "string",
            "enum": [
              "pending",
              "paid",
              "failed",
              "refunded"
            ]
          },
          "providerOrderId": {
            "type": "string"
          },
          "providerServiceId": {
            "type": "string"
          },
          "lastRefillId": {
            "type": "string"
          },
          "receiptPath": {
            "type": "string"
          },
          "receiptOriginalName": {
            "type": "string"
          },
          "startCount": {
            "type": "number"
          },
          "remains": {
            "type": "number"
          },
          "notes": {
            "type": "string"
          },
          "failureReason": {
            "type": "string"
          },
          "startedAt": {
            "type": "string",
            "format": "date-time"
          },
          "completedAt": {
            "type": "string",
            "format": "date-time"
          },
          "approvedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "manualUpdatedBy": {
            "type": "number",
            "nullable": true
          },
          "manualUpdatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "staffId": {
            "type": "object",
            "nullable": true
          },
          "packageTierId": {
            "type": "number"
          },
          "channel": {
            "type": "string"
          },
          "createdByAdminId": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "user": {
            "$ref": "#/components/schemas/UserWithRelations"
          },
          "service": {
            "$ref": "#/components/schemas/ServiceWithRelations"
          },
          "transaction": {
            "$ref": "#/components/schemas/TransactionWithRelations"
          },
          "provider": {
            "$ref": "#/components/schemas/ProviderWithRelations"
          },
          "staff": {
            "$ref": "#/components/schemas/StaffWithRelations"
          }
        },
        "required": [
          "orderNumber",
          "targetUrl",
          "quantity",
          "unitPriceEtb",
          "totalPriceEtb",
          "providerCostUsd",
          "profitEtb"
        ],
        "additionalProperties": false,
        "x-typescript-type": "OrderWithRelations"
      },
      "ServiceWithRelations": {
        "title": "ServiceWithRelations",
        "type": "object",
        "description": "(tsType: ServiceWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "platform": {
            "type": "string"
          },
          "service_type": {
            "type": "string",
            "enum": [
              "followers",
              "likes",
              "views",
              "comments",
              "reactions",
              "members",
              "share"
            ]
          },
          "providerId": {
            "type": "number"
          },
          "service_id": {
            "type": "string"
          },
          "provider_rate_usd": {
            "type": "number"
          },
          "selling_rate_etb": {
            "type": "number"
          },
          "exchange_rate": {
            "type": "number"
          },
          "min": {
            "type": "number"
          },
          "max": {
            "type": "number"
          },
          "provider_cost_etb_per_1000": {
            "type": "number"
          },
          "profit_etb_per_1000": {
            "type": "number"
          },
          "actual_profit_margin_percentage": {
            "type": "number"
          },
          "rate_dollar": {
            "type": "number"
          },
          "rate_birr": {
            "type": "number"
          },
          "description": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "active": {
            "type": "boolean"
          },
          "isManual": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "provider": {
            "$ref": "#/components/schemas/ProviderWithRelations"
          },
          "orders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderWithRelations"
            }
          }
        },
        "required": [
          "platform",
          "service_type",
          "service_id",
          "provider_rate_usd",
          "selling_rate_etb",
          "min",
          "max"
        ],
        "additionalProperties": false,
        "x-typescript-type": "ServiceWithRelations"
      },
      "ServicePartial": {
        "title": "ServicePartial",
        "type": "object",
        "description": "(tsType: Partial<Service>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "platform": {
            "type": "string"
          },
          "service_type": {
            "type": "string",
            "enum": [
              "followers",
              "likes",
              "views",
              "comments",
              "reactions",
              "members",
              "share"
            ]
          },
          "providerId": {
            "type": "number"
          },
          "service_id": {
            "type": "string"
          },
          "provider_rate_usd": {
            "type": "number"
          },
          "selling_rate_etb": {
            "type": "number"
          },
          "exchange_rate": {
            "type": "number"
          },
          "min": {
            "type": "number"
          },
          "max": {
            "type": "number"
          },
          "provider_cost_etb_per_1000": {
            "type": "number"
          },
          "profit_etb_per_1000": {
            "type": "number"
          },
          "actual_profit_margin_percentage": {
            "type": "number"
          },
          "rate_dollar": {
            "type": "number"
          },
          "rate_birr": {
            "type": "number"
          },
          "description": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "active": {
            "type": "boolean"
          },
          "isManual": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Service>"
      },
      "Receipt": {
        "title": "Receipt",
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "receiptId": {
            "type": "string"
          },
          "amount": {
            "type": "number",
            "minimum": 0.01
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "APPROVED",
              "REJECTED",
              "UNDER_REVIEW"
            ]
          },
          "customerName": {
            "type": "string"
          },
          "customerPhone": {
            "type": "string"
          },
          "customerEmail": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "screenshotPath": {
            "type": "string"
          },
          "adminNotes": {
            "type": "string"
          },
          "rejectionReason": {
            "type": "string"
          },
          "processedByUserId": {
            "type": "number"
          },
          "processedAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          },
          "bankId": {
            "type": "number"
          },
          "transactionId": {
            "type": "number"
          },
          "processedBy": {
            "type": "number"
          }
        },
        "required": [
          "receiptId",
          "amount",
          "status",
          "customerName",
          "screenshotPath"
        ],
        "additionalProperties": true
      },
      "NewReceipt": {
        "title": "NewReceipt",
        "type": "object",
        "description": "(tsType: Omit<Receipt, 'id' | 'receiptId' | 'status' | 'transactionId' | 'processedByUserId' | 'processedAt' | 'createdAt' | 'updatedAt'>, schemaOptions: { title: 'NewReceipt', exclude: [ 'id', 'receiptId', 'status', 'transactionId', 'processedByUserId', 'processedAt', 'createdAt', 'updatedAt' ] })",
        "properties": {
          "amount": {
            "type": "number",
            "minimum": 0.01
          },
          "customerName": {
            "type": "string"
          },
          "customerPhone": {
            "type": "string"
          },
          "customerEmail": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "screenshotPath": {
            "type": "string"
          },
          "adminNotes": {
            "type": "string"
          },
          "rejectionReason": {
            "type": "string"
          },
          "userId": {
            "type": "number"
          },
          "bankId": {
            "type": "number"
          },
          "processedBy": {
            "type": "number"
          }
        },
        "required": [
          "amount",
          "customerName",
          "screenshotPath"
        ],
        "additionalProperties": true,
        "x-typescript-type": "Omit<Receipt, 'id' | 'receiptId' | 'status' | 'transactionId' | 'processedByUserId' | 'processedAt' | 'createdAt' | 'updatedAt'>"
      },
      "Provider": {
        "title": "Provider",
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "api": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "name",
          "api",
          "key"
        ],
        "additionalProperties": false
      },
      "NewProvider": {
        "title": "NewProvider",
        "type": "object",
        "description": "(tsType: Omit<Provider, 'id' | 'createdAt' | 'updatedAt'>, schemaOptions: { title: 'NewProvider', exclude: [ 'id', 'createdAt', 'updatedAt' ] })",
        "properties": {
          "name": {
            "type": "string"
          },
          "api": {
            "type": "string"
          },
          "key": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "api",
          "key"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Provider, 'id' | 'createdAt' | 'updatedAt'>"
      },
      "ProviderPartial": {
        "title": "ProviderPartial",
        "type": "object",
        "description": "(tsType: Partial<Provider>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "api": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Provider>"
      },
      "Order": {
        "title": "Order",
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "userId": {
            "type": "number"
          },
          "serviceId": {
            "type": "number"
          },
          "transactionId": {
            "type": "number"
          },
          "providerId": {
            "type": "number"
          },
          "orderNumber": {
            "type": "string"
          },
          "targetUrl": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "unitPriceEtb": {
            "type": "number"
          },
          "totalPriceEtb": {
            "type": "number"
          },
          "providerCostUsd": {
            "type": "number"
          },
          "profitEtb": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "processing",
              "in_progress",
              "completed",
              "cancelled",
              "failed",
              "refunded",
              "partial"
            ]
          },
          "paymentStatus": {
            "type": "string",
            "enum": [
              "pending",
              "paid",
              "failed",
              "refunded"
            ]
          },
          "providerOrderId": {
            "type": "string"
          },
          "providerServiceId": {
            "type": "string"
          },
          "lastRefillId": {
            "type": "string"
          },
          "receiptPath": {
            "type": "string"
          },
          "receiptOriginalName": {
            "type": "string"
          },
          "startCount": {
            "type": "number"
          },
          "remains": {
            "type": "number"
          },
          "notes": {
            "type": "string"
          },
          "failureReason": {
            "type": "string"
          },
          "startedAt": {
            "type": "string",
            "format": "date-time"
          },
          "completedAt": {
            "type": "string",
            "format": "date-time"
          },
          "approvedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "manualUpdatedBy": {
            "type": "number",
            "nullable": true
          },
          "manualUpdatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "staffId": {
            "type": "object",
            "nullable": true
          },
          "packageTierId": {
            "type": "number"
          },
          "channel": {
            "type": "string"
          },
          "createdByAdminId": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "orderNumber",
          "targetUrl",
          "quantity",
          "unitPriceEtb",
          "totalPriceEtb",
          "providerCostUsd",
          "profitEtb"
        ],
        "additionalProperties": false
      },
      "OrderPartial": {
        "title": "OrderPartial",
        "type": "object",
        "description": "(tsType: Partial<Order>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "userId": {
            "type": "number"
          },
          "serviceId": {
            "type": "number"
          },
          "transactionId": {
            "type": "number"
          },
          "providerId": {
            "type": "number"
          },
          "orderNumber": {
            "type": "string"
          },
          "targetUrl": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          },
          "unitPriceEtb": {
            "type": "number"
          },
          "totalPriceEtb": {
            "type": "number"
          },
          "providerCostUsd": {
            "type": "number"
          },
          "profitEtb": {
            "type": "number"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "processing",
              "in_progress",
              "completed",
              "cancelled",
              "failed",
              "refunded",
              "partial"
            ]
          },
          "paymentStatus": {
            "type": "string",
            "enum": [
              "pending",
              "paid",
              "failed",
              "refunded"
            ]
          },
          "providerOrderId": {
            "type": "string"
          },
          "providerServiceId": {
            "type": "string"
          },
          "lastRefillId": {
            "type": "string"
          },
          "receiptPath": {
            "type": "string"
          },
          "receiptOriginalName": {
            "type": "string"
          },
          "startCount": {
            "type": "number"
          },
          "remains": {
            "type": "number"
          },
          "notes": {
            "type": "string"
          },
          "failureReason": {
            "type": "string"
          },
          "startedAt": {
            "type": "string",
            "format": "date-time"
          },
          "completedAt": {
            "type": "string",
            "format": "date-time"
          },
          "approvedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "manualUpdatedBy": {
            "type": "number",
            "nullable": true
          },
          "manualUpdatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "staffId": {
            "type": "object",
            "nullable": true
          },
          "packageTierId": {
            "type": "number"
          },
          "channel": {
            "type": "string"
          },
          "createdByAdminId": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Order>"
      },
      "Notification": {
        "title": "Notification",
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "user_id": {
            "type": "number"
          },
          "title": {
            "type": "string"
          },
          "notification_from": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date-time"
          },
          "is_read": {
            "type": "boolean",
            "description": "Whether the notification has been read by the user"
          },
          "read_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the notification was read"
          },
          "type": {
            "type": "string",
            "enum": [
              "info",
              "warning",
              "error",
              "success",
              "urgent",
              "appointment",
              "system",
              "broadcast"
            ],
            "description": "Type/category of the notification"
          },
          "priority": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "urgent",
              "critical"
            ],
            "description": "Priority level of the notification"
          },
          "category": {
            "type": "string",
            "description": "Category for grouping notifications (e.g., appointment, system, personal)"
          },
          "metadata": {
            "type": "object",
            "description": "Additional metadata for the notification (JSON object)"
          },
          "is_deleted": {
            "type": "boolean",
            "description": "Soft delete flag - marks notification as deleted without removing from DB"
          },
          "deleted_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the notification was soft deleted"
          },
          "deletion_reason": {
            "type": "string",
            "description": "Reason for deletion (optional)"
          },
          "deleted_by": {
            "type": "number",
            "description": "ID of the user who deleted this notification (for admin tracking)"
          },
          "is_active": {
            "type": "boolean",
            "description": "Whether this notification is active/visible to the user"
          },
          "scheduled_for": {
            "type": "string",
            "format": "date-time",
            "description": "When the notification should be delivered (for scheduled notifications)"
          },
          "is_scheduled": {
            "type": "boolean",
            "description": "Whether this is a scheduled notification"
          },
          "recurrence_pattern": {
            "type": "string",
            "description": "Cron expression for recurring notifications"
          },
          "is_recurring": {
            "type": "boolean",
            "description": "Whether this notification recurs"
          },
          "parent_notification_id": {
            "type": "number",
            "description": "Parent notification ID for recurring notifications"
          },
          "delivery_channel": {
            "type": "string",
            "enum": [
              "web",
              "email",
              "sms",
              "push",
              "webhook",
              "all"
            ],
            "description": "Delivery channels for this notification"
          },
          "delivery_status": {
            "type": "object",
            "description": "Delivery status for each channel"
          },
          "action_url": {
            "type": "string",
            "description": "URL or route to navigate when notification is clicked"
          },
          "action_text": {
            "type": "string",
            "description": "Text for the action button"
          },
          "action_data": {
            "type": "object",
            "description": "Additional action data"
          },
          "icon": {
            "type": "string",
            "description": "Icon class or URL for the notification"
          },
          "color": {
            "type": "string",
            "description": "Color theme for the notification"
          },
          "auto_dismiss_seconds": {
            "type": "number",
            "description": "Auto-dismiss timeout in seconds (0 = no auto-dismiss)"
          },
          "is_dismissible": {
            "type": "boolean",
            "description": "Whether user can dismiss this notification"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "Last time this notification was updated"
          },
          "updated_by": {
            "type": "number",
            "description": "ID of the user who last updated this notification"
          },
          "schema_version": {
            "type": "string",
            "description": "Version of the notification schema (for future migrations)"
          }
        },
        "required": [
          "user_id",
          "title",
          "notification_from",
          "content"
        ],
        "additionalProperties": false
      },
      "NewNotification": {
        "title": "NewNotification",
        "type": "object",
        "description": "(tsType: Omit<Notification, 'id'>, schemaOptions: { title: 'NewNotification', exclude: [ 'id' ] })",
        "properties": {
          "user_id": {
            "type": "number"
          },
          "title": {
            "type": "string"
          },
          "notification_from": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date-time"
          },
          "is_read": {
            "type": "boolean",
            "description": "Whether the notification has been read by the user"
          },
          "read_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the notification was read"
          },
          "type": {
            "type": "string",
            "enum": [
              "info",
              "warning",
              "error",
              "success",
              "urgent",
              "appointment",
              "system",
              "broadcast"
            ],
            "description": "Type/category of the notification"
          },
          "priority": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "urgent",
              "critical"
            ],
            "description": "Priority level of the notification"
          },
          "category": {
            "type": "string",
            "description": "Category for grouping notifications (e.g., appointment, system, personal)"
          },
          "metadata": {
            "type": "object",
            "description": "Additional metadata for the notification (JSON object)"
          },
          "is_deleted": {
            "type": "boolean",
            "description": "Soft delete flag - marks notification as deleted without removing from DB"
          },
          "deleted_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the notification was soft deleted"
          },
          "deletion_reason": {
            "type": "string",
            "description": "Reason for deletion (optional)"
          },
          "deleted_by": {
            "type": "number",
            "description": "ID of the user who deleted this notification (for admin tracking)"
          },
          "is_active": {
            "type": "boolean",
            "description": "Whether this notification is active/visible to the user"
          },
          "scheduled_for": {
            "type": "string",
            "format": "date-time",
            "description": "When the notification should be delivered (for scheduled notifications)"
          },
          "is_scheduled": {
            "type": "boolean",
            "description": "Whether this is a scheduled notification"
          },
          "recurrence_pattern": {
            "type": "string",
            "description": "Cron expression for recurring notifications"
          },
          "is_recurring": {
            "type": "boolean",
            "description": "Whether this notification recurs"
          },
          "parent_notification_id": {
            "type": "number",
            "description": "Parent notification ID for recurring notifications"
          },
          "delivery_channel": {
            "type": "string",
            "enum": [
              "web",
              "email",
              "sms",
              "push",
              "webhook",
              "all"
            ],
            "description": "Delivery channels for this notification"
          },
          "delivery_status": {
            "type": "object",
            "description": "Delivery status for each channel"
          },
          "action_url": {
            "type": "string",
            "description": "URL or route to navigate when notification is clicked"
          },
          "action_text": {
            "type": "string",
            "description": "Text for the action button"
          },
          "action_data": {
            "type": "object",
            "description": "Additional action data"
          },
          "icon": {
            "type": "string",
            "description": "Icon class or URL for the notification"
          },
          "color": {
            "type": "string",
            "description": "Color theme for the notification"
          },
          "auto_dismiss_seconds": {
            "type": "number",
            "description": "Auto-dismiss timeout in seconds (0 = no auto-dismiss)"
          },
          "is_dismissible": {
            "type": "boolean",
            "description": "Whether user can dismiss this notification"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "Last time this notification was updated"
          },
          "updated_by": {
            "type": "number",
            "description": "ID of the user who last updated this notification"
          },
          "schema_version": {
            "type": "string",
            "description": "Version of the notification schema (for future migrations)"
          }
        },
        "required": [
          "user_id",
          "title",
          "notification_from",
          "content"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Notification, 'id'>"
      },
      "NotificationWithRelations": {
        "title": "NotificationWithRelations",
        "type": "object",
        "description": "(tsType: NotificationWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "user_id": {
            "type": "number"
          },
          "title": {
            "type": "string"
          },
          "notification_from": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date-time"
          },
          "is_read": {
            "type": "boolean",
            "description": "Whether the notification has been read by the user"
          },
          "read_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the notification was read"
          },
          "type": {
            "type": "string",
            "enum": [
              "info",
              "warning",
              "error",
              "success",
              "urgent",
              "appointment",
              "system",
              "broadcast"
            ],
            "description": "Type/category of the notification"
          },
          "priority": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "urgent",
              "critical"
            ],
            "description": "Priority level of the notification"
          },
          "category": {
            "type": "string",
            "description": "Category for grouping notifications (e.g., appointment, system, personal)"
          },
          "metadata": {
            "type": "object",
            "description": "Additional metadata for the notification (JSON object)"
          },
          "is_deleted": {
            "type": "boolean",
            "description": "Soft delete flag - marks notification as deleted without removing from DB"
          },
          "deleted_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the notification was soft deleted"
          },
          "deletion_reason": {
            "type": "string",
            "description": "Reason for deletion (optional)"
          },
          "deleted_by": {
            "type": "number",
            "description": "ID of the user who deleted this notification (for admin tracking)"
          },
          "is_active": {
            "type": "boolean",
            "description": "Whether this notification is active/visible to the user"
          },
          "scheduled_for": {
            "type": "string",
            "format": "date-time",
            "description": "When the notification should be delivered (for scheduled notifications)"
          },
          "is_scheduled": {
            "type": "boolean",
            "description": "Whether this is a scheduled notification"
          },
          "recurrence_pattern": {
            "type": "string",
            "description": "Cron expression for recurring notifications"
          },
          "is_recurring": {
            "type": "boolean",
            "description": "Whether this notification recurs"
          },
          "parent_notification_id": {
            "type": "number",
            "description": "Parent notification ID for recurring notifications"
          },
          "delivery_channel": {
            "type": "string",
            "enum": [
              "web",
              "email",
              "sms",
              "push",
              "webhook",
              "all"
            ],
            "description": "Delivery channels for this notification"
          },
          "delivery_status": {
            "type": "object",
            "description": "Delivery status for each channel"
          },
          "action_url": {
            "type": "string",
            "description": "URL or route to navigate when notification is clicked"
          },
          "action_text": {
            "type": "string",
            "description": "Text for the action button"
          },
          "action_data": {
            "type": "object",
            "description": "Additional action data"
          },
          "icon": {
            "type": "string",
            "description": "Icon class or URL for the notification"
          },
          "color": {
            "type": "string",
            "description": "Color theme for the notification"
          },
          "auto_dismiss_seconds": {
            "type": "number",
            "description": "Auto-dismiss timeout in seconds (0 = no auto-dismiss)"
          },
          "is_dismissible": {
            "type": "boolean",
            "description": "Whether user can dismiss this notification"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "Last time this notification was updated"
          },
          "updated_by": {
            "type": "number",
            "description": "ID of the user who last updated this notification"
          },
          "schema_version": {
            "type": "string",
            "description": "Version of the notification schema (for future migrations)"
          }
        },
        "required": [
          "user_id",
          "title",
          "notification_from",
          "content"
        ],
        "additionalProperties": false,
        "x-typescript-type": "NotificationWithRelations"
      },
      "NotificationPartial": {
        "title": "NotificationPartial",
        "type": "object",
        "description": "(tsType: Partial<Notification>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "user_id": {
            "type": "number"
          },
          "title": {
            "type": "string"
          },
          "notification_from": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date-time"
          },
          "is_read": {
            "type": "boolean",
            "description": "Whether the notification has been read by the user"
          },
          "read_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the notification was read"
          },
          "type": {
            "type": "string",
            "enum": [
              "info",
              "warning",
              "error",
              "success",
              "urgent",
              "appointment",
              "system",
              "broadcast"
            ],
            "description": "Type/category of the notification"
          },
          "priority": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "urgent",
              "critical"
            ],
            "description": "Priority level of the notification"
          },
          "category": {
            "type": "string",
            "description": "Category for grouping notifications (e.g., appointment, system, personal)"
          },
          "metadata": {
            "type": "object",
            "description": "Additional metadata for the notification (JSON object)"
          },
          "is_deleted": {
            "type": "boolean",
            "description": "Soft delete flag - marks notification as deleted without removing from DB"
          },
          "deleted_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the notification was soft deleted"
          },
          "deletion_reason": {
            "type": "string",
            "description": "Reason for deletion (optional)"
          },
          "deleted_by": {
            "type": "number",
            "description": "ID of the user who deleted this notification (for admin tracking)"
          },
          "is_active": {
            "type": "boolean",
            "description": "Whether this notification is active/visible to the user"
          },
          "scheduled_for": {
            "type": "string",
            "format": "date-time",
            "description": "When the notification should be delivered (for scheduled notifications)"
          },
          "is_scheduled": {
            "type": "boolean",
            "description": "Whether this is a scheduled notification"
          },
          "recurrence_pattern": {
            "type": "string",
            "description": "Cron expression for recurring notifications"
          },
          "is_recurring": {
            "type": "boolean",
            "description": "Whether this notification recurs"
          },
          "parent_notification_id": {
            "type": "number",
            "description": "Parent notification ID for recurring notifications"
          },
          "delivery_channel": {
            "type": "string",
            "enum": [
              "web",
              "email",
              "sms",
              "push",
              "webhook",
              "all"
            ],
            "description": "Delivery channels for this notification"
          },
          "delivery_status": {
            "type": "object",
            "description": "Delivery status for each channel"
          },
          "action_url": {
            "type": "string",
            "description": "URL or route to navigate when notification is clicked"
          },
          "action_text": {
            "type": "string",
            "description": "Text for the action button"
          },
          "action_data": {
            "type": "object",
            "description": "Additional action data"
          },
          "icon": {
            "type": "string",
            "description": "Icon class or URL for the notification"
          },
          "color": {
            "type": "string",
            "description": "Color theme for the notification"
          },
          "auto_dismiss_seconds": {
            "type": "number",
            "description": "Auto-dismiss timeout in seconds (0 = no auto-dismiss)"
          },
          "is_dismissible": {
            "type": "boolean",
            "description": "Whether user can dismiss this notification"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "Last time this notification was updated"
          },
          "updated_by": {
            "type": "number",
            "description": "ID of the user who last updated this notification"
          },
          "schema_version": {
            "type": "string",
            "description": "Version of the notification schema (for future migrations)"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Notification>"
      },
      "Language": {
        "title": "Language",
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "en": {
            "type": "string"
          },
          "OR": {
            "type": "string"
          },
          "AM": {
            "type": "string"
          }
        },
        "required": [
          "key",
          "en",
          "OR"
        ],
        "additionalProperties": false
      },
      "NewLanguage": {
        "title": "NewLanguage",
        "type": "object",
        "description": "(tsType: Omit<Language, 'id'>, schemaOptions: { title: 'NewLanguage', exclude: [ 'id' ] })",
        "properties": {
          "key": {
            "type": "string"
          },
          "en": {
            "type": "string"
          },
          "OR": {
            "type": "string"
          },
          "AM": {
            "type": "string"
          }
        },
        "required": [
          "key",
          "en",
          "OR"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Language, 'id'>"
      },
      "LanguageWithRelations": {
        "title": "LanguageWithRelations",
        "type": "object",
        "description": "(tsType: LanguageWithRelations, schemaOptions: { includeRelations: true })",
        "properties": {
          "key": {
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "en": {
            "type": "string"
          },
          "OR": {
            "type": "string"
          },
          "AM": {
            "type": "string"
          }
        },
        "required": [
          "key",
          "en",
          "OR"
        ],
        "additionalProperties": false,
        "x-typescript-type": "LanguageWithRelations"
      },
      "LanguagePartial": {
        "title": "LanguagePartial",
        "type": "object",
        "description": "(tsType: Partial<Language>, schemaOptions: { partial: true })",
        "properties": {
          "key": {
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "en": {
            "type": "string"
          },
          "OR": {
            "type": "string"
          },
          "AM": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Language>"
      },
      "Bank": {
        "title": "Bank",
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "bank_name": {
            "type": "string"
          },
          "shortName": {
            "type": "string"
          },
          "logo": {
            "type": "string"
          },
          "account_holder": {
            "type": "string"
          },
          "accountNumber": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "suspended",
              "pending"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "bank_name",
          "accountNumber"
        ],
        "additionalProperties": false
      },
      "NewBank": {
        "title": "NewBank",
        "type": "object",
        "description": "(tsType: Omit<Bank, 'id' | 'createdAt' | 'updatedAt' | 'logo'>, schemaOptions: { title: 'NewBank', exclude: [ 'id', 'createdAt', 'updatedAt', 'logo' ] })",
        "properties": {
          "bank_name": {
            "type": "string"
          },
          "shortName": {
            "type": "string"
          },
          "account_holder": {
            "type": "string"
          },
          "accountNumber": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "suspended",
              "pending"
            ]
          }
        },
        "required": [
          "bank_name",
          "accountNumber"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Bank, 'id' | 'createdAt' | 'updatedAt' | 'logo'>"
      },
      "BankPartial": {
        "title": "BankPartial",
        "type": "object",
        "description": "(tsType: Partial<Bank>, schemaOptions: { partial: true })",
        "properties": {
          "id": {
            "type": "number"
          },
          "bank_name": {
            "type": "string"
          },
          "shortName": {
            "type": "string"
          },
          "logo": {
            "type": "string"
          },
          "account_holder": {
            "type": "string"
          },
          "accountNumber": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "suspended",
              "pending"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Partial<Bank>"
      },
      "NewActivityLog": {
        "title": "NewActivityLog",
        "type": "object",
        "description": "(tsType: Omit<ActivityLog, 'id'>, schemaOptions: { title: 'NewActivityLog', exclude: [ 'id' ] })",
        "properties": {
          "action": {
            "type": "string"
          },
          "module": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "userId": {
            "type": "number"
          }
        },
        "required": [
          "action",
          "module"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<ActivityLog, 'id'>"
      },
      "loopback.Count": {
        "type": "object",
        "title": "loopback.Count",
        "x-typescript-type": "@loopback/repository#Count",
        "properties": {
          "count": {
            "type": "number"
          }
        }
      },
      "ActivityLog.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": "ActivityLog.ScopeFilter"
      },
      "ActivityLog.IncludeFilter.Items": {
        "title": "ActivityLog.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "user"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/ActivityLog.ScopeFilter"
          }
        }
      },
      "ActivityLog.Filter": {
        "type": "object",
        "title": "ActivityLog.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"
                  },
                  "action": {
                    "type": "boolean"
                  },
                  "module": {
                    "type": "boolean"
                  },
                  "description": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "action",
                    "module",
                    "description",
                    "createdAt",
                    "userId"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "ActivityLog.Fields"
          },
          "include": {
            "title": "ActivityLog.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/ActivityLog.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<ActivityLog>"
      },
      "ActivityLog.Filter1": {
        "type": "object",
        "title": "ActivityLog.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": "ActivityLog.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "action": {
                    "type": "boolean"
                  },
                  "module": {
                    "type": "boolean"
                  },
                  "description": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "action",
                    "module",
                    "description",
                    "createdAt",
                    "userId"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "ActivityLog.Fields"
          },
          "include": {
            "title": "ActivityLog.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/ActivityLog.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<ActivityLog>"
      },
      "Bank.Filter": {
        "type": "object",
        "title": "Bank.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"
                  },
                  "bank_name": {
                    "type": "boolean"
                  },
                  "shortName": {
                    "type": "boolean"
                  },
                  "logo": {
                    "type": "boolean"
                  },
                  "account_holder": {
                    "type": "boolean"
                  },
                  "accountNumber": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "bank_name",
                    "shortName",
                    "logo",
                    "account_holder",
                    "accountNumber",
                    "status",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Bank.Fields"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Bank>"
      },
      "Bank.Filter1": {
        "type": "object",
        "title": "Bank.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": "Bank.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "bank_name": {
                    "type": "boolean"
                  },
                  "shortName": {
                    "type": "boolean"
                  },
                  "logo": {
                    "type": "boolean"
                  },
                  "account_holder": {
                    "type": "boolean"
                  },
                  "accountNumber": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "bank_name",
                    "shortName",
                    "logo",
                    "account_holder",
                    "accountNumber",
                    "status",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Bank.Fields"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Bank>"
      },
      "Language.Filter": {
        "type": "object",
        "title": "Language.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": {
                  "key": {
                    "type": "boolean"
                  },
                  "id": {
                    "type": "boolean"
                  },
                  "en": {
                    "type": "boolean"
                  },
                  "OR": {
                    "type": "boolean"
                  },
                  "AM": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "key",
                    "id",
                    "en",
                    "OR",
                    "AM"
                  ],
                  "example": "key"
                },
                "uniqueItems": true
              }
            ],
            "title": "Language.Fields"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Language>"
      },
      "Language.Filter1": {
        "type": "object",
        "title": "Language.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": "Language.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "key": {
                    "type": "boolean"
                  },
                  "id": {
                    "type": "boolean"
                  },
                  "en": {
                    "type": "boolean"
                  },
                  "OR": {
                    "type": "boolean"
                  },
                  "AM": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "key",
                    "id",
                    "en",
                    "OR",
                    "AM"
                  ],
                  "example": "key"
                },
                "uniqueItems": true
              }
            ],
            "title": "Language.Fields"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Language>"
      },
      "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"
                  },
                  "user_id": {
                    "type": "boolean"
                  },
                  "title": {
                    "type": "boolean"
                  },
                  "notification_from": {
                    "type": "boolean"
                  },
                  "content": {
                    "type": "boolean"
                  },
                  "date": {
                    "type": "boolean"
                  },
                  "is_read": {
                    "type": "boolean"
                  },
                  "read_at": {
                    "type": "boolean"
                  },
                  "type": {
                    "type": "boolean"
                  },
                  "priority": {
                    "type": "boolean"
                  },
                  "category": {
                    "type": "boolean"
                  },
                  "metadata": {
                    "type": "boolean"
                  },
                  "is_deleted": {
                    "type": "boolean"
                  },
                  "deleted_at": {
                    "type": "boolean"
                  },
                  "deletion_reason": {
                    "type": "boolean"
                  },
                  "deleted_by": {
                    "type": "boolean"
                  },
                  "is_active": {
                    "type": "boolean"
                  },
                  "scheduled_for": {
                    "type": "boolean"
                  },
                  "is_scheduled": {
                    "type": "boolean"
                  },
                  "recurrence_pattern": {
                    "type": "boolean"
                  },
                  "is_recurring": {
                    "type": "boolean"
                  },
                  "parent_notification_id": {
                    "type": "boolean"
                  },
                  "delivery_channel": {
                    "type": "boolean"
                  },
                  "delivery_status": {
                    "type": "boolean"
                  },
                  "action_url": {
                    "type": "boolean"
                  },
                  "action_text": {
                    "type": "boolean"
                  },
                  "action_data": {
                    "type": "boolean"
                  },
                  "icon": {
                    "type": "boolean"
                  },
                  "color": {
                    "type": "boolean"
                  },
                  "auto_dismiss_seconds": {
                    "type": "boolean"
                  },
                  "is_dismissible": {
                    "type": "boolean"
                  },
                  "updated_at": {
                    "type": "boolean"
                  },
                  "updated_by": {
                    "type": "boolean"
                  },
                  "schema_version": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "user_id",
                    "title",
                    "notification_from",
                    "content",
                    "date",
                    "is_read",
                    "read_at",
                    "type",
                    "priority",
                    "category",
                    "metadata",
                    "is_deleted",
                    "deleted_at",
                    "deletion_reason",
                    "deleted_by",
                    "is_active",
                    "scheduled_for",
                    "is_scheduled",
                    "recurrence_pattern",
                    "is_recurring",
                    "parent_notification_id",
                    "delivery_channel",
                    "delivery_status",
                    "action_url",
                    "action_text",
                    "action_data",
                    "icon",
                    "color",
                    "auto_dismiss_seconds",
                    "is_dismissible",
                    "updated_at",
                    "updated_by",
                    "schema_version"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Notification.Fields"
          }
        },
        "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"
                  },
                  "user_id": {
                    "type": "boolean"
                  },
                  "title": {
                    "type": "boolean"
                  },
                  "notification_from": {
                    "type": "boolean"
                  },
                  "content": {
                    "type": "boolean"
                  },
                  "date": {
                    "type": "boolean"
                  },
                  "is_read": {
                    "type": "boolean"
                  },
                  "read_at": {
                    "type": "boolean"
                  },
                  "type": {
                    "type": "boolean"
                  },
                  "priority": {
                    "type": "boolean"
                  },
                  "category": {
                    "type": "boolean"
                  },
                  "metadata": {
                    "type": "boolean"
                  },
                  "is_deleted": {
                    "type": "boolean"
                  },
                  "deleted_at": {
                    "type": "boolean"
                  },
                  "deletion_reason": {
                    "type": "boolean"
                  },
                  "deleted_by": {
                    "type": "boolean"
                  },
                  "is_active": {
                    "type": "boolean"
                  },
                  "scheduled_for": {
                    "type": "boolean"
                  },
                  "is_scheduled": {
                    "type": "boolean"
                  },
                  "recurrence_pattern": {
                    "type": "boolean"
                  },
                  "is_recurring": {
                    "type": "boolean"
                  },
                  "parent_notification_id": {
                    "type": "boolean"
                  },
                  "delivery_channel": {
                    "type": "boolean"
                  },
                  "delivery_status": {
                    "type": "boolean"
                  },
                  "action_url": {
                    "type": "boolean"
                  },
                  "action_text": {
                    "type": "boolean"
                  },
                  "action_data": {
                    "type": "boolean"
                  },
                  "icon": {
                    "type": "boolean"
                  },
                  "color": {
                    "type": "boolean"
                  },
                  "auto_dismiss_seconds": {
                    "type": "boolean"
                  },
                  "is_dismissible": {
                    "type": "boolean"
                  },
                  "updated_at": {
                    "type": "boolean"
                  },
                  "updated_by": {
                    "type": "boolean"
                  },
                  "schema_version": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "user_id",
                    "title",
                    "notification_from",
                    "content",
                    "date",
                    "is_read",
                    "read_at",
                    "type",
                    "priority",
                    "category",
                    "metadata",
                    "is_deleted",
                    "deleted_at",
                    "deletion_reason",
                    "deleted_by",
                    "is_active",
                    "scheduled_for",
                    "is_scheduled",
                    "recurrence_pattern",
                    "is_recurring",
                    "parent_notification_id",
                    "delivery_channel",
                    "delivery_status",
                    "action_url",
                    "action_text",
                    "action_data",
                    "icon",
                    "color",
                    "auto_dismiss_seconds",
                    "is_dismissible",
                    "updated_at",
                    "updated_by",
                    "schema_version"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Notification.Fields"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Notification>"
      },
      "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",
              "service",
              "transaction",
              "provider",
              "staff"
            ]
          },
          "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"
                }
              }
            ]
          },
          "where": {
            "title": "Order.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "serviceId": {
                    "type": "boolean"
                  },
                  "transactionId": {
                    "type": "boolean"
                  },
                  "providerId": {
                    "type": "boolean"
                  },
                  "orderNumber": {
                    "type": "boolean"
                  },
                  "targetUrl": {
                    "type": "boolean"
                  },
                  "quantity": {
                    "type": "boolean"
                  },
                  "unitPriceEtb": {
                    "type": "boolean"
                  },
                  "totalPriceEtb": {
                    "type": "boolean"
                  },
                  "providerCostUsd": {
                    "type": "boolean"
                  },
                  "profitEtb": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "paymentStatus": {
                    "type": "boolean"
                  },
                  "providerOrderId": {
                    "type": "boolean"
                  },
                  "providerServiceId": {
                    "type": "boolean"
                  },
                  "lastRefillId": {
                    "type": "boolean"
                  },
                  "receiptPath": {
                    "type": "boolean"
                  },
                  "receiptOriginalName": {
                    "type": "boolean"
                  },
                  "startCount": {
                    "type": "boolean"
                  },
                  "remains": {
                    "type": "boolean"
                  },
                  "notes": {
                    "type": "boolean"
                  },
                  "failureReason": {
                    "type": "boolean"
                  },
                  "startedAt": {
                    "type": "boolean"
                  },
                  "completedAt": {
                    "type": "boolean"
                  },
                  "approvedAt": {
                    "type": "boolean"
                  },
                  "manualUpdatedBy": {
                    "type": "boolean"
                  },
                  "manualUpdatedAt": {
                    "type": "boolean"
                  },
                  "staffId": {
                    "type": "boolean"
                  },
                  "packageTierId": {
                    "type": "boolean"
                  },
                  "channel": {
                    "type": "boolean"
                  },
                  "createdByAdminId": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "serviceId",
                    "transactionId",
                    "providerId",
                    "orderNumber",
                    "targetUrl",
                    "quantity",
                    "unitPriceEtb",
                    "totalPriceEtb",
                    "providerCostUsd",
                    "profitEtb",
                    "status",
                    "paymentStatus",
                    "providerOrderId",
                    "providerServiceId",
                    "lastRefillId",
                    "receiptPath",
                    "receiptOriginalName",
                    "startCount",
                    "remains",
                    "notes",
                    "failureReason",
                    "startedAt",
                    "completedAt",
                    "approvedAt",
                    "manualUpdatedBy",
                    "manualUpdatedAt",
                    "staffId",
                    "packageTierId",
                    "channel",
                    "createdByAdminId",
                    "createdAt",
                    "updatedAt"
                  ],
                  "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"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "serviceId": {
                    "type": "boolean"
                  },
                  "transactionId": {
                    "type": "boolean"
                  },
                  "providerId": {
                    "type": "boolean"
                  },
                  "orderNumber": {
                    "type": "boolean"
                  },
                  "targetUrl": {
                    "type": "boolean"
                  },
                  "quantity": {
                    "type": "boolean"
                  },
                  "unitPriceEtb": {
                    "type": "boolean"
                  },
                  "totalPriceEtb": {
                    "type": "boolean"
                  },
                  "providerCostUsd": {
                    "type": "boolean"
                  },
                  "profitEtb": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "paymentStatus": {
                    "type": "boolean"
                  },
                  "providerOrderId": {
                    "type": "boolean"
                  },
                  "providerServiceId": {
                    "type": "boolean"
                  },
                  "lastRefillId": {
                    "type": "boolean"
                  },
                  "receiptPath": {
                    "type": "boolean"
                  },
                  "receiptOriginalName": {
                    "type": "boolean"
                  },
                  "startCount": {
                    "type": "boolean"
                  },
                  "remains": {
                    "type": "boolean"
                  },
                  "notes": {
                    "type": "boolean"
                  },
                  "failureReason": {
                    "type": "boolean"
                  },
                  "startedAt": {
                    "type": "boolean"
                  },
                  "completedAt": {
                    "type": "boolean"
                  },
                  "approvedAt": {
                    "type": "boolean"
                  },
                  "manualUpdatedBy": {
                    "type": "boolean"
                  },
                  "manualUpdatedAt": {
                    "type": "boolean"
                  },
                  "staffId": {
                    "type": "boolean"
                  },
                  "packageTierId": {
                    "type": "boolean"
                  },
                  "channel": {
                    "type": "boolean"
                  },
                  "createdByAdminId": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "serviceId",
                    "transactionId",
                    "providerId",
                    "orderNumber",
                    "targetUrl",
                    "quantity",
                    "unitPriceEtb",
                    "totalPriceEtb",
                    "providerCostUsd",
                    "profitEtb",
                    "status",
                    "paymentStatus",
                    "providerOrderId",
                    "providerServiceId",
                    "lastRefillId",
                    "receiptPath",
                    "receiptOriginalName",
                    "startCount",
                    "remains",
                    "notes",
                    "failureReason",
                    "startedAt",
                    "completedAt",
                    "approvedAt",
                    "manualUpdatedBy",
                    "manualUpdatedAt",
                    "staffId",
                    "packageTierId",
                    "channel",
                    "createdByAdminId",
                    "createdAt",
                    "updatedAt"
                  ],
                  "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
          }
        }
      },
      "Provider.Filter": {
        "type": "object",
        "title": "Provider.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"
                  },
                  "api": {
                    "type": "boolean"
                  },
                  "key": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "name",
                    "api",
                    "key",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Provider.Fields"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Provider>"
      },
      "Provider.Filter1": {
        "type": "object",
        "title": "Provider.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": "Provider.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "name": {
                    "type": "boolean"
                  },
                  "api": {
                    "type": "boolean"
                  },
                  "key": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "name",
                    "api",
                    "key",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Provider.Fields"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Provider>"
      },
      "Receipt.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": "Receipt.ScopeFilter"
      },
      "Receipt.IncludeFilter.Items": {
        "title": "Receipt.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "user",
              "bank",
              "transaction",
              "processedBy"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Receipt.ScopeFilter"
          }
        }
      },
      "Receipt.Filter": {
        "type": "object",
        "title": "Receipt.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"
                  },
                  "receiptId": {
                    "type": "boolean"
                  },
                  "amount": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "customerName": {
                    "type": "boolean"
                  },
                  "customerPhone": {
                    "type": "boolean"
                  },
                  "customerEmail": {
                    "type": "boolean"
                  },
                  "reference": {
                    "type": "boolean"
                  },
                  "notes": {
                    "type": "boolean"
                  },
                  "screenshotPath": {
                    "type": "boolean"
                  },
                  "adminNotes": {
                    "type": "boolean"
                  },
                  "rejectionReason": {
                    "type": "boolean"
                  },
                  "processedByUserId": {
                    "type": "boolean"
                  },
                  "processedAt": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "bankId": {
                    "type": "boolean"
                  },
                  "transactionId": {
                    "type": "boolean"
                  },
                  "processedBy": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Receipt.Fields"
          },
          "include": {
            "title": "Receipt.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Receipt.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Receipt>"
      },
      "Receipt.Filter1": {
        "type": "object",
        "title": "Receipt.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": "Receipt.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "receiptId": {
                    "type": "boolean"
                  },
                  "amount": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "customerName": {
                    "type": "boolean"
                  },
                  "customerPhone": {
                    "type": "boolean"
                  },
                  "customerEmail": {
                    "type": "boolean"
                  },
                  "reference": {
                    "type": "boolean"
                  },
                  "notes": {
                    "type": "boolean"
                  },
                  "screenshotPath": {
                    "type": "boolean"
                  },
                  "adminNotes": {
                    "type": "boolean"
                  },
                  "rejectionReason": {
                    "type": "boolean"
                  },
                  "processedByUserId": {
                    "type": "boolean"
                  },
                  "processedAt": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "bankId": {
                    "type": "boolean"
                  },
                  "transactionId": {
                    "type": "boolean"
                  },
                  "processedBy": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Receipt.Fields"
          },
          "include": {
            "title": "Receipt.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Receipt.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Receipt>"
      },
      "Service.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": "Service.ScopeFilter"
      },
      "Service.IncludeFilter.Items": {
        "title": "Service.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "provider",
              "orders"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Service.ScopeFilter"
          }
        }
      },
      "Service.Filter": {
        "type": "object",
        "title": "Service.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"
                  },
                  "platform": {
                    "type": "boolean"
                  },
                  "service_type": {
                    "type": "boolean"
                  },
                  "providerId": {
                    "type": "boolean"
                  },
                  "service_id": {
                    "type": "boolean"
                  },
                  "provider_rate_usd": {
                    "type": "boolean"
                  },
                  "selling_rate_etb": {
                    "type": "boolean"
                  },
                  "exchange_rate": {
                    "type": "boolean"
                  },
                  "min": {
                    "type": "boolean"
                  },
                  "max": {
                    "type": "boolean"
                  },
                  "provider_cost_etb_per_1000": {
                    "type": "boolean"
                  },
                  "profit_etb_per_1000": {
                    "type": "boolean"
                  },
                  "actual_profit_margin_percentage": {
                    "type": "boolean"
                  },
                  "rate_dollar": {
                    "type": "boolean"
                  },
                  "rate_birr": {
                    "type": "boolean"
                  },
                  "description": {
                    "type": "boolean"
                  },
                  "name": {
                    "type": "boolean"
                  },
                  "category": {
                    "type": "boolean"
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "isManual": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "platform",
                    "service_type",
                    "providerId",
                    "service_id",
                    "provider_rate_usd",
                    "selling_rate_etb",
                    "exchange_rate",
                    "min",
                    "max",
                    "provider_cost_etb_per_1000",
                    "profit_etb_per_1000",
                    "actual_profit_margin_percentage",
                    "rate_dollar",
                    "rate_birr",
                    "description",
                    "name",
                    "category",
                    "active",
                    "isManual",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Service.Fields"
          },
          "include": {
            "title": "Service.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Service.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Service>"
      },
      "Service.Filter1": {
        "type": "object",
        "title": "Service.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": "Service.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "platform": {
                    "type": "boolean"
                  },
                  "service_type": {
                    "type": "boolean"
                  },
                  "providerId": {
                    "type": "boolean"
                  },
                  "service_id": {
                    "type": "boolean"
                  },
                  "provider_rate_usd": {
                    "type": "boolean"
                  },
                  "selling_rate_etb": {
                    "type": "boolean"
                  },
                  "exchange_rate": {
                    "type": "boolean"
                  },
                  "min": {
                    "type": "boolean"
                  },
                  "max": {
                    "type": "boolean"
                  },
                  "provider_cost_etb_per_1000": {
                    "type": "boolean"
                  },
                  "profit_etb_per_1000": {
                    "type": "boolean"
                  },
                  "actual_profit_margin_percentage": {
                    "type": "boolean"
                  },
                  "rate_dollar": {
                    "type": "boolean"
                  },
                  "rate_birr": {
                    "type": "boolean"
                  },
                  "description": {
                    "type": "boolean"
                  },
                  "name": {
                    "type": "boolean"
                  },
                  "category": {
                    "type": "boolean"
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "isManual": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "platform",
                    "service_type",
                    "providerId",
                    "service_id",
                    "provider_rate_usd",
                    "selling_rate_etb",
                    "exchange_rate",
                    "min",
                    "max",
                    "provider_cost_etb_per_1000",
                    "profit_etb_per_1000",
                    "actual_profit_margin_percentage",
                    "rate_dollar",
                    "rate_birr",
                    "description",
                    "name",
                    "category",
                    "active",
                    "isManual",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Service.Fields"
          },
          "include": {
            "title": "Service.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Service.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Service>"
      },
      "Transaction.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": "Transaction.ScopeFilter"
      },
      "Transaction.IncludeFilter.Items": {
        "title": "Transaction.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "user",
              "recipient",
              "processedBy",
              "bank",
              "receipt"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Transaction.ScopeFilter"
          }
        }
      },
      "Transaction.Filter": {
        "type": "object",
        "title": "Transaction.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"
                  },
                  "transactionId": {
                    "type": "boolean"
                  },
                  "type": {
                    "type": "boolean"
                  },
                  "amount": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "paymentMethod": {
                    "type": "boolean"
                  },
                  "description": {
                    "type": "boolean"
                  },
                  "reference": {
                    "type": "boolean"
                  },
                  "recipientUserId": {
                    "type": "boolean"
                  },
                  "recipientInfo": {
                    "type": "boolean"
                  },
                  "balanceBefore": {
                    "type": "boolean"
                  },
                  "balanceAfter": {
                    "type": "boolean"
                  },
                  "metadata": {
                    "type": "boolean"
                  },
                  "processedByUserId": {
                    "type": "boolean"
                  },
                  "processedAt": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "recipientUser": {
                    "type": "boolean"
                  },
                  "processedBy": {
                    "type": "boolean"
                  },
                  "bankId": {
                    "type": "boolean"
                  },
                  "receiptId": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Transaction.Fields"
          },
          "include": {
            "title": "Transaction.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Transaction.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Transaction>"
      },
      "Wallet.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": "Wallet.ScopeFilter"
      },
      "Wallet.IncludeFilter.Items": {
        "title": "Wallet.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "user",
              "transactions"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Wallet.ScopeFilter"
          }
        }
      },
      "Wallet.Filter": {
        "type": "object",
        "title": "Wallet.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": "Wallet.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "balanceBirr": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Wallet.Fields"
          },
          "include": {
            "title": "Wallet.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Wallet.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Wallet>"
      },
      "Wallet.Filter1": {
        "type": "object",
        "title": "Wallet.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"
                  },
                  "balanceBirr": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Wallet.Fields"
          },
          "include": {
            "title": "Wallet.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Wallet.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Wallet>"
      }
    }
  },
  "security": [
    {
      "jwt": []
    }
  ],
  "servers": [
    {
      "url": "http://api.destapromotion.com"
    }
  ]
}