// Package docs Code generated by swaggo/swag. DO NOT EDIT package docs import "github.com/swaggo/swag" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, "swagger": "2.0", "info": { "description": "{{escape .Description}}", "title": "{{.Title}}", "contact": {}, "version": "{{.Version}}" }, "host": "{{.Host}}", "basePath": "{{.BasePath}}", "paths": { "/about": { "get": { "description": "Retrieve a list of active about entries", "produces": [ "application/json" ], "tags": [ "about" ], "summary": "Get all active about entries", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.About" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/about/active": { "get": { "description": "Retrieve the newest active about entry", "produces": [ "application/json" ], "tags": [ "about" ], "summary": "Get active about entry", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.About" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/about": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all about entries including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all about entries (Admin)", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.About" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new about entry", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a new about entry (Admin)", "parameters": [ { "type": "string", "description": "Title", "name": "title", "in": "formData", "required": true }, { "type": "file", "description": "Image", "name": "image", "in": "formData" }, { "type": "string", "description": "Image subtitle", "name": "image_sub", "in": "formData" }, { "type": "file", "description": "CV file", "name": "cv", "in": "formData" }, { "type": "string", "description": "Birthday", "name": "birthday", "in": "formData" }, { "type": "string", "description": "City", "name": "city", "in": "formData" }, { "type": "string", "description": "Study", "name": "study", "in": "formData" }, { "type": "string", "description": "Website", "name": "website", "in": "formData" }, { "type": "string", "description": "Phone", "name": "phone", "in": "formData" }, { "type": "string", "description": "Age", "name": "age", "in": "formData" }, { "type": "string", "description": "Interests", "name": "interests", "in": "formData" }, { "type": "string", "description": "Degree", "name": "degree", "in": "formData" }, { "type": "string", "description": "X", "name": "x", "in": "formData" }, { "type": "string", "description": "Mail", "name": "mail", "in": "formData" }, { "type": "integer", "description": "Done", "name": "done", "in": "formData" }, { "type": "string", "description": "Project done", "name": "project_done", "in": "formData" }, { "type": "integer", "description": "User count", "name": "user_h", "in": "formData" }, { "type": "string", "description": "Happy user", "name": "hapy_user", "in": "formData" }, { "type": "integer", "description": "Great", "name": "great", "in": "formData" }, { "type": "string", "description": "Great reviews", "name": "great_reviews", "in": "formData" }, { "type": "integer", "description": "Team", "name": "team", "in": "formData" }, { "type": "string", "description": "Support team", "name": "support_team", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" }, { "type": "boolean", "description": "Counter active", "name": "counter_active", "in": "formData" } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.About" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/about/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific about entry", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get an about entry by ID (Admin)", "parameters": [ { "type": "string", "description": "About ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.About" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing about entry", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update an about entry (Admin)", "parameters": [ { "type": "string", "description": "About ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Title", "name": "title", "in": "formData" }, { "type": "file", "description": "Image", "name": "image", "in": "formData" }, { "type": "string", "description": "Image subtitle", "name": "image_sub", "in": "formData" }, { "type": "file", "description": "CV file", "name": "cv", "in": "formData" }, { "type": "string", "description": "Birthday", "name": "birthday", "in": "formData" }, { "type": "string", "description": "City", "name": "city", "in": "formData" }, { "type": "string", "description": "Study", "name": "study", "in": "formData" }, { "type": "string", "description": "Website", "name": "website", "in": "formData" }, { "type": "string", "description": "Phone", "name": "phone", "in": "formData" }, { "type": "string", "description": "Age", "name": "age", "in": "formData" }, { "type": "string", "description": "Interests", "name": "interests", "in": "formData" }, { "type": "string", "description": "Degree", "name": "degree", "in": "formData" }, { "type": "string", "description": "X", "name": "x", "in": "formData" }, { "type": "string", "description": "Mail", "name": "mail", "in": "formData" }, { "type": "integer", "description": "Done", "name": "done", "in": "formData" }, { "type": "string", "description": "Project done", "name": "project_done", "in": "formData" }, { "type": "integer", "description": "User count", "name": "user_h", "in": "formData" }, { "type": "string", "description": "Happy user", "name": "hapy_user", "in": "formData" }, { "type": "integer", "description": "Great", "name": "great", "in": "formData" }, { "type": "string", "description": "Great reviews", "name": "great_reviews", "in": "formData" }, { "type": "integer", "description": "Team", "name": "team", "in": "formData" }, { "type": "string", "description": "Support team", "name": "support_team", "in": "formData" }, { "type": "string", "description": "Slug", "name": "slug", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" }, { "type": "boolean", "description": "Counter active", "name": "counter_active", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.About" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete an about entry by ID", "tags": [ "admin" ], "summary": "Delete an about entry (Admin)", "parameters": [ { "type": "string", "description": "About ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/banners": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all banners including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all banners (Admin)", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Banner" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new banner entry", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a new banner (Admin)", "parameters": [ { "type": "string", "description": "Text color", "name": "color", "in": "formData" }, { "type": "string", "description": "Title", "name": "title", "in": "formData" }, { "type": "string", "description": "Text 1", "name": "text1", "in": "formData" }, { "type": "string", "description": "Text 2", "name": "text2", "in": "formData" }, { "type": "string", "description": "Text 4", "name": "text4", "in": "formData" }, { "type": "string", "description": "Text 5", "name": "text5", "in": "formData" }, { "type": "file", "description": "Image", "name": "image", "in": "formData", "required": true }, { "type": "file", "description": "Small image", "name": "image_k", "in": "formData" }, { "type": "string", "description": "Small image text", "name": "image_k_txt", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.Banner" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/banners/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific banner", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get banner by ID (Admin)", "parameters": [ { "type": "string", "description": "Banner ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Banner" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing banner entry", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update a banner (Admin)", "parameters": [ { "type": "string", "description": "Banner ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Text color", "name": "color", "in": "formData" }, { "type": "string", "description": "Title", "name": "title", "in": "formData" }, { "type": "string", "description": "Text 1", "name": "text1", "in": "formData" }, { "type": "string", "description": "Text 2", "name": "text2", "in": "formData" }, { "type": "string", "description": "Text 4", "name": "text4", "in": "formData" }, { "type": "string", "description": "Text 5", "name": "text5", "in": "formData" }, { "type": "file", "description": "Image", "name": "image", "in": "formData" }, { "type": "file", "description": "Small image", "name": "image_k", "in": "formData" }, { "type": "string", "description": "Small image text", "name": "image_k_txt", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Banner" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a banner by ID", "tags": [ "admin" ], "summary": "Delete a banner (Admin)", "parameters": [ { "type": "string", "description": "Banner ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/contacts": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all contact messages with pagination", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all contact messages (Admin)", "parameters": [ { "type": "integer", "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "description": "Items per page", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/contacts/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific contact message", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get a contact message by ID (Admin)", "parameters": [ { "type": "string", "description": "Contact ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Contact" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a contact message by ID", "tags": [ "admin" ], "summary": "Delete a contact message (Admin)", "parameters": [ { "type": "string", "description": "Contact ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/educations": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all education entries including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all educations (Admin)", "parameters": [ { "type": "string", "description": "Resume ID", "name": "resume_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Education" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new education entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a new education (Admin)", "parameters": [ { "description": "Education Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateEducationRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.Education" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/educations/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific education entry", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get an education by ID (Admin)", "parameters": [ { "type": "string", "description": "Education ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Education" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing education entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update an education (Admin)", "parameters": [ { "type": "string", "description": "Education ID", "name": "id", "in": "path", "required": true }, { "description": "Education Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.UpdateEducationRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Education" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete an education by ID", "tags": [ "admin" ], "summary": "Delete an education (Admin)", "parameters": [ { "type": "string", "description": "Education ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/experiences": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all experience entries including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all experiences (Admin)", "parameters": [ { "type": "string", "description": "Resume ID", "name": "resume_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Experience" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new experience entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a new experience (Admin)", "parameters": [ { "description": "Experience Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateExperienceRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.Experience" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/experiences/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific experience entry", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get an experience by ID (Admin)", "parameters": [ { "type": "string", "description": "Experience ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Experience" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing experience entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update an experience (Admin)", "parameters": [ { "type": "string", "description": "Experience ID", "name": "id", "in": "path", "required": true }, { "description": "Experience Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.UpdateExperienceRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Experience" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete an experience by ID", "tags": [ "admin" ], "summary": "Delete an experience (Admin)", "parameters": [ { "type": "string", "description": "Experience ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/homes": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all homes including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all homes (Admin)", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Home" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new home entry", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a new home (Admin)", "parameters": [ { "type": "string", "description": "Name", "name": "name", "in": "formData", "required": true }, { "type": "string", "description": "Title", "name": "title", "in": "formData", "required": true }, { "type": "string", "description": "Button 1", "name": "button1", "in": "formData", "required": true }, { "type": "string", "description": "Button 2", "name": "button2", "in": "formData", "required": true }, { "type": "string", "description": "Video URL", "name": "video", "in": "formData" }, { "type": "string", "description": "Keywords", "name": "keywords", "in": "formData", "required": true }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "csv", "description": "Tag IDs", "name": "tag_ids", "in": "formData" }, { "type": "file", "description": "Home image", "name": "image", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.Home" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/homes/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific home", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get a home by ID (Admin)", "parameters": [ { "type": "string", "description": "Home ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Home" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing home entry", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update a home (Admin)", "parameters": [ { "type": "string", "description": "Home ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Name", "name": "name", "in": "formData" }, { "type": "string", "description": "Title", "name": "title", "in": "formData" }, { "type": "string", "description": "Button 1", "name": "button1", "in": "formData" }, { "type": "string", "description": "Button 2", "name": "button2", "in": "formData" }, { "type": "string", "description": "Video URL", "name": "video", "in": "formData" }, { "type": "string", "description": "Keywords", "name": "keywords", "in": "formData" }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "csv", "description": "Tag IDs", "name": "tag_ids", "in": "formData" }, { "type": "file", "description": "Home image", "name": "image", "in": "formData" }, { "type": "string", "description": "Slug", "name": "slug", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Home" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a home by ID", "tags": [ "admin" ], "summary": "Delete a home (Admin)", "parameters": [ { "type": "string", "description": "Home ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/homes/{id}/image": { "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Upload an image for a specific home entry", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Upload home image (Admin)", "parameters": [ { "type": "string", "description": "Home ID", "name": "id", "in": "path", "required": true }, { "type": "file", "description": "Home image", "name": "image", "in": "formData", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/knowledges": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all knowledge entries including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all knowledges (Admin)", "parameters": [ { "type": "string", "description": "Resume ID", "name": "resume_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Knowledge" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new knowledge entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a new knowledge (Admin)", "parameters": [ { "description": "Knowledge Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateKnowledgeRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.Knowledge" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/knowledges/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific knowledge entry", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get a knowledge by ID (Admin)", "parameters": [ { "type": "string", "description": "Knowledge ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Knowledge" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing knowledge entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update a knowledge (Admin)", "parameters": [ { "type": "string", "description": "Knowledge ID", "name": "id", "in": "path", "required": true }, { "description": "Knowledge Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.UpdateKnowledgeRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Knowledge" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a knowledge by ID", "tags": [ "admin" ], "summary": "Delete a knowledge (Admin)", "parameters": [ { "type": "string", "description": "Knowledge ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/main-menu": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all main menu entries including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all main menus (Admin)", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.MainMenu" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new main menu entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a new main menu (Admin)", "parameters": [ { "description": "Main Menu Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateMainMenuRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.MainMenu" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/main-menu/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific main menu entry", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get a main menu by ID (Admin)", "parameters": [ { "type": "string", "description": "Main Menu ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.MainMenu" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing main menu entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update a main menu (Admin)", "parameters": [ { "type": "string", "description": "Main Menu ID", "name": "id", "in": "path", "required": true }, { "description": "Main Menu Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.UpdateMainMenuRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.MainMenu" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a main menu by ID", "tags": [ "admin" ], "summary": "Delete a main menu (Admin)", "parameters": [ { "type": "string", "description": "Main Menu ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/post-categories": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all post categories including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all post categories (Admin)", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.PostCategory" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new post category", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a post category (Admin)", "parameters": [ { "type": "string", "description": "Title", "name": "title", "in": "formData", "required": true }, { "type": "string", "description": "Keywords", "name": "keywords", "in": "formData", "required": true }, { "type": "string", "description": "Description", "name": "description", "in": "formData", "required": true }, { "type": "integer", "description": "Order", "name": "order", "in": "formData" }, { "type": "string", "description": "Parent ID", "name": "parent_id", "in": "formData" }, { "type": "file", "description": "Image", "name": "image", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.PostCategory" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/post-categories/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a post category by ID", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get post category by ID (Admin)", "parameters": [ { "type": "string", "description": "Category ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.PostCategory" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing post category", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update a post category (Admin)", "parameters": [ { "type": "string", "description": "Category ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Title", "name": "title", "in": "formData" }, { "type": "string", "description": "Keywords", "name": "keywords", "in": "formData" }, { "type": "string", "description": "Description", "name": "description", "in": "formData" }, { "type": "integer", "description": "Order", "name": "order", "in": "formData" }, { "type": "string", "description": "Parent ID", "name": "parent_id", "in": "formData" }, { "type": "file", "description": "Image", "name": "image", "in": "formData" }, { "type": "string", "description": "Slug", "name": "slug", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.PostCategory" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a post category by ID", "tags": [ "admin" ], "summary": "Delete a post category (Admin)", "parameters": [ { "type": "string", "description": "Category ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/post-category-views": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve views for a category", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get post category views (Admin)", "parameters": [ { "type": "string", "description": "Category ID", "name": "category_id", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.PostCategoryView" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/post-comments": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve comments with optional post filter", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all post comments (Admin)", "parameters": [ { "type": "string", "description": "Post ID", "name": "post_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.PostComment" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/post-comments/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a post comment by ID", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get post comment by ID (Admin)", "parameters": [ { "type": "string", "description": "Comment ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.PostComment" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing post comment", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update a post comment (Admin)", "parameters": [ { "type": "string", "description": "Comment ID", "name": "id", "in": "path", "required": true }, { "description": "Comment Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.UpdatePostCommentRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.PostComment" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a post comment by ID", "tags": [ "admin" ], "summary": "Delete a post comment (Admin)", "parameters": [ { "type": "string", "description": "Comment ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/post-tags": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all post tags including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all post tags (Admin)", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.PostTag" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new post tag", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a post tag (Admin)", "parameters": [ { "description": "Post Tag Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreatePostTagRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.PostTag" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/post-tags/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific post tag", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get a post tag by ID (Admin)", "parameters": [ { "type": "string", "description": "Post Tag ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.PostTag" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing post tag", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update a post tag (Admin)", "parameters": [ { "type": "string", "description": "Post Tag ID", "name": "id", "in": "path", "required": true }, { "description": "Post Tag Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.UpdatePostTagRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.PostTag" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a post tag by ID", "tags": [ "admin" ], "summary": "Delete a post tag (Admin)", "parameters": [ { "type": "string", "description": "Post Tag ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/posts": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all posts including inactive ones with pagination", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all posts (Admin)", "parameters": [ { "type": "integer", "default": 1, "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "default": 10, "description": "Items per page", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new post", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a post (Admin)", "parameters": [ { "type": "string", "description": "Title", "name": "title", "in": "formData", "required": true }, { "type": "string", "description": "Content", "name": "content", "in": "formData" }, { "type": "string", "description": "Keywords", "name": "keywords", "in": "formData", "required": true }, { "type": "string", "description": "Video", "name": "video", "in": "formData" }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "csv", "description": "Category IDs", "name": "category_ids", "in": "formData" }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "csv", "description": "Tag IDs", "name": "tag_ids", "in": "formData" }, { "type": "string", "description": "Parent ID", "name": "parent_id", "in": "formData" }, { "type": "file", "description": "Image", "name": "image", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" }, { "type": "boolean", "description": "Is front", "name": "is_front", "in": "formData" } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.Post" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/posts/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a post by ID", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get post by ID (Admin)", "parameters": [ { "type": "string", "description": "Post ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Post" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing post", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update a post (Admin)", "parameters": [ { "type": "string", "description": "Post ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Title", "name": "title", "in": "formData" }, { "type": "string", "description": "Content", "name": "content", "in": "formData" }, { "type": "string", "description": "Keywords", "name": "keywords", "in": "formData" }, { "type": "string", "description": "Video", "name": "video", "in": "formData" }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "csv", "description": "Category IDs", "name": "category_ids", "in": "formData" }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "csv", "description": "Tag IDs", "name": "tag_ids", "in": "formData" }, { "type": "string", "description": "Parent ID", "name": "parent_id", "in": "formData" }, { "type": "file", "description": "Image", "name": "image", "in": "formData" }, { "type": "string", "description": "Slug", "name": "slug", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" }, { "type": "boolean", "description": "Is front", "name": "is_front", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Post" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a post by ID", "tags": [ "admin" ], "summary": "Delete a post (Admin)", "parameters": [ { "type": "string", "description": "Post ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/resumes": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all resumes including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all resumes (Admin)", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Resume" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new resume entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a new resume (Admin)", "parameters": [ { "description": "Resume Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateResumeRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.Resume" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/resumes/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific resume", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get a resume by ID (Admin)", "parameters": [ { "type": "string", "description": "Resume ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Resume" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing resume entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update a resume (Admin)", "parameters": [ { "type": "string", "description": "Resume ID", "name": "id", "in": "path", "required": true }, { "description": "Resume Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.UpdateResumeRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Resume" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a resume by ID", "tags": [ "admin" ], "summary": "Delete a resume (Admin)", "parameters": [ { "type": "string", "description": "Resume ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/service-titles": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all service titles including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all service titles (Admin)", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.ServiceTitle" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new service title entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a new service title (Admin)", "parameters": [ { "description": "Service Title Request", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": { "type": "string" } } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.ServiceTitle" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/service-titles/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific service title", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get a service title by ID (Admin)", "parameters": [ { "type": "string", "description": "Service Title ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.ServiceTitle" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing service title entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update a service title (Admin)", "parameters": [ { "type": "string", "description": "Service Title ID", "name": "id", "in": "path", "required": true }, { "description": "Service Title Request", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": { "type": "string" } } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.ServiceTitle" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a service title by ID", "tags": [ "admin" ], "summary": "Delete a service title (Admin)", "parameters": [ { "type": "string", "description": "Service Title ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/services": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all services including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all services (Admin)", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Service" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new service entry", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a new service (Admin)", "parameters": [ { "type": "string", "description": "Title", "name": "title", "in": "formData", "required": true }, { "type": "string", "description": "Content", "name": "content", "in": "formData" }, { "type": "file", "description": "Image", "name": "image", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.Service" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/services/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific service", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get a service by ID (Admin)", "parameters": [ { "type": "string", "description": "Service ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Service" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing service entry", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update a service (Admin)", "parameters": [ { "type": "string", "description": "Service ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Title", "name": "title", "in": "formData" }, { "type": "string", "description": "Content", "name": "content", "in": "formData" }, { "type": "file", "description": "Image", "name": "image", "in": "formData" }, { "type": "string", "description": "Slug", "name": "slug", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Service" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a service by ID", "tags": [ "admin" ], "summary": "Delete a service (Admin)", "parameters": [ { "type": "string", "description": "Service ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/site-info": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all site info entries including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all site info (Admin)", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Setting" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new site info entry", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create site info (Admin)", "parameters": [ { "type": "string", "description": "Title", "name": "title", "in": "formData", "required": true }, { "type": "string", "description": "Meta title", "name": "meta_title", "in": "formData" }, { "type": "string", "description": "Meta description", "name": "meta_description", "in": "formData" }, { "type": "string", "description": "Phone", "name": "phone", "in": "formData", "required": true }, { "type": "string", "description": "Site URL", "name": "url", "in": "formData" }, { "type": "string", "description": "Email", "name": "email", "in": "formData", "required": true }, { "type": "string", "description": "Facebook", "name": "facebook", "in": "formData" }, { "type": "string", "description": "X", "name": "x", "in": "formData" }, { "type": "string", "description": "Instagram", "name": "instagram", "in": "formData" }, { "type": "string", "description": "Whatsapp", "name": "whatsapp", "in": "formData" }, { "type": "string", "description": "Pinterest", "name": "pinterest", "in": "formData" }, { "type": "string", "description": "LinkedIn", "name": "linkedin", "in": "formData" }, { "type": "string", "description": "Slogan", "name": "slogan", "in": "formData" }, { "type": "file", "description": "White logo", "name": "w_logo", "in": "formData" }, { "type": "file", "description": "Black logo", "name": "b_logo", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.Setting" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/site-info/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific site info entry", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get site info by ID (Admin)", "parameters": [ { "type": "string", "description": "Site Info ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Setting" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing site info entry", "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update site info (Admin)", "parameters": [ { "type": "string", "description": "Site Info ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Title", "name": "title", "in": "formData" }, { "type": "string", "description": "Meta title", "name": "meta_title", "in": "formData" }, { "type": "string", "description": "Meta description", "name": "meta_description", "in": "formData" }, { "type": "string", "description": "Phone", "name": "phone", "in": "formData" }, { "type": "string", "description": "Site URL", "name": "url", "in": "formData" }, { "type": "string", "description": "Email", "name": "email", "in": "formData" }, { "type": "string", "description": "Facebook", "name": "facebook", "in": "formData" }, { "type": "string", "description": "X", "name": "x", "in": "formData" }, { "type": "string", "description": "Instagram", "name": "instagram", "in": "formData" }, { "type": "string", "description": "Whatsapp", "name": "whatsapp", "in": "formData" }, { "type": "string", "description": "Pinterest", "name": "pinterest", "in": "formData" }, { "type": "string", "description": "LinkedIn", "name": "linkedin", "in": "formData" }, { "type": "string", "description": "Slogan", "name": "slogan", "in": "formData" }, { "type": "file", "description": "White logo", "name": "w_logo", "in": "formData" }, { "type": "file", "description": "Black logo", "name": "b_logo", "in": "formData" }, { "type": "boolean", "description": "Is active", "name": "is_active", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Setting" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a site info entry by ID", "tags": [ "admin" ], "summary": "Delete site info (Admin)", "parameters": [ { "type": "string", "description": "Site Info ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/site-settings": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all site settings including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all site settings (Admin)", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.SiteSettings" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new site settings entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create site settings (Admin)", "parameters": [ { "description": "Site Settings Request", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": { "type": "boolean" } } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.SiteSettings" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/site-settings/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific site settings entry", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get site settings by ID (Admin)", "parameters": [ { "type": "string", "description": "Site Settings ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.SiteSettings" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing site settings entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update site settings (Admin)", "parameters": [ { "type": "string", "description": "Site Settings ID", "name": "id", "in": "path", "required": true }, { "description": "Site Settings Request", "name": "request", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": { "type": "boolean" } } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.SiteSettings" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a site settings entry by ID", "tags": [ "admin" ], "summary": "Delete site settings (Admin)", "parameters": [ { "type": "string", "description": "Site Settings ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/skills": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all skill entries including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all skills (Admin)", "parameters": [ { "type": "string", "description": "Resume ID", "name": "resume_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Skill" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new skill entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a new skill (Admin)", "parameters": [ { "description": "Skill Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateSkillRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.Skill" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/skills/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific skill entry", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get a skill by ID (Admin)", "parameters": [ { "type": "string", "description": "Skill ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Skill" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing skill entry", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update a skill (Admin)", "parameters": [ { "type": "string", "description": "Skill ID", "name": "id", "in": "path", "required": true }, { "description": "Skill Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.UpdateSkillRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Skill" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a skill by ID", "tags": [ "admin" ], "summary": "Delete a skill (Admin)", "parameters": [ { "type": "string", "description": "Skill ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/tags": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve a list of all tags including inactive ones", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all tags (Admin)", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Tag" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new tag", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create a new tag (Admin)", "parameters": [ { "description": "Tag Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateTagRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.Tag" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/tags/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Retrieve details of a specific tag", "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get a tag by ID (Admin)", "parameters": [ { "type": "string", "description": "Tag ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Tag" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "description": "Update an existing tag", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update a tag (Admin)", "parameters": [ { "type": "string", "description": "Tag ID", "name": "id", "in": "path", "required": true }, { "description": "Tag Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.UpdateTagRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Tag" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "description": "Delete a tag by ID", "tags": [ "admin" ], "summary": "Delete a tag (Admin)", "parameters": [ { "type": "string", "description": "Tag ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/admin/users": { "get": { "security": [ { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Admin - User Management" ], "summary": "Get all users (Admin only)", "parameters": [ { "type": "integer", "default": 1, "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "default": 10, "description": "Items per page", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "Admin - User Management" ], "summary": "Create new user (Admin only)", "parameters": [ { "type": "string", "description": "Email", "name": "email", "in": "formData", "required": true }, { "type": "string", "description": "Password", "name": "password", "in": "formData", "required": true }, { "type": "string", "description": "Username", "name": "user_name", "in": "formData", "required": true }, { "type": "boolean", "description": "Email verified", "name": "email_verified", "in": "formData" }, { "type": "string", "description": "Roles (comma separated: admin,user)", "name": "roles", "in": "formData" }, { "type": "file", "description": "Avatar image", "name": "avatar", "in": "formData" } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.User" } } } } }, "/admin/users/deleted": { "get": { "security": [ { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Admin - User Management" ], "summary": "Get all soft deleted users (Admin only)", "parameters": [ { "type": "integer", "default": 1, "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "default": 10, "description": "Items per page", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/admin/users/search": { "get": { "security": [ { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Admin - User Management" ], "summary": "Search users (Admin only)", "parameters": [ { "type": "string", "description": "Search query", "name": "q", "in": "query", "required": true }, { "type": "integer", "default": 1, "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "default": 10, "description": "Items per page", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/admin/users/{id}": { "get": { "security": [ { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Admin - User Management" ], "summary": "Get user by ID (Admin only)", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.User" } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "Admin - User Management" ], "summary": "Update user (Admin only)", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Email", "name": "email", "in": "formData" }, { "type": "string", "description": "Password", "name": "password", "in": "formData" }, { "type": "string", "description": "Username", "name": "user_name", "in": "formData" }, { "type": "boolean", "description": "Email verified", "name": "email_verified", "in": "formData" }, { "type": "string", "description": "Roles (comma separated: admin,user)", "name": "roles", "in": "formData" }, { "type": "file", "description": "Avatar image", "name": "avatar", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "tags": [ "Admin - User Management" ], "summary": "Delete user (Admin only)", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true }, { "type": "boolean", "default": false, "description": "Hard delete (permanent)", "name": "hard", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/admin/users/{id}/avatar": { "post": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "Admin - User Management" ], "summary": "Upload avatar for any user (Admin only)", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true }, { "type": "file", "description": "Avatar image file", "name": "avatar", "in": "formData", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/admin/users/{id}/restore": { "post": { "security": [ { "ApiKeyAuth": [] } ], "tags": [ "Admin - User Management" ], "summary": "Restore a soft deleted user (Admin only)", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/admin/users/{id}/roles": { "post": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Admin - User Management" ], "summary": "Assign roles to user (Admin only)", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true }, { "description": "Roles", "name": "roles", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/admin/users/{id}/roles/{role}": { "delete": { "security": [ { "ApiKeyAuth": [] } ], "tags": [ "Admin - User Management" ], "summary": "Remove role from user (Admin only)", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Role name", "name": "role", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/auth/login": { "post": { "description": "Login with email and password to get JWT token", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Login user", "parameters": [ { "description": "Login Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.LoginRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/auth/me": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Get details of the currently authenticated user", "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Get Current User Profile", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.User" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/auth/refresh": { "post": { "description": "usage: send refresh_token to get new access_token", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Refresh Access Token", "parameters": [ { "description": "Refresh Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.RefreshRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/auth/register": { "post": { "description": "Register with username, email and password", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Register a new user", "parameters": [ { "description": "Register Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.RegisterRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/auth/verify-email": { "get": { "description": "Verify email with token sent after email/password registration", "tags": [ "auth" ], "summary": "Verify email address", "parameters": [ { "type": "string", "description": "Verification token", "name": "token", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/auth/{provider}": { "get": { "description": "Redirect to OAuth2 provider", "tags": [ "oauth" ], "summary": "Start OAuth2 flow", "parameters": [ { "type": "string", "description": "Provider (google, github)", "name": "provider", "in": "path", "required": true } ], "responses": {} } }, "/auth/{provider}/callback": { "get": { "description": "Handle callback from OAuth2 provider", "tags": [ "oauth" ], "summary": "OAuth2 Callback", "parameters": [ { "type": "string", "description": "Provider (google, github)", "name": "provider", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/banners": { "get": { "description": "Retrieve a list of active banners", "produces": [ "application/json" ], "tags": [ "banners" ], "summary": "Get all active banners", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Banner" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/banners/active": { "get": { "description": "Retrieve the newest active banner", "produces": [ "application/json" ], "tags": [ "banners" ], "summary": "Get active banner", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Banner" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/contact": { "post": { "description": "Send a contact message", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "contact" ], "summary": "Create a new contact message", "parameters": [ { "description": "Contact Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateContactRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.Contact" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/educations": { "get": { "description": "Retrieve a list of active education entries", "produces": [ "application/json" ], "tags": [ "resume" ], "summary": "Get all active educations", "parameters": [ { "type": "string", "description": "Resume ID", "name": "resume_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Education" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/experiences": { "get": { "description": "Retrieve a list of active experience entries", "produces": [ "application/json" ], "tags": [ "resume" ], "summary": "Get all active experiences", "parameters": [ { "type": "string", "description": "Resume ID", "name": "resume_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Experience" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/homes": { "get": { "description": "Retrieve a list of active home entries", "produces": [ "application/json" ], "tags": [ "home" ], "summary": "Get all active homes", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Home" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/homes/{slug}": { "get": { "description": "Retrieve a single active home by slug", "produces": [ "application/json" ], "tags": [ "home" ], "summary": "Get a home by slug", "parameters": [ { "type": "string", "description": "Home Slug", "name": "slug", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Home" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/knowledges": { "get": { "description": "Retrieve a list of active knowledge entries", "produces": [ "application/json" ], "tags": [ "resume" ], "summary": "Get all active knowledges", "parameters": [ { "type": "string", "description": "Resume ID", "name": "resume_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Knowledge" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/main-menu": { "get": { "description": "Retrieve a list of active main menu entries", "produces": [ "application/json" ], "tags": [ "menu" ], "summary": "Get all active main menus", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.MainMenu" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/main-menu/active": { "get": { "description": "Retrieve the newest active main menu entry", "produces": [ "application/json" ], "tags": [ "menu" ], "summary": "Get active main menu", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.MainMenu" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/post-categories": { "get": { "description": "Retrieve a list of active post categories", "produces": [ "application/json" ], "tags": [ "post-categories" ], "summary": "Get all active post categories", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.PostCategory" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/post-categories/{id}/views": { "post": { "description": "Record a post category view (daily per IP)", "produces": [ "application/json" ], "tags": [ "post-category-views" ], "summary": "Track post category view", "parameters": [ { "type": "string", "description": "Category ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.PostCategoryView" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/post-categories/{slug}": { "get": { "description": "Retrieve an active post category by slug", "produces": [ "application/json" ], "tags": [ "post-categories" ], "summary": "Get post category by slug", "parameters": [ { "type": "string", "description": "Category Slug", "name": "slug", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.PostCategory" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/post-tags": { "get": { "description": "Retrieve a list of active post tags", "produces": [ "application/json" ], "tags": [ "post-tags" ], "summary": "Get all active post tags", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.PostTag" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/posts": { "get": { "description": "Retrieve a list of active posts with pagination. Use front=true for front posts only", "produces": [ "application/json" ], "tags": [ "posts" ], "summary": "Get all active posts with pagination", "parameters": [ { "type": "boolean", "description": "Front posts only", "name": "front", "in": "query" }, { "type": "integer", "default": 1, "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "default": 10, "description": "Items per page", "name": "limit", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/posts/slug/{slug}": { "get": { "description": "Retrieve an active post by slug", "produces": [ "application/json" ], "tags": [ "posts" ], "summary": "Get post by slug", "parameters": [ { "type": "string", "description": "Post Slug", "name": "slug", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Post" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/posts/{id}/comments": { "get": { "description": "Retrieve active comments for a post", "produces": [ "application/json" ], "tags": [ "post-comments" ], "summary": "Get active post comments", "parameters": [ { "type": "string", "description": "Post ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.PostComment" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Create a new comment for a post (auth required)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "post-comments" ], "summary": "Create a post comment", "parameters": [ { "type": "string", "description": "Post ID", "name": "id", "in": "path", "required": true }, { "description": "Comment Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreatePostCommentRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.PostComment" } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/profile": { "get": { "security": [ { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Profile" ], "summary": "Get current user profile", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.User" } } } }, "put": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "Profile" ], "summary": "Update current user profile", "parameters": [ { "type": "string", "description": "Username", "name": "user_name", "in": "formData" }, { "type": "file", "description": "Avatar image", "name": "avatar", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/profile/email": { "put": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Profile" ], "summary": "Change email address", "parameters": [ { "description": "Email change request", "name": "request", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/profile/password": { "put": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Profile" ], "summary": "Change password", "parameters": [ { "description": "Password change request", "name": "request", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/resumes": { "get": { "description": "Retrieve a list of active resumes", "produces": [ "application/json" ], "tags": [ "resume" ], "summary": "Get all active resumes", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Resume" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/resumes/active": { "get": { "description": "Retrieve the newest active resume entry", "produces": [ "application/json" ], "tags": [ "resume" ], "summary": "Get active resume", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Resume" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/service-titles": { "get": { "description": "Retrieve a list of active service titles", "produces": [ "application/json" ], "tags": [ "services" ], "summary": "Get all active service titles", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.ServiceTitle" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/service-titles/active": { "get": { "description": "Retrieve the newest active service title", "produces": [ "application/json" ], "tags": [ "services" ], "summary": "Get active service title", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.ServiceTitle" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/services": { "get": { "description": "Retrieve a list of active services", "produces": [ "application/json" ], "tags": [ "services" ], "summary": "Get all active services", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Service" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/services/{slug}": { "get": { "description": "Retrieve a single active service by slug", "produces": [ "application/json" ], "tags": [ "services" ], "summary": "Get service by slug", "parameters": [ { "type": "string", "description": "Service Slug", "name": "slug", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Service" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/settings/cors/blacklist": { "get": { "security": [ { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Settings" ], "summary": "Get all CORS blacklist entries", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.CorsBlacklist" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Settings" ], "summary": "Create CORS blacklist entry", "parameters": [ { "description": "Blacklist data", "name": "blacklist", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.CorsBlacklist" } } } } }, "/settings/cors/blacklist/{id}": { "put": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Settings" ], "summary": "Update CORS blacklist entry", "parameters": [ { "type": "string", "description": "Blacklist ID", "name": "id", "in": "path", "required": true }, { "description": "Update data", "name": "blacklist", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "tags": [ "Settings" ], "summary": "Delete CORS blacklist entry", "parameters": [ { "type": "string", "description": "Blacklist ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/settings/cors/cache/invalidate": { "post": { "security": [ { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Settings" ], "summary": "Invalidate CORS cache (whitelist + blacklist)", "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/settings/cors/whitelist": { "get": { "security": [ { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Settings" ], "summary": "Get all CORS whitelist entries", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.CorsWhitelist" } } } } }, "post": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Settings" ], "summary": "Create CORS whitelist entry", "parameters": [ { "description": "Whitelist data", "name": "whitelist", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/models.CorsWhitelist" } } } } }, "/settings/cors/whitelist/{id}": { "put": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Settings" ], "summary": "Update CORS whitelist entry", "parameters": [ { "type": "string", "description": "Whitelist ID", "name": "id", "in": "path", "required": true }, { "description": "Update data", "name": "whitelist", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "tags": [ "Settings" ], "summary": "Delete CORS whitelist entry", "parameters": [ { "type": "string", "description": "Whitelist ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/settings/ratelimit": { "get": { "security": [ { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "Settings" ], "summary": "Get all rate limit settings", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.RateLimitSetting" } } } } } }, "/settings/ratelimit/{id}": { "put": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Settings" ], "summary": "Update rate limit setting", "parameters": [ { "type": "string", "description": "Setting ID", "name": "id", "in": "path", "required": true }, { "description": "Update data", "name": "setting", "in": "body", "required": true, "schema": { "type": "object" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } }, "/site-info": { "get": { "description": "Retrieve a list of active site info entries", "produces": [ "application/json" ], "tags": [ "site-info" ], "summary": "Get all active site info", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Setting" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/site-info/active": { "get": { "description": "Retrieve the newest active site info entry", "produces": [ "application/json" ], "tags": [ "site-info" ], "summary": "Get active site info", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Setting" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/site-settings": { "get": { "description": "Retrieve a list of active site settings", "produces": [ "application/json" ], "tags": [ "site-settings" ], "summary": "Get all active site settings", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.SiteSettings" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/site-settings/active": { "get": { "description": "Retrieve the newest active site settings entry", "produces": [ "application/json" ], "tags": [ "site-settings" ], "summary": "Get active site settings", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.SiteSettings" } }, "404": { "description": "Not Found", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/skills": { "get": { "description": "Retrieve a list of active skill entries", "produces": [ "application/json" ], "tags": [ "resume" ], "summary": "Get all active skills", "parameters": [ { "type": "string", "description": "Resume ID", "name": "resume_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Skill" } } }, "400": { "description": "Bad Request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/tags": { "get": { "description": "Retrieve a list of all tags. Public endpoint returns only active tags. Admin endpoint returns all.", "produces": [ "application/json" ], "tags": [ "tags" ], "summary": "Get all tags", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/models.Tag" } } }, "500": { "description": "Internal Server Error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/user/avatar": { "post": { "security": [ { "ApiKeyAuth": [] } ], "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "User" ], "summary": "Upload user avatar", "parameters": [ { "type": "file", "description": "Avatar image file", "name": "avatar", "in": "formData", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } }, "delete": { "security": [ { "ApiKeyAuth": [] } ], "produces": [ "application/json" ], "tags": [ "User" ], "summary": "Delete user avatar", "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } } } } } }, "definitions": { "handlers.CreateContactRequest": { "type": "object", "required": [ "email", "message", "name", "subject" ], "properties": { "email": { "type": "string" }, "message": { "type": "string" }, "name": { "type": "string" }, "subject": { "type": "string" } } }, "handlers.CreateEducationRequest": { "type": "object", "properties": { "between_years": { "type": "string" }, "content": { "type": "string" }, "is_active": { "type": "boolean" }, "resume_id": { "type": "string" }, "title": { "type": "string" } } }, "handlers.CreateExperienceRequest": { "type": "object", "properties": { "between_years": { "type": "string" }, "content": { "type": "string" }, "is_active": { "type": "boolean" }, "resume_id": { "type": "string" }, "title": { "type": "string" } } }, "handlers.CreateKnowledgeRequest": { "type": "object", "properties": { "is_active": { "type": "boolean" }, "resume_id": { "type": "string" }, "title": { "type": "string" } } }, "handlers.CreateMainMenuRequest": { "type": "object", "properties": { "about": { "type": "string" }, "contact": { "type": "string" }, "home": { "type": "string" }, "is_active": { "type": "boolean" }, "portfolio": { "type": "string" }, "resume": { "type": "string" }, "services": { "type": "string" } } }, "handlers.CreatePostCommentRequest": { "type": "object", "required": [ "body", "title" ], "properties": { "body": { "type": "string" }, "is_active": { "type": "boolean" }, "parent_id": { "type": "string" }, "title": { "type": "string" } } }, "handlers.CreatePostTagRequest": { "type": "object", "required": [ "tag" ], "properties": { "is_active": { "type": "boolean" }, "tag": { "type": "string" } } }, "handlers.CreateResumeRequest": { "type": "object", "properties": { "coding_skills": { "type": "string" }, "education": { "type": "string" }, "experience": { "type": "string" }, "is_active": { "type": "boolean" }, "knowledge": { "type": "string" }, "title": { "type": "string" }, "title_sub": { "type": "string" } } }, "handlers.CreateSkillRequest": { "type": "object", "properties": { "degree": { "type": "integer" }, "is_active": { "type": "boolean" }, "resume_id": { "type": "string" }, "title": { "type": "string" } } }, "handlers.CreateTagRequest": { "type": "object", "required": [ "tag" ], "properties": { "is_active": { "description": "Pointer to allow false value", "type": "boolean" }, "tag": { "type": "string" } } }, "handlers.LoginRequest": { "type": "object", "required": [ "email", "password" ], "properties": { "email": { "type": "string" }, "password": { "type": "string" } } }, "handlers.RefreshRequest": { "type": "object", "required": [ "refresh_token" ], "properties": { "refresh_token": { "type": "string" } } }, "handlers.RegisterRequest": { "type": "object", "required": [ "email", "password", "username" ], "properties": { "email": { "type": "string" }, "password": { "type": "string", "minLength": 6 }, "username": { "type": "string", "minLength": 3 } } }, "handlers.UpdateEducationRequest": { "type": "object", "properties": { "between_years": { "type": "string" }, "content": { "type": "string" }, "is_active": { "type": "boolean" }, "resume_id": { "type": "string" }, "title": { "type": "string" } } }, "handlers.UpdateExperienceRequest": { "type": "object", "properties": { "between_years": { "type": "string" }, "content": { "type": "string" }, "is_active": { "type": "boolean" }, "resume_id": { "type": "string" }, "title": { "type": "string" } } }, "handlers.UpdateKnowledgeRequest": { "type": "object", "properties": { "is_active": { "type": "boolean" }, "resume_id": { "type": "string" }, "title": { "type": "string" } } }, "handlers.UpdateMainMenuRequest": { "type": "object", "properties": { "about": { "type": "string" }, "contact": { "type": "string" }, "home": { "type": "string" }, "is_active": { "type": "boolean" }, "portfolio": { "type": "string" }, "resume": { "type": "string" }, "services": { "type": "string" } } }, "handlers.UpdatePostCommentRequest": { "type": "object", "properties": { "body": { "type": "string" }, "is_active": { "type": "boolean" }, "parent_id": { "type": "string" }, "slug": { "type": "string" }, "title": { "type": "string" } } }, "handlers.UpdatePostTagRequest": { "type": "object", "properties": { "is_active": { "type": "boolean" }, "tag": { "type": "string" } } }, "handlers.UpdateResumeRequest": { "type": "object", "properties": { "coding_skills": { "type": "string" }, "education": { "type": "string" }, "experience": { "type": "string" }, "is_active": { "type": "boolean" }, "knowledge": { "type": "string" }, "title": { "type": "string" }, "title_sub": { "type": "string" } } }, "handlers.UpdateSkillRequest": { "type": "object", "properties": { "degree": { "type": "integer" }, "is_active": { "type": "boolean" }, "resume_id": { "type": "string" }, "title": { "type": "string" } } }, "handlers.UpdateTagRequest": { "type": "object", "properties": { "is_active": { "type": "boolean" }, "tag": { "type": "string" } } }, "models.About": { "type": "object", "properties": { "age": { "type": "string" }, "birthday": { "type": "string" }, "city": { "type": "string" }, "counter_active": { "type": "boolean" }, "created_at": { "type": "string" }, "cv": { "type": "string" }, "degree": { "type": "string" }, "done": { "type": "integer" }, "great": { "type": "integer" }, "great_reviews": { "type": "string" }, "hapy_user": { "type": "string" }, "id": { "type": "string" }, "image": { "type": "string" }, "image_sub": { "type": "string" }, "interests": { "type": "string" }, "is_active": { "type": "boolean" }, "mail": { "type": "string" }, "phone": { "type": "string" }, "project_done": { "type": "string" }, "slug": { "type": "string" }, "study": { "type": "string" }, "support_team": { "type": "string" }, "team": { "type": "integer" }, "title": { "type": "string" }, "updated_at": { "type": "string" }, "user_h": { "type": "integer" }, "website": { "type": "string" }, "x": { "type": "string" } } }, "models.Banner": { "type": "object", "properties": { "color": { "type": "string" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "image": { "type": "string" }, "image_k": { "type": "string" }, "image_k_txt": { "type": "string" }, "is_active": { "type": "boolean" }, "text1": { "type": "string" }, "text2": { "type": "string" }, "text4": { "type": "string" }, "text5": { "type": "string" }, "title": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.Contact": { "type": "object", "properties": { "created_at": { "type": "string" }, "email": { "type": "string" }, "id": { "type": "string" }, "ip": { "type": "string" }, "message": { "type": "string" }, "name": { "type": "string" }, "subject": { "type": "string" }, "updated_at": { "type": "string" }, "user": { "$ref": "#/definitions/models.User" }, "user_id": { "description": "Optional: if user is logged in", "type": "string" } } }, "models.CorsBlacklist": { "type": "object", "properties": { "created_at": { "type": "string" }, "created_by": { "type": "string" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "origin": { "type": "string" }, "reason": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.CorsWhitelist": { "type": "object", "properties": { "created_at": { "type": "string" }, "created_by": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "origin": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.Education": { "type": "object", "properties": { "between_years": { "type": "string" }, "content": { "type": "string" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "resume_id": { "type": "string" }, "title": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.Experience": { "type": "object", "properties": { "between_years": { "type": "string" }, "content": { "type": "string" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "resume_id": { "type": "string" }, "title": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.Home": { "type": "object", "properties": { "button1": { "type": "string" }, "button2": { "type": "string" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "image": { "type": "string" }, "is_active": { "type": "boolean" }, "keywords": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" }, "tags": { "type": "array", "items": { "$ref": "#/definitions/models.Tag" } }, "title": { "type": "string" }, "updated_at": { "type": "string" }, "video": { "type": "string" } } }, "models.Knowledge": { "type": "object", "properties": { "created_at": { "type": "string" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "resume_id": { "type": "string" }, "title": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.MainMenu": { "type": "object", "properties": { "about": { "type": "string" }, "contact": { "type": "string" }, "created_at": { "type": "string" }, "home": { "type": "string" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "portfolio": { "type": "string" }, "resume": { "type": "string" }, "services": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.Permission": { "type": "object", "properties": { "description": { "type": "string" }, "id": { "type": "integer" }, "name": { "description": "user:read, user:write", "type": "string" } } }, "models.Post": { "type": "object", "properties": { "categories": { "type": "array", "items": { "$ref": "#/definitions/models.PostCategory" } }, "children": { "type": "array", "items": { "$ref": "#/definitions/models.Post" } }, "comments": { "type": "array", "items": { "$ref": "#/definitions/models.PostComment" } }, "content": { "type": "string" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "image": { "type": "string" }, "is_active": { "type": "boolean" }, "is_front": { "type": "boolean" }, "keywords": { "type": "string" }, "parent": { "$ref": "#/definitions/models.Post" }, "parent_id": { "type": "string" }, "slug": { "type": "string" }, "tags": { "type": "array", "items": { "$ref": "#/definitions/models.PostTag" } }, "title": { "type": "string" }, "updated_at": { "type": "string" }, "video": { "type": "string" } } }, "models.PostCategory": { "type": "object", "properties": { "children": { "type": "array", "items": { "$ref": "#/definitions/models.PostCategory" } }, "created_at": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "image": { "type": "string" }, "is_active": { "type": "boolean" }, "keywords": { "type": "string" }, "order": { "type": "integer" }, "parent": { "$ref": "#/definitions/models.PostCategory" }, "parent_id": { "type": "string" }, "posts": { "type": "array", "items": { "$ref": "#/definitions/models.Post" } }, "slug": { "type": "string" }, "title": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.PostCategoryView": { "type": "object", "properties": { "category": { "$ref": "#/definitions/models.PostCategory" }, "category_id": { "type": "string" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "ip_address": { "type": "string" }, "user_agent": { "type": "string" } } }, "models.PostComment": { "type": "object", "properties": { "body": { "type": "string" }, "children": { "type": "array", "items": { "$ref": "#/definitions/models.PostComment" } }, "created_at": { "type": "string" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "parent": { "$ref": "#/definitions/models.PostComment" }, "parent_id": { "type": "string" }, "post": { "$ref": "#/definitions/models.Post" }, "post_id": { "type": "string" }, "slug": { "type": "string" }, "title": { "type": "string" }, "updated_at": { "type": "string" }, "user": { "$ref": "#/definitions/models.User" }, "user_id": { "type": "string" } } }, "models.PostTag": { "type": "object", "properties": { "created_at": { "type": "string" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "posts": { "type": "array", "items": { "$ref": "#/definitions/models.Post" } }, "tag": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.RateLimitSetting": { "type": "object", "properties": { "created_at": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "max_requests": { "description": "Max istek sayısı", "type": "integer" }, "name": { "description": "e.g., \"login\", \"register\", \"api\"", "type": "string" }, "updated_at": { "type": "string" }, "updated_by": { "type": "string" }, "window_seconds": { "description": "Zaman penceresi (saniye)", "type": "integer" } } }, "models.Resume": { "type": "object", "properties": { "coding_skills": { "type": "string" }, "created_at": { "type": "string" }, "education": { "type": "string" }, "educations": { "type": "array", "items": { "$ref": "#/definitions/models.Education" } }, "experience": { "type": "string" }, "experiences": { "type": "array", "items": { "$ref": "#/definitions/models.Experience" } }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "knowledge": { "type": "string" }, "knowledges": { "type": "array", "items": { "$ref": "#/definitions/models.Knowledge" } }, "skills": { "type": "array", "items": { "$ref": "#/definitions/models.Skill" } }, "title": { "type": "string" }, "title_sub": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.Role": { "type": "object", "properties": { "description": { "type": "string" }, "id": { "type": "integer" }, "name": { "description": "admin, user", "type": "string" }, "permissions": { "type": "array", "items": { "$ref": "#/definitions/models.Permission" } } } }, "models.Service": { "type": "object", "properties": { "content": { "type": "string" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "image": { "type": "string" }, "is_active": { "type": "boolean" }, "slug": { "type": "string" }, "title": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.ServiceTitle": { "type": "object", "properties": { "created_at": { "type": "string" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "title": { "type": "string" }, "title_sub": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.Setting": { "type": "object", "properties": { "address": { "type": "string" }, "b_logo": { "type": "string" }, "copyright": { "type": "string" }, "created_at": { "type": "string" }, "email": { "type": "string" }, "facebook": { "type": "string" }, "id": { "type": "string" }, "instagram": { "type": "string" }, "is_active": { "type": "boolean" }, "linkedin": { "type": "string" }, "map_embed": { "type": "string" }, "meta_description": { "type": "string" }, "meta_title": { "type": "string" }, "phone": { "type": "string" }, "pinterest": { "type": "string" }, "slogan": { "type": "string" }, "title": { "type": "string" }, "updated_at": { "type": "string" }, "url": { "type": "string" }, "w_logo": { "type": "string" }, "whatsapp": { "type": "string" }, "x": { "type": "string" } } }, "models.SiteSettings": { "type": "object", "properties": { "created_at": { "type": "string" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "site_active": { "type": "boolean" }, "updated_at": { "type": "string" } } }, "models.Skill": { "type": "object", "properties": { "created_at": { "type": "string" }, "degree": { "type": "integer" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "resume_id": { "type": "string" }, "title": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.SocialAccount": { "type": "object", "properties": { "avatar_url": { "description": "Avatar URL from provider", "type": "string" }, "created_at": { "type": "string" }, "email": { "type": "string" }, "id": { "type": "string" }, "name": { "description": "Full name from provider", "type": "string" }, "provider": { "description": "google, github", "type": "string" }, "provider_id": { "type": "string" }, "updated_at": { "type": "string" }, "user_id": { "type": "string" } } }, "models.Tag": { "type": "object", "properties": { "created_at": { "type": "string" }, "id": { "type": "string" }, "is_active": { "type": "boolean" }, "tag": { "type": "string" }, "updated_at": { "type": "string" } } }, "models.User": { "type": "object", "properties": { "avatar": { "description": "Avatar URL from OAuth or uploaded", "type": "string" }, "created_at": { "type": "string" }, "email": { "type": "string" }, "email_verified": { "description": "Email verification: only required for email/password registration; OAuth users are treated as verified\nChanged to *bool to handle false values correctly with GORM defaults", "type": "boolean" }, "email_verified_at": { "type": "string" }, "id": { "type": "string" }, "roles": { "type": "array", "items": { "$ref": "#/definitions/models.Role" } }, "social_accounts": { "type": "array", "items": { "$ref": "#/definitions/models.SocialAccount" } }, "updated_at": { "type": "string" }, "username": { "type": "string" } } } }, "securityDefinitions": { "ApiKeyAuth": { "type": "apiKey", "name": "Authorization", "in": "header" } } }` // SwaggerInfo holds exported Swagger Info so clients can modify it var SwaggerInfo = &swag.Spec{ Version: "1.0", Host: "", BasePath: "/v1", Schemes: []string{}, Title: "GAuth-Central API", Description: "Centralized Authentication Service", InfoInstanceName: "swagger", SwaggerTemplate: docTemplate, LeftDelim: "{{", RightDelim: "}}", } func init() { swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) }