{
  "openapi": "3.1.0",
  "info": {
    "title": "Poolia API",
    "version": "0.1.0"
  },
  "paths": {
    "/users": {
      "get": {
        "tags": [
          "users"
        ],
        "summary": "List Users",
        "operationId": "list_users_users_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/User"
                  },
                  "type": "array",
                  "title": "Response List Users Users Get"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "users"
        ],
        "summary": "Create User",
        "operationId": "create_user_users_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/users/me": {
      "get": {
        "tags": [
          "users"
        ],
        "summary": "Get Me",
        "operationId": "get_me_users_me_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2PasswordBearer": []
          }
        ]
      }
    },
    "/users/me/change-password": {
      "post": {
        "tags": [
          "users"
        ],
        "summary": "Change My Password",
        "operationId": "change_my_password_users_me_change_password_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangePasswordRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": "object",
                  "title": "Response Change My Password Users Me Change Password Post"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2PasswordBearer": []
          }
        ]
      }
    },
    "/users/{user_id}": {
      "get": {
        "tags": [
          "users"
        ],
        "summary": "Get User",
        "operationId": "get_user_users__user_id__get",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "User Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "users"
        ],
        "summary": "Update User",
        "operationId": "update_user_users__user_id__patch",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "User Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "users"
        ],
        "summary": "Soft Delete User",
        "operationId": "soft_delete_user_users__user_id__delete",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "User Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/pools": {
      "post": {
        "tags": [
          "pools"
        ],
        "summary": "Create Pool",
        "operationId": "create_pool_pools_post",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PoolCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Pool"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "pools"
        ],
        "summary": "List Pools",
        "operationId": "list_pools_pools_get",
        "parameters": [
          {
            "name": "ownerId",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "example": "5eb7cf5a86d9755df3a6c593"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Ownerid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Pool"
                  },
                  "title": "Response List Pools Pools Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/pools/{pool_id}": {
      "get": {
        "tags": [
          "pools"
        ],
        "summary": "Get Pool",
        "operationId": "get_pool_pools__pool_id__get",
        "parameters": [
          {
            "name": "pool_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Pool"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "pools"
        ],
        "summary": "Update Pool",
        "operationId": "update_pool_pools__pool_id__patch",
        "parameters": [
          {
            "name": "pool_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PoolUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Pool"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "pools"
        ],
        "summary": "Delete Pool",
        "operationId": "delete_pool_pools__pool_id__delete",
        "parameters": [
          {
            "name": "pool_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/pools/{pool_id}/alert-config": {
      "get": {
        "tags": [
          "pools"
        ],
        "summary": "Get Alert Config",
        "operationId": "get_alert_config_pools__pool_id__alert_config_get",
        "parameters": [
          {
            "name": "pool_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertConfig"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "pools"
        ],
        "summary": "Upsert Alert Config",
        "operationId": "upsert_alert_config_pools__pool_id__alert_config_put",
        "parameters": [
          {
            "name": "pool_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlertConfigUpsert"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertConfig"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/pools/{pool_id}/technicians/{technician_id}": {
      "delete": {
        "tags": [
          "pools"
        ],
        "summary": "Remove Pool Technician",
        "operationId": "remove_pool_technician_pools__pool_id__technicians__technician_id__delete",
        "parameters": [
          {
            "name": "pool_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Id"
            }
          },
          {
            "name": "technician_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Technician Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/pools/{pool_id}/invites": {
      "post": {
        "tags": [
          "pools"
        ],
        "summary": "Invite Technician By Email",
        "operationId": "invite_technician_by_email_pools__pool_id__invites_post",
        "parameters": [
          {
            "name": "pool_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Id"
            }
          },
          {
            "name": "ownerId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Ownerid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InviteByEmailRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invite"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/pools/{poolId}/visits": {
      "post": {
        "tags": [
          "pools"
        ],
        "summary": "Create Pool Visit",
        "operationId": "create_pool_visit_pools__poolId__visits_post",
        "parameters": [
          {
            "name": "poolId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Poolid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePoolVisitRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Response Create Pool Visit Pools  Poolid  Visits Post"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "pools"
        ],
        "summary": "List Pool Visits",
        "operationId": "list_pool_visits_pools__poolId__visits_get",
        "parameters": [
          {
            "name": "poolId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Poolid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Visit"
                  },
                  "title": "Response List Pool Visits Pools  Poolid  Visits Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/pools/{poolId}/dashboard": {
      "get": {
        "tags": [
          "pools"
        ],
        "summary": "Get Pool Dashboard",
        "operationId": "get_pool_dashboard_pools__poolId__dashboard_get",
        "parameters": [
          {
            "name": "poolId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Poolid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoolDashboardResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/pools/user/{user_id}": {
      "get": {
        "tags": [
          "pools"
        ],
        "summary": "List Pools By Owner",
        "operationId": "list_pools_by_owner_pools_user__user_id__get",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "User Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Pool"
                  },
                  "title": "Response List Pools By Owner Pools User  User Id  Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/pools/technician/{tech_id}": {
      "get": {
        "tags": [
          "pools"
        ],
        "summary": "List Pools By Technician",
        "operationId": "list_pools_by_technician_pools_technician__tech_id__get",
        "parameters": [
          {
            "name": "tech_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Tech Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Pool"
                  },
                  "title": "Response List Pools By Technician Pools Technician  Tech Id  Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/auth/register": {
      "post": {
        "tags": [
          "auth"
        ],
        "summary": "Register",
        "operationId": "register_auth_register_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/auth/login": {
      "post": {
        "tags": [
          "auth"
        ],
        "summary": "Login",
        "operationId": "login_auth_login_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/auth/logout": {
      "post": {
        "tags": [
          "auth"
        ],
        "summary": "Logout",
        "operationId": "logout_auth_logout_post",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/pool-values": {
      "get": {
        "tags": [
          "pool-values"
        ],
        "summary": "List Pool Values",
        "operationId": "list_pool_values_pool_values_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PoolValues"
                  },
                  "type": "array",
                  "title": "Response List Pool Values Pool Values Get"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "pool-values"
        ],
        "summary": "Create Pool Values",
        "operationId": "create_pool_values_pool_values_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PoolValuesCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoolValues"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/pool-values/{pool_values_id}": {
      "get": {
        "tags": [
          "pool-values"
        ],
        "summary": "Get Pool Values",
        "operationId": "get_pool_values_pool_values__pool_values_id__get",
        "parameters": [
          {
            "name": "pool_values_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Values Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoolValues"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "pool-values"
        ],
        "summary": "Update Pool Values",
        "operationId": "update_pool_values_pool_values__pool_values_id__patch",
        "parameters": [
          {
            "name": "pool_values_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Values Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PoolValuesUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoolValues"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "pool-values"
        ],
        "summary": "Delete Pool Values",
        "operationId": "delete_pool_values_pool_values__pool_values_id__delete",
        "parameters": [
          {
            "name": "pool_values_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Values Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/visits": {
      "get": {
        "tags": [
          "visits"
        ],
        "summary": "List Visits",
        "operationId": "list_visits_visits_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Visit"
                  },
                  "type": "array",
                  "title": "Response List Visits Visits Get"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "visits"
        ],
        "summary": "Create Visit",
        "operationId": "create_visit_visits_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VisitCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Visit"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/visits/{visit_id}": {
      "get": {
        "tags": [
          "visits"
        ],
        "summary": "Get Visit",
        "operationId": "get_visit_visits__visit_id__get",
        "parameters": [
          {
            "name": "visit_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Visit Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Visit"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "visits"
        ],
        "summary": "Update Visit",
        "operationId": "update_visit_visits__visit_id__patch",
        "parameters": [
          {
            "name": "visit_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Visit Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VisitUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Visit"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "visits"
        ],
        "summary": "Delete Visit",
        "operationId": "delete_visit_visits__visit_id__delete",
        "parameters": [
          {
            "name": "visit_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Visit Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/invites": {
      "get": {
        "tags": [
          "invites"
        ],
        "summary": "List Invites",
        "operationId": "list_invites_invites_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Invite"
                  },
                  "type": "array",
                  "title": "Response List Invites Invites Get"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "invites"
        ],
        "summary": "Create Invite",
        "operationId": "create_invite_invites_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InviteCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invite"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/invites/technicians/{technician_id}": {
      "get": {
        "tags": [
          "invites"
        ],
        "summary": "List Invites By Technician",
        "operationId": "list_invites_by_technician_invites_technicians__technician_id__get",
        "parameters": [
          {
            "name": "technician_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Technician Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Invite"
                  },
                  "title": "Response List Invites By Technician Invites Technicians  Technician Id  Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/invites/technicians/{technician_id}/pending": {
      "get": {
        "tags": [
          "invites"
        ],
        "summary": "List Pending Invites By Technician",
        "operationId": "list_pending_invites_by_technician_invites_technicians__technician_id__pending_get",
        "parameters": [
          {
            "name": "technician_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Technician Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Invite"
                  },
                  "title": "Response List Pending Invites By Technician Invites Technicians  Technician Id  Pending Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/invites/{invite_id}": {
      "get": {
        "tags": [
          "invites"
        ],
        "summary": "Get Invite",
        "operationId": "get_invite_invites__invite_id__get",
        "parameters": [
          {
            "name": "invite_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Invite Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invite"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "invites"
        ],
        "summary": "Update Invite",
        "operationId": "update_invite_invites__invite_id__patch",
        "parameters": [
          {
            "name": "invite_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Invite Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InviteUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invite"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "invites"
        ],
        "summary": "Delete Invite",
        "operationId": "delete_invite_invites__invite_id__delete",
        "parameters": [
          {
            "name": "invite_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Invite Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/invites/{inviteId}/accept": {
      "post": {
        "tags": [
          "invites"
        ],
        "summary": "Accept Invite",
        "operationId": "accept_invite_invites__inviteId__accept_post",
        "parameters": [
          {
            "name": "inviteId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Inviteid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invite"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/invites/{inviteId}/decline": {
      "post": {
        "tags": [
          "invites"
        ],
        "summary": "Decline Invite",
        "operationId": "decline_invite_invites__inviteId__decline_post",
        "parameters": [
          {
            "name": "inviteId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Inviteid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invite"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/photos/users/{user_id}/profile": {
      "post": {
        "tags": [
          "photos"
        ],
        "summary": "Upload User Profile Photo",
        "operationId": "upload_user_profile_photo_photos_users__user_id__profile_post",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "User Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_user_profile_photo_photos_users__user_id__profile_post"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PhotoResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "photos"
        ],
        "summary": "Get User Profile Photo",
        "operationId": "get_user_profile_photo_photos_users__user_id__profile_get",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "User Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PhotoResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/photos/visits/{visit_id}": {
      "post": {
        "tags": [
          "photos"
        ],
        "summary": "Upload Visit Photo",
        "operationId": "upload_visit_photo_photos_visits__visit_id__post",
        "parameters": [
          {
            "name": "visit_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Visit Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_visit_photo_photos_visits__visit_id__post"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PhotoResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "photos"
        ],
        "summary": "List Visit Photos",
        "operationId": "list_visit_photos_photos_visits__visit_id__get",
        "parameters": [
          {
            "name": "visit_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Visit Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PhotoResponse"
                  },
                  "title": "Response List Visit Photos Photos Visits  Visit Id  Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/photos/{photo_id}": {
      "delete": {
        "tags": [
          "photos"
        ],
        "summary": "Delete Photo",
        "operationId": "delete_photo_photos__photo_id__delete",
        "parameters": [
          {
            "name": "photo_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Photo Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/photos/pools/{pool_id}": {
      "post": {
        "tags": [
          "photos"
        ],
        "summary": "Upload Pool Photo",
        "operationId": "upload_pool_photo_photos_pools__pool_id__post",
        "parameters": [
          {
            "name": "pool_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_pool_photo_photos_pools__pool_id__post"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PhotoResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "photos"
        ],
        "summary": "Get Pool Photo",
        "operationId": "get_pool_photo_photos_pools__pool_id__get",
        "parameters": [
          {
            "name": "pool_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PhotoResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/pools/{pool_id}/threads": {
      "post": {
        "tags": [
          "messages"
        ],
        "summary": "Create Thread",
        "operationId": "create_thread_pools__pool_id__threads_post",
        "security": [
          {
            "OAuth2PasswordBearer": []
          }
        ],
        "parameters": [
          {
            "name": "pool_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MessageThreadCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageThread"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "messages"
        ],
        "summary": "List Threads",
        "operationId": "list_threads_pools__pool_id__threads_get",
        "security": [
          {
            "OAuth2PasswordBearer": []
          }
        ],
        "parameters": [
          {
            "name": "pool_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Pool Id"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MessageThreadListItem"
                  },
                  "title": "Response List Threads Pools  Pool Id  Threads Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/threads/{thread_id}": {
      "get": {
        "tags": [
          "messages"
        ],
        "summary": "Get Thread",
        "operationId": "get_thread_threads__thread_id__get",
        "security": [
          {
            "OAuth2PasswordBearer": []
          }
        ],
        "parameters": [
          {
            "name": "thread_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Thread Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageThread"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "messages"
        ],
        "summary": "Update Thread",
        "operationId": "update_thread_threads__thread_id__patch",
        "security": [
          {
            "OAuth2PasswordBearer": []
          }
        ],
        "parameters": [
          {
            "name": "thread_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Thread Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MessageThreadUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageThread"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/threads/{thread_id}/messages": {
      "get": {
        "tags": [
          "messages"
        ],
        "summary": "List Messages",
        "operationId": "list_messages_threads__thread_id__messages_get",
        "security": [
          {
            "OAuth2PasswordBearer": []
          }
        ],
        "parameters": [
          {
            "name": "thread_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Thread Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MessageResponse"
                  },
                  "title": "Response List Messages Threads  Thread Id  Messages Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "messages"
        ],
        "summary": "Create Message",
        "operationId": "create_message_threads__thread_id__messages_post",
        "security": [
          {
            "OAuth2PasswordBearer": []
          }
        ],
        "parameters": [
          {
            "name": "thread_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Thread Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MessageCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/messages/{message_id}": {
      "get": {
        "tags": [
          "messages"
        ],
        "summary": "Get Message",
        "operationId": "get_message_messages__message_id__get",
        "security": [
          {
            "OAuth2PasswordBearer": []
          }
        ],
        "parameters": [
          {
            "name": "message_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Message Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "messages"
        ],
        "summary": "Update Message",
        "operationId": "update_message_messages__message_id__patch",
        "security": [
          {
            "OAuth2PasswordBearer": []
          }
        ],
        "parameters": [
          {
            "name": "message_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Message Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MessageUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/threads/{thread_id}/messages/{message_id}/photos": {
      "post": {
        "tags": [
          "messages"
        ],
        "summary": "Upload Message Photo",
        "operationId": "upload_message_photo_threads__thread_id__messages__message_id__photos_post",
        "security": [
          {
            "OAuth2PasswordBearer": []
          }
        ],
        "parameters": [
          {
            "name": "thread_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Thread Id"
            }
          },
          {
            "name": "message_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593",
              "title": "Message Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_message_photo_threads__thread_id__messages__message_id__photos_post"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/health": {
      "get": {
        "summary": "Healthcheck",
        "operationId": "healthcheck_health_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": "object",
                  "title": "Response Healthcheck Health Get"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AlertConfig": {
        "properties": {
          "_id": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": " Id",
            "description": "MongoDB document ObjectID"
          },
          "poolId": {
            "type": "string",
            "title": "Poolid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "phMin": {
            "type": "number",
            "title": "Phmin"
          },
          "phMax": {
            "type": "number",
            "title": "Phmax"
          },
          "chlorineMin": {
            "type": "number",
            "title": "Chlorinemin"
          },
          "chlorineMax": {
            "type": "number",
            "title": "Chlorinemax"
          },
          "temperatureMin": {
            "type": "number",
            "title": "Temperaturemin"
          },
          "temperatureMax": {
            "type": "number",
            "title": "Temperaturemax"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Createdat"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "title": "Updatedat"
          }
        },
        "type": "object",
        "required": [
          "poolId",
          "phMin",
          "phMax",
          "chlorineMin",
          "chlorineMax",
          "temperatureMin",
          "temperatureMax"
        ],
        "title": "AlertConfig",
        "example": {
          "chlorineMax": 3.0,
          "chlorineMin": 1.0,
          "createdAt": "2026-03-24T12:00:00Z",
          "phMax": 7.8,
          "phMin": 7.0,
          "poolId": "65fb1f7d2f9b1c7e8c123456",
          "temperatureMax": 30.0,
          "temperatureMin": 24.0,
          "updatedAt": "2026-03-24T12:00:00Z"
        }
      },
      "AlertConfigUpsert": {
        "properties": {
          "phMin": {
            "type": "number",
            "title": "Phmin"
          },
          "phMax": {
            "type": "number",
            "title": "Phmax"
          },
          "chlorineMin": {
            "type": "number",
            "title": "Chlorinemin"
          },
          "chlorineMax": {
            "type": "number",
            "title": "Chlorinemax"
          },
          "temperatureMin": {
            "type": "number",
            "title": "Temperaturemin"
          },
          "temperatureMax": {
            "type": "number",
            "title": "Temperaturemax"
          }
        },
        "type": "object",
        "required": [
          "phMin",
          "phMax",
          "chlorineMin",
          "chlorineMax",
          "temperatureMin",
          "temperatureMax"
        ],
        "title": "AlertConfigUpsert"
      },
      "Body_upload_message_photo_threads__thread_id__messages__message_id__photos_post": {
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "Body_upload_message_photo_threads__thread_id__messages__message_id__photos_post"
      },
      "Body_upload_pool_photo_photos_pools__pool_id__post": {
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File"
          },
          "uploaded_by": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Uploaded By"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "Body_upload_pool_photo_photos_pools__pool_id__post"
      },
      "Body_upload_user_profile_photo_photos_users__user_id__profile_post": {
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File"
          },
          "uploaded_by": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Uploaded By"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "Body_upload_user_profile_photo_photos_users__user_id__profile_post"
      },
      "Body_upload_visit_photo_photos_visits__visit_id__post": {
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File"
          },
          "uploaded_by": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Uploaded By"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "Body_upload_visit_photo_photos_visits__visit_id__post"
      },
      "ChangePasswordRequest": {
        "properties": {
          "currentPassword": {
            "type": "string",
            "minLength": 6,
            "title": "Currentpassword"
          },
          "newPassword": {
            "type": "string",
            "minLength": 6,
            "title": "Newpassword"
          }
        },
        "type": "object",
        "required": [
          "currentPassword",
          "newPassword"
        ],
        "title": "ChangePasswordRequest"
      },
      "CreatePoolVisitRequest": {
        "properties": {
          "technicianId": {
            "type": "string",
            "title": "Technicianid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "ph": {
            "type": "number",
            "title": "Ph"
          },
          "chlorine": {
            "type": "number",
            "title": "Chlorine"
          },
          "temperature": {
            "type": "number",
            "title": "Temperature"
          },
          "isOk": {
            "type": "boolean",
            "title": "Isok"
          },
          "actions": {
            "type": "string",
            "title": "Actions"
          },
          "problem": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Problem"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "in_progress",
              "resolved"
            ],
            "title": "Status",
            "default": "pending"
          },
          "observations": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Observations"
          }
        },
        "type": "object",
        "required": [
          "technicianId",
          "ph",
          "chlorine",
          "temperature",
          "isOk",
          "actions"
        ],
        "title": "CreatePoolVisitRequest"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "Invite": {
        "properties": {
          "_id": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": " Id",
            "description": "MongoDB document ObjectID"
          },
          "ownerId": {
            "type": "string",
            "title": "Ownerid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "technicianId": {
            "type": "string",
            "title": "Technicianid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "poolId": {
            "type": "string",
            "title": "Poolid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "status": {
            "type": "string",
            "enum": [
              "accepted",
              "pending",
              "declined"
            ],
            "title": "Status",
            "default": "pending"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Createdat"
          },
          "respondedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Respondedat"
          },
          "expiresAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expiresat"
          }
        },
        "type": "object",
        "required": [
          "ownerId",
          "technicianId",
          "poolId"
        ],
        "title": "Invite",
        "example": {
          "createdAt": "2024-01-01T00:00:00Z",
          "expiresAt": "2024-01-31T00:00:00Z",
          "ownerId": "65fb1f7d2f9b1c7e8c123456",
          "poolId": "65fb1f7d2f9b1c7e8c999999",
          "status": "pending",
          "technicianId": "65fb1f7d2f9b1c7e8c654321"
        }
      },
      "InviteByEmailRequest": {
        "properties": {
          "technicianEmail": {
            "type": "string",
            "title": "Technicianemail"
          }
        },
        "type": "object",
        "required": [
          "technicianEmail"
        ],
        "title": "InviteByEmailRequest"
      },
      "InviteCreate": {
        "properties": {
          "ownerId": {
            "type": "string",
            "title": "Ownerid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "technicianId": {
            "type": "string",
            "title": "Technicianid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "poolId": {
            "type": "string",
            "title": "Poolid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "status": {
            "type": "string",
            "enum": [
              "accepted",
              "pending",
              "declined"
            ],
            "title": "Status",
            "default": "pending"
          },
          "createdAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Createdat"
          },
          "respondedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Respondedat"
          },
          "expiresAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expiresat"
          }
        },
        "type": "object",
        "required": [
          "ownerId",
          "technicianId",
          "poolId"
        ],
        "title": "InviteCreate"
      },
      "InviteUpdate": {
        "properties": {
          "ownerId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ownerid"
          },
          "technicianId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Technicianid"
          },
          "poolId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poolid"
          },
          "status": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "accepted",
                  "pending",
                  "declined"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "createdAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Createdat"
          },
          "respondedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Respondedat"
          },
          "expiresAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expiresat"
          }
        },
        "type": "object",
        "title": "InviteUpdate"
      },
      "LoginRequest": {
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "title": "Email"
          },
          "password": {
            "type": "string",
            "title": "Password"
          }
        },
        "type": "object",
        "required": [
          "email",
          "password"
        ],
        "title": "LoginRequest"
      },
      "MessageCreate": {
        "properties": {
          "messageType": {
            "type": "string",
            "enum": [
              "question",
              "answer"
            ],
            "title": "Messagetype"
          },
          "body": {
            "type": "string",
            "title": "Body"
          },
          "replyToMessageId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Replytomessageid"
          }
        },
        "type": "object",
        "required": [
          "messageType",
          "body"
        ],
        "title": "MessageCreate"
      },
      "MessageResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "threadId": {
            "type": "string",
            "title": "Threadid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "poolId": {
            "type": "string",
            "title": "Poolid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "authorId": {
            "type": "string",
            "title": "Authorid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "authorRole": {
            "type": "string",
            "enum": [
              "owner",
              "technician",
              "admin"
            ],
            "title": "Authorrole"
          },
          "messageType": {
            "type": "string",
            "enum": [
              "question",
              "answer"
            ],
            "title": "Messagetype"
          },
          "body": {
            "type": "string",
            "title": "Body"
          },
          "replyToMessageId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Replytomessageid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Createdat"
          },
          "updatedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updatedat"
          },
          "photos": {
            "items": {
              "$ref": "#/components/schemas/PhotoResponse"
            },
            "type": "array",
            "title": "Photos"
          }
        },
        "type": "object",
        "required": [
          "id",
          "threadId",
          "poolId",
          "authorId",
          "authorRole",
          "messageType",
          "body",
          "createdAt"
        ],
        "title": "MessageResponse"
      },
      "MessageThread": {
        "properties": {
          "_id": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": " Id",
            "description": "MongoDB document ObjectID"
          },
          "poolId": {
            "type": "string",
            "title": "Poolid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "createdBy": {
            "type": "string",
            "title": "Createdby",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "createdByRole": {
            "type": "string",
            "enum": [
              "owner",
              "technician",
              "admin"
            ],
            "title": "Createdbyrole"
          },
          "subject": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "title": "Subject"
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "answered",
              "closed"
            ],
            "title": "Status",
            "default": "open"
          },
          "visitId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Visitid"
          },
          "lastMessageAt": {
            "type": "string",
            "format": "date-time",
            "title": "Lastmessageat"
          },
          "lastMessagePreview": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lastmessagepreview"
          },
          "lastMessageAuthorId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lastmessageauthorid"
          },
          "lastMessageAuthorRole": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "owner",
                  "technician",
                  "admin"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Lastmessageauthorrole"
          },
          "lastMessageType": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "question",
                  "answer"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Lastmessagetype"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Createdat"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "title": "Updatedat"
          }
        },
        "type": "object",
        "required": [
          "poolId",
          "createdBy",
          "createdByRole",
          "subject"
        ],
        "title": "MessageThread",
        "example": {
          "createdAt": "2024-01-10T14:00:00Z",
          "createdBy": "65fb1f7d2f9b1c7e8c654321",
          "createdByRole": "owner",
          "lastMessageAt": "2024-01-10T14:00:00Z",
          "lastMessageAuthorId": "65fb1f7d2f9b1c7e8c654321",
          "lastMessageAuthorRole": "owner",
          "lastMessagePreview": "Vi el valor bajo en la ultima visita, hay que corregir hoy?",
          "lastMessageType": "question",
          "poolId": "65fb1f7d2f9b1c7e8c123456",
          "status": "open",
          "subject": "Consulta sobre el cloro",
          "updatedAt": "2024-01-10T14:00:00Z"
        }
      },
      "MessageThreadCreate": {
        "properties": {
          "subject": {
            "type": "string",
            "title": "Subject"
          },
          "messageType": {
            "type": "string",
            "enum": [
              "question",
              "answer"
            ],
            "title": "Messagetype"
          },
          "body": {
            "type": "string",
            "title": "Body"
          },
          "visitId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Visitid"
          }
        },
        "type": "object",
        "required": [
          "subject",
          "messageType",
          "body"
        ],
        "title": "MessageThreadCreate"
      },
      "MessageThreadListItem": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "poolId": {
            "type": "string",
            "title": "Poolid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "createdBy": {
            "type": "string",
            "title": "Createdby",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "createdByRole": {
            "type": "string",
            "enum": [
              "owner",
              "technician",
              "admin"
            ],
            "title": "Createdbyrole"
          },
          "subject": {
            "type": "string",
            "title": "Subject"
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "answered",
              "closed"
            ],
            "title": "Status"
          },
          "visitId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Visitid"
          },
          "lastMessageAt": {
            "type": "string",
            "format": "date-time",
            "title": "Lastmessageat"
          },
          "lastMessagePreview": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lastmessagepreview"
          },
          "lastMessageAuthorId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lastmessageauthorid"
          },
          "lastMessageAuthorRole": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "owner",
                  "technician",
                  "admin"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Lastmessageauthorrole"
          },
          "lastMessageType": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "question",
                  "answer"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Lastmessagetype"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Createdat"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "title": "Updatedat"
          },
          "messageCount": {
            "type": "integer",
            "title": "Messagecount"
          }
        },
        "type": "object",
        "required": [
          "id",
          "poolId",
          "createdBy",
          "createdByRole",
          "subject",
          "status",
          "lastMessageAt",
          "createdAt",
          "updatedAt",
          "messageCount"
        ],
        "title": "MessageThreadListItem"
      },
      "MessageThreadUpdate": {
        "properties": {
          "subject": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subject"
          },
          "status": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "open",
                  "answered",
                  "closed"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          }
        },
        "type": "object",
        "title": "MessageThreadUpdate"
      },
      "MessageUpdate": {
        "properties": {
          "body": {
            "type": "string",
            "title": "Body"
          }
        },
        "type": "object",
        "required": [
          "body"
        ],
        "title": "MessageUpdate"
      },
      "PhotoResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "fileName": {
            "type": "string",
            "title": "Filename"
          },
          "blobPath": {
            "type": "string",
            "title": "Blobpath"
          },
          "contentType": {
            "type": "string",
            "title": "Contenttype"
          },
          "size": {
            "type": "integer",
            "title": "Size"
          },
          "userId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Userid"
          },
          "visitId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Visitid"
          },
          "poolId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poolid"
          },
          "threadId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threadid"
          },
          "messageId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Messageid"
          },
          "uploadedBy": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Uploadedby"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Createdat"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "url": {
            "type": "string",
            "title": "Url"
          }
        },
        "type": "object",
        "required": [
          "id",
          "fileName",
          "blobPath",
          "contentType",
          "size",
          "createdAt",
          "url"
        ],
        "title": "PhotoResponse"
      },
      "Pool": {
        "properties": {
          "_id": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": " Id",
            "description": "MongoDB document ObjectID"
          },
          "ownerId": {
            "type": "string",
            "title": "Ownerid",
            "description": "Ref User owner",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Nombre de la piscina"
          },
          "location": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PoolLocation"
              }
            ],
            "description": "Ubicación geográfica de la piscina"
          },
          "volume": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Volume",
            "description": "Volumen de la piscina"
          },
          "depth": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Depth",
            "description": "Profundidad de la piscina"
          },
          "poolType": {
            "type": "string",
            "enum": [
              "SALTY",
              "CHLORINE"
            ],
            "title": "Pooltype"
          },
          "technicianIds": {
            "items": {
              "type": "string",
              "example": "5eb7cf5a86d9755df3a6c593"
            },
            "type": "array",
            "title": "Technicianids"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Createdat"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "title": "Updatedat"
          }
        },
        "type": "object",
        "required": [
          "ownerId",
          "name",
          "location",
          "poolType"
        ],
        "title": "Pool",
        "example": {
          "createdAt": "2024-01-01T00:00:00Z",
          "depth": 1.8,
          "location": {
            "address": "Rambla República de México 5515, Montevideo, Uruguay",
            "lat": -34.882,
            "lng": -56.079
          },
          "name": "Casa de Playa",
          "ownerId": "65fb1f7d2f9b1c7e8c123456",
          "poolType": "SALTY",
          "technicianIds": [
            "65fb1f7d2f9b1c7e8c654321"
          ],
          "updatedAt": "2024-01-05T12:00:00Z",
          "volume": 42000.0
        }
      },
      "PoolCreate": {
        "properties": {
          "ownerId": {
            "type": "string",
            "title": "Ownerid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "location": {
            "$ref": "#/components/schemas/PoolLocation"
          },
          "volume": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Volume"
          },
          "depth": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Depth"
          },
          "poolType": {
            "type": "string",
            "enum": [
              "SALTY",
              "CHLORINE"
            ],
            "title": "Pooltype"
          },
          "technicianIds": {
            "anyOf": [
              {
                "items": {
                  "type": "string",
                  "example": "5eb7cf5a86d9755df3a6c593"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Technicianids"
          },
          "createdAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Createdat"
          },
          "updatedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updatedat"
          }
        },
        "type": "object",
        "required": [
          "ownerId",
          "name",
          "location",
          "poolType"
        ],
        "title": "PoolCreate"
      },
      "PoolDashboardResponse": {
        "properties": {
          "ownerEmail": {
            "type": "string",
            "title": "Owneremail",
            "default": ""
          },
          "technicianEmail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Technicianemail"
          },
          "poolName": {
            "type": "string",
            "title": "Poolname",
            "default": ""
          },
          "poolLocation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PoolLocation"
              },
              {
                "type": "null"
              }
            ]
          },
          "poolVolume": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poolvolume"
          },
          "poolDepth": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pooldepth"
          },
          "lastVisitDate": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lastvisitdate"
          },
          "isPoolOk": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ispoolok"
          },
          "observations": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Observations"
          },
          "ph": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ph"
          },
          "chlorine": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Chlorine"
          },
          "temperature": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Temperature"
          }
        },
        "type": "object",
        "title": "PoolDashboardResponse",
        "example": {
          "chlorine": 1.5,
          "isPoolOk": true,
          "lastVisitDate": "2026-03-02T12:00:00Z",
          "observations": "Se limpió filtro y se ajustó cloro.",
          "ownerEmail": "owner@mail.com",
          "ph": 7.2,
          "poolDepth": 1.8,
          "poolLocation": {
            "address": "Rambla República de México 5515, Montevideo, Uruguay",
            "lat": -34.882,
            "lng": -56.079
          },
          "poolName": "Casa Playa",
          "poolVolume": 42000.0,
          "technicianEmail": "tech@mail.com",
          "temperature": 26.4
        }
      },
      "PoolLocation": {
        "properties": {
          "address": {
            "type": "string",
            "title": "Address"
          },
          "lat": {
            "type": "number",
            "title": "Lat"
          },
          "lng": {
            "type": "number",
            "title": "Lng"
          }
        },
        "type": "object",
        "required": [
          "address",
          "lat",
          "lng"
        ],
        "title": "PoolLocation"
      },
      "PoolUpdate": {
        "properties": {
          "ownerId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ownerid"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "location": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PoolLocation"
              },
              {
                "type": "null"
              }
            ]
          },
          "volume": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Volume"
          },
          "depth": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Depth"
          },
          "poolType": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "SALTY",
                  "CHLORINE"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Pooltype"
          },
          "technicianIds": {
            "anyOf": [
              {
                "items": {
                  "type": "string",
                  "example": "5eb7cf5a86d9755df3a6c593"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Technicianids"
          }
        },
        "type": "object",
        "title": "PoolUpdate"
      },
      "PoolValues": {
        "properties": {
          "_id": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": " Id",
            "description": "MongoDB document ObjectID"
          },
          "poolId": {
            "type": "string",
            "title": "Poolid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "ph": {
            "type": "number",
            "title": "Ph"
          },
          "chlorine": {
            "type": "number",
            "title": "Chlorine"
          },
          "temperature": {
            "type": "number",
            "title": "Temperature"
          },
          "isOk": {
            "type": "boolean",
            "title": "Isok"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Createdat"
          }
        },
        "type": "object",
        "required": [
          "poolId",
          "ph",
          "chlorine",
          "temperature",
          "isOk"
        ],
        "title": "PoolValues",
        "example": {
          "chlorine": 1.8,
          "createdAt": "2024-01-05T12:00:00Z",
          "isOk": true,
          "ph": 7.4,
          "poolId": "65fb1f7d2f9b1c7e8c123456",
          "temperature": 26.5
        }
      },
      "PoolValuesCreate": {
        "properties": {
          "poolId": {
            "type": "string",
            "title": "Poolid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "ph": {
            "type": "number",
            "title": "Ph"
          },
          "chlorine": {
            "type": "number",
            "title": "Chlorine"
          },
          "temperature": {
            "type": "number",
            "title": "Temperature"
          },
          "isOk": {
            "type": "boolean",
            "title": "Isok"
          },
          "createdAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Createdat"
          }
        },
        "type": "object",
        "required": [
          "poolId",
          "ph",
          "chlorine",
          "temperature",
          "isOk"
        ],
        "title": "PoolValuesCreate"
      },
      "PoolValuesUpdate": {
        "properties": {
          "poolId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poolid"
          },
          "ph": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ph"
          },
          "chlorine": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Chlorine"
          },
          "temperature": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Temperature"
          },
          "isOk": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Isok"
          },
          "createdAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Createdat"
          }
        },
        "type": "object",
        "title": "PoolValuesUpdate"
      },
      "RegisterRequest": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "lastName": {
            "type": "string",
            "title": "Lastname"
          },
          "email": {
            "type": "string",
            "format": "email",
            "title": "Email"
          },
          "password": {
            "type": "string",
            "title": "Password"
          },
          "role": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserRole"
              }
            ],
            "default": "owner"
          }
        },
        "type": "object",
        "required": [
          "name",
          "lastName",
          "email",
          "password"
        ],
        "title": "RegisterRequest"
      },
      "TokenResponse": {
        "properties": {
          "access_token": {
            "type": "string",
            "title": "Access Token"
          },
          "token_type": {
            "type": "string",
            "title": "Token Type",
            "default": "bearer"
          }
        },
        "type": "object",
        "required": [
          "access_token"
        ],
        "title": "TokenResponse"
      },
      "User": {
        "properties": {
          "_id": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": " Id",
            "description": "MongoDB document ObjectID"
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Nombre"
          },
          "lastName": {
            "type": "string",
            "title": "Lastname",
            "description": "Apellido"
          },
          "email": {
            "type": "string",
            "format": "email",
            "title": "Email",
            "description": "Correo único"
          },
          "passwordHash": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Passwordhash",
            "description": "Hash de contraseña"
          },
          "role": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserRole"
              }
            ],
            "description": "Rol del usuario",
            "default": "owner"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserStatus"
              }
            ],
            "description": "Estado del usuario",
            "default": "pending"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Createdat"
          },
          "lastLoginAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lastloginat",
            "description": "Último login"
          },
          "deletedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deletedat",
            "description": "Fecha de borrado lógico"
          }
        },
        "type": "object",
        "required": [
          "name",
          "lastName",
          "email"
        ],
        "title": "User",
        "example": {
          "createdAt": "2024-01-01T00:00:00Z",
          "email": "ada@example.com",
          "lastLoginAt": "2024-01-10T12:00:00Z",
          "lastName": "Lovelace",
          "name": "Ada",
          "passwordHash": "$2b$12$ABCDEFG...",
          "role": "admin",
          "status": "active"
        }
      },
      "UserCreate": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "lastName": {
            "type": "string",
            "title": "Lastname"
          },
          "email": {
            "type": "string",
            "format": "email",
            "title": "Email"
          },
          "passwordHash": {
            "type": "string",
            "title": "Passwordhash"
          },
          "role": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserRole"
              }
            ],
            "default": "owner"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserStatus"
              }
            ],
            "default": "pending"
          },
          "lastLoginAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lastloginat"
          }
        },
        "type": "object",
        "required": [
          "name",
          "lastName",
          "email",
          "passwordHash"
        ],
        "title": "UserCreate"
      },
      "UserRole": {
        "type": "string",
        "enum": [
          "admin",
          "owner",
          "technician"
        ],
        "title": "UserRole"
      },
      "UserStatus": {
        "type": "string",
        "enum": [
          "active",
          "blocked",
          "pending",
          "deleted"
        ],
        "title": "UserStatus"
      },
      "UserUpdate": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "lastName": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lastname"
          },
          "email": {
            "anyOf": [
              {
                "type": "string",
                "format": "email"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          },
          "passwordHash": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Passwordhash"
          },
          "role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserRole"
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "lastLoginAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lastloginat"
          }
        },
        "type": "object",
        "title": "UserUpdate"
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "Visit": {
        "properties": {
          "_id": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": " Id",
            "description": "MongoDB document ObjectID"
          },
          "date": {
            "type": "string",
            "format": "date-time",
            "title": "Date"
          },
          "technicianId": {
            "type": "string",
            "title": "Technicianid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "poolId": {
            "type": "string",
            "title": "Poolid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "poolValueId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poolvalueid"
          },
          "isPoolOk": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ispoolok"
          },
          "isOk": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Isok"
          },
          "actions": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actions"
          },
          "problem": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Problem"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "in_progress",
              "resolved"
            ],
            "title": "Status",
            "default": "pending"
          },
          "observations": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Observations"
          }
        },
        "type": "object",
        "required": [
          "date",
          "technicianId",
          "poolId"
        ],
        "title": "Visit",
        "example": {
          "actions": "Se limpia filtro y se ajusta cloro",
          "date": "2024-01-10T14:00:00Z",
          "isOk": true,
          "isPoolOk": true,
          "observations": "Agua clara, sin anomalías visuales.",
          "poolId": "65fb1f7d2f9b1c7e8c123456",
          "poolValueId": "65fb1f7d2f9b1c7e8c777777",
          "status": "pending",
          "technicianId": "65fb1f7d2f9b1c7e8c654321"
        }
      },
      "VisitCreate": {
        "properties": {
          "date": {
            "type": "string",
            "format": "date-time",
            "title": "Date"
          },
          "technicianId": {
            "type": "string",
            "title": "Technicianid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "poolId": {
            "type": "string",
            "title": "Poolid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "poolValueId": {
            "type": "string",
            "title": "Poolvalueid",
            "example": "5eb7cf5a86d9755df3a6c593"
          },
          "isPoolOk": {
            "type": "boolean",
            "title": "Ispoolok"
          },
          "observations": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Observations"
          }
        },
        "type": "object",
        "required": [
          "date",
          "technicianId",
          "poolId",
          "poolValueId",
          "isPoolOk"
        ],
        "title": "VisitCreate"
      },
      "VisitUpdate": {
        "properties": {
          "date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Date"
          },
          "technicianId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Technicianid"
          },
          "poolId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poolid"
          },
          "poolValueId": {
            "anyOf": [
              {
                "type": "string",
                "example": "5eb7cf5a86d9755df3a6c593"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poolvalueid"
          },
          "isPoolOk": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ispoolok"
          },
          "observations": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Observations"
          }
        },
        "type": "object",
        "title": "VisitUpdate"
      }
    },
    "securitySchemes": {
      "OAuth2PasswordBearer": {
        "type": "oauth2",
        "flows": {
          "password": {
            "scopes": {},
            "tokenUrl": "auth/login"
          }
        }
      }
    }
  }
}