566fa07574
- Changed tags from "Customers-Mobile" to "Customers-Authorization" in Swagger documentation for customer logout and profile retrieval endpoints. - Updated the Company entity to replace CustomerID with OwnerCustomerID to better represent ownership. - Removed obsolete customer assignment methods and related forms from the company domain, streamlining the codebase. - Adjusted customer forms to include CompanyID instead of CompanyName for better consistency in customer management. - Enhanced Swagger documentation to accurately reflect the new structure and authorization details for customer-related endpoints.
3519 lines
92 KiB
YAML
3519 lines
92 KiB
YAML
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.AssignCustomerForm:
|
|
properties:
|
|
customer_id:
|
|
type: string
|
|
type: object
|
|
company.CPVCodeCount:
|
|
properties:
|
|
count:
|
|
type: integer
|
|
cpv_code:
|
|
type: string
|
|
type: object
|
|
company.CategoryCount:
|
|
properties:
|
|
category:
|
|
type: string
|
|
count:
|
|
type: integer
|
|
type: object
|
|
company.CompanyListResponse:
|
|
properties:
|
|
companies:
|
|
items:
|
|
$ref: '#/definitions/company.CompanyResponse'
|
|
type: array
|
|
limit:
|
|
type: integer
|
|
offset:
|
|
type: integer
|
|
total:
|
|
type: integer
|
|
total_pages:
|
|
type: integer
|
|
type: object
|
|
company.CompanyResponse:
|
|
properties:
|
|
address:
|
|
$ref: '#/definitions/company.Address'
|
|
annual_revenue:
|
|
type: number
|
|
compliance_notes:
|
|
type: string
|
|
contact_person:
|
|
$ref: '#/definitions/company.ContactPerson'
|
|
created_at:
|
|
type: integer
|
|
created_by:
|
|
type: string
|
|
currency:
|
|
type: string
|
|
customer_id:
|
|
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
|
|
companies_with_customer:
|
|
type: integer
|
|
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
|
|
customer_id:
|
|
description: Customer assignment (for login credentials)
|
|
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
|
|
customer_id:
|
|
description: Customer assignment (for login credentials)
|
|
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.AuthResponse:
|
|
properties:
|
|
access_token:
|
|
type: string
|
|
customer:
|
|
$ref: '#/definitions/customer.CustomerResponse'
|
|
expires_at:
|
|
type: integer
|
|
refresh_token:
|
|
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_id:
|
|
type: string
|
|
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
|
|
password:
|
|
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.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
|
|
company_id:
|
|
type: string
|
|
company_name:
|
|
type: string
|
|
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:
|
|
type: string
|
|
status:
|
|
type: string
|
|
tax_id:
|
|
type: string
|
|
timezone:
|
|
type: string
|
|
type:
|
|
type: string
|
|
updated_at:
|
|
type: integer
|
|
updated_by:
|
|
type: string
|
|
username:
|
|
type: string
|
|
type: object
|
|
customer.LoginForm:
|
|
properties:
|
|
password:
|
|
type: string
|
|
username:
|
|
type: string
|
|
type: object
|
|
customer.RefreshTokenForm:
|
|
properties:
|
|
refresh_token:
|
|
type: string
|
|
type: object
|
|
customer.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_id:
|
|
type: string
|
|
company_name:
|
|
description: Company customer fields
|
|
type: string
|
|
contact_person:
|
|
allOf:
|
|
- $ref: '#/definitions/customer.ContactPersonForm'
|
|
description: Contact person (for company customers)
|
|
currency:
|
|
type: string
|
|
email:
|
|
type: string
|
|
employee_count:
|
|
type: integer
|
|
first_name:
|
|
description: Individual customer fields
|
|
type: string
|
|
founded_year:
|
|
type: integer
|
|
full_name:
|
|
type: string
|
|
industry:
|
|
type: string
|
|
language:
|
|
description: Preferences and settings
|
|
type: string
|
|
last_name:
|
|
type: string
|
|
mobile:
|
|
type: string
|
|
phone:
|
|
type: string
|
|
registration_number:
|
|
type: string
|
|
tax_id:
|
|
type: string
|
|
timezone:
|
|
type: string
|
|
type:
|
|
type: string
|
|
username:
|
|
type: string
|
|
type: object
|
|
customer.UpdateCustomerStatusForm:
|
|
properties:
|
|
status:
|
|
type: string
|
|
type: object
|
|
customer.UpdateCustomerVerificationForm:
|
|
properties:
|
|
compliance_notes:
|
|
type: string
|
|
is_compliant:
|
|
type: boolean
|
|
is_verified:
|
|
type: boolean
|
|
type: object
|
|
main.HealthResponse:
|
|
properties:
|
|
status:
|
|
type: string
|
|
time:
|
|
type: integer
|
|
version:
|
|
type: string
|
|
type: object
|
|
response.APIError:
|
|
properties:
|
|
code:
|
|
type: string
|
|
details:
|
|
type: string
|
|
message:
|
|
type: string
|
|
type: object
|
|
response.APIResponse:
|
|
properties:
|
|
data: {}
|
|
error:
|
|
$ref: '#/definitions/response.APIError'
|
|
message:
|
|
type: string
|
|
meta:
|
|
$ref: '#/definitions/response.Meta'
|
|
success:
|
|
type: boolean
|
|
type: object
|
|
response.Meta:
|
|
properties:
|
|
limit:
|
|
type: integer
|
|
offset:
|
|
type: integer
|
|
page:
|
|
type: integer
|
|
pages:
|
|
type: integer
|
|
total:
|
|
type: integer
|
|
type: object
|
|
user.AuthResponse:
|
|
properties:
|
|
access_token:
|
|
type: string
|
|
expires_at:
|
|
type: integer
|
|
refresh_token:
|
|
type: string
|
|
user:
|
|
$ref: '#/definitions/user.UserResponse'
|
|
type: object
|
|
user.ChangePasswordForm:
|
|
properties:
|
|
new_password:
|
|
type: string
|
|
old_password:
|
|
type: string
|
|
type: object
|
|
user.CreateUserForm:
|
|
properties:
|
|
company_id:
|
|
type: string
|
|
department:
|
|
type: string
|
|
email:
|
|
type: string
|
|
full_name:
|
|
type: string
|
|
password:
|
|
type: string
|
|
phone:
|
|
type: string
|
|
position:
|
|
type: string
|
|
profile_image:
|
|
type: string
|
|
role:
|
|
type: string
|
|
username:
|
|
type: string
|
|
type: object
|
|
user.LoginForm:
|
|
properties:
|
|
password:
|
|
type: string
|
|
username:
|
|
type: string
|
|
type: object
|
|
user.RefreshTokenForm:
|
|
properties:
|
|
refresh_token:
|
|
type: string
|
|
type: object
|
|
user.ResetPasswordForm:
|
|
properties:
|
|
email:
|
|
type: string
|
|
type: object
|
|
user.UpdateUserForm:
|
|
properties:
|
|
company_id:
|
|
type: string
|
|
department:
|
|
type: string
|
|
email:
|
|
type: string
|
|
full_name:
|
|
type: string
|
|
phone:
|
|
type: string
|
|
position:
|
|
type: string
|
|
profile_image:
|
|
type: string
|
|
role:
|
|
type: string
|
|
status:
|
|
type: string
|
|
username:
|
|
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: support@swagger.io
|
|
name: API Support
|
|
url: http://www.swagger.io/support
|
|
description: This is the API documentation for the Tender Management System.
|
|
license:
|
|
name: Apache 2.0
|
|
url: http://www.apache.org/licenses/LICENSE-2.0.html
|
|
termsOfService: http://swagger.io/terms/
|
|
title: Tender Management API
|
|
version: 1.0.0
|
|
paths:
|
|
/admin/v1/change-password:
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
description: Change current user password
|
|
parameters:
|
|
- description: Password change data
|
|
in: body
|
|
name: password
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/user.ChangePasswordForm'
|
|
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'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Change password
|
|
tags:
|
|
- Users
|
|
/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 customer assignment status
|
|
in: query
|
|
name: has_customer
|
|
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:
|
|
- Companies-Admin
|
|
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:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
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:
|
|
- Companies-Admin
|
|
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:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
/admin/v1/companies/{id}/assign-customer:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Assign a customer to a company for login credentials
|
|
parameters:
|
|
- description: Company ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Customer assignment information
|
|
in: body
|
|
name: assignment
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/company.AssignCustomerForm'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Customer assigned 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'
|
|
"409":
|
|
description: Conflict - Customer already assigned
|
|
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 customer to company
|
|
tags:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
/admin/v1/companies/{id}/unassign-customer:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Remove customer assignment from a company
|
|
parameters:
|
|
- description: Company ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Customer unassigned 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: Unassign customer from company
|
|
tags:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
/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:
|
|
- Companies-Admin
|
|
/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:
|
|
- Customers-Admin
|
|
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:
|
|
- Customers-Admin
|
|
/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:
|
|
- Customers-Admin
|
|
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:
|
|
- Customers-Admin
|
|
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:
|
|
- Customers-Admin
|
|
/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:
|
|
- Customers-Admin
|
|
/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:
|
|
- Customers-Admin
|
|
/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:
|
|
- Customers-Admin
|
|
/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:
|
|
- Customers-Admin
|
|
/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:
|
|
- Customers-Admin
|
|
/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:
|
|
- Customers-Admin
|
|
/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:
|
|
- Customers-Admin
|
|
/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:
|
|
- Customers-Admin
|
|
/admin/v1/health:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get server health status
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/main.HealthResponse'
|
|
summary: Health check
|
|
tags:
|
|
- Health
|
|
/admin/v1/login:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Authenticate user with username and password
|
|
parameters:
|
|
- description: Login credentials
|
|
in: body
|
|
name: login
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/user.LoginForm'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/response.APIResponse'
|
|
- properties:
|
|
data:
|
|
$ref: '#/definitions/user.AuthResponse'
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
summary: Login user
|
|
tags:
|
|
- Authorization
|
|
/admin/v1/logout:
|
|
delete:
|
|
consumes:
|
|
- application/json
|
|
description: Logout current user and invalidate tokens
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Logout user
|
|
tags:
|
|
- Users
|
|
/admin/v1/profile:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get current user profile information
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/response.APIResponse'
|
|
- properties:
|
|
data:
|
|
$ref: '#/definitions/user.UserResponse'
|
|
type: object
|
|
"401":
|
|
description: Unauthorized
|
|
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 profile
|
|
tags:
|
|
- Users
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
description: Update current user profile information
|
|
parameters:
|
|
- description: Profile update data
|
|
in: body
|
|
name: profile
|
|
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'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Update user profile
|
|
tags:
|
|
- Users
|
|
/admin/v1/refresh-token:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Refresh access token using refresh token
|
|
parameters:
|
|
- description: Refresh token
|
|
in: body
|
|
name: refresh
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/user.RefreshTokenForm'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/response.APIResponse'
|
|
- properties:
|
|
data:
|
|
$ref: '#/definitions/user.AuthResponse'
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
summary: Refresh access token
|
|
tags:
|
|
- Authorization
|
|
/admin/v1/reset-password:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Send password reset email to user
|
|
parameters:
|
|
- description: Password reset request
|
|
in: body
|
|
name: reset
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/user.ResetPasswordForm'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
summary: Reset password
|
|
tags:
|
|
- Authorization
|
|
/admin/v1/users:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: List users with search and filters (admin only)
|
|
parameters:
|
|
- description: Search term
|
|
in: query
|
|
name: search
|
|
type: string
|
|
- description: User status filter
|
|
in: query
|
|
name: status
|
|
type: string
|
|
- description: User role filter
|
|
in: query
|
|
name: role
|
|
type: string
|
|
- description: Company ID filter
|
|
in: query
|
|
name: company_id
|
|
type: string
|
|
- description: Limit results
|
|
in: query
|
|
name: limit
|
|
type: integer
|
|
- description: Offset results
|
|
in: query
|
|
name: offset
|
|
type: integer
|
|
- description: Sort field
|
|
in: query
|
|
name: sort_by
|
|
type: string
|
|
- description: Sort order
|
|
in: query
|
|
name: sort_order
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/response.APIResponse'
|
|
- properties:
|
|
data:
|
|
$ref: '#/definitions/user.UserListResponse'
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: List users
|
|
tags:
|
|
- Users
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Create a new user (admin only)
|
|
parameters:
|
|
- description: User creation data
|
|
in: body
|
|
name: user
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/user.CreateUserForm'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
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'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Create user
|
|
tags:
|
|
- 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:
|
|
- 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:
|
|
- 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:
|
|
- 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:
|
|
- 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:
|
|
- 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:
|
|
- 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:
|
|
- Users
|
|
/api/v1/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:
|
|
- Customers-Authorization
|
|
/api/v1/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:
|
|
- Customers-Authorization
|
|
/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:
|
|
- Customers-Authorization
|
|
/api/v1/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:
|
|
- Customers-Authorization
|
|
securityDefinitions:
|
|
BearerAuth:
|
|
description: Type "Bearer" followed by a space and JWT token.
|
|
in: header
|
|
name: Authorization
|
|
type: apiKey
|
|
swagger: "2.0"
|
|
tags:
|
|
- description: User management operations including authentication, profile management,
|
|
and admin operations
|
|
name: Users
|
|
- description: Authentication operations including login, logout, and token management
|
|
name: Authorization
|
|
- description: Customer management operations including authentication, profile management,
|
|
and admin operations
|
|
name: Customers-Admin
|
|
- description: Customer authentication operations including login, logout, and token
|
|
management
|
|
name: Customers-Authorization
|
|
- description: Company management operations for web panel including CRUD, customer
|
|
assignment, and tag management
|
|
name: Companies-Admin
|
|
- description: Health check operations
|
|
name: Health
|