Enhance company and company category search forms by adding new sortable fields (email, phone, country, state, language, currency) and updating related API documentation.

This commit is contained in:
Mazyar
2026-06-02 22:07:49 +03:30
parent 2457b76df9
commit 2090cc05ba
7 changed files with 46 additions and 59 deletions
+1 -1
View File
@@ -77,7 +77,7 @@ type SearchForm struct {
FoundedYearMax *int `query:"founded_year_max" valid:"optional,range(1800|2100)"`
Limit *int `query:"limit" valid:"optional,range(1|100)"`
Offset *int `query:"offset" valid:"optional,range(0|1000000)"`
SortBy *string `query:"sort_by" valid:"optional,in(name|type|industry|created_at|updated_at|status|employee_count|annual_revenue)"`
SortBy *string `query:"sort_by" valid:"optional,in(name|type|industry|created_at|updated_at|status|employee_count|annual_revenue|email|phone|country|state|language|currency)"`
SortOrder *string `query:"sort_order" valid:"optional,in(asc|desc)"`
}
+2
View File
@@ -210,6 +210,8 @@ func (h *Handler) Delete(c echo.Context) error {
// @Param is_compliant query boolean false "Compliance status"
// @Param limit query integer false "Limit" default(20)
// @Param offset query integer false "Offset" default(0)
// @Param sort_by query string false "Field to sort by" Enums(name, type, industry, created_at, updated_at, status, employee_count, annual_revenue, email, phone, country, state, language, currency) default(created_at)
// @Param sort_order query string false "Sort order" Enums(asc, desc) default(desc)
// @Success 200 {object} response.APIResponse{data=CompanyListResponse} "Companies search completed"
// @Failure 400 {object} response.APIResponse "Bad request - Invalid query parameters"
// @Failure 422 {object} response.APIResponse "Validation error - Invalid query parameters"
+12 -1
View File
@@ -56,6 +56,17 @@ func NewRepository(mongoManager *orm.ConnectionManager, logger logger.Logger) Re
}
}
func mapCompanySortField(sortBy string) string {
switch sortBy {
case "country":
return "address.country"
case "state":
return "address.state"
default:
return sortBy
}
}
// Create creates a new company
func (r *companyRepository) Create(ctx context.Context, company *Company) error {
// Set created/updated timestamps using Unix timestamps
@@ -285,7 +296,7 @@ func (r *companyRepository) Search(ctx context.Context, form *SearchForm, pagina
pagination.Limit,
pagination.Offset,
pagination.Cursor,
pagination.SortBy,
mapCompanySortField(pagination.SortBy),
pagination.SortOrder,
filter,
orm.ListPaginationOptions{},
+1 -1
View File
@@ -15,7 +15,7 @@ type SearchForm struct {
Published *bool `query:"published" valid:"optional"`
Limit *int `query:"limit" valid:"optional,range(1|100)"`
Offset *int `query:"offset" valid:"optional,range(0|1000000)"`
SortBy *string `query:"sort_by" valid:"optional,in(name|created_at|updated_at|published_at)"`
SortBy *string `query:"sort_by" valid:"optional,in(name|description|published|created_at|updated_at|published_at)"`
SortOrder *string `query:"sort_order" valid:"optional,in(asc|desc)"`
}
+1 -1
View File
@@ -155,7 +155,7 @@ func (h *Handler) Delete(c echo.Context) error {
// @Param published query boolean false "Published status filter"
// @Param limit query integer false "Limit" default(20)
// @Param offset query integer false "Offset" default(0)
// @Param sort_by query string false "Sort by field" Enums(name,created_at,updated_at,published_at)
// @Param sort_by query string false "Sort by field" Enums(name,description,published,created_at,updated_at,published_at)
// @Param sort_order query string false "Sort order" Enums(asc,desc)
// @Success 200 {object} response.APIResponse{data=CategoryListResponse} "Categories search completed"
// @Failure 400 {object} response.APIResponse "Bad request - Invalid query parameters"