diff --git a/delivery/http_server/admin/benefactor/get.go b/delivery/http_server/admin/benefactor/get.go index 7af07013..b0d2743f 100644 --- a/delivery/http_server/admin/benefactor/get.go +++ b/delivery/http_server/admin/benefactor/get.go @@ -19,7 +19,7 @@ import ( // @Accept json // @Produce json // @Param id path int true "Benefactor ID" -// @Success 200 {object} param.GetBenefactorByIDResponse +// @Success 200 {object} BenefactorAggregatedResponse // @Failure 400 {string} "Bad request" // @Failure 401 {string} "invalid or expired jwt" // @Failure 403 {string} "user not allowed" @@ -58,6 +58,9 @@ func (h Handler) GetBenefactor(c echo.Context) error { Field: "created_at", Direction: params.DescSortDirection, }, + Filter: map[string]any{ + "benefactor_id": bnf.Data.ID, + }, }) if err != nil { msg, code := httpmsg.Error(err) @@ -74,6 +77,9 @@ func (h Handler) GetBenefactor(c echo.Context) error { Field: "created_at", Direction: params.DescSortDirection, }, + Filter: map[string]any{ + "benefactor_id": bnf.Data.ID, + }, }) if err != nil { msg, code := httpmsg.Error(err) diff --git a/delivery/http_server/admin/benefactor/get_all.go b/delivery/http_server/admin/benefactor/get_all.go index 8a804dcf..595ff48a 100644 --- a/delivery/http_server/admin/benefactor/get_all.go +++ b/delivery/http_server/admin/benefactor/get_all.go @@ -14,6 +14,7 @@ import ( // @Tags Admins Benefactors // @Accept json // @Produce json +// @Param search query string false "Search by id, phone_number, concat(first_name, last_name) benefactor" // @Param filter_id query int false "Filter by ID" // @Param filter_first_name query string false "Filter by first_name" // @Param filter_last_name query string false "Filter by last_name" diff --git a/delivery/http_server/admin/kind_box/get_all.go b/delivery/http_server/admin/kind_box/get_all.go index 72e932b8..59e2b9d5 100644 --- a/delivery/http_server/admin/kind_box/get_all.go +++ b/delivery/http_server/admin/kind_box/get_all.go @@ -15,6 +15,7 @@ import ( // @Tags Admins KindBoxes // @Accept json // @Produce json +// @Param search query string false "Search by id, phone_number, concat(first_name, last_name) benefactor" // @Param filter_id query int false "Filter by ID" // @Param filter_kind_box_req_id query int false "Filter by KindBox request ID" // @Param filter_benefactor_id query int false "Filter by benefactor ID" diff --git a/delivery/http_server/admin/kind_box_req/get_all.go b/delivery/http_server/admin/kind_box_req/get_all.go index 6e54538c..8db4e388 100644 --- a/delivery/http_server/admin/kind_box_req/get_all.go +++ b/delivery/http_server/admin/kind_box_req/get_all.go @@ -15,6 +15,7 @@ import ( // @Tags Admins KindBoxReqs // @Accept json // @Produce json +// @Param search query string false "Search by id, phone_number, concat(first_name, last_name) benefactor" // @Param filter_id query int false "Filter by ID" // @Param filter_benefactor_id query int false "Filter by benefactor ID" // @Param filter_sender_agent_id query int false "Filter by sender agent ID" diff --git a/delivery/http_server/admin/refer_time/route.go b/delivery/http_server/admin/refer_time/route.go index e91ab5b6..ae1e205a 100644 --- a/delivery/http_server/admin/refer_time/route.go +++ b/delivery/http_server/admin/refer_time/route.go @@ -10,10 +10,6 @@ func (h Handler) SetRoutes(e *echo.Echo) { r := e.Group("/admins/refer-times") r.Use(middleware.Auth(h.authSvc)) - r.Use( - middleware.Auth(h.authSvc), - middleware.AdminAuthorization(h.adminAuthorizeSvc, entity.AdminKindBoxReqAddPermission), - ) - r.GET("", h.GetAll) + r.GET("", h.GetAll, middleware.AdminAuthorization(h.adminAuthorizeSvc, entity.AdminReferTimeGetAllPermission)) } diff --git a/docs/docs.go b/docs/docs.go index 2cca4538..d98e121c 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -66,6 +66,12 @@ const docTemplate = `{ ], "summary": "Get all benefactors by admin", "parameters": [ + { + "type": "string", + "description": "Search by id, phone_number, concat(first_name, last_name) benefactor", + "name": "search", + "in": "query" + }, { "type": "integer", "description": "Filter by ID", @@ -215,7 +221,7 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adminbenefactoreparam.GetBenefactorByIDResponse" + "$ref": "#/definitions/adminbenefactorhandler.BenefactorAggregatedResponse" } }, "400": { @@ -414,6 +420,12 @@ const docTemplate = `{ ], "summary": "Get all KindBoxes by admin", "parameters": [ + { + "type": "string", + "description": "Search by id, phone_number, concat(first_name, last_name) benefactor", + "name": "search", + "in": "query" + }, { "type": "integer", "description": "Filter by ID", @@ -850,6 +862,12 @@ const docTemplate = `{ ], "summary": "Admin get all kindboxreq", "parameters": [ + { + "type": "string", + "description": "Search by id, phone_number, concat(first_name, last_name) benefactor", + "name": "search", + "in": "query" + }, { "type": "integer", "description": "Filter by ID", @@ -3190,6 +3208,38 @@ const docTemplate = `{ } } }, + "adminaddressparam.Data": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "benefactor_id": { + "type": "integer" + }, + "city_id": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "lat": { + "type": "number" + }, + "lon": { + "type": "number" + }, + "name": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "province_id": { + "type": "integer" + } + } + }, "adminagentparam.Data": { "type": "object", "properties": { @@ -3290,11 +3340,37 @@ const docTemplate = `{ } } }, - "adminbenefactoreparam.GetBenefactorByIDResponse": { + "adminbenefactorhandler.BenefactorAggregatedResponse": { "type": "object", "properties": { "data": { + "$ref": "#/definitions/adminbenefactorhandler.Data" + } + } + }, + "adminbenefactorhandler.Data": { + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "$ref": "#/definitions/adminaddressparam.Data" + } + }, + "benefactor": { "$ref": "#/definitions/adminbenefactoreparam.Data" + }, + "kind_box_reqs": { + "type": "array", + "items": { + "$ref": "#/definitions/adminkindboxreqparam.Data" + } + }, + "kind_boxes": { + "type": "array", + "items": { + "$ref": "#/definitions/adminkindboxparam.Data" + } } } }, diff --git a/docs/swagger.json b/docs/swagger.json index 7b6b74a0..428bc3c8 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -55,6 +55,12 @@ ], "summary": "Get all benefactors by admin", "parameters": [ + { + "type": "string", + "description": "Search by id, phone_number, concat(first_name, last_name) benefactor", + "name": "search", + "in": "query" + }, { "type": "integer", "description": "Filter by ID", @@ -204,7 +210,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adminbenefactoreparam.GetBenefactorByIDResponse" + "$ref": "#/definitions/adminbenefactorhandler.BenefactorAggregatedResponse" } }, "400": { @@ -403,6 +409,12 @@ ], "summary": "Get all KindBoxes by admin", "parameters": [ + { + "type": "string", + "description": "Search by id, phone_number, concat(first_name, last_name) benefactor", + "name": "search", + "in": "query" + }, { "type": "integer", "description": "Filter by ID", @@ -839,6 +851,12 @@ ], "summary": "Admin get all kindboxreq", "parameters": [ + { + "type": "string", + "description": "Search by id, phone_number, concat(first_name, last_name) benefactor", + "name": "search", + "in": "query" + }, { "type": "integer", "description": "Filter by ID", @@ -3179,6 +3197,38 @@ } } }, + "adminaddressparam.Data": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "benefactor_id": { + "type": "integer" + }, + "city_id": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "lat": { + "type": "number" + }, + "lon": { + "type": "number" + }, + "name": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "province_id": { + "type": "integer" + } + } + }, "adminagentparam.Data": { "type": "object", "properties": { @@ -3279,11 +3329,37 @@ } } }, - "adminbenefactoreparam.GetBenefactorByIDResponse": { + "adminbenefactorhandler.BenefactorAggregatedResponse": { "type": "object", "properties": { "data": { + "$ref": "#/definitions/adminbenefactorhandler.Data" + } + } + }, + "adminbenefactorhandler.Data": { + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "$ref": "#/definitions/adminaddressparam.Data" + } + }, + "benefactor": { "$ref": "#/definitions/adminbenefactoreparam.Data" + }, + "kind_box_reqs": { + "type": "array", + "items": { + "$ref": "#/definitions/adminkindboxreqparam.Data" + } + }, + "kind_boxes": { + "type": "array", + "items": { + "$ref": "#/definitions/adminkindboxparam.Data" + } } } }, diff --git a/docs/swagger.yaml b/docs/swagger.yaml index a0cbec76..99016405 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -101,6 +101,27 @@ definitions: example: "1234567890" type: string type: object + adminaddressparam.Data: + properties: + address: + type: string + benefactor_id: + type: integer + city_id: + type: integer + id: + type: integer + lat: + type: number + lon: + type: number + name: + type: string + postal_code: + type: string + province_id: + type: integer + type: object adminagentparam.Data: properties: first_name: @@ -166,10 +187,27 @@ definitions: status: $ref: '#/definitions/entity.BenefactorStatus' type: object - adminbenefactoreparam.GetBenefactorByIDResponse: + adminbenefactorhandler.BenefactorAggregatedResponse: properties: data: + $ref: '#/definitions/adminbenefactorhandler.Data' + type: object + adminbenefactorhandler.Data: + properties: + addresses: + items: + $ref: '#/definitions/adminaddressparam.Data' + type: array + benefactor: $ref: '#/definitions/adminbenefactoreparam.Data' + kind_box_reqs: + items: + $ref: '#/definitions/adminkindboxreqparam.Data' + type: array + kind_boxes: + items: + $ref: '#/definitions/adminkindboxparam.Data' + type: array type: object adminkindboxparam.AssignReceiverRequest: properties: @@ -1085,6 +1123,10 @@ paths: consumes: - application/json parameters: + - description: Search by id, phone_number, concat(first_name, last_name) benefactor + in: query + name: search + type: string - description: Filter by ID in: query name: filter_id @@ -1188,7 +1230,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/adminbenefactoreparam.GetBenefactorByIDResponse' + $ref: '#/definitions/adminbenefactorhandler.BenefactorAggregatedResponse' "400": description: Bad request schema: @@ -1314,6 +1356,10 @@ paths: description: Retrieves a list of all KindBoxes with filtering, sorting, and pagination options parameters: + - description: Search by id, phone_number, concat(first_name, last_name) benefactor + in: query + name: search + type: string - description: Filter by ID in: query name: filter_id @@ -1605,6 +1651,10 @@ paths: description: Retrieves a list of all KindBox requests with filtering, sorting, and pagination options parameters: + - description: Search by id, phone_number, concat(first_name, last_name) benefactor + in: query + name: search + type: string - description: Filter by ID in: query name: filter_id diff --git a/entity/admin_permission.go b/entity/admin_permission.go index 0d759c7a..2b740275 100644 --- a/entity/admin_permission.go +++ b/entity/admin_permission.go @@ -25,4 +25,5 @@ const ( AdminBenefactorGetPermission = AdminPermission("benefactor-get") AdminBenefactorUpdatePermission = AdminPermission("benefactor-update") AdminBenefactorUpdateStatusPermission = AdminPermission("benefactor-update-status") + AdminReferTimeGetAllPermission = AdminPermission("refertime-getall") ) diff --git a/param/admin/benefactor/data.go b/param/admin/benefactor/data.go index e846e075..08a82bdd 100644 --- a/param/admin/benefactor/data.go +++ b/param/admin/benefactor/data.go @@ -14,6 +14,6 @@ type Data struct { Description string `json:"description"` Email string `json:"email"` Gender entity.Gender `json:"gender"` - BirthDate time.Time `json:"birth_date"` + BirthDate *time.Time `json:"birth_date"` Status entity.BenefactorStatus `json:"status"` } diff --git a/param/admin/benefactor/get_all.go b/param/admin/benefactor/get_all.go index 105bbdd7..3b4a5952 100644 --- a/param/admin/benefactor/get_all.go +++ b/param/admin/benefactor/get_all.go @@ -8,6 +8,7 @@ type BenefactorGetAllRequest struct { Pagination param.PaginationRequest Sort param.SortRequest Filter param.FilterRequest + Search param.SearchRequest } type BenefactorGetAllResponse struct { Data []Data `json:"data"` diff --git a/param/admin/kind_box/data.go b/param/admin/kind_box/data.go index 438e192e..90d5359d 100644 --- a/param/admin/kind_box/data.go +++ b/param/admin/kind_box/data.go @@ -20,8 +20,8 @@ type Data struct { SenderAgentID uint `json:"sender_agent_id"` DeliveredAt time.Time `json:"delivered_at"` ReturnReferTimeID uint `json:"return_refer_time_id"` - ReturnReferDate time.Time `json:"return_refer_date"` + ReturnReferDate *time.Time `json:"return_refer_date"` ReturnAddressID uint `json:"return_address_id"` ReceiverAgentID uint `json:"receiver_agent_id"` - ReturnedAt time.Time `json:"returned_at"` + ReturnedAt *time.Time `json:"returned_at"` } diff --git a/param/admin/kind_box/get_all.go b/param/admin/kind_box/get_all.go index c020206b..ae751161 100644 --- a/param/admin/kind_box/get_all.go +++ b/param/admin/kind_box/get_all.go @@ -8,6 +8,7 @@ type KindBoxGetAllRequest struct { Pagination param.PaginationRequest Sort param.SortRequest Filter param.FilterRequest + Search param.SearchRequest } type KindBoxGetAllResponse struct { diff --git a/param/admin/kind_box_req/data.go b/param/admin/kind_box_req/data.go index 2a4008c0..674b212f 100644 --- a/param/admin/kind_box_req/data.go +++ b/param/admin/kind_box_req/data.go @@ -18,5 +18,5 @@ type Data struct { DeliverReferDate time.Time `json:"deliver_refer_date"` DeliverAddressID uint `json:"deliver_address_id"` SenderAgentID uint `json:"sender_agent_id"` - DeliveredAt time.Time `json:"delivered_at"` + DeliveredAt *time.Time `json:"delivered_at"` } diff --git a/param/admin/kind_box_req/get_all.go b/param/admin/kind_box_req/get_all.go index 80c855d4..55cc8e74 100644 --- a/param/admin/kind_box_req/get_all.go +++ b/param/admin/kind_box_req/get_all.go @@ -8,6 +8,7 @@ type KindBoxReqGetAllRequest struct { Pagination param.PaginationRequest Sort param.SortRequest Filter param.FilterRequest + Search param.SearchRequest } type KindBoxReqGetAllResponse struct { diff --git a/param/agent/kind_box/data.go b/param/agent/kind_box/data.go index 55c6a2c5..440b3cfa 100644 --- a/param/agent/kind_box/data.go +++ b/param/agent/kind_box/data.go @@ -20,8 +20,8 @@ type Data struct { SenderAgentID uint `json:"sender_agent_id"` DeliveredAt time.Time `json:"delivered_at"` ReturnReferTimeID uint `json:"return_refer_time_id"` - ReturnReferDate time.Time `json:"return_refer_date"` + ReturnReferDate *time.Time `json:"return_refer_date"` ReturnAddressID uint `json:"return_address_id"` ReceiverAgentID uint `json:"receiver_agent_id"` - ReturnedAt time.Time `json:"returned_at"` + ReturnedAt *time.Time `json:"returned_at"` } diff --git a/param/agent/kind_box_req/data.go b/param/agent/kind_box_req/data.go index b73b1048..11eefe1b 100644 --- a/param/agent/kind_box_req/data.go +++ b/param/agent/kind_box_req/data.go @@ -18,5 +18,5 @@ type Data struct { DeliverReferDate time.Time `json:"deliver_refer_date"` DeliverAddressID uint `json:"deliver_address_id"` SenderAgentID uint `json:"sender_agent_id"` - DeliveredAt time.Time `json:"delivered_at"` + DeliveredAt *time.Time `json:"delivered_at"` } diff --git a/param/benefactor/kind_box/data.go b/param/benefactor/kind_box/data.go index ab441966..10f13e09 100644 --- a/param/benefactor/kind_box/data.go +++ b/param/benefactor/kind_box/data.go @@ -20,8 +20,8 @@ type Data struct { SenderAgentID uint `json:"sender_agent_id"` DeliveredAt time.Time `json:"delivered_at"` ReturnReferTimeID uint `json:"return_refer_time_id"` - ReturnReferDate time.Time `json:"return_refer_date"` + ReturnReferDate *time.Time `json:"return_refer_date"` ReturnAddressID uint `json:"return_address_id"` ReceiverAgentID uint `json:"receiver_agent_id"` - ReturnedAt time.Time `json:"returned_at"` + ReturnedAt *time.Time `json:"returned_at"` } diff --git a/param/benefactor/kind_box_req/data.go b/param/benefactor/kind_box_req/data.go index 8d3aace6..fe9b3447 100644 --- a/param/benefactor/kind_box_req/data.go +++ b/param/benefactor/kind_box_req/data.go @@ -18,5 +18,5 @@ type Data struct { DeliverReferDate time.Time `json:"deliver_refer_date"` DeliverAddressID uint `json:"deliver_address_id"` SenderAgentID uint `json:"sender_agent_id"` - DeliveredAt time.Time `json:"delivered_at"` + DeliveredAt *time.Time `json:"delivered_at"` } diff --git a/param/search.go b/param/search.go new file mode 100644 index 00000000..6b0cb283 --- /dev/null +++ b/param/search.go @@ -0,0 +1,34 @@ +package param + +import ( + "regexp" + "strings" +) + +const ( + id = "benefactors.id" + phoneNumber = "benefactors.phone_number" + fullName = "concat(benefactors.first_name, benefactors.last_name)" +) + +var searchItems = []string{id, phoneNumber, fullName} + +type SearchRequest struct { + Query string `query:"search" example:"09123456789"` +} + +type QuerySearch map[string]any + +func (s *SearchRequest) GetSearch() *QuerySearch { + searchParams := QuerySearch{} + + if s.Query != "" { + s.Query = strings.TrimSpace(s.Query) + re := regexp.MustCompile(`[\p{P}\p{S}]+`) + s.Query = re.ReplaceAllString(s.Query, "") + for _, val := range searchItems { + searchParams[val] = s.Query + } + } + return &searchParams +} diff --git a/pkg/query_builder/mysql/deleted_at.go b/pkg/query_builder/mysql/deleted_at.go new file mode 100644 index 00000000..a350c223 --- /dev/null +++ b/pkg/query_builder/mysql/deleted_at.go @@ -0,0 +1,35 @@ +package mysqlquerybuilder + +import ( + "fmt" + "strings" +) + +func BuildDeletedAtQuery(query, table string) string { + deletedAtClause := fmt.Sprintf(" %s.deleted_at IS NULL ", table) + + if !strings.Contains(query, "WHERE") { + return appendStringBefore(query, "WHERE", deletedAtClause) + } + + return appendStringAfter(query, "AND", deletedAtClause) +} + +func appendStringBefore(s, operator, appendage string) string { + limitIndex := strings.Index(strings.ToUpper(s), "LIMIT") + if limitIndex == -1 { + return s + operator + appendage + } + return s[:limitIndex] + operator + appendage + s[limitIndex:] +} + +func appendStringAfter(s, operator, appendage string) string { + index := strings.Index(strings.ToUpper(s), "WHERE") + + spaceAfterTarget := strings.Index(s[index:], " ") + if spaceAfterTarget == -1 { + spaceAfterTarget = len(s) - index + } + + return s[:index+spaceAfterTarget] + appendage + operator + s[index+spaceAfterTarget:] +} diff --git a/pkg/query_builder/mysql/filter.go b/pkg/query_builder/mysql/filter.go index ee34f30d..8561ec77 100644 --- a/pkg/query_builder/mysql/filter.go +++ b/pkg/query_builder/mysql/filter.go @@ -12,16 +12,16 @@ func isValidDateOrDateTime(value string) bool { return datePattern.MatchString(value) } -func BuildFilterQuery(baseQuery string, filter map[string]interface{}) (string, []any) { +func BuildFilterQuery(baseQuery, table string, filter map[string]interface{}) (string, []any) { var conditions []string var args []any for key, value := range filter { if strVal, ok := value.(string); ok && isValidDateOrDateTime(strVal) { - conditions = append(conditions, fmt.Sprintf("DATE(%s) = ?", key)) + conditions = append(conditions, fmt.Sprintf("DATE(%s.%s) = ?", table, key)) args = append(args, strVal) } else { - conditions = append(conditions, fmt.Sprintf("%s = ?", key)) + conditions = append(conditions, fmt.Sprintf("%s.%s = ?", table, key)) args = append(args, value) } } diff --git a/pkg/query_builder/mysql/get_all.go b/pkg/query_builder/mysql/get_all.go index 7140d131..af86a692 100644 --- a/pkg/query_builder/mysql/get_all.go +++ b/pkg/query_builder/mysql/get_all.go @@ -6,8 +6,8 @@ import ( "git.gocasts.ir/ebhomengo/niki/param" ) -func BuildGetAllQuery(baseQuery string, filter param.FilterRequest, pagination param.PaginationRequest, sort param.SortRequest) (query string, args []any) { - filterQuery, fArgs := BuildFilterQuery(baseQuery, filter) +func BuildGetAllQuery(baseQuery, table string, filter param.FilterRequest, pagination param.PaginationRequest, sort param.SortRequest) (query string, args []any) { + filterQuery, fArgs := BuildFilterQuery(baseQuery, table, filter) paginationQuery, pArgs := BuildPaginationQuery(pagination) sortQuery := BuildSortQuery(sort) diff --git a/pkg/query_builder/mysql/search.go b/pkg/query_builder/mysql/search.go new file mode 100644 index 00000000..9156439b --- /dev/null +++ b/pkg/query_builder/mysql/search.go @@ -0,0 +1,38 @@ +package mysqlquerybuilder + +import ( + "fmt" + "strings" +) + +// TODO: implementation more complete search service. + +func BuildGetSearchQuery(baseQuery string, filter map[string]interface{}, exist bool) (string, []any) { + var conditions []string + var args []any + for key, value := range filter { + if key == "id" { + conditions = append(conditions, fmt.Sprintf("%s = ?", key)) + } else { + conditions = append(conditions, fmt.Sprintf("%s LIKE ?", key)) + } + args = append(args, value) + } + + query := baseQuery + if len(conditions) > 0 { + subQuery := strings.Join(conditions, " OR ") + if exist { + query += fmt.Sprintf(" INNER JOIN benefactors ON benefactor_id = benefactors.id WHERE (%s) ", subQuery) + } else { + if strings.Contains(strings.ToUpper(baseQuery), "WHERE") { + query += " AND " + } else { + query += " WHERE " + } + query += subQuery + } + } + + return query, args +} diff --git a/pkg/response_builder/null_date.go b/pkg/response_builder/null_date.go new file mode 100644 index 00000000..62fb5caf --- /dev/null +++ b/pkg/response_builder/null_date.go @@ -0,0 +1,11 @@ +package response_builder + +import "time" + +func GetNullDate(time time.Time) *time.Time { + nullDate := &time + if time.IsZero() { + nullDate = nil + } + return nullDate +} diff --git a/repository/mysql/benefactor/get_all.go b/repository/mysql/benefactor/get_all.go index 65517694..b55ab70f 100644 --- a/repository/mysql/benefactor/get_all.go +++ b/repository/mysql/benefactor/get_all.go @@ -10,11 +10,16 @@ import ( richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) -func (d *DB) GetAllBenefactor(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest) ([]entity.Benefactor, uint, error) { +func (d *DB) GetAllBenefactor(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest, searchParams *params.QuerySearch) ([]entity.Benefactor, uint, error) { const op = "mysqlbenefactor.GetAllBenefactor" + table := "benefactors" baseQuery := `SELECT * FROM benefactors` - query, args := builder.BuildGetAllQuery(baseQuery, filter, pagination, sort) + + searchQuery, sArgs := builder.BuildGetSearchQuery(baseQuery, *searchParams, false) + query, fArgs := builder.BuildGetAllQuery(searchQuery, table, filter, pagination, sort) + args := append(sArgs, fArgs...) + rows, qErr := d.conn.Conn().QueryContext(ctx, query, args...) if qErr != nil { return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected) @@ -38,7 +43,7 @@ func (d *DB) GetAllBenefactor(ctx context.Context, filter params.FilterRequest, } var total uint baseQuery = `SELECT COUNT(*) FROM benefactors` - query, args = builder.BuildGetAllQuery(baseQuery, filter, params.PaginationRequest{}, params.SortRequest{}) + query, args = builder.BuildGetAllQuery(baseQuery, table, filter, params.PaginationRequest{}, params.SortRequest{}) qErr = d.conn.Conn().QueryRowContext(ctx, query, args...).Scan(&total) if qErr != nil { return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected) diff --git a/repository/mysql/kind_box/get_all.go b/repository/mysql/kind_box/get_all.go index 089b858e..0679a2df 100644 --- a/repository/mysql/kind_box/get_all.go +++ b/repository/mysql/kind_box/get_all.go @@ -10,11 +10,17 @@ import ( richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) -func (d *DB) GetAllKindBox(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest) ([]entity.KindBox, uint, error) { +func (d *DB) GetAllKindBox(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest, searchParams *params.QuerySearch) ([]entity.KindBox, uint, error) { const op = "mysqlkindbox.GetAllKindBox" + table := "kind_boxes" + + baseQuery := `SELECT kind_boxes.* FROM kind_boxes` + + searchQuery, sArgs := builder.BuildGetSearchQuery(baseQuery, *searchParams, true) + filterQuery, fArgs := builder.BuildGetAllQuery(searchQuery, table, filter, pagination, sort) + query := builder.BuildDeletedAtQuery(filterQuery, table) + args := append(sArgs, fArgs...) - baseQuery := `SELECT * FROM kind_boxes WHERE deleted_at IS NULL` - query, args := builder.BuildGetAllQuery(baseQuery, filter, pagination, sort) rows, qErr := d.conn.Conn().QueryContext(ctx, query, args...) if qErr != nil { return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected) @@ -37,7 +43,7 @@ func (d *DB) GetAllKindBox(ctx context.Context, filter params.FilterRequest, pag var total uint baseQuery = `SELECT COUNT(*) FROM kind_boxes WHERE deleted_at IS NULL` - query, args = builder.BuildGetAllQuery(baseQuery, filter, params.PaginationRequest{}, params.SortRequest{}) + query, args = builder.BuildGetAllQuery(baseQuery, table, filter, params.PaginationRequest{}, params.SortRequest{}) qErr = d.conn.Conn().QueryRowContext(ctx, query, args...).Scan(&total) if qErr != nil { return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected) diff --git a/repository/mysql/kind_box_req/get_all.go b/repository/mysql/kind_box_req/get_all.go index 1c0cb852..0f5ab353 100644 --- a/repository/mysql/kind_box_req/get_all.go +++ b/repository/mysql/kind_box_req/get_all.go @@ -10,11 +10,17 @@ import ( richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) -func (d *DB) GetAllKindBoxReq(ctx context.Context, filter param.FilterRequest, pagination param.PaginationRequest, sort param.SortRequest) ([]entity.KindBoxReq, uint, error) { +func (d *DB) GetAllKindBoxReq(ctx context.Context, filter param.FilterRequest, pagination param.PaginationRequest, sort param.SortRequest, searchParams *param.QuerySearch) ([]entity.KindBoxReq, uint, error) { const op = "mysqlkindboxreq.GetAllKindBoxReq" + table := "kind_box_reqs" + + baseQuery := `SELECT kind_box_reqs.* FROM kind_box_reqs` + + searchQuery, sArgs := builder.BuildGetSearchQuery(baseQuery, *searchParams, true) + filterQuery, fArgs := builder.BuildGetAllQuery(searchQuery, table, filter, pagination, sort) + query := builder.BuildDeletedAtQuery(filterQuery, table) + args := append(sArgs, fArgs...) - baseQuery := `SELECT * FROM kind_box_reqs WHERE deleted_at IS NULL` - query, args := builder.BuildGetAllQuery(baseQuery, filter, pagination, sort) rows, qErr := d.conn.Conn().QueryContext(ctx, query, args...) if qErr != nil { return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected) @@ -37,7 +43,7 @@ func (d *DB) GetAllKindBoxReq(ctx context.Context, filter param.FilterRequest, p var total uint baseQuery = `SELECT COUNT(*) FROM kind_box_reqs WHERE deleted_at IS NULL` - query, args = builder.BuildGetAllQuery(baseQuery, filter, param.PaginationRequest{}, param.SortRequest{}) + query, args = builder.BuildGetAllQuery(baseQuery, table, filter, param.PaginationRequest{}, param.SortRequest{}) qErr = d.conn.Conn().QueryRowContext(ctx, query, args...).Scan(&total) if qErr != nil { return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected) diff --git a/repository/mysql/migration/1727209869_add_getall_refertime_access.sql b/repository/mysql/migration/1727209869_add_getall_refertime_access.sql new file mode 100644 index 00000000..c4719a38 --- /dev/null +++ b/repository/mysql/migration/1727209869_add_getall_refertime_access.sql @@ -0,0 +1,33 @@ +-- +migrate Up +ALTER TABLE `admin_access_controls` MODIFY COLUMN `permission` + enum ( + 'admin-register', + 'kindboxreq-accept', + 'kindboxreq-reject', + 'kindboxreq-getall', + 'kindboxreq-deliver', + 'kindboxreq-assign_sender_agent', + 'admin-getall_agent', + 'kindboxreq-get_awaiting_delivery', + 'kindbox-get', + 'kindboxreq-add', + 'kindbox-assign_receiver_agent', + 'kindbox-getall', + 'kindboxreq-update', + 'kindboxreq-get', + 'kindbox-get_awaiting_return', + 'kindbox-return', + 'kindbox-enumerate', + 'kindbox-update', + 'benefactor-getall', + 'benefactor-get', + 'refertime-getall' + ) NOT NULL; + +INSERT INTO `admin_access_controls` (`actor_id`, `actor_type`, `permission`) +VALUES (1, 'role', 'refertime-getall'), + (2, 'role', 'refertime-getall'); + +-- +migrate Down +DELETE +FROM `admin_access_controls`; \ No newline at end of file diff --git a/service/admin/benefactor/get.go b/service/admin/benefactor/get.go index fb0bbee5..14997ba2 100644 --- a/service/admin/benefactor/get.go +++ b/service/admin/benefactor/get.go @@ -4,6 +4,7 @@ import ( "context" param "git.gocasts.ir/ebhomengo/niki/param/admin/benefactor" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -24,7 +25,7 @@ func (s Service) GetByID(ctx context.Context, req param.GetBenefactorByIDRequest Description: bnf.Description, Email: bnf.Email, Gender: bnf.Gender, - BirthDate: bnf.BirthDate, + BirthDate: response.GetNullDate(bnf.BirthDate), Status: bnf.Status, }, }, nil diff --git a/service/admin/benefactor/get_all.go b/service/admin/benefactor/get_all.go index 3b1e1dd8..aa2ec414 100644 --- a/service/admin/benefactor/get_all.go +++ b/service/admin/benefactor/get_all.go @@ -5,6 +5,7 @@ import ( paginationparam "git.gocasts.ir/ebhomengo/niki/param" param "git.gocasts.ir/ebhomengo/niki/param/admin/benefactor" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -17,7 +18,7 @@ func (s Service) GetAllBenefactor(ctx context.Context, req param.BenefactorGetAl req.Pagination.GetPageSize() req.Pagination.GetPageNumber() - benefactors, total, err := s.repo.GetAllBenefactor(ctx, req.Filter, req.Pagination, req.Sort) + benefactors, total, err := s.repo.GetAllBenefactor(ctx, req.Filter, req.Pagination, req.Sort, req.Search.GetSearch()) if err != nil { return param.BenefactorGetAllResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected) } @@ -32,7 +33,7 @@ func (s Service) GetAllBenefactor(ctx context.Context, req param.BenefactorGetAl Description: benefactor.Description, Email: benefactor.Email, Gender: benefactor.Gender, - BirthDate: benefactor.BirthDate, + BirthDate: response.GetNullDate(benefactor.BirthDate), Status: benefactor.Status, }) } diff --git a/service/admin/benefactor/service.go b/service/admin/benefactor/service.go index 4550e693..61e2eb9e 100644 --- a/service/admin/benefactor/service.go +++ b/service/admin/benefactor/service.go @@ -12,9 +12,9 @@ import ( type Repository interface { IsExistBenefactorByID(ctx context.Context, id uint) (bool, error) GetByID(ctx context.Context, id uint) (entity.Benefactor, error) - GetAllBenefactor(ctx context.Context, filter param.FilterRequest, pagination param.PaginationRequest, sort param.SortRequest) ([]entity.Benefactor, uint, error) UpdateBenefactor(ctx context.Context, benefactor entity.Benefactor) error UpdateStatusBenefactor(ctx context.Context, benefactor entity.Benefactor, status entity.BenefactorStatus) error + GetAllBenefactor(ctx context.Context, filter param.FilterRequest, pagination param.PaginationRequest, sort param.SortRequest, searchParams *param.QuerySearch) ([]entity.Benefactor, uint, error) } type AddressSvc interface { GetAddressByID(ctx context.Context, request adminaddressparam.AddressGetRequest) (adminaddressparam.AddressGetResponse, error) diff --git a/service/admin/kind_box/get.go b/service/admin/kind_box/get.go index 0348ac93..d1c01604 100644 --- a/service/admin/kind_box/get.go +++ b/service/admin/kind_box/get.go @@ -4,6 +4,7 @@ import ( "context" param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -31,9 +32,9 @@ func (s Service) Get(ctx context.Context, req param.KindBoxGetRequest) (param.Ki SenderAgentID: kindBox.SenderAgentID, DeliveredAt: kindBox.DeliveredAt, ReturnReferTimeID: kindBox.ReturnReferTimeID, - ReturnReferDate: kindBox.ReturnReferDate, + ReturnReferDate: response.GetNullDate(kindBox.ReturnReferDate), ReturnAddressID: kindBox.ReturnAddressID, ReceiverAgentID: kindBox.ReceiverAgentID, - ReturnedAt: kindBox.ReturnedAt, + ReturnedAt: response.GetNullDate(kindBox.ReturnedAt), }}, nil } diff --git a/service/admin/kind_box/get_all.go b/service/admin/kind_box/get_all.go index b1d564df..a42cad5f 100644 --- a/service/admin/kind_box/get_all.go +++ b/service/admin/kind_box/get_all.go @@ -5,6 +5,7 @@ import ( paginationparam "git.gocasts.ir/ebhomengo/niki/param" param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -18,7 +19,7 @@ func (s Service) GetAll(ctx context.Context, req param.KindBoxGetAllRequest) (pa req.Pagination.GetPageSize() req.Pagination.GetPageNumber() - allKindBox, total, err := s.repo.GetAllKindBox(ctx, req.Filter, req.Pagination, req.Sort) + allKindBox, total, err := s.repo.GetAllKindBox(ctx, req.Filter, req.Pagination, req.Sort, req.Search.GetSearch()) if err != nil { return param.KindBoxGetAllResponse{}, richerror.New(op).WithErr(err) } @@ -39,10 +40,10 @@ func (s Service) GetAll(ctx context.Context, req param.KindBoxGetAllRequest) (pa SenderAgentID: kindBox.SenderAgentID, DeliveredAt: kindBox.DeliveredAt, ReturnReferTimeID: kindBox.ReturnReferTimeID, - ReturnReferDate: kindBox.ReturnReferDate, + ReturnReferDate: response.GetNullDate(kindBox.ReturnReferDate), ReturnAddressID: kindBox.ReturnAddressID, ReceiverAgentID: kindBox.ReceiverAgentID, - ReturnedAt: kindBox.ReturnedAt, + ReturnedAt: response.GetNullDate(kindBox.ReturnedAt), }) } diff --git a/service/admin/kind_box/service.go b/service/admin/kind_box/service.go index bbf07359..b12de392 100644 --- a/service/admin/kind_box/service.go +++ b/service/admin/kind_box/service.go @@ -11,7 +11,7 @@ import ( type Repository interface { GetKindBox(ctx context.Context, kindBoxID uint) (entity.KindBox, error) AssignReceiverAgent(ctx context.Context, kindBox entity.KindBox) error - GetAllKindBox(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest) ([]entity.KindBox, uint, error) + GetAllKindBox(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest, searchParams *params.QuerySearch) ([]entity.KindBox, uint, error) EnumerateKindBox(ctx context.Context, kindBoxID uint, amount uint) error UpdateKindBox(ctx context.Context, KindBox entity.KindBox) error } diff --git a/service/admin/kind_box_req/accept.go b/service/admin/kind_box_req/accept.go index dcbd2780..3bd67982 100644 --- a/service/admin/kind_box_req/accept.go +++ b/service/admin/kind_box_req/accept.go @@ -4,6 +4,7 @@ import ( "context" param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -39,6 +40,6 @@ func (s Service) Accept(ctx context.Context, req param.KindBoxReqAcceptRequest) DeliverReferDate: kindBoxReq.DeliverReferDate, DeliverAddressID: kindBoxReq.DeliverAddressID, SenderAgentID: kindBoxReq.SenderAgentID, - DeliveredAt: kindBoxReq.DeliveredAt, + DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt), }}, nil } diff --git a/service/admin/kind_box_req/add.go b/service/admin/kind_box_req/add.go index 808ca7f3..89b929d2 100644 --- a/service/admin/kind_box_req/add.go +++ b/service/admin/kind_box_req/add.go @@ -5,6 +5,7 @@ import ( "git.gocasts.ir/ebhomengo/niki/entity" param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -38,6 +39,6 @@ func (s Service) Add(ctx context.Context, req param.KindBoxReqAddRequest) (param DeliverReferDate: kindBoxReq.DeliverReferDate, DeliverAddressID: kindBoxReq.DeliverAddressID, SenderAgentID: kindBoxReq.SenderAgentID, - DeliveredAt: kindBoxReq.DeliveredAt, + DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt), }}, nil } diff --git a/service/admin/kind_box_req/get.go b/service/admin/kind_box_req/get.go index 14e81d4c..17ea6b20 100644 --- a/service/admin/kind_box_req/get.go +++ b/service/admin/kind_box_req/get.go @@ -4,6 +4,7 @@ import ( "context" param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -30,7 +31,7 @@ func (s Service) Get(ctx context.Context, req param.GetKindBoxReqRequest) (param DeliverReferDate: kindBoxReq.DeliverReferDate, DeliverAddressID: kindBoxReq.DeliverAddressID, SenderAgentID: kindBoxReq.SenderAgentID, - DeliveredAt: kindBoxReq.DeliveredAt, + DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt), }, }, nil } diff --git a/service/admin/kind_box_req/get_all.go b/service/admin/kind_box_req/get_all.go index c8e0bab5..cc41bf6d 100644 --- a/service/admin/kind_box_req/get_all.go +++ b/service/admin/kind_box_req/get_all.go @@ -5,6 +5,7 @@ import ( paginationparam "git.gocasts.ir/ebhomengo/niki/param" param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -18,7 +19,7 @@ func (s Service) GetAll(ctx context.Context, req param.KindBoxReqGetAllRequest) req.Pagination.GetPageSize() req.Pagination.GetPageNumber() - allKindBoxReq, total, err := s.repo.GetAllKindBoxReq(ctx, req.Filter, req.Pagination, req.Sort) + allKindBoxReq, total, err := s.repo.GetAllKindBoxReq(ctx, req.Filter, req.Pagination, req.Sort, req.Search.GetSearch()) if err != nil { return param.KindBoxReqGetAllResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected) } @@ -36,7 +37,7 @@ func (s Service) GetAll(ctx context.Context, req param.KindBoxReqGetAllRequest) DeliverReferDate: kindBoxReq.DeliverReferDate, DeliverAddressID: kindBoxReq.DeliverAddressID, SenderAgentID: kindBoxReq.SenderAgentID, - DeliveredAt: kindBoxReq.DeliveredAt, + DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt), }) } diff --git a/service/admin/kind_box_req/reject.go b/service/admin/kind_box_req/reject.go index 28cb3fec..3a6fb0e0 100644 --- a/service/admin/kind_box_req/reject.go +++ b/service/admin/kind_box_req/reject.go @@ -4,6 +4,7 @@ import ( "context" param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -35,7 +36,7 @@ func (s Service) Reject(ctx context.Context, req param.KindBoxReqRejectRequest) DeliverReferDate: kindBoxReq.DeliverReferDate, DeliverAddressID: kindBoxReq.DeliverAddressID, SenderAgentID: kindBoxReq.SenderAgentID, - DeliveredAt: kindBoxReq.DeliveredAt, + DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt), }, }, nil } diff --git a/service/admin/kind_box_req/service.go b/service/admin/kind_box_req/service.go index 76fc1bce..976473b6 100644 --- a/service/admin/kind_box_req/service.go +++ b/service/admin/kind_box_req/service.go @@ -14,7 +14,7 @@ type Repository interface { RejectKindBoxReq(ctx context.Context, kindBoxReqID uint, description string) error AssignSenderAgentToKindBoxReq(ctx context.Context, kindBoxReqID uint, senderAgentID uint) error DeliverKindBoxReq(ctx context.Context, kindBoxReqID uint) error - GetAllKindBoxReq(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest) ([]entity.KindBoxReq, uint, error) + GetAllKindBoxReq(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest, searchParams *params.QuerySearch) ([]entity.KindBoxReq, uint, error) GetAwaitingDeliveryByAgent(ctx context.Context, kindBoxReqID uint, agentID uint) (entity.KindBoxReq, error) AddKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) (entity.KindBoxReq, error) UpdateKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) error diff --git a/service/agent/kind_box/get_all_return_awaiting.go b/service/agent/kind_box/get_all_return_awaiting.go index e8bbc491..5f2ff26f 100644 --- a/service/agent/kind_box/get_all_return_awaiting.go +++ b/service/agent/kind_box/get_all_return_awaiting.go @@ -5,6 +5,7 @@ import ( paginationparam "git.gocasts.ir/ebhomengo/niki/param" param "git.gocasts.ir/ebhomengo/niki/param/agent/kind_box" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -20,7 +21,7 @@ func (s Service) GetAll(ctx context.Context, req param.GetAllRequest) (param.Get req.Filter["receiver_agent_id"] = req.ReceiverAgentId req.Filter["status"] = req.Status - allKindBoxes, total, err := s.repo.GetAllKindBox(ctx, req.Filter, req.Pagination, req.Sort) + allKindBoxes, total, err := s.repo.GetAllKindBox(ctx, req.Filter, req.Pagination, req.Sort, nil) if err != nil { return param.GetAllResponse{}, richerror.New(op).WithErr(err) } @@ -41,10 +42,10 @@ func (s Service) GetAll(ctx context.Context, req param.GetAllRequest) (param.Get SenderAgentID: kindBox.SenderAgentID, DeliveredAt: kindBox.DeliveredAt, ReturnReferTimeID: kindBox.ReturnReferTimeID, - ReturnReferDate: kindBox.ReturnReferDate, + ReturnReferDate: response.GetNullDate(kindBox.ReturnReferDate), ReturnAddressID: kindBox.ReturnAddressID, ReceiverAgentID: kindBox.ReceiverAgentID, - ReturnedAt: kindBox.ReturnedAt, + ReturnedAt: response.GetNullDate(kindBox.ReturnedAt), }) } diff --git a/service/agent/kind_box/get_return_awaiting.go b/service/agent/kind_box/get_return_awaiting.go index 5170ceb2..f1f336e6 100644 --- a/service/agent/kind_box/get_return_awaiting.go +++ b/service/agent/kind_box/get_return_awaiting.go @@ -4,6 +4,7 @@ import ( "context" param "git.gocasts.ir/ebhomengo/niki/param/agent/kind_box" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -32,10 +33,10 @@ func (s Service) Get(ctx context.Context, req param.GetKindBoxRequest) (param.Ge SenderAgentID: kindBox.SenderAgentID, DeliveredAt: kindBox.DeliveredAt, ReturnReferTimeID: kindBox.ReturnReferTimeID, - ReturnReferDate: kindBox.ReturnReferDate, + ReturnReferDate: response.GetNullDate(kindBox.ReturnReferDate), ReturnAddressID: kindBox.ReturnAddressID, ReceiverAgentID: kindBox.ReceiverAgentID, - ReturnedAt: kindBox.ReturnedAt, + ReturnedAt: response.GetNullDate(kindBox.ReturnedAt), }, }, nil } diff --git a/service/agent/kind_box/service.go b/service/agent/kind_box/service.go index 6a7f25a4..9b82b3f1 100644 --- a/service/agent/kind_box/service.go +++ b/service/agent/kind_box/service.go @@ -10,7 +10,7 @@ import ( type Repository interface { GetAwaitingReturnByAgent(ctx context.Context, kindBoxID uint, agentID uint) (entity.KindBox, error) - GetAllKindBox(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest) ([]entity.KindBox, uint, error) + GetAllKindBox(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest, searchParams *params.QuerySearch) ([]entity.KindBox, uint, error) ReturnKindBox(ctx context.Context, kindBoxID uint, serialNumber string) error AddBatchKindBox(ctx context.Context, kindBoxes []entity.KindBox) error } diff --git a/service/agent/kind_box_req/get_all_delivery_awaiting.go b/service/agent/kind_box_req/get_all_delivery_awaiting.go index 12589bc2..4f1673e0 100644 --- a/service/agent/kind_box_req/get_all_delivery_awaiting.go +++ b/service/agent/kind_box_req/get_all_delivery_awaiting.go @@ -5,6 +5,7 @@ import ( paginationparam "git.gocasts.ir/ebhomengo/niki/param" param "git.gocasts.ir/ebhomengo/niki/param/agent/kind_box_req" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -20,7 +21,7 @@ func (s Service) GetAllAwaitingDelivery(ctx context.Context, req param.DeliveryA req.Filter["sender_agent_id"] = req.SenderAgentId req.Filter["status"] = req.Status - allAwaitingKindBoxReq, total, err := s.repo.GetAllKindBoxReq(ctx, req.Filter, req.Pagination, req.Sort) + allAwaitingKindBoxReq, total, err := s.repo.GetAllKindBoxReq(ctx, req.Filter, req.Pagination, req.Sort, nil) if err != nil { return param.DeliveryAwaitingGetAllResponse{}, richerror.New(op).WithErr(err) } @@ -38,7 +39,7 @@ func (s Service) GetAllAwaitingDelivery(ctx context.Context, req param.DeliveryA DeliverReferDate: kindBoxReq.DeliverReferDate, DeliverAddressID: kindBoxReq.DeliverAddressID, SenderAgentID: kindBoxReq.SenderAgentID, - DeliveredAt: kindBoxReq.DeliveredAt, + DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt), }) } diff --git a/service/agent/kind_box_req/get_delivery_awaiting.go b/service/agent/kind_box_req/get_delivery_awaiting.go index 4f71653b..ce3f93f9 100644 --- a/service/agent/kind_box_req/get_delivery_awaiting.go +++ b/service/agent/kind_box_req/get_delivery_awaiting.go @@ -4,6 +4,7 @@ import ( "context" param "git.gocasts.ir/ebhomengo/niki/param/agent/kind_box_req" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -30,7 +31,7 @@ func (s Service) GetAwaitingDelivery(ctx context.Context, req param.DeliveryAwai DeliverReferDate: kindBoxReq.DeliverReferDate, DeliverAddressID: kindBoxReq.DeliverAddressID, SenderAgentID: kindBoxReq.SenderAgentID, - DeliveredAt: kindBoxReq.DeliveredAt, + DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt), }, }, nil } diff --git a/service/agent/kind_box_req/service.go b/service/agent/kind_box_req/service.go index ad1eeed4..f84fbcd3 100644 --- a/service/agent/kind_box_req/service.go +++ b/service/agent/kind_box_req/service.go @@ -10,7 +10,7 @@ import ( ) type Repository interface { - GetAllKindBoxReq(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest) ([]entity.KindBoxReq, uint, error) + GetAllKindBoxReq(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest, searchParams *params.QuerySearch) ([]entity.KindBoxReq, uint, error) DeliverKindBoxReq(ctx context.Context, kindBoxReqID uint) error GetAwaitingDeliveryByAgent(ctx context.Context, kindBoxReqID uint, agentID uint) (entity.KindBoxReq, error) GetByID(ctx context.Context, id uint) (entity.KindBoxReq, error) diff --git a/service/benefactor/kind_box/get.go b/service/benefactor/kind_box/get.go index 7232d051..ae55fedc 100644 --- a/service/benefactor/kind_box/get.go +++ b/service/benefactor/kind_box/get.go @@ -4,6 +4,7 @@ import ( "context" param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -31,9 +32,9 @@ func (s Service) Get(ctx context.Context, req param.KindBoxGetRequest) (param.Ki SenderAgentID: kindBox.SenderAgentID, DeliveredAt: kindBox.DeliveredAt, ReturnReferTimeID: kindBox.ReturnReferTimeID, - ReturnReferDate: kindBox.ReturnReferDate, + ReturnReferDate: response.GetNullDate(kindBox.ReturnReferDate), ReturnAddressID: kindBox.ReturnAddressID, ReceiverAgentID: kindBox.ReceiverAgentID, - ReturnedAt: kindBox.ReturnedAt, + ReturnedAt: response.GetNullDate(kindBox.ReturnedAt), }}, nil } diff --git a/service/benefactor/kind_box/get_all.go b/service/benefactor/kind_box/get_all.go index 8fa615b2..f085d2d8 100644 --- a/service/benefactor/kind_box/get_all.go +++ b/service/benefactor/kind_box/get_all.go @@ -5,6 +5,7 @@ import ( params "git.gocasts.ir/ebhomengo/niki/param" param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -18,7 +19,7 @@ func (s Service) GetAll(ctx context.Context, req param.KindBoxGetAllRequest) (pa req.Pagination.GetPageSize() req.Pagination.GetPageNumber() - allKindBox, total, err := s.repo.GetAllKindBox(ctx, req.Filter, req.Pagination, req.Sort) + allKindBox, total, err := s.repo.GetAllKindBox(ctx, req.Filter, req.Pagination, req.Sort, nil) if err != nil { return param.KindBoxGetAllResponse{}, richerror.New(op).WithErr(err) } @@ -39,10 +40,10 @@ func (s Service) GetAll(ctx context.Context, req param.KindBoxGetAllRequest) (pa SenderAgentID: kindBox.SenderAgentID, DeliveredAt: kindBox.DeliveredAt, ReturnReferTimeID: kindBox.ReturnReferTimeID, - ReturnReferDate: kindBox.ReturnReferDate, + ReturnReferDate: response.GetNullDate(kindBox.ReturnReferDate), ReturnAddressID: kindBox.ReturnAddressID, ReceiverAgentID: kindBox.ReceiverAgentID, - ReturnedAt: kindBox.ReturnedAt, + ReturnedAt: response.GetNullDate(kindBox.ReturnedAt), }) } diff --git a/service/benefactor/kind_box/service.go b/service/benefactor/kind_box/service.go index 322adf2f..a88c87fc 100644 --- a/service/benefactor/kind_box/service.go +++ b/service/benefactor/kind_box/service.go @@ -9,7 +9,7 @@ import ( ) type Repository interface { - GetAllKindBox(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest) ([]entity.KindBox, uint, error) + GetAllKindBox(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest, searchParams *params.QuerySearch) ([]entity.KindBox, uint, error) GetKindBox(ctx context.Context, kindBoxID uint) (entity.KindBox, error) RegisterEmptyingRequestForKindBox(ctx context.Context, kindBox entity.KindBox) error } diff --git a/service/benefactor/kind_box_req/add.go b/service/benefactor/kind_box_req/add.go index 31460e09..77806842 100644 --- a/service/benefactor/kind_box_req/add.go +++ b/service/benefactor/kind_box_req/add.go @@ -5,6 +5,7 @@ import ( "git.gocasts.ir/ebhomengo/niki/entity" param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -38,6 +39,6 @@ func (s Service) Add(ctx context.Context, req param.KindBoxReqAddRequest) (param DeliverReferDate: kindBoxReq.DeliverReferDate, DeliverAddressID: kindBoxReq.DeliverAddressID, SenderAgentID: kindBoxReq.SenderAgentID, - DeliveredAt: kindBoxReq.DeliveredAt, + DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt), }}, nil } diff --git a/service/benefactor/kind_box_req/get.go b/service/benefactor/kind_box_req/get.go index 560bd079..840da3d9 100644 --- a/service/benefactor/kind_box_req/get.go +++ b/service/benefactor/kind_box_req/get.go @@ -4,6 +4,7 @@ import ( "context" param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -30,6 +31,6 @@ func (s Service) Get(ctx context.Context, req param.KindBoxReqGetRequest) (param DeliverReferDate: kindBoxReq.DeliverReferDate, DeliverAddressID: kindBoxReq.DeliverAddressID, SenderAgentID: kindBoxReq.SenderAgentID, - DeliveredAt: kindBoxReq.DeliveredAt, + DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt), }}, nil } diff --git a/service/benefactor/kind_box_req/get_all.go b/service/benefactor/kind_box_req/get_all.go index 8398a367..fb4560d6 100644 --- a/service/benefactor/kind_box_req/get_all.go +++ b/service/benefactor/kind_box_req/get_all.go @@ -5,6 +5,7 @@ import ( params "git.gocasts.ir/ebhomengo/niki/param" param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req" + response "git.gocasts.ir/ebhomengo/niki/pkg/response_builder" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) @@ -18,7 +19,7 @@ func (s Service) GetAll(ctx context.Context, req param.GetAllRequest) (param.Get req.Pagination.GetPageSize() req.Pagination.GetPageNumber() - allKindBoxReq, total, err := s.repo.GetAllKindBoxReq(ctx, req.Filter, req.Pagination, req.Sort) + allKindBoxReq, total, err := s.repo.GetAllKindBoxReq(ctx, req.Filter, req.Pagination, req.Sort, nil) if err != nil { return param.GetAllResponse{}, richerror.New(op).WithErr(err) } @@ -37,7 +38,7 @@ func (s Service) GetAll(ctx context.Context, req param.GetAllRequest) (param.Get DeliverReferDate: kindBoxReq.DeliverReferDate, DeliverAddressID: kindBoxReq.DeliverAddressID, SenderAgentID: kindBoxReq.SenderAgentID, - DeliveredAt: kindBoxReq.DeliveredAt, + DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt), }) } diff --git a/service/benefactor/kind_box_req/service.go b/service/benefactor/kind_box_req/service.go index 6c503273..12606f99 100644 --- a/service/benefactor/kind_box_req/service.go +++ b/service/benefactor/kind_box_req/service.go @@ -12,7 +12,7 @@ type Repository interface { AddKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) (entity.KindBoxReq, error) GetKindBoxReqByID(ctx context.Context, kindBoxReqID uint) (entity.KindBoxReq, error) DeleteKindBoxReqByID(ctx context.Context, kindBoxReqID uint) error - GetAllKindBoxReq(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest) ([]entity.KindBoxReq, uint, error) + GetAllKindBoxReq(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest, searchParams *params.QuerySearch) ([]entity.KindBoxReq, uint, error) UpdateKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) error } diff --git a/validator/admin/benefactor/get_all.go b/validator/admin/benefactor/get_all.go index ef2f7700..9cc80d9a 100644 --- a/validator/admin/benefactor/get_all.go +++ b/validator/admin/benefactor/get_all.go @@ -17,6 +17,7 @@ func (v Validator) ValidateGetAll(req param.BenefactorGetAllRequest) (map[string if err := validation.ValidateStruct(&req, validation.Field(&req.Filter, validation.By(v.AreFilterFieldsValid(validFields))), validation.Field(&req.Sort, validation.By(v.AreSortFieldsValid(validFields))), + validation.Field(&req.Search, validation.By(v.AreSearchValid())), ); err != nil { fieldErrors := make(map[string]string) diff --git a/validator/admin/benefactor/validator.go b/validator/admin/benefactor/validator.go index a396d11d..2c94b1cd 100644 --- a/validator/admin/benefactor/validator.go +++ b/validator/admin/benefactor/validator.go @@ -14,10 +14,11 @@ import ( ) const ( - minLengthFirstName = 3 - maxLengthFirstName = 40 - minLengthLastName = 3 - maxLengthLastName = 40 + minLengthFirstName = 3 + maxLengthFirstName = 40 + minLengthLastName = 3 + maxLengthLastName = 40 + MaxLengthQuerySearch = 32 ) type Repository interface { @@ -87,6 +88,21 @@ func (v Validator) doesBenefactorExist(ctx context.Context) validation.RuleFunc } } +func (v Validator) AreSearchValid() validation.RuleFunc { + return func(value interface{}) error { + search, ok := value.(params.SearchRequest) + if !ok { + return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong) + } + if len(search.Query) > MaxLengthQuerySearch { + return fmt.Errorf(errmsg.ErrorMsgInvalidInput) + + } + + return nil + } +} + func (v Validator) isDateValid(value interface{}) error { date, ok := value.(params.Date) if !ok { diff --git a/validator/admin/kind_box/get_all.go b/validator/admin/kind_box/get_all.go index cf6054a1..27c19206 100644 --- a/validator/admin/kind_box/get_all.go +++ b/validator/admin/kind_box/get_all.go @@ -21,6 +21,7 @@ func (v Validator) ValidateGetAll(req param.KindBoxGetAllRequest) (map[string]st if err := validation.ValidateStruct(&req, validation.Field(&req.Filter, validation.By(v.AreFilterFieldsValid(validFields))), validation.Field(&req.Sort, validation.By(v.AreSortFieldsValid(validFields))), + validation.Field(&req.Search, validation.By(v.AreSearchValid())), ); err != nil { fieldErrors := make(map[string]string) diff --git a/validator/admin/kind_box/validator.go b/validator/admin/kind_box/validator.go index 37c7ce25..8e6c7118 100644 --- a/validator/admin/kind_box/validator.go +++ b/validator/admin/kind_box/validator.go @@ -18,6 +18,10 @@ import ( validation "github.com/go-ozzo/ozzo-validation/v4" ) +const ( + MaxLengthQuerySearch = 32 +) + //go:generate mockery --name Repository type Repository interface { KindBoxExist(ctx context.Context, kindBoxID uint) (bool, error) @@ -279,3 +283,17 @@ func (v Validator) AreFilterFieldsValid(validFilters []string) validation.RuleFu return nil } } + +func (v Validator) AreSearchValid() validation.RuleFunc { + return func(value interface{}) error { + search, ok := value.(params.SearchRequest) + if !ok { + return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong) + } + if len(search.Query) > MaxLengthQuerySearch { + return fmt.Errorf(errmsg.ErrorMsgInvalidInput) + } + + return nil + } +} diff --git a/validator/admin/kind_box_req/get_all.go b/validator/admin/kind_box_req/get_all.go index a5679f0e..3b3d40a8 100644 --- a/validator/admin/kind_box_req/get_all.go +++ b/validator/admin/kind_box_req/get_all.go @@ -20,6 +20,7 @@ func (v Validator) ValidateGetAll(req param.KindBoxReqGetAllRequest) (map[string if err := validation.ValidateStruct(&req, validation.Field(&req.Filter, validation.By(v.AreFilterFieldsValid(validFields))), validation.Field(&req.Sort, validation.By(v.AreSortFieldsValid(validFields))), + validation.Field(&req.Search, validation.By(v.AreSearchValid())), ); err != nil { fieldErrors := make(map[string]string) diff --git a/validator/admin/kind_box_req/validator.go b/validator/admin/kind_box_req/validator.go index dd05eefd..29aa5f08 100644 --- a/validator/admin/kind_box_req/validator.go +++ b/validator/admin/kind_box_req/validator.go @@ -18,8 +18,9 @@ import ( ) const ( - MinKindBoxReq = 1 - MaxKindBoxReq = 100 + MinKindBoxReq = 1 + MaxKindBoxReq = 100 + MaxLengthQuerySearch = 32 ) type Repository interface { @@ -340,3 +341,17 @@ func (v Validator) AreFilterFieldsValid(validFilters []string) validation.RuleFu return nil } } + +func (v Validator) AreSearchValid() validation.RuleFunc { + return func(value interface{}) error { + search, ok := value.(params.SearchRequest) + if !ok { + return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong) + } + if len(search.Query) > MaxLengthQuerySearch { + return fmt.Errorf(errmsg.ErrorMsgInvalidInput) + } + + return nil + } +}