Files
tm_back/cmd/web/docs/swagger.yaml
T
n.nakhostin e3ee3d64ce Remove obsolete customer endpoint and update related documentation
- Deleted the `/admin/v1/customers/{id}/with-companies` endpoint from the API documentation and Swagger files to streamline the API structure.
- Updated the router to remove the corresponding route registration for the deprecated endpoint.
- Enhanced the company repository and service to support batch retrieval of companies by IDs, improving efficiency in data handling.
- Adjusted customer service methods to utilize the new batch retrieval functionality for loading companies associated with customers.
- Improved logging practices to provide better traceability for company retrieval operations.
2025-08-11 19:12:31 +03:30

3829 lines
105 KiB
YAML

basePath: /
definitions:
company.AddTagsForm:
properties:
categories:
items:
type: string
type: array
certifications:
items:
type: string
type: array
cpv_codes:
items:
type: string
type: array
keywords:
items:
type: string
type: array
specializations:
items:
type: string
type: array
type: object
company.Address:
properties:
city:
type: string
country:
type: string
postal_code:
type: string
state:
type: string
street:
type: string
type: object
company.AddressForm:
properties:
city:
type: string
country:
type: string
postal_code:
type: string
state:
type: string
street:
type: string
type: object
company.CPVCodeCount:
properties:
count:
type: integer
cpv_code:
type: string
type: object
company.CategoryCount:
properties:
category:
type: string
count:
type: integer
type: object
company.CompanyListResponse:
properties:
companies:
items:
$ref: '#/definitions/company.CompanyResponse'
type: array
limit:
type: integer
offset:
type: integer
total:
type: integer
total_pages:
type: integer
type: object
company.CompanyResponse:
properties:
address:
$ref: '#/definitions/company.Address'
annual_revenue:
type: number
compliance_notes:
type: string
contact_person:
$ref: '#/definitions/company.ContactPerson'
created_at:
type: integer
created_by:
type: string
currency:
type: string
description:
type: string
email:
type: string
employee_count:
type: integer
founded_year:
type: integer
id:
type: string
industry:
type: string
is_compliant:
type: boolean
is_verified:
type: boolean
language:
type: string
name:
type: string
phone:
type: string
registration_number:
type: string
status:
type: string
tags:
$ref: '#/definitions/company.CompanyTags'
tax_id:
type: string
timezone:
type: string
type:
type: string
updated_at:
type: integer
updated_by:
type: string
website:
type: string
type: object
company.CompanyStatsResponse:
properties:
active_companies:
type: integer
companies_by_industry:
additionalProperties:
format: int64
type: integer
type: object
companies_by_status:
additionalProperties:
format: int64
type: integer
type: object
companies_by_type:
additionalProperties:
format: int64
type: integer
type: object
top_categories:
items:
$ref: '#/definitions/company.CategoryCount'
type: array
top_cpv_codes:
items:
$ref: '#/definitions/company.CPVCodeCount'
type: array
total_companies:
type: integer
verified_companies:
type: integer
type: object
company.CompanyTags:
properties:
categories:
description: Categories
items:
type: string
type: array
certifications:
description: Certifications
items:
type: string
type: array
cpv_codes:
description: CPV codes (Common Procurement Vocabulary)
items:
type: string
type: array
keywords:
description: Keywords for search and matching
items:
type: string
type: array
specializations:
description: Specializations
items:
type: string
type: array
type: object
company.CompanyTagsForm:
properties:
categories:
items:
type: string
type: array
certifications:
items:
type: string
type: array
cpv_codes:
items:
type: string
type: array
keywords:
items:
type: string
type: array
specializations:
items:
type: string
type: array
type: object
company.ContactPerson:
properties:
email:
type: string
first_name:
type: string
full_name:
type: string
is_primary:
type: boolean
last_name:
type: string
mobile:
type: string
phone:
type: string
position:
type: string
type: object
company.ContactPersonForm:
properties:
email:
type: string
first_name:
type: string
full_name:
type: string
is_primary:
type: boolean
last_name:
type: string
mobile:
type: string
phone:
type: string
position:
type: string
type: object
company.CreateCompanyForm:
properties:
address:
allOf:
- $ref: '#/definitions/company.AddressForm'
description: Address information
annual_revenue:
type: number
contact_person:
allOf:
- $ref: '#/definitions/company.ContactPersonForm'
description: Contact information
currency:
type: string
description:
type: string
email:
type: string
employee_count:
description: Business information
type: integer
founded_year:
type: integer
industry:
type: string
language:
description: Settings
type: string
name:
type: string
phone:
type: string
registration_number:
type: string
tags:
allOf:
- $ref: '#/definitions/company.CompanyTagsForm'
description: Tags for categorization and search
tax_id:
type: string
timezone:
type: string
type:
type: string
website:
type: string
type: object
company.RemoveTagsForm:
properties:
categories:
items:
type: string
type: array
certifications:
items:
type: string
type: array
cpv_codes:
items:
type: string
type: array
keywords:
items:
type: string
type: array
specializations:
items:
type: string
type: array
type: object
company.SuspendCompanyForm:
properties:
reason:
type: string
type: object
company.UpdateCompanyForm:
properties:
address:
allOf:
- $ref: '#/definitions/company.AddressForm'
description: Address information
annual_revenue:
type: number
contact_person:
allOf:
- $ref: '#/definitions/company.ContactPersonForm'
description: Contact information
currency:
type: string
description:
type: string
email:
type: string
employee_count:
description: Business information
type: integer
founded_year:
type: integer
industry:
type: string
language:
description: Settings
type: string
name:
type: string
phone:
type: string
registration_number:
type: string
tags:
allOf:
- $ref: '#/definitions/company.CompanyTagsForm'
description: Tags for categorization and search
tax_id:
type: string
timezone:
type: string
type:
type: string
website:
type: string
type: object
company.UpdateCompanyStatusForm:
properties:
status:
type: string
type: object
company.UpdateCompanyTagsForm:
properties:
tags:
$ref: '#/definitions/company.CompanyTagsForm'
type: object
company.UpdateCompanyVerificationForm:
properties:
compliance_notes:
type: string
is_compliant:
type: boolean
is_verified:
type: boolean
type: object
customer.Address:
properties:
address_type:
description: billing, shipping, etc.
type: string
city:
type: string
country:
type: string
is_default:
type: boolean
postal_code:
type: string
state:
type: string
street:
type: string
type: object
customer.AddressForm:
properties:
address_type:
type: string
city:
type: string
country:
type: string
is_default:
type: boolean
postal_code:
type: string
state:
type: string
street:
type: string
type: object
customer.AssignCompaniesForm:
properties:
company_ids:
items:
type: string
type: array
type: object
customer.AuthResponse:
properties:
access_token:
type: string
customer:
$ref: '#/definitions/customer.CustomerResponse'
expires_at:
type: integer
refresh_token:
type: string
type: object
customer.CompanySummary:
properties:
id:
type: string
name:
type: string
type: object
customer.ContactPerson:
properties:
email:
type: string
first_name:
type: string
full_name:
type: string
is_primary:
type: boolean
last_name:
type: string
mobile:
type: string
phone:
type: string
position:
type: string
type: object
customer.ContactPersonForm:
properties:
email:
type: string
first_name:
type: string
full_name:
type: string
is_primary:
type: boolean
last_name:
type: string
mobile:
type: string
phone:
type: string
position:
type: string
type: object
customer.CreateCustomerForm:
properties:
address:
allOf:
- $ref: '#/definitions/customer.AddressForm'
description: Address information
annual_revenue:
type: number
business_type:
description: Business information
type: string
company_ids:
description: Company assignments
items:
type: string
type: array
contact_person:
allOf:
- $ref: '#/definitions/customer.ContactPersonForm'
description: Contact person (for company customers)
currency:
type: string
email:
type: string
employee_count:
type: integer
first_name:
description: Individual customer fields
type: string
founded_year:
type: integer
full_name:
type: string
industry:
type: string
language:
description: Preferences and settings
type: string
last_name:
type: string
mobile:
type: string
password:
type: string
phone:
type: string
registration_number:
description: Company customer fields
type: string
tax_id:
type: string
timezone:
type: string
type:
type: string
username:
type: string
type: object
customer.CustomerListResponse:
properties:
customers:
items:
$ref: '#/definitions/customer.CustomerResponse'
type: array
limit:
type: integer
offset:
type: integer
total:
type: integer
total_pages:
type: integer
type: object
customer.CustomerResponse:
properties:
address:
$ref: '#/definitions/customer.Address'
annual_revenue:
type: number
business_type:
type: string
companies:
description: Company relationships
items:
$ref: '#/definitions/customer.CompanySummary'
type: array
compliance_notes:
type: string
contact_person:
$ref: '#/definitions/customer.ContactPerson'
created_at:
type: integer
created_by:
type: string
currency:
type: string
email:
type: string
employee_count:
type: integer
first_name:
type: string
founded_year:
type: integer
full_name:
type: string
id:
type: string
industry:
type: string
is_compliant:
type: boolean
is_verified:
type: boolean
language:
type: string
last_name:
type: string
mobile:
type: string
phone:
type: string
registration_number:
description: Company customer fields
type: string
status:
type: string
tax_id:
type: string
timezone:
type: string
type:
type: string
updated_at:
type: integer
updated_by:
type: string
username:
type: string
type: object
customer.LoginForm:
properties:
password:
type: string
username:
type: string
type: object
customer.RefreshTokenForm:
properties:
refresh_token:
type: string
type: object
customer.RemoveCompaniesForm:
properties:
company_ids:
items:
type: string
type: array
type: object
customer.SuspendCustomerForm:
properties:
reason:
type: string
type: object
customer.UpdateCustomerForm:
properties:
address:
allOf:
- $ref: '#/definitions/customer.AddressForm'
description: Address information
annual_revenue:
type: number
business_type:
description: Business information
type: string
company_ids:
description: Company assignments
items:
type: string
type: array
company_name:
description: Company customer fields
type: string
contact_person:
allOf:
- $ref: '#/definitions/customer.ContactPersonForm'
description: Contact person (for company customers)
currency:
type: string
email:
type: string
employee_count:
type: integer
first_name:
description: Individual customer fields
type: string
founded_year:
type: integer
full_name:
type: string
industry:
type: string
language:
description: Preferences and settings
type: string
last_name:
type: string
mobile:
type: string
phone:
type: string
registration_number:
type: string
tax_id:
type: string
timezone:
type: string
type:
type: string
username:
type: string
type: object
customer.UpdateCustomerStatusForm:
properties:
status:
type: string
type: object
customer.UpdateCustomerVerificationForm:
properties:
compliance_notes:
type: string
is_compliant:
type: boolean
is_verified:
type: boolean
type: object
main.HealthResponse:
properties:
service:
description: Service name
example: tender-management-api
type: string
status:
description: Current health status
example: healthy
type: string
time:
description: Current Unix timestamp
example: 1699123456
type: integer
uptime:
description: Service uptime duration
example: 24h30m15s
type: string
version:
description: API version
example: 2.0.0
type: string
type: object
response.APIError:
properties:
code:
type: string
details:
type: string
message:
type: string
type: object
response.APIResponse:
properties:
data: {}
error:
$ref: '#/definitions/response.APIError'
message:
type: string
meta:
$ref: '#/definitions/response.Meta'
success:
type: boolean
type: object
response.Meta:
properties:
limit:
type: integer
offset:
type: integer
page:
type: integer
pages:
type: integer
total:
type: integer
type: object
user.AuthResponse:
properties:
access_token:
type: string
expires_at:
type: integer
refresh_token:
type: string
user:
$ref: '#/definitions/user.UserResponse'
type: object
user.ChangePasswordForm:
properties:
new_password:
description: New password (minimum 8 characters)
example: NewPass456!
type: string
old_password:
description: Current password for verification
example: OldPassword123!
type: string
type: object
user.CreateUserForm:
properties:
company_id:
description: Optional company UUID
example: 123e4567-e89b-12d3-a456-426614174000
type: string
department:
description: Optional department name
example: Information Technology
type: string
email:
description: Valid email address
example: john.smith@company.com
type: string
full_name:
description: Full name of the user
example: John Smith
type: string
password:
description: Password (minimum 8 characters)
example: SecurePass123!
type: string
phone:
description: Optional phone number
example: "+1234567890"
type: string
position:
description: Optional job position
example: Senior Developer
type: string
profile_image:
description: Optional profile image URL
example: https://example.com/avatar.jpg
type: string
role:
description: User role (admin, manager, operator, viewer)
example: manager
type: string
username:
description: Unique username (alphanumeric only)
example: johnsmith
type: string
type: object
user.LoginForm:
properties:
password:
description: User password
example: Nima.1998
type: string
username:
description: Username or email address
example: nakhostin
type: string
type: object
user.RefreshTokenForm:
properties:
refresh_token:
description: Valid refresh token
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
type: string
type: object
user.ResetPasswordForm:
properties:
email:
description: Email address for password reset
example: john.smith@company.com
type: string
type: object
user.UpdateUserForm:
properties:
company_id:
description: Updated company ID
example: 123e4567-e89b-12d3-a456-426614174000
type: string
department:
description: Updated department
example: Product Management
type: string
email:
description: Updated email address
example: john.smith@newcompany.com
type: string
full_name:
description: Updated full name
example: John Smith
type: string
phone:
description: Updated phone number
example: "+1234567890"
type: string
position:
description: Updated position
example: Tech Lead
type: string
profile_image:
description: Updated profile image URL
example: https://example.com/new-avatar.jpg
type: string
role:
description: Updated user role
example: admin
type: string
status:
description: Updated account status
example: active
type: string
username:
description: Updated username
example: johnsmith
type: string
type: object
user.UpdateUserRoleForm:
properties:
role:
type: string
type: object
user.UpdateUserStatusForm:
properties:
status:
type: string
type: object
user.UserListResponse:
properties:
limit:
type: integer
offset:
type: integer
total:
type: integer
total_pages:
type: integer
users:
items:
$ref: '#/definitions/user.UserResponse'
type: array
type: object
user.UserResponse:
properties:
company_id:
type: string
created_at:
type: integer
created_by:
type: string
department:
type: string
email:
type: string
full_name:
type: string
id:
type: string
is_verified:
type: boolean
last_login_at:
type: integer
phone:
type: string
position:
type: string
profile_image:
type: string
role:
type: string
status:
type: string
updated_at:
type: integer
updated_by:
type: string
username:
type: string
type: object
host: localhost:8081
info:
contact:
email: api-support@tender-management.com
name: Tender Management API Support
url: https://tender-management.com/support
description: This is a comprehensive API for the Tender Management System built
with Clean Architecture principles and Domain-Driven Design (DDD) patterns. The
API provides endpoints for user management, customer management, company management,
and authentication for both web panel administration and mobile application access.
license:
name: MIT
url: https://opensource.org/licenses/MIT
termsOfService: https://tender-management.com/terms
title: Tender Management API
version: 2.0.0
paths:
/admin/v1/companies:
get:
consumes:
- application/json
description: Retrieve a paginated list of companies with advanced filtering
options including search, type, status, industry, verification status, tags,
and business criteria. Supports sorting and pagination.
parameters:
- description: Search term to filter companies by name, description, or industry
in: query
name: search
type: string
- description: Filter by company type
enum:
- private
- public
- government
- ngo
- startup
in: query
name: type
type: string
- description: Filter by company status
enum:
- active
- inactive
- suspended
- pending
in: query
name: status
type: string
- description: Filter by industry
in: query
name: industry
type: string
- description: Filter by verification status
in: query
name: is_verified
type: boolean
- description: Filter by compliance status
in: query
name: is_compliant
type: boolean
- description: Filter by CPV codes
in: query
name: cpv_codes
type: array
- description: Filter by categories
in: query
name: categories
type: array
- description: Filter by keywords
in: query
name: keywords
type: array
- description: Filter by specializations
in: query
name: specializations
type: array
- description: Minimum employee count
in: query
name: employee_count_min
type: integer
- description: Maximum employee count
in: query
name: employee_count_max
type: integer
- description: Minimum annual revenue
in: query
name: annual_revenue_min
type: number
- description: Maximum annual revenue
in: query
name: annual_revenue_max
type: number
- description: Minimum founded year
in: query
name: founded_year_min
type: integer
- description: Maximum founded year
in: query
name: founded_year_max
type: integer
- default: 20
description: Number of companies per page (1-100)
in: query
maximum: 100
minimum: 1
name: limit
type: integer
- default: 0
description: Number of companies to skip for pagination
in: query
minimum: 0
name: offset
type: integer
- default: created_at
description: Field to sort by
enum:
- name
- type
- industry
- created_at
- updated_at
- status
- employee_count
- annual_revenue
in: query
name: sort_by
type: string
- default: desc
description: Sort order
enum:
- asc
- desc
in: query
name: sort_order
type: string
produces:
- application/json
responses:
"200":
description: Companies retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/company.CompanyListResponse'
type: object
"400":
description: Bad request - Invalid query parameters
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid query parameters
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: List companies with filters and pagination
tags:
- Admin-Companies
post:
consumes:
- application/json
description: Create a new company with comprehensive information including business
details, address, tags, and customer assignment. This endpoint is used by
the web panel for full company registration.
parameters:
- description: Company information including type, business details, address,
tags, and optional customer assignment
in: body
name: company
required: true
schema:
$ref: '#/definitions/company.CreateCompanyForm'
produces:
- application/json
responses:
"201":
description: Company created successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/company.CompanyResponse'
type: object
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"409":
description: Conflict - Company with this name/registration/tax ID already
exists
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Create a new company
tags:
- Admin-Companies
/admin/v1/companies/{id}:
delete:
consumes:
- application/json
description: Soft delete a company by setting status to inactive
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Company deleted successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid company ID
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Company not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Delete company
tags:
- Admin-Companies
get:
consumes:
- application/json
description: Retrieve detailed company information by company ID
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Company retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/company.CompanyResponse'
type: object
"400":
description: Bad request - Invalid company ID
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Company not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get company by ID
tags:
- Admin-Companies
put:
consumes:
- application/json
description: Update company information including business details, address,
tags, and customer assignment
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
- description: Company update information
in: body
name: company
required: true
schema:
$ref: '#/definitions/company.UpdateCompanyForm'
produces:
- application/json
responses:
"200":
description: Company updated successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/company.CompanyResponse'
type: object
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Company not found
schema:
$ref: '#/definitions/response.APIResponse'
"409":
description: Conflict - Company with this name/registration/tax ID already
exists
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Update company information
tags:
- Admin-Companies
/admin/v1/companies/{id}/activate:
post:
consumes:
- application/json
description: Activate a suspended company account
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Company activated successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid company ID
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Company not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Activate company
tags:
- Admin-Companies
/admin/v1/companies/{id}/status:
patch:
consumes:
- application/json
description: Update company account status (active, inactive, suspended, pending)
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
- description: New company status
in: body
name: status
required: true
schema:
$ref: '#/definitions/company.UpdateCompanyStatusForm'
produces:
- application/json
responses:
"200":
description: Company status updated successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Company not found
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Update company status
tags:
- Admin-Companies
/admin/v1/companies/{id}/suspend:
post:
consumes:
- application/json
description: Suspend a company account with reason
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
- description: Suspension information
in: body
name: suspension
required: true
schema:
$ref: '#/definitions/company.SuspendCompanyForm'
produces:
- application/json
responses:
"200":
description: Company suspended successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Company not found
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Suspend company
tags:
- Admin-Companies
/admin/v1/companies/{id}/tags:
put:
consumes:
- application/json
description: Update company tags (CPV, categories, keywords, specializations,
certifications)
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
- description: Tags update information
in: body
name: tags
required: true
schema:
$ref: '#/definitions/company.UpdateCompanyTagsForm'
produces:
- application/json
responses:
"200":
description: Company tags updated successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Company not found
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Update company tags
tags:
- Admin-Companies
/admin/v1/companies/{id}/tags/add:
post:
consumes:
- application/json
description: Add specific tags to a company
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
- description: Tags to add
in: body
name: tags
required: true
schema:
$ref: '#/definitions/company.AddTagsForm'
produces:
- application/json
responses:
"200":
description: Tags added successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Company not found
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Add tags to company
tags:
- Admin-Companies
/admin/v1/companies/{id}/tags/remove:
post:
consumes:
- application/json
description: Remove specific tags from a company
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
- description: Tags to remove
in: body
name: tags
required: true
schema:
$ref: '#/definitions/company.RemoveTagsForm'
produces:
- application/json
responses:
"200":
description: Tags removed successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Company not found
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Remove tags from company
tags:
- Admin-Companies
/admin/v1/companies/{id}/verification:
patch:
consumes:
- application/json
description: Update company verification and compliance status
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
- description: Verification status update
in: body
name: verification
required: true
schema:
$ref: '#/definitions/company.UpdateCompanyVerificationForm'
produces:
- application/json
responses:
"200":
description: Company verification updated successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Company not found
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Update company verification status
tags:
- Admin-Companies
/admin/v1/companies/{id}/verify:
post:
consumes:
- application/json
description: Mark a company as verified
parameters:
- description: Company ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Company verified successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid company ID
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Company not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Verify company
tags:
- Admin-Companies
/admin/v1/companies/industry/{industry}:
get:
consumes:
- application/json
description: Retrieve companies filtered by their industry
parameters:
- description: Industry
in: path
name: industry
required: true
type: string
- default: 20
description: Number of companies per page (1-100)
in: query
maximum: 100
minimum: 1
name: limit
type: integer
- default: 0
description: Number of companies to skip for pagination
in: query
minimum: 0
name: offset
type: integer
produces:
- application/json
responses:
"200":
description: Companies retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
items:
$ref: '#/definitions/company.CompanyResponse'
type: array
meta:
$ref: '#/definitions/response.Meta'
type: object
"400":
description: Bad request - Invalid industry
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get companies by industry
tags:
- Admin-Companies
/admin/v1/companies/search:
get:
consumes:
- application/json
description: Search companies with advanced filtering capabilities including
tags, business criteria, and location
parameters:
- description: Search query
in: query
name: q
type: string
- description: CPV codes filter
in: query
name: cpv_codes
type: array
- description: Categories filter
in: query
name: categories
type: array
- description: Keywords filter
in: query
name: keywords
type: array
- description: Specializations filter
in: query
name: specializations
type: array
- description: Industry filter
in: query
name: industry
type: string
- description: Location filter
in: query
name: location
type: string
- description: Minimum employees
in: query
name: min_employees
type: integer
- description: Maximum employees
in: query
name: max_employees
type: integer
- description: Minimum revenue
in: query
name: min_revenue
type: number
- description: Maximum revenue
in: query
name: max_revenue
type: number
- description: Verification status
in: query
name: is_verified
type: boolean
- description: Compliance status
in: query
name: is_compliant
type: boolean
- default: 20
description: Limit
in: query
name: limit
type: integer
- default: 0
description: Offset
in: query
name: offset
type: integer
produces:
- application/json
responses:
"200":
description: Companies search completed
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/company.CompanyListResponse'
type: object
"400":
description: Bad request - Invalid query parameters
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid query parameters
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Advanced search for companies
tags:
- Admin-Companies
/admin/v1/companies/stats:
get:
consumes:
- application/json
description: Get comprehensive company statistics for dashboard
produces:
- application/json
responses:
"200":
description: Company statistics retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/company.CompanyStatsResponse'
type: object
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get company statistics
tags:
- Admin-Companies
/admin/v1/companies/status/{status}:
get:
consumes:
- application/json
description: Retrieve companies filtered by their status (active, inactive,
suspended, pending)
parameters:
- description: Company status
enum:
- active
- inactive
- suspended
- pending
in: path
name: status
required: true
type: string
- default: 20
description: Number of companies per page (1-100)
in: query
maximum: 100
minimum: 1
name: limit
type: integer
- default: 0
description: Number of companies to skip for pagination
in: query
minimum: 0
name: offset
type: integer
produces:
- application/json
responses:
"200":
description: Companies retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
items:
$ref: '#/definitions/company.CompanyResponse'
type: array
meta:
$ref: '#/definitions/response.Meta'
type: object
"400":
description: Bad request - Invalid company status
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get companies by status
tags:
- Admin-Companies
/admin/v1/companies/type/{type}:
get:
consumes:
- application/json
description: Retrieve companies filtered by their type (private, public, government,
ngo, startup)
parameters:
- description: Company type
enum:
- private
- public
- government
- ngo
- startup
in: path
name: type
required: true
type: string
- default: 20
description: Number of companies per page (1-100)
in: query
maximum: 100
minimum: 1
name: limit
type: integer
- default: 0
description: Number of companies to skip for pagination
in: query
minimum: 0
name: offset
type: integer
produces:
- application/json
responses:
"200":
description: Companies retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
items:
$ref: '#/definitions/company.CompanyResponse'
type: array
meta:
$ref: '#/definitions/response.Meta'
type: object
"400":
description: Bad request - Invalid company type
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get companies by type
tags:
- Admin-Companies
/admin/v1/customers:
get:
consumes:
- application/json
description: Retrieve a paginated list of customers with advanced filtering
options including search, type, status, company, industry, verification status,
and compliance status. Supports sorting and pagination.
parameters:
- description: Search term to filter customers by name, email, or company name
in: query
name: search
type: string
- description: Filter by customer type
enum:
- individual
- company
- government
in: query
name: type
type: string
- description: Filter by customer status
enum:
- active
- inactive
- suspended
- pending
in: query
name: status
type: string
- description: Filter by company ID
format: uuid
in: query
name: company_id
type: string
- description: Filter by industry
in: query
name: industry
type: string
- description: Filter by verification status
in: query
name: is_verified
type: boolean
- description: Filter by compliance status
in: query
name: is_compliant
type: boolean
- description: Filter by preferred language
in: query
name: language
type: string
- description: Filter by preferred currency
in: query
name: currency
type: string
- default: 20
description: Number of customers per page (1-100)
in: query
maximum: 100
minimum: 1
name: limit
type: integer
- default: 0
description: Number of customers to skip for pagination
in: query
minimum: 0
name: offset
type: integer
- default: created_at
description: Field to sort by
enum:
- email
- company_name
- created_at
- updated_at
- status
in: query
name: sort_by
type: string
- default: desc
description: Sort order
enum:
- asc
- desc
in: query
name: sort_order
type: string
produces:
- application/json
responses:
"200":
description: Customers retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/customer.CustomerListResponse'
type: object
"400":
description: Bad request - Invalid query parameters
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid query parameters
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: List customers with filters and pagination
tags:
- Admin-Customers
post:
consumes:
- application/json
description: Create a new customer with comprehensive information including
personal details, company information, address, and business details. This
endpoint is used by the web panel for full customer registration.
parameters:
- description: Customer information including type (individual|company|government),
personal details, company info, address, and business details
in: body
name: customer
required: true
schema:
$ref: '#/definitions/customer.CreateCustomerForm'
produces:
- application/json
responses:
"201":
description: Customer created successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/customer.CustomerResponse'
type: object
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"409":
description: Conflict - Customer with this email/company already exists
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Create a new customer
tags:
- Admin-Customers
/admin/v1/customers/{id}:
delete:
consumes:
- application/json
description: Soft delete a customer by setting status to inactive
parameters:
- description: Customer ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Customer deleted successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid customer ID
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Customer not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Delete customer
tags:
- Admin-Customers
get:
consumes:
- application/json
description: Retrieve detailed customer information by customer ID
parameters:
- description: Customer ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Customer retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/customer.CustomerResponse'
type: object
"400":
description: Bad request - Invalid customer ID
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Customer not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get customer by ID
tags:
- Admin-Customers
put:
consumes:
- application/json
description: Update customer information including personal details, company
information, address, and business details
parameters:
- description: Customer ID
in: path
name: id
required: true
type: string
- description: Updated customer information
in: body
name: customer
required: true
schema:
$ref: '#/definitions/customer.UpdateCustomerForm'
produces:
- application/json
responses:
"200":
description: Customer updated successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/customer.CustomerResponse'
type: object
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Customer not found
schema:
$ref: '#/definitions/response.APIResponse'
"409":
description: Conflict - Customer with this email/company already exists
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Update customer information
tags:
- Admin-Customers
/admin/v1/customers/{id}/activate:
post:
consumes:
- application/json
description: Activate a suspended customer account
parameters:
- description: Customer ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Customer activated successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid customer ID
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Customer not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Activate customer
tags:
- Admin-Customers
/admin/v1/customers/{id}/companies/assign:
post:
consumes:
- application/json
description: Assign one or more companies to a specific customer.
parameters:
- description: Customer ID
in: path
name: id
required: true
type: string
- description: List of company IDs to assign
in: body
name: companies
required: true
schema:
$ref: '#/definitions/customer.AssignCompaniesForm'
produces:
- application/json
responses:
"200":
description: Companies assigned successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Customer not found
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Assign companies to a customer
tags:
- Admin-Customers
/admin/v1/customers/{id}/companies/remove:
post:
consumes:
- application/json
description: Remove one or more companies from a specific customer.
parameters:
- description: Customer ID
in: path
name: id
required: true
type: string
- description: List of company IDs to remove
in: body
name: companies
required: true
schema:
$ref: '#/definitions/customer.RemoveCompaniesForm'
produces:
- application/json
responses:
"200":
description: Companies removed successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Customer not found
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Remove companies from a customer
tags:
- Admin-Customers
/admin/v1/customers/{id}/status:
patch:
consumes:
- application/json
description: Update customer account status (active, inactive, suspended, pending)
parameters:
- description: Customer ID
in: path
name: id
required: true
type: string
- description: New customer status
in: body
name: status
required: true
schema:
$ref: '#/definitions/customer.UpdateCustomerStatusForm'
produces:
- application/json
responses:
"200":
description: Customer status updated successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Customer not found
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Update customer status
tags:
- Admin-Customers
/admin/v1/customers/{id}/suspend:
post:
consumes:
- application/json
description: Suspend a customer account with optional reason
parameters:
- description: Customer ID
in: path
name: id
required: true
type: string
- description: Suspension information
in: body
name: suspension
required: true
schema:
$ref: '#/definitions/customer.SuspendCustomerForm'
produces:
- application/json
responses:
"200":
description: Customer suspended successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Customer not found
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Suspend customer
tags:
- Admin-Customers
/admin/v1/customers/{id}/verification:
patch:
consumes:
- application/json
description: Update customer verification and compliance status
parameters:
- description: Customer ID
in: path
name: id
required: true
type: string
- description: Verification status update
in: body
name: verification
required: true
schema:
$ref: '#/definitions/customer.UpdateCustomerVerificationForm'
produces:
- application/json
responses:
"200":
description: Customer verification updated successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Customer not found
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Update customer verification status
tags:
- Admin-Customers
/admin/v1/customers/{id}/verify:
post:
consumes:
- application/json
description: Mark a customer as verified
parameters:
- description: Customer ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Customer verified successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid customer ID
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Customer not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Verify customer
tags:
- Admin-Customers
/admin/v1/customers/company/{companyId}:
get:
consumes:
- application/json
description: Retrieve all customers associated with a specific company
parameters:
- description: Company ID
in: path
name: companyId
required: true
type: string
- description: 'Number of customers to return (default: 10, max: 100)'
in: query
name: limit
type: integer
- description: 'Number of customers to skip (default: 0)'
in: query
name: offset
type: integer
produces:
- application/json
responses:
"200":
description: Customers retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
items:
$ref: '#/definitions/customer.CustomerResponse'
type: array
type: object
"400":
description: Bad request - Invalid company ID
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get customers by company ID
tags:
- Admin-Customers
/admin/v1/customers/status/{status}:
get:
consumes:
- application/json
description: Retrieve customers filtered by their account status (active, inactive,
suspended, or pending). Useful for administrative monitoring and management.
parameters:
- description: Customer status
enum:
- active
- inactive
- suspended
- pending
in: path
name: status
required: true
type: string
- default: 20
description: Number of customers per page (1-100)
in: query
maximum: 100
minimum: 1
name: limit
type: integer
- default: 0
description: Number of customers to skip for pagination
in: query
minimum: 0
name: offset
type: integer
produces:
- application/json
responses:
"200":
description: Customers retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
items:
$ref: '#/definitions/customer.CustomerResponse'
type: array
meta:
$ref: '#/definitions/response.Meta'
type: object
"400":
description: Bad request - Invalid customer status
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get customers by status
tags:
- Admin-Customers
/admin/v1/customers/type/{type}:
get:
consumes:
- application/json
description: Retrieve customers filtered by their type (individual, company,
or government). Useful for administrative reporting and management.
parameters:
- description: Customer type
enum:
- individual
- company
- government
in: path
name: type
required: true
type: string
- default: 20
description: Number of customers per page (1-100)
in: query
maximum: 100
minimum: 1
name: limit
type: integer
- default: 0
description: Number of customers to skip for pagination
in: query
minimum: 0
name: offset
type: integer
produces:
- application/json
responses:
"200":
description: Customers retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
items:
$ref: '#/definitions/customer.CustomerResponse'
type: array
meta:
$ref: '#/definitions/response.Meta'
type: object
"400":
description: Bad request - Invalid customer type
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get customers by type
tags:
- Admin-Customers
/admin/v1/customers/with-companies:
get:
consumes:
- application/json
description: Retrieve a paginated list of customers with their assigned companies
and advanced filtering options including search, type, status, company, industry,
verification status, and compliance status. Supports sorting and pagination.
parameters:
- description: Search term to filter customers by name, email, or company name
in: query
name: search
type: string
- description: Filter by customer type
enum:
- individual
- company
- government
in: query
name: type
type: string
- description: Filter by customer status
enum:
- active
- inactive
- suspended
- pending
in: query
name: status
type: string
- description: Filter by company ID
format: uuid
in: query
name: company_id
type: string
- description: Filter by industry
in: query
name: industry
type: string
- description: Filter by verification status
in: query
name: is_verified
type: boolean
- description: Filter by compliance status
in: query
name: is_compliant
type: boolean
- description: Filter by preferred language
in: query
name: language
type: string
- description: Filter by preferred currency
in: query
name: currency
type: string
- default: 20
description: Number of customers per page (1-100)
in: query
maximum: 100
minimum: 1
name: limit
type: integer
- default: 0
description: Number of customers to skip for pagination
in: query
minimum: 0
name: offset
type: integer
- default: created_at
description: Field to sort by
enum:
- email
- company_name
- created_at
- updated_at
- status
in: query
name: sort_by
type: string
- default: desc
description: Sort order
enum:
- asc
- desc
in: query
name: sort_order
type: string
produces:
- application/json
responses:
"200":
description: Customers with companies retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/customer.CustomerListResponse'
type: object
"400":
description: Bad request - Invalid query parameters
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid query parameters
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: List customers with companies and filters
tags:
- Admin-Customers
/admin/v1/health:
get:
consumes:
- application/json
description: Get comprehensive server health status including system information,
dependencies status, and performance metrics. This endpoint is used for monitoring
and load balancer health checks.
produces:
- application/json
responses:
"200":
description: System is healthy and operational
schema:
$ref: '#/definitions/main.HealthResponse'
"503":
description: System is unhealthy or experiencing issues
schema:
$ref: '#/definitions/main.HealthResponse'
summary: Health check endpoint
tags:
- Admin-Health
/admin/v1/profile:
get:
consumes:
- application/json
description: Retrieve complete profile information for the currently authenticated
user including personal details, role information, permissions, and account
status. This endpoint requires valid authentication token.
produces:
- application/json
responses:
"200":
description: Profile retrieved successfully with user details
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/user.UserResponse'
type: object
"401":
description: Unauthorized - Invalid or expired authentication token
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - User profile not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get authenticated user profile
tags:
- Admin-Users
put:
consumes:
- application/json
description: Update profile information for the currently authenticated user
including personal details, contact information, and preferences. Only the
authenticated user can update their own profile.
parameters:
- description: Profile update data including name, email, phone, and other personal
information
in: body
name: profile
required: true
schema:
$ref: '#/definitions/user.UpdateUserForm'
produces:
- application/json
responses:
"200":
description: Profile updated successfully with updated user details
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/user.UserResponse'
type: object
"400":
description: Bad request - Invalid request format or missing required fields
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized - Invalid or expired authentication token
schema:
$ref: '#/definitions/response.APIResponse'
"409":
description: Conflict - Email address already exists for another user
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid input data format
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Update authenticated user profile
tags:
- Admin-Users
/admin/v1/profile/change-password:
put:
consumes:
- application/json
description: Change password for the currently authenticated user. Requires
current password verification and enforces password policy. This operation
invalidates all existing sessions and requires re-authentication.
parameters:
- description: Password change data including current password and new password
in: body
name: password
required: true
schema:
$ref: '#/definitions/user.ChangePasswordForm'
produces:
- application/json
responses:
"200":
description: Password changed successfully - user must re-authenticate
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid request format or password policy violation
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized - Invalid authentication token or incorrect current
password
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid password format or policy requirements
not met
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Change user password
tags:
- Admin-Users
/admin/v1/profile/login:
post:
consumes:
- application/json
description: Authenticate user with username/email and password to obtain access
and refresh tokens for web panel administration. This endpoint validates credentials
and returns JWT tokens for subsequent API calls.
parameters:
- description: User login credentials including username/email and password
in: body
name: login
required: true
schema:
$ref: '#/definitions/user.LoginForm'
produces:
- application/json
responses:
"200":
description: Login successful with access and refresh tokens
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/user.AuthResponse'
type: object
"400":
description: Bad request - Invalid request format or missing fields
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized - Invalid credentials or account locked
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid input data format
schema:
$ref: '#/definitions/response.APIResponse'
"429":
description: Too many requests - Rate limit exceeded
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
summary: Authenticate user login
tags:
- Admin-Authorization
/admin/v1/profile/logout:
delete:
consumes:
- application/json
description: Logout the currently authenticated user by invalidating their access
and refresh tokens. This endpoint ensures secure session termination and prevents
further use of the user's tokens.
produces:
- application/json
responses:
"200":
description: Logout successful - all tokens invalidated
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized - Invalid or expired authentication token
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error - Failed to invalidate tokens
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Logout authenticated user
tags:
- Admin-Authorization
/admin/v1/profile/refresh-token:
post:
consumes:
- application/json
description: Generate a new access token using a valid refresh token. This endpoint
allows clients to obtain fresh access tokens without re-authentication, maintaining
session continuity.
parameters:
- description: Refresh token for generating new access token
in: body
name: refresh
required: true
schema:
$ref: '#/definitions/user.RefreshTokenForm'
produces:
- application/json
responses:
"200":
description: Token refreshed successfully with new access token
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/user.AuthResponse'
type: object
"400":
description: Bad request - Invalid request format
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized - Invalid or expired refresh token
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid token format
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
summary: Refresh access token
tags:
- Admin-Authorization
/admin/v1/profile/reset-password:
post:
consumes:
- application/json
description: Send password reset email to user with reset token. This endpoint
validates the email address and sends a secure reset link to the user's registered
email address.
parameters:
- description: Email address for password reset request
in: body
name: reset
required: true
schema:
$ref: '#/definitions/user.ResetPasswordForm'
produces:
- application/json
responses:
"200":
description: Password reset email sent successfully
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad request - Invalid request format or email address
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Email address not registered
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid email format
schema:
$ref: '#/definitions/response.APIResponse'
"429":
description: Too many requests - Rate limit for reset emails exceeded
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error - Failed to send email
schema:
$ref: '#/definitions/response.APIResponse'
summary: Initiate password reset process
tags:
- Admin-Authorization
/admin/v1/users:
get:
consumes:
- application/json
description: List users with search and filters (admin only)
parameters:
- description: Search term
in: query
name: search
type: string
- description: User status filter
in: query
name: status
type: string
- description: User role filter
in: query
name: role
type: string
- description: Company ID filter
in: query
name: company_id
type: string
- description: Limit results
in: query
name: limit
type: integer
- description: Offset results
in: query
name: offset
type: integer
- description: Sort field
in: query
name: sort_by
type: string
- description: Sort order
in: query
name: sort_order
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/user.UserListResponse'
type: object
"400":
description: Bad Request
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/response.APIResponse'
"403":
description: Forbidden
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: List users
tags:
- Admin-Users
post:
consumes:
- application/json
description: Create a new user account with specified role and permissions.
This endpoint is restricted to administrators only and allows creation of
various user types including admins, managers, and operators with appropriate
access levels.
parameters:
- description: User creation data including username, email, password, role,
and profile information
in: body
name: user
required: true
schema:
$ref: '#/definitions/user.CreateUserForm'
produces:
- application/json
responses:
"201":
description: User created successfully with assigned role and permissions
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/user.UserResponse'
type: object
"400":
description: Bad request - Invalid input data or missing required fields
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized - Invalid or expired authentication token
schema:
$ref: '#/definitions/response.APIResponse'
"403":
description: Forbidden - Insufficient privileges to create users
schema:
$ref: '#/definitions/response.APIResponse'
"409":
description: Conflict - Username or email already exists
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid data format or password policy violation
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Create new user account
tags:
- Admin-Users
/admin/v1/users/{id}:
delete:
consumes:
- application/json
description: Delete a user (admin only)
parameters:
- description: User ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad Request
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/response.APIResponse'
"403":
description: Forbidden
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not Found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Delete user
tags:
- Admin-Users
get:
consumes:
- application/json
description: Get user details by ID (admin only)
parameters:
- description: User ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/user.UserResponse'
type: object
"400":
description: Bad Request
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/response.APIResponse'
"403":
description: Forbidden
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not Found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get user by ID
tags:
- Admin-Users
put:
consumes:
- application/json
description: Update user information (admin only)
parameters:
- description: User ID
in: path
name: id
required: true
type: string
- description: User update data
in: body
name: user
required: true
schema:
$ref: '#/definitions/user.UpdateUserForm'
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/user.UserResponse'
type: object
"400":
description: Bad Request
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/response.APIResponse'
"403":
description: Forbidden
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not Found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Update user
tags:
- Admin-Users
/admin/v1/users/{id}/role:
put:
consumes:
- application/json
description: Update user role (admin only)
parameters:
- description: User ID
in: path
name: id
required: true
type: string
- description: Role update data
in: body
name: role
required: true
schema:
$ref: '#/definitions/user.UpdateUserRoleForm'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad Request
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/response.APIResponse'
"403":
description: Forbidden
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not Found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Update user role
tags:
- Admin-Users
/admin/v1/users/{id}/status:
put:
consumes:
- application/json
description: Update user account status (admin only)
parameters:
- description: User ID
in: path
name: id
required: true
type: string
- description: Status update data
in: body
name: status
required: true
schema:
$ref: '#/definitions/user.UpdateUserStatusForm'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/response.APIResponse'
"400":
description: Bad Request
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/response.APIResponse'
"403":
description: Forbidden
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not Found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Update user status
tags:
- Admin-Users
/admin/v1/users/company/{company_id}:
get:
consumes:
- application/json
description: Get users belonging to a specific company (admin only)
parameters:
- description: Company ID
in: path
name: company_id
required: true
type: string
- description: Limit results
in: query
name: limit
type: integer
- description: Offset results
in: query
name: offset
type: integer
produces:
- application/json
responses:
"200":
description: Users with pagination metadata
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
additionalProperties: true
type: object
type: object
"400":
description: Bad Request
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/response.APIResponse'
"403":
description: Forbidden
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get users by company ID
tags:
- Admin-Users
/admin/v1/users/role/{role}:
get:
consumes:
- application/json
description: Get users with a specific role (admin only)
parameters:
- description: User role
in: path
name: role
required: true
type: string
- description: Limit results
in: query
name: limit
type: integer
- description: Offset results
in: query
name: offset
type: integer
produces:
- application/json
responses:
"200":
description: Users with pagination metadata
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
additionalProperties: true
type: object
type: object
"400":
description: Bad Request
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/response.APIResponse'
"403":
description: Forbidden
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get users by role
tags:
- Admin-Users
/api/v1/profile:
get:
consumes:
- application/json
description: Retrieve current customer profile information
produces:
- application/json
responses:
"200":
description: Profile retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/customer.CustomerResponse'
type: object
"401":
description: Unauthorized - Invalid or missing token
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Customer not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get customer profile
tags:
- Authorization
/api/v1/profile/login:
post:
consumes:
- application/json
description: Authenticate customer with username (email) and password. Returns
access token, refresh token, and customer information upon successful authentication.
parameters:
- description: Login credentials (username/email and password)
in: body
name: login
required: true
schema:
$ref: '#/definitions/customer.LoginForm'
produces:
- application/json
responses:
"200":
description: Login successful
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/customer.AuthResponse'
type: object
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized - Invalid credentials or inactive account
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
summary: Customer login
tags:
- Authorization
/api/v1/profile/logout:
delete:
consumes:
- application/json
description: Logout customer and invalidate access token
produces:
- application/json
responses:
"200":
description: Logout successful
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized - Invalid or missing token
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Customer logout
tags:
- Authorization
/api/v1/profile/refresh-token:
post:
consumes:
- application/json
description: Refresh access token using a valid refresh token. This allows customers
to maintain their session without re-authentication.
parameters:
- description: Refresh token for generating new access token
in: body
name: refresh
required: true
schema:
$ref: '#/definitions/customer.RefreshTokenForm'
produces:
- application/json
responses:
"200":
description: Token refreshed successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/customer.AuthResponse'
type: object
"400":
description: Bad request - Invalid refresh token or feature not implemented
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized - Invalid or expired refresh token
schema:
$ref: '#/definitions/response.APIResponse'
"422":
description: Validation error - Invalid request data
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
summary: Refresh customer access token
tags:
- Authorization
/api/v1/profile/with-companies:
get:
consumes:
- application/json
description: Retrieve current customer profile information along with their
assigned companies.
produces:
- application/json
responses:
"200":
description: Profile retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/customer.CustomerResponse'
type: object
"401":
description: Unauthorized - Invalid or missing token
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Customer not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get customer profile with companies
tags:
- Authorization
securityDefinitions:
BearerAuth:
description: 'Type "Bearer" followed by a space and JWT token. Example: "Bearer
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."'
in: header
name: Authorization
type: apiKey
swagger: "2.0"
tags:
- description: System health check operations for monitoring application status and
dependencies
name: Admin-Health
- description: User authentication and authorization operations including login, logout,
token refresh, and password management for web panel administration
name: Admin-Authorization
- description: Administrative user management operations including CRUD operations,
role management, status updates, and profile management for web panel administrators
name: Admin-Users
- description: Administrative customer management operations for web panel including
CRUD operations, company assignment, verification, status management, and comprehensive
filtering with pagination
name: Admin-Customers
- description: Administrative company management operations for web panel including
CRUD operations, tag management, verification, status updates, comprehensive search
and filtering, and statistical reporting
name: Admin-Companies
- description: Customer authentication and authorization operations for mobile application
including login, logout, token refresh, and profile access
name: Authorization