{ "swagger": "2.0", "info": { "description": "API for GoHorseJobs recruitment platform.", "title": "GoHorseJobs API", "contact": {}, "version": "1.0" }, "host": "localhost:8080", "basePath": "/", "paths": { "/api/v1/admin/cloudflare/cache/purge-all": { "post": { "security": [ { "BearerAuth": [] } ], "description": "Purges all cached content for the configured zone", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Admin - Cloudflare" ], "summary": "Purge All Cache", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_admin_cloudflare.PurgeResponse" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/admin/cloudflare/cache/purge-hosts": { "post": { "security": [ { "BearerAuth": [] } ], "description": "Purges content by hostnames", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Admin - Cloudflare" ], "summary": "Purge Cache by Hosts", "parameters": [ { "description": "Hosts to purge", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_admin_cloudflare.PurgeHostsRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_admin_cloudflare.PurgeResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/admin/cloudflare/cache/purge-tags": { "post": { "security": [ { "BearerAuth": [] } ], "description": "Purges content by cache tags (Enterprise only)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Admin - Cloudflare" ], "summary": "Purge Cache by Tags", "parameters": [ { "description": "Tags to purge", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_admin_cloudflare.PurgeTagsRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_admin_cloudflare.PurgeResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/admin/cloudflare/cache/purge-urls": { "post": { "security": [ { "BearerAuth": [] } ], "description": "Purges specific URLs from cache", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Admin - Cloudflare" ], "summary": "Purge Cache by URLs", "parameters": [ { "description": "URLs to purge", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_admin_cloudflare.PurgeURLsRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_admin_cloudflare.PurgeResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/admin/cloudflare/zones": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns all zones associated with the Cloudflare account", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Admin - Cloudflare" ], "summary": "List Cloudflare Zones", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/internal_admin_cloudflare.Zone" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/admin/cpanel/emails": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns all email accounts for the cPanel account", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Admin - cPanel" ], "summary": "List Email Accounts", "parameters": [ { "type": "string", "description": "Filter by domain", "name": "domain", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/internal_admin_cpanel.EmailAccount" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } }, "post": { "security": [ { "BearerAuth": [] } ], "description": "Creates a new email account", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Admin - cPanel" ], "summary": "Create Email Account", "parameters": [ { "description": "Email details", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_admin_cpanel.CreateEmailRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/admin/cpanel/emails/{email}": { "delete": { "security": [ { "BearerAuth": [] } ], "description": "Deletes an email account", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Admin - cPanel" ], "summary": "Delete Email Account", "parameters": [ { "type": "string", "description": "Email address", "name": "email", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/admin/cpanel/emails/{email}/password": { "put": { "security": [ { "BearerAuth": [] } ], "description": "Changes the password for an email account", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Admin - cPanel" ], "summary": "Change Email Password", "parameters": [ { "type": "string", "description": "Email address", "name": "email", "in": "path", "required": true }, { "description": "New password", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_admin_cpanel.ChangePasswordRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/admin/cpanel/emails/{email}/quota": { "put": { "security": [ { "BearerAuth": [] } ], "description": "Updates the disk quota for an email account", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Admin - cPanel" ], "summary": "Update Email Quota", "parameters": [ { "type": "string", "description": "Email address", "name": "email", "in": "path", "required": true }, { "description": "New quota in MB", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_admin_cpanel.UpdateQuotaRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/auth/login": { "post": { "description": "Authenticates a user by email and password. Returns JWT and user info.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Auth" ], "summary": "User Login", "parameters": [ { "description": "Login Credentials", "name": "login", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_core_dto.LoginRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_core_dto.AuthResponse" } }, "400": { "description": "Invalid Request", "schema": { "type": "string" } }, "401": { "description": "Unauthorized", "schema": { "type": "string" } } } } }, "/api/v1/companies": { "get": { "description": "Returns a list of all companies.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Companies" ], "summary": "List Companies", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_core_dto.CompanyResponse" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } }, "post": { "description": "Registers a new company and creates an initial admin user.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Companies" ], "summary": "Create Company (Tenant)", "parameters": [ { "description": "Company Details", "name": "company", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_core_dto.CreateCompanyRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_core_dto.CompanyResponse" } }, "400": { "description": "Invalid Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/storage/download-url": { "post": { "security": [ { "BearerAuth": [] } ], "description": "Generate a pre-signed URL to download a private file from S3", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Storage" ], "summary": "Generate download URL", "parameters": [ { "description": "Download request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handlers.DownloadURLRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handlers.DownloadURLResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/storage/files": { "delete": { "security": [ { "BearerAuth": [] } ], "description": "Delete a stored file by key", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Storage" ], "summary": "Delete file", "parameters": [ { "type": "string", "description": "File key", "name": "key", "in": "query", "required": true } ], "responses": { "204": { "description": "No Content" }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/storage/upload-url": { "post": { "security": [ { "BearerAuth": [] } ], "description": "Generate a pre-signed URL to upload a file to S3", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Storage" ], "summary": "Generate upload URL", "parameters": [ { "description": "Upload request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/internal_handlers.UploadURLRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/internal_handlers.UploadURLResponse" } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/users": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Returns a list of users belonging to the authenticated tenant.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Users" ], "summary": "List Users", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_core_dto.UserResponse" } } }, "403": { "description": "Forbidden", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } }, "post": { "security": [ { "BearerAuth": [] } ], "description": "Creates a new user under the current tenant. Requires Admin role.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Users" ], "summary": "Create User", "parameters": [ { "description": "User Details", "name": "user", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_core_dto.CreateUserRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_core_dto.UserResponse" } }, "400": { "description": "Invalid Request", "schema": { "type": "string" } }, "403": { "description": "Forbidden", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/api/v1/users/{id}": { "delete": { "security": [ { "BearerAuth": [] } ], "description": "Deletes a user by ID. Must belong to the same tenant.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Users" ], "summary": "Delete User", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "User deleted", "schema": { "type": "string" } }, "403": { "description": "Forbidden", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/applications": { "get": { "description": "List all applications for a job", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Applications" ], "summary": "List Applications", "parameters": [ { "type": "integer", "description": "Filter applications by job ID", "name": "jobId", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_models.Application" } } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } }, "post": { "description": "Submit a new job application for a posting", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Applications" ], "summary": "Create Application", "parameters": [ { "description": "Application data", "name": "application", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_dto.CreateApplicationRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_models.Application" } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/applications/{id}": { "get": { "description": "Retrieve a job application by its ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Applications" ], "summary": "Get Application", "parameters": [ { "type": "integer", "description": "Application ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_models.Application" } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "404": { "description": "Not Found", "schema": { "type": "string" } } } } }, "/applications/{id}/status": { "put": { "description": "Update the status of a job application", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Applications" ], "summary": "Update Application Status", "parameters": [ { "type": "integer", "description": "Application ID", "name": "id", "in": "path", "required": true }, { "description": "Status update", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_dto.UpdateApplicationStatusRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_models.Application" } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/jobs": { "get": { "description": "Get a paginated list of job postings with optional filters", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Jobs" ], "summary": "List all jobs", "parameters": [ { "type": "integer", "description": "Page number (default: 1)", "name": "page", "in": "query" }, { "type": "integer", "description": "Items per page (default: 10, max: 100)", "name": "limit", "in": "query" }, { "type": "integer", "description": "Filter by company ID", "name": "companyId", "in": "query" }, { "type": "boolean", "description": "Filter by featured status", "name": "featured", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_dto.PaginatedResponse" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } }, "post": { "description": "Create a new job posting", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Jobs" ], "summary": "Create a new job", "parameters": [ { "description": "Job data", "name": "job", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_dto.CreateJobRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_models.Job" } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } }, "/jobs/{id}": { "get": { "description": "Get a single job posting by its ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Jobs" ], "summary": "Get job by ID", "parameters": [ { "type": "integer", "description": "Job ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_models.Job" } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "404": { "description": "Not Found", "schema": { "type": "string" } } } }, "put": { "description": "Update an existing job posting", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Jobs" ], "summary": "Update a job", "parameters": [ { "type": "integer", "description": "Job ID", "name": "id", "in": "path", "required": true }, { "description": "Updated job data", "name": "job", "in": "body", "required": true, "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_dto.UpdateJobRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_models.Job" } }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } }, "delete": { "description": "Delete a job posting", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Jobs" ], "summary": "Delete a job", "parameters": [ { "type": "integer", "description": "Job ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "400": { "description": "Bad Request", "schema": { "type": "string" } }, "500": { "description": "Internal Server Error", "schema": { "type": "string" } } } } } }, "definitions": { "github_com_rede5_gohorsejobs_backend_internal_core_dto.AuthResponse": { "type": "object", "properties": { "token": { "type": "string" }, "user": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_core_dto.UserResponse" } } }, "github_com_rede5_gohorsejobs_backend_internal_core_dto.CompanyResponse": { "type": "object", "properties": { "created_at": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "status": { "type": "string" } } }, "github_com_rede5_gohorsejobs_backend_internal_core_dto.CreateCompanyRequest": { "type": "object", "properties": { "admin_email": { "type": "string" }, "contact": { "type": "string" }, "document": { "type": "string" }, "name": { "type": "string" } } }, "github_com_rede5_gohorsejobs_backend_internal_core_dto.CreateUserRequest": { "type": "object", "properties": { "email": { "type": "string" }, "name": { "type": "string" }, "password": { "type": "string" }, "roles": { "description": "e.g. [\"RECRUITER\"]", "type": "array", "items": { "type": "string" } } } }, "github_com_rede5_gohorsejobs_backend_internal_core_dto.LoginRequest": { "type": "object", "properties": { "email": { "type": "string" }, "password": { "type": "string" } } }, "github_com_rede5_gohorsejobs_backend_internal_core_dto.UserResponse": { "type": "object", "properties": { "created_at": { "type": "string" }, "email": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "roles": { "type": "array", "items": { "type": "string" } }, "status": { "type": "string" } } }, "github_com_rede5_gohorsejobs_backend_internal_dto.CreateApplicationRequest": { "type": "object", "required": [ "jobId" ], "properties": { "documents": { "type": "object", "additionalProperties": true }, "email": { "type": "string" }, "jobId": { "type": "integer" }, "lineId": { "type": "string" }, "message": { "type": "string" }, "name": { "type": "string" }, "phone": { "type": "string" }, "resumeUrl": { "type": "string" }, "userId": { "type": "integer" }, "whatsapp": { "type": "string" } } }, "github_com_rede5_gohorsejobs_backend_internal_dto.CreateJobRequest": { "type": "object", "required": [ "companyId", "description", "title" ], "properties": { "benefits": { "type": "object", "additionalProperties": true }, "cityId": { "type": "integer" }, "companyId": { "type": "integer" }, "description": { "type": "string", "minLength": 20 }, "employmentType": { "type": "string", "enum": [ "full-time", "part-time", "dispatch", "contract" ] }, "languageLevel": { "type": "string" }, "location": { "type": "string" }, "regionId": { "type": "integer" }, "requirements": { "type": "object", "additionalProperties": true }, "salaryMax": { "type": "number" }, "salaryMin": { "type": "number" }, "salaryType": { "type": "string", "enum": [ "hourly", "monthly", "yearly" ] }, "status": { "type": "string", "enum": [ "draft", "open", "closed" ] }, "title": { "type": "string", "maxLength": 255, "minLength": 5 }, "visaSupport": { "type": "boolean" }, "workingHours": { "type": "string" } } }, "github_com_rede5_gohorsejobs_backend_internal_dto.PaginatedResponse": { "type": "object", "properties": { "data": {}, "pagination": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_dto.Pagination" } } }, "github_com_rede5_gohorsejobs_backend_internal_dto.Pagination": { "type": "object", "properties": { "limit": { "type": "integer" }, "page": { "type": "integer" }, "total": { "type": "integer" } } }, "github_com_rede5_gohorsejobs_backend_internal_dto.UpdateApplicationStatusRequest": { "type": "object", "required": [ "status" ], "properties": { "notes": { "type": "string" }, "status": { "type": "string", "enum": [ "pending", "reviewed", "shortlisted", "rejected", "hired" ] } } }, "github_com_rede5_gohorsejobs_backend_internal_dto.UpdateJobRequest": { "type": "object", "properties": { "benefits": { "type": "object", "additionalProperties": true }, "cityId": { "type": "integer" }, "description": { "type": "string", "minLength": 20 }, "employmentType": { "type": "string", "enum": [ "full-time", "part-time", "dispatch", "contract" ] }, "languageLevel": { "type": "string" }, "location": { "type": "string" }, "regionId": { "type": "integer" }, "requirements": { "type": "object", "additionalProperties": true }, "salaryMax": { "type": "number" }, "salaryMin": { "type": "number" }, "salaryType": { "type": "string", "enum": [ "hourly", "monthly", "yearly" ] }, "status": { "type": "string", "enum": [ "draft", "open", "closed" ] }, "title": { "type": "string", "maxLength": 255, "minLength": 5 }, "visaSupport": { "type": "boolean" }, "workingHours": { "type": "string" } } }, "github_com_rede5_gohorsejobs_backend_internal_models.Application": { "type": "object", "properties": { "createdAt": { "description": "Metadata", "type": "string" }, "documents": { "description": "Array of {type, url}", "allOf": [ { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_models.JSONMap" } ] }, "email": { "type": "string" }, "id": { "type": "integer" }, "jobId": { "type": "integer" }, "lineId": { "type": "string" }, "message": { "description": "Application Content", "type": "string" }, "name": { "description": "Applicant Info (for guest applications)", "type": "string" }, "notes": { "type": "string" }, "phone": { "type": "string" }, "resumeUrl": { "type": "string" }, "status": { "description": "Status \u0026 Notes", "type": "string" }, "updatedAt": { "type": "string" }, "userId": { "description": "NULL for guest applications", "type": "integer" }, "whatsapp": { "type": "string" } } }, "github_com_rede5_gohorsejobs_backend_internal_models.JSONMap": { "type": "object", "additionalProperties": true }, "github_com_rede5_gohorsejobs_backend_internal_models.Job": { "type": "object", "properties": { "benefits": { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_models.JSONMap" }, "cityId": { "type": "integer" }, "companyId": { "type": "integer" }, "createdAt": { "description": "Metadata", "type": "string" }, "createdBy": { "type": "integer" }, "description": { "type": "string" }, "employmentType": { "description": "Employment", "type": "string" }, "id": { "type": "integer" }, "isFeatured": { "description": "Featured job flag", "type": "boolean" }, "languageLevel": { "description": "N5-N1, beginner, none", "type": "string" }, "location": { "description": "Location", "type": "string" }, "regionId": { "type": "integer" }, "requirements": { "description": "Requirements \u0026 Benefits (JSONB arrays)", "allOf": [ { "$ref": "#/definitions/github_com_rede5_gohorsejobs_backend_internal_models.JSONMap" } ] }, "salaryMax": { "type": "number" }, "salaryMin": { "description": "Salary", "type": "number" }, "salaryType": { "description": "hourly, monthly, yearly", "type": "string" }, "status": { "description": "Status", "type": "string" }, "title": { "description": "Job Details", "type": "string" }, "updatedAt": { "type": "string" }, "visaSupport": { "description": "Visa \u0026 Language", "type": "boolean" }, "workingHours": { "type": "string" } } }, "internal_admin_cloudflare.Error": { "type": "object", "properties": { "code": { "type": "integer" }, "message": { "type": "string" } } }, "internal_admin_cloudflare.PurgeHostsRequest": { "type": "object", "properties": { "hosts": { "type": "array", "items": { "type": "string" } } } }, "internal_admin_cloudflare.PurgeResponse": { "type": "object", "properties": { "errors": { "type": "array", "items": { "$ref": "#/definitions/internal_admin_cloudflare.Error" } }, "messages": { "type": "array", "items": { "type": "string" } }, "result": { "type": "object", "properties": { "id": { "type": "string" } } }, "success": { "type": "boolean" } } }, "internal_admin_cloudflare.PurgeTagsRequest": { "type": "object", "properties": { "tags": { "type": "array", "items": { "type": "string" } } } }, "internal_admin_cloudflare.PurgeURLsRequest": { "type": "object", "properties": { "urls": { "type": "array", "items": { "type": "string" } } } }, "internal_admin_cloudflare.Zone": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "status": { "type": "string" } } }, "internal_admin_cpanel.ChangePasswordRequest": { "type": "object", "properties": { "password": { "type": "string" } } }, "internal_admin_cpanel.CreateEmailRequest": { "type": "object", "properties": { "email": { "type": "string" }, "password": { "type": "string" }, "quota": { "description": "MB, 0 = unlimited", "type": "integer" } } }, "internal_admin_cpanel.EmailAccount": { "type": "object", "properties": { "diskquota": { "type": "string" }, "diskused": { "type": "string" }, "domain": { "type": "string" }, "email": { "type": "string" }, "humandiskquota": { "type": "string" }, "humandiskused": { "type": "string" }, "login": { "type": "string" } } }, "internal_admin_cpanel.UpdateQuotaRequest": { "type": "object", "properties": { "quota": { "description": "MB", "type": "integer" } } }, "internal_handlers.DownloadURLRequest": { "type": "object", "properties": { "key": { "type": "string" } } }, "internal_handlers.DownloadURLResponse": { "type": "object", "properties": { "downloadUrl": { "type": "string" }, "expiresIn": { "description": "seconds", "type": "integer" } } }, "internal_handlers.UploadURLRequest": { "type": "object", "properties": { "contentType": { "type": "string" }, "filename": { "type": "string" }, "folder": { "description": "Optional: logos, resumes, documents", "type": "string" } } }, "internal_handlers.UploadURLResponse": { "type": "object", "properties": { "expiresIn": { "description": "seconds", "type": "integer" }, "key": { "type": "string" }, "publicUrl": { "type": "string" }, "uploadUrl": { "type": "string" } } } } }