Files
tm_back/cmd/web/docs/swagger.yaml
T
n.nakhostin ff3f5a9b8f Add Company Information Access to API Documentation
- Updated API documentation to include a new section for company information access, detailing operations related to company profiles and tenders.
- Enhanced Swagger JSON, YAML, and Go documentation to accurately reflect the new "Company" tag, ensuring clarity for mobile application users.
- This addition improves the overall usability of the API by providing comprehensive information on company-related functionalities.
2025-08-20 12:29:27 +03:30

5396 lines
150 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.CompanyProfileResponse:
properties:
country:
type: string
created_at:
type: integer
founded_year:
type: integer
id:
type: string
industry:
type: string
name:
type: string
registration_number:
type: string
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:
example: Nima.1998
type: string
username:
example: nakhostin
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
feedback.FeedbackListResponse:
properties:
feedback:
items:
$ref: '#/definitions/feedback.FeedbackResponse'
type: array
meta:
$ref: '#/definitions/response.Meta'
type: object
feedback.FeedbackResponse:
properties:
company_id:
type: string
created_at:
type: integer
customer_id:
type: string
feedback_type:
$ref: '#/definitions/feedback.FeedbackType'
id:
type: string
tender:
type: string
updated_at:
type: integer
type: object
feedback.FeedbackType:
enum:
- like
- dislike
type: string
x-enum-varnames:
- FeedbackTypeLike
- FeedbackTypeDislike
feedback.ToggleFeedbackForm:
properties:
feedback_type:
allOf:
- $ref: '#/definitions/feedback.FeedbackType'
enum:
- like
- dislike
tender_id:
type: string
required:
- feedback_type
- tender_id
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
tender.OrganizationResponse:
properties:
name:
type: string
type: object
tender.TenderResponse:
properties:
buyer_organization:
$ref: '#/definitions/tender.OrganizationResponse'
country_code:
type: string
currency:
type: string
description:
type: string
duration:
type: string
duration_unit:
type: string
estimated_value:
type: number
id:
type: string
notice_publication_id:
type: string
procedure_code:
type: string
procurement_type_code:
type: string
publication_date:
type: integer
status:
$ref: '#/definitions/tender.TenderStatus'
submission_deadline:
type: integer
tender_deadline:
type: integer
title:
type: string
type: object
tender.TenderStatus:
enum:
- active
- expired
- cancelled
- awarded
- draft
type: string
x-enum-varnames:
- TenderStatusActive
- TenderStatusExpired
- TenderStatusCancelled
- TenderStatusAwarded
- TenderStatusDraft
tender.UpdateTenderRequest:
properties:
currency:
type: string
description:
type: string
estimated_value:
type: number
id:
type: string
status:
$ref: '#/definitions/tender.TenderStatus'
tender_deadline:
description: Unix milliseconds
type: integer
title:
type: string
type: object
tender_approval.ApprovalStatus:
enum:
- approved
- rejected
type: string
x-enum-comments:
ApprovalStatusApproved: Company approved the tender
ApprovalStatusRejected: Company rejected the tender
x-enum-descriptions:
- Company approved the tender
- Company rejected the tender
x-enum-varnames:
- ApprovalStatusApproved
- ApprovalStatusRejected
tender_approval.CompanyTenderApprovalStatsResponse:
properties:
approvals_by_status:
additionalProperties:
format: int64
type: integer
type: object
approvals_by_submission:
additionalProperties:
format: int64
type: integer
type: object
approved_tenders:
type: integer
company_id:
type: string
last_updated:
type: integer
partnership_count:
type: integer
rejected_tenders:
type: integer
self_apply_count:
type: integer
total_approvals:
type: integer
type: object
tender_approval.CreateTenderApprovalForm:
properties:
status:
$ref: '#/definitions/tender_approval.ApprovalStatus'
submission_mode:
$ref: '#/definitions/tender_approval.SubmissionMode'
tender_id:
type: string
type: object
tender_approval.OrganizationResponse:
properties:
name:
type: string
type: object
tender_approval.SubmissionMode:
enum:
- self-apply
- partnership
type: string
x-enum-comments:
SubmissionModePartnership: Company applies for the tender with a partner
SubmissionModeSelfApply: Company applies for the tender on their own
x-enum-descriptions:
- Company applies for the tender on their own
- Company applies for the tender with a partner
x-enum-varnames:
- SubmissionModeSelfApply
- SubmissionModePartnership
tender_approval.TenderApprovalListResponse:
properties:
limit:
type: integer
offset:
type: integer
tender_approvals:
items:
$ref: '#/definitions/tender_approval.TenderApprovalResponse'
type: array
total:
type: integer
total_pages:
type: integer
type: object
tender_approval.TenderApprovalResponse:
properties:
company_id:
type: string
created_at:
type: integer
id:
type: string
status:
type: string
submission_mode:
type: string
tender_id:
type: string
type: object
tender_approval.TenderApprovalStatsResponse:
properties:
approvals_by_status:
additionalProperties:
format: int64
type: integer
type: object
approvals_by_submission:
additionalProperties:
format: int64
type: integer
type: object
approved_tenders:
type: integer
last_updated:
type: integer
rejected_tenders:
type: integer
total_approvals:
type: integer
type: object
tender_approval.TenderApprovalWithTenderResponse:
properties:
company_id:
type: string
created_at:
type: integer
id:
type: string
status:
type: string
submission_mode:
type: string
tender:
$ref: '#/definitions/tender_approval.TenderDetails'
tender_id:
type: string
type: object
tender_approval.TenderDetails:
properties:
buyer_organization:
$ref: '#/definitions/tender_approval.OrganizationResponse'
country_code:
type: string
currency:
type: string
description:
type: string
duration:
type: string
duration_unit:
type: string
estimated_value:
type: number
id:
type: string
notice_publication_id:
type: string
procedure_code:
type: string
procurement_type_code:
type: string
publication_date:
type: integer
status:
type: string
submission_deadline:
type: integer
tender_deadline:
type: integer
title:
type: string
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:
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/tenders:
get:
description: Retrieve tenders with pagination, filtering, and search capabilities
with optional company-based matching
parameters:
- description: 'Number of items per page (default: 20, max: 100)'
in: query
name: limit
type: integer
- description: 'Number of items to skip (default: 0)'
in: query
name: offset
type: integer
- description: Company ID for match percentage calculation and sorting
in: query
name: company_id
type: string
- description: Search query for title and description
in: query
name: query
type: string
- description: Filter by notice type code
in: query
name: notice_type
type: string
- description: Filter by procurement type code
in: query
name: procurement_type
type: string
- collectionFormat: csv
description: Filter by country codes (comma-separated)
in: query
items:
type: string
name: country_codes
type: array
- collectionFormat: csv
description: Filter by status (comma-separated)
in: query
items:
type: string
name: status
type: array
- collectionFormat: csv
description: Filter by source (comma-separated)
in: query
items:
type: string
name: source
type: array
- description: Minimum estimated value
in: query
name: min_estimated_value
type: number
- description: Maximum estimated value
in: query
name: max_estimated_value
type: number
- description: Filter by currency
in: query
name: currency
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
additionalProperties: true
type: object
type: object
"400":
description: Bad Request
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: List tenders
tags:
- Admin-Tenders
/admin/tenders/{id}:
delete:
description: Delete a tender by its ID
parameters:
- description: Tender ID
in: path
name: id
required: true
type: string
responses:
"200":
description: OK
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 tender
tags:
- Admin-Tenders
get:
description: Retrieve a specific tender by its ID
parameters:
- description: Tender 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/tender.TenderResponse'
type: object
"404":
description: Not Found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get tender by ID
tags:
- Admin-Tenders
put:
consumes:
- application/json
description: Update an existing tender with the provided information
parameters:
- description: Tender ID
in: path
name: id
required: true
type: string
- description: Updated tender information
in: body
name: tender
required: true
schema:
$ref: '#/definitions/tender.UpdateTenderRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/tender.TenderResponse'
type: object
"400":
description: Bad Request
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 tender
tags:
- Admin-Tenders
/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/feedback:
get:
consumes:
- application/json
description: Retrieve paginated list of feedback with optional filtering by
various criteria. This endpoint is for administrative use and provides comprehensive
filtering options.
parameters:
- description: Filter by tender ID (MongoDB ObjectID format)
in: query
name: tender_id
type: string
- description: Filter by customer ID (MongoDB ObjectID format)
in: query
name: customer_id
type: string
- description: Filter by company ID (MongoDB ObjectID format)
in: query
name: company_id
type: string
- description: Filter by feedback type
enum:
- like
- dislike
in: query
name: feedback_type
type: string
- description: Filter by creation date from (Unix timestamp in seconds)
format: int64
in: query
name: date_from
type: integer
- description: Filter by creation date to (Unix timestamp in seconds)
format: int64
in: query
name: date_to
type: integer
- description: 'Number of items per page (default: 20, max: 100)'
in: query
maximum: 100
minimum: 1
name: limit
type: integer
- description: 'Number of items to skip for pagination (default: 0)'
in: query
minimum: 0
name: offset
type: integer
produces:
- application/json
responses:
"200":
description: Feedback list retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/feedback.FeedbackListResponse'
type: object
"400":
description: Bad request - Invalid query parameters
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"422":
description: Validation error - Invalid filter criteria
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"500":
description: Internal server error
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
security:
- BearerAuth: []
summary: List feedback with filters
tags:
- Admin-Feedback
/admin/v1/feedback/{id}:
delete:
consumes:
- application/json
description: Mark feedback as deleted without permanently removing it from the
database. The feedback will be marked as deleted and hidden from normal queries
but can be restored if needed.
parameters:
- description: Feedback ID (MongoDB ObjectID format)
in: path
maxLength: 24
minLength: 24
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Feedback soft deleted successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
message:
type: string
type: object
"400":
description: Bad request - Invalid feedback ID format
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"401":
description: Unauthorized - User not authenticated
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"403":
description: Forbidden - User not authorized to delete this feedback
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"404":
description: Not found - Feedback not found
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"500":
description: Internal server error
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
security:
- BearerAuth: []
summary: Soft delete feedback
tags:
- Admin-Feedback
get:
consumes:
- application/json
description: Retrieve feedback details by its unique identifier with loaded
tender, customer, and company information. This endpoint provides comprehensive
feedback data including related entity details.
parameters:
- description: Feedback ID (MongoDB ObjectID format)
in: path
maxLength: 24
minLength: 24
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: feedback retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/feedback.FeedbackResponse'
type: object
"400":
description: Bad request - Invalid feedback ID format
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"404":
description: Feedback not found
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"500":
description: Internal server error
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
security:
- BearerAuth: []
summary: Get feedback by ID
tags:
- Admin-Feedback
/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/tender-approvals:
get:
consumes:
- application/json
description: Retrieve a paginated list of tender approvals with filtering options
parameters:
- description: Filter by tender ID
in: query
name: tender_id
type: string
- description: Filter by company ID
in: query
name: company_id
type: string
- description: Filter by status
in: query
name: status
type: array
- description: Filter by submission mode
in: query
name: submission_mode
type: array
- description: Filter by creation date from (Unix timestamp)
in: query
name: created_at_from
type: integer
- description: Filter by creation date to (Unix timestamp)
in: query
name: created_at_to
type: integer
- default: 20
description: Number of approvals per page (1-100)
in: query
maximum: 100
minimum: 1
name: limit
type: integer
- default: 0
description: Number of approvals to skip for pagination
in: query
minimum: 0
name: offset
type: integer
- default: created_at
description: Field to sort by
enum:
- created_at
- updated_at
- status
- submission_mode
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: Tender approvals retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/tender_approval.TenderApprovalListResponse'
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 tender approvals with filters and pagination
tags:
- Admin-TenderApprovals
/admin/v1/tender-approvals/{id}:
get:
consumes:
- application/json
description: Retrieve detailed tender approval information by ID
parameters:
- description: Tender Approval ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Tender approval retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/tender_approval.TenderApprovalResponse'
type: object
"400":
description: Bad request - Invalid tender approval ID
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Tender approval not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get tender approval by ID
tags:
- Admin-TenderApprovals
/admin/v1/tender-approvals/stats:
get:
consumes:
- application/json
description: Get comprehensive tender approval statistics for dashboard
produces:
- application/json
responses:
"200":
description: Tender approval statistics retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/tender_approval.TenderApprovalStatsResponse'
type: object
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get tender approval statistics
tags:
- Admin-TenderApprovals
/admin/v1/tender-approvals/status/{status}:
get:
consumes:
- application/json
description: Retrieve tender approvals filtered by their status (approved, rejected)
parameters:
- description: Tender approval status
enum:
- approved
- rejected
in: path
name: status
required: true
type: string
- default: 20
description: Number of approvals per page (1-100)
in: query
maximum: 100
minimum: 1
name: limit
type: integer
- default: 0
description: Number of approvals to skip for pagination
in: query
minimum: 0
name: offset
type: integer
produces:
- application/json
responses:
"200":
description: Tender approvals retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
items:
$ref: '#/definitions/tender_approval.TenderApprovalResponse'
type: array
meta:
$ref: '#/definitions/response.Meta'
type: object
"400":
description: Bad request - Invalid tender approval status
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get tender approvals by status
tags:
- Admin-TenderApprovals
/admin/v1/tender-approvals/submission-mode/{submission_mode}:
get:
consumes:
- application/json
description: Retrieve tender approvals filtered by their submission mode (self-apply,
partnership)
parameters:
- description: Tender approval submission mode
enum:
- self-apply
- partnership
in: path
name: submission_mode
required: true
type: string
- default: 20
description: Number of approvals per page (1-100)
in: query
maximum: 100
minimum: 1
name: limit
type: integer
- default: 0
description: Number of approvals to skip for pagination
in: query
minimum: 0
name: offset
type: integer
produces:
- application/json
responses:
"200":
description: Tender approvals retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
items:
$ref: '#/definitions/tender_approval.TenderApprovalResponse'
type: array
meta:
$ref: '#/definitions/response.Meta'
type: object
"400":
description: Bad request - Invalid tender approval submission mode
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get tender approvals by submission mode
tags:
- Admin-TenderApprovals
/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/companies:
get:
consumes:
- application/json
description: Retrieve the profile of the company associated with the authenticated
user
produces:
- application/json
responses:
"200":
description: Company retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/company.CompanyProfileResponse'
type: object
"401":
description: Unauthorized - User not authenticated
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get my company profile
tags:
- Company
/api/v1/feedback:
get:
consumes:
- application/json
description: Retrieve paginated list of feedback with optional filtering by
various criteria. This endpoint is for public use and filters results based
on the authenticated user's company.
parameters:
- description: Filter by tender ID (MongoDB ObjectID format)
in: query
name: tender_id
type: string
- description: Filter by customer ID (MongoDB ObjectID format)
in: query
name: customer_id
type: string
- description: Filter by company ID (MongoDB ObjectID format)
in: query
name: company_id
type: string
- description: Filter by feedback type
enum:
- like
- dislike
in: query
name: feedback_type
type: string
- description: Filter by creation date from (Unix timestamp in seconds)
format: int64
in: query
minimum: 0
name: date_from
type: integer
- description: Filter by creation date to (Unix timestamp in seconds)
format: int64
in: query
minimum: 0
name: date_to
type: integer
- description: 'Number of items per page (default: 20, max: 100)'
in: query
maximum: 100
minimum: 1
name: limit
type: integer
- description: 'Number of items to skip for pagination (default: 0)'
in: query
minimum: 0
name: offset
type: integer
produces:
- application/json
responses:
"200":
description: Feedback list retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/feedback.FeedbackListResponse'
type: object
"400":
description: Bad request - Invalid query parameters or missing company association
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"422":
description: Validation error - Invalid filter criteria
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"500":
description: Internal server error
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
security:
- BearerAuth: []
summary: List feedback with filters
tags:
- Feedback
post:
consumes:
- application/json
description: Toggle between like and dislike for a tender, or create a like
if no feedback exists. This endpoint allows users to express their preference
for tenders and automatically handles the toggle logic.
parameters:
- description: Feedback toggle request containing tender ID
in: body
name: feedback
required: true
schema:
$ref: '#/definitions/feedback.ToggleFeedbackForm'
produces:
- application/json
responses:
"200":
description: Feedback toggled successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/feedback.FeedbackResponse'
type: object
"400":
description: Bad request - Invalid input data or missing customer/company
association
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"401":
description: Unauthorized - User not authenticated
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"422":
description: Validation error - Invalid request data format
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"500":
description: Internal server error
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
security:
- BearerAuth: []
summary: Toggle feedback for a tender
tags:
- Feedback
/api/v1/feedback/{id}:
get:
consumes:
- application/json
description: Retrieve feedback details by its unique identifier. This endpoint
provides basic feedback information for public users.
parameters:
- description: Feedback ID (MongoDB ObjectID format)
in: path
maxLength: 24
minLength: 24
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Feedback retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/feedback.FeedbackResponse'
type: object
"400":
description: Bad request - Invalid feedback ID format
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"404":
description: Feedback not found
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"500":
description: Internal server error
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
security:
- BearerAuth: []
summary: Get feedback by ID
tags:
- Feedback
/api/v1/feedback/tender/{tender_id}:
get:
consumes:
- application/json
description: Retrieve feedback details by tender ID. This endpoint provides
basic feedback information for public users.
parameters:
- description: Tender ID (MongoDB ObjectID format)
in: path
maxLength: 24
minLength: 24
name: tender_id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Feedback retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/feedback.FeedbackResponse'
type: object
"400":
description: Bad request - Invalid tender ID format
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"404":
description: Feedback not found
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
"500":
description: Internal server error
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
error:
type: string
message:
type: string
type: object
security:
- BearerAuth: []
summary: Get feedback by tender ID
tags:
- Feedback
/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/tender-approvals:
get:
consumes:
- application/json
description: Retrieve all tender approvals for a specific company with optional
filtering
parameters:
- description: Filter by submission mode Enums(self-apply, partnership)
enum:
- self-apply
- partnership
in: query
name: submission_mode
type: string
- description: Filter by status Enums(approved, rejected)
enum:
- approved
- rejected
in: query
name: status
type: string
produces:
- application/json
responses:
"200":
description: Tender approvals retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
items:
$ref: '#/definitions/tender_approval.TenderApprovalWithTenderResponse'
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 tender approvals by company ID
tags:
- TenderApprovals
post:
consumes:
- application/json
description: Create a new tender approval for a company to approve or reject
a tender
parameters:
- description: Tender approval information
in: body
name: tender_approval
required: true
schema:
$ref: '#/definitions/tender_approval.CreateTenderApprovalForm'
produces:
- application/json
responses:
"201":
description: Tender approval created successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/tender_approval.TenderApprovalResponse'
type: object
"400":
description: Bad request - Invalid input data
schema:
$ref: '#/definitions/response.APIResponse'
"409":
description: Conflict - Tender approval already exists for this tender and
company
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 tender approval
tags:
- TenderApprovals
/api/v1/tender-approvals/{id}:
get:
consumes:
- application/json
description: Retrieve detailed tender approval information by ID
parameters:
- description: Tender Approval ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Tender approval retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/tender_approval.TenderApprovalResponse'
type: object
"400":
description: Bad request - Invalid tender approval ID
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Tender approval not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get tender approval by ID
tags:
- TenderApprovals
/api/v1/tender-approvals/stats:
get:
consumes:
- application/json
description: Get comprehensive tender approval statistics for a specific company
produces:
- application/json
responses:
"200":
description: Company tender approval statistics retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/tender_approval.CompanyTenderApprovalStatsResponse'
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 company tender approval statistics
tags:
- TenderApprovals
/api/v1/tender-approvals/tender/{tender_id}:
get:
consumes:
- application/json
description: Retrieve tender approval information for a specific tender and
company combination
parameters:
- description: Tender ID
in: path
name: tender_id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Tender approval retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/tender_approval.TenderApprovalResponse'
type: object
"400":
description: Bad request - Invalid tender ID or company ID
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Not found - Tender approval not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get tender approval by tender and company
tags:
- TenderApprovals
/api/v1/tenders:
get:
description: Retrieve active tenders for mobile application users with automatic
company-based matching from customer profile
parameters:
- description: 'Number of items per page (default: 20, max: 50)'
in: query
name: limit
type: integer
- description: 'Number of items to skip (default: 0)'
in: query
name: offset
type: integer
- description: Filter by country code
in: query
name: country_code
type: string
- description: Minimum estimated value
in: query
name: min_estimated_value
type: number
- description: Maximum estimated value
in: query
name: max_estimated_value
type: number
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
additionalProperties: true
type: object
type: object
"400":
description: Bad Request
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get public tenders
tags:
- Tenders
/api/v1/tenders/details/{id}:
get:
description: Retrieve detailed information about a specific tender for mobile
application users
parameters:
- description: Tender ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
additionalProperties: true
type: object
type: object
"404":
description: Not Found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get public tender details
tags:
- Tenders
/api/v1/tenders/recommend:
get:
description: Retrieve active tenders for mobile application users with automatic
company-based matching from customer profile
parameters:
- description: 'Number of items per page (default: 20, max: 50)'
in: query
name: limit
type: integer
- description: 'Number of items to skip (default: 0)'
in: query
name: offset
type: integer
- description: Filter by country code
in: query
name: country_code
type: string
- description: Minimum estimated value
in: query
name: min_estimated_value
type: number
- description: Maximum estimated value
in: query
name: max_estimated_value
type: number
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
additionalProperties: true
type: object
type: object
"400":
description: Bad Request
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get public tenders
tags:
- Tenders
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: Administrative tender management operations for web panel including
CRUD operations, search, statistics, and comprehensive filtering with pagination
name: Admin-Tenders
- description: Administrative feedback management operations for web panel including
CRUD operations, search, statistics, and comprehensive filtering with pagination
name: Admin-Feedback
- description: Administrative tender approval management operations for web panel
including CRUD operations, search, statistics, and comprehensive filtering with
pagination
name: Admin-TenderApprovals
- description: Customer authentication and authorization operations for mobile application
including login, logout, token refresh, and profile access
name: Authorization
- description: Company information access for mobile application including company
profile and company tenders
name: Company
- description: Public tender information access for mobile application including active
tender listings and detailed tender information
name: Tenders
- description: Public feedback management operations for mobile application including
like, dislike, and comment on tenders
name: Feedback
- description: Public tender approval management operations for mobile application
including tender approval listing and detailed tender approval information
name: TenderApprovals