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:
@@ -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)"`
|
||||
}
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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{},
|
||||
|
||||
@@ -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)"`
|
||||
}
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user