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