Add configuration file and update server settings

- Introduced a new `config.yaml` file for managing server, database, cache, queue, AI, scraping, logging, and rate limiting configurations.
- Updated `docker-compose.yml` to reflect the new server port (8081) and adjusted health check endpoints accordingly.
- Modified `Dockerfile` to expose the new server port.
- Updated `README.md` to reflect changes in server configuration and added documentation for the new configuration structure.
- Added test scripts for server and Swagger documentation testing.
- Refactored customer domain structure to align with new configuration settings and improve maintainability.
This commit is contained in:
n.nakhostin
2025-08-02 12:37:04 +03:30
parent 06dc1d5b7a
commit 9119e2383e
30 changed files with 7273 additions and 1106 deletions
+719
View File
@@ -0,0 +1,719 @@
basePath: /api/v1
definitions:
customer.AddDeviceTokenForm:
properties:
device_token:
type: string
device_type:
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.ChangePasswordForm:
properties:
new_password:
type: string
old_password:
type: string
type: object
customer.CustomerResponse:
properties:
birthdate:
type: integer
company_id:
type: string
created_at:
type: integer
device_tokens:
items:
$ref: '#/definitions/customer.DeviceToken'
type: array
email:
type: string
full_name:
type: string
gender:
type: string
id:
type: string
is_verified:
type: boolean
last_login_at:
type: integer
mobile:
type: string
national_id:
type: string
profile_image:
type: string
status:
type: string
updated_at:
type: integer
username:
type: string
type: object
customer.DeviceToken:
properties:
createdAt:
description: Unix timestamp
type: integer
deviceType:
$ref: '#/definitions/customer.DeviceType'
token:
type: string
updatedAt:
description: Unix timestamp
type: integer
type: object
customer.DeviceType:
enum:
- android
- ios
type: string
x-enum-varnames:
- DeviceTypeAndroid
- DeviceTypeIOS
customer.LoginForm:
properties:
email_or_mobile:
type: string
password:
type: string
type: object
customer.RefreshTokenForm:
properties:
refresh_token:
type: string
type: object
customer.RegisterCustomerForm:
properties:
birthdate:
type: integer
company_id:
type: string
email:
type: string
full_name:
type: string
gender:
type: string
mobile:
type: string
national_id:
type: string
password:
type: string
profile_image:
type: string
username:
type: string
type: object
customer.RemoveDeviceTokenForm:
properties:
device_token:
type: string
type: object
customer.UpdateCustomerForm:
properties:
birthdate:
type: integer
email:
type: string
full_name:
type: string
gender:
type: string
mobile:
type: string
national_id:
type: string
profile_image:
type: string
status:
type: string
username:
type: string
type: object
customer.UpdateCustomerStatusForm:
properties:
status:
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
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/customers:
get:
consumes:
- application/json
description: Retrieve a paginated list of customers (admin only)
parameters:
- default: 1
description: Page number
in: query
name: page
type: integer
- default: 20
description: Number of items per page
in: query
name: limit
type: integer
- description: Search term
in: query
name: search
type: string
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
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: List customers
tags:
- customers
/admin/customers/{id}:
get:
consumes:
- application/json
description: Retrieve customer information by ID (admin only)
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
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: 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/customers/{id}/status:
put:
consumes:
- application/json
description: Update customer status (admin only)
parameters:
- description: Customer ID
in: path
name: id
required: true
type: string
- description: Status update information
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
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: Customer not found
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Update customer status
tags:
- customers
/admin/customers/device-tokens:
get:
consumes:
- application/json
description: Retrieve all device tokens (admin only)
produces:
- application/json
responses:
"200":
description: Device tokens retrieved successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
items:
type: string
type: array
type: object
"401":
description: Unauthorized
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
security:
- BearerAuth: []
summary: Get all device tokens
tags:
- customers
/admin/customers/register:
post:
consumes:
- application/json
description: Register a new customer with the provided information
parameters:
- description: Customer registration information
in: body
name: customer
required: true
schema:
$ref: '#/definitions/customer.RegisterCustomerForm'
produces:
- application/json
responses:
"201":
description: Customer registered successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/customer.CustomerResponse'
type: object
"400":
description: Bad request
schema:
$ref: '#/definitions/response.APIResponse'
"409":
description: Customer already exists
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
summary: Register a new customer
tags:
- customers
/customers/change-password:
put:
consumes:
- application/json
description: Change the authenticated customer's password
parameters:
- description: Password change information
in: body
name: password
required: true
schema:
$ref: '#/definitions/customer.ChangePasswordForm'
produces:
- application/json
responses:
"200":
description: Password changed successfully
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 customer password
tags:
- customers
/customers/device-token:
delete:
consumes:
- application/json
description: Remove a device token for push notifications
parameters:
- description: Device token information
in: body
name: device_token
required: true
schema:
$ref: '#/definitions/customer.RemoveDeviceTokenForm'
produces:
- application/json
responses:
"200":
description: Device token removed successfully
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: Remove device token
tags:
- customers
post:
consumes:
- application/json
description: Add a device token for push notifications
parameters:
- description: Device token information
in: body
name: device_token
required: true
schema:
$ref: '#/definitions/customer.AddDeviceTokenForm'
produces:
- application/json
responses:
"200":
description: Device token added successfully
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: Add device token
tags:
- customers
/customers/login:
post:
consumes:
- application/json
description: Authenticate customer with email and password
parameters:
- description: Login credentials
in: body
name: credentials
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
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Invalid credentials
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
summary: Customer login
tags:
- customers
/customers/logout:
post:
consumes:
- application/json
description: Logout customer and invalidate device token
parameters:
- description: Logout request with device token
in: body
name: logout
required: true
schema:
type: object
produces:
- application/json
responses:
"200":
description: Logged out successfully
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: Customer logout
tags:
- customers
/customers/profile:
get:
consumes:
- application/json
description: Retrieve the authenticated customer's 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
schema:
$ref: '#/definitions/response.APIResponse'
"404":
description: 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
put:
consumes:
- application/json
description: Update the authenticated customer's profile information
parameters:
- description: Profile update information
in: body
name: profile
required: true
schema:
$ref: '#/definitions/customer.UpdateCustomerForm'
produces:
- application/json
responses:
"200":
description: Profile updated successfully
schema:
allOf:
- $ref: '#/definitions/response.APIResponse'
- properties:
data:
$ref: '#/definitions/customer.CustomerResponse'
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 customer profile
tags:
- customers
/customers/refresh-token:
post:
consumes:
- application/json
description: Refresh the access token using a refresh token
parameters:
- description: Refresh token information
in: body
name: token
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
schema:
$ref: '#/definitions/response.APIResponse'
"401":
description: Invalid refresh token
schema:
$ref: '#/definitions/response.APIResponse'
"500":
description: Internal server error
schema:
$ref: '#/definitions/response.APIResponse'
summary: Refresh access token
tags:
- customers
securityDefinitions:
BearerAuth:
description: Type "Bearer" followed by a space and JWT token.
in: header
name: Authorization
type: apiKey
swagger: "2.0"
tags:
- description: Customer management operations
name: customers
- description: Health check operations
name: health
- description: Authentication operations
name: auth