fix conflicts

This commit is contained in:
hossein 2024-11-04 22:33:04 +03:30
commit 67d9d5cb7d
60 changed files with 531 additions and 82 deletions

View File

@ -19,7 +19,7 @@ import (
// @Accept json // @Accept json
// @Produce json // @Produce json
// @Param id path int true "Benefactor ID" // @Param id path int true "Benefactor ID"
// @Success 200 {object} param.GetBenefactorByIDResponse // @Success 200 {object} BenefactorAggregatedResponse
// @Failure 400 {string} "Bad request" // @Failure 400 {string} "Bad request"
// @Failure 401 {string} "invalid or expired jwt" // @Failure 401 {string} "invalid or expired jwt"
// @Failure 403 {string} "user not allowed" // @Failure 403 {string} "user not allowed"
@ -58,6 +58,9 @@ func (h Handler) GetBenefactor(c echo.Context) error {
Field: "created_at", Field: "created_at",
Direction: params.DescSortDirection, Direction: params.DescSortDirection,
}, },
Filter: map[string]any{
"benefactor_id": bnf.Data.ID,
},
}) })
if err != nil { if err != nil {
msg, code := httpmsg.Error(err) msg, code := httpmsg.Error(err)
@ -74,6 +77,9 @@ func (h Handler) GetBenefactor(c echo.Context) error {
Field: "created_at", Field: "created_at",
Direction: params.DescSortDirection, Direction: params.DescSortDirection,
}, },
Filter: map[string]any{
"benefactor_id": bnf.Data.ID,
},
}) })
if err != nil { if err != nil {
msg, code := httpmsg.Error(err) msg, code := httpmsg.Error(err)

View File

@ -14,6 +14,7 @@ import (
// @Tags Admins Benefactors // @Tags Admins Benefactors
// @Accept json // @Accept json
// @Produce 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_id query int false "Filter by ID"
// @Param filter_first_name query string false "Filter by first_name" // @Param filter_first_name query string false "Filter by first_name"
// @Param filter_last_name query string false "Filter by last_name" // @Param filter_last_name query string false "Filter by last_name"

View File

@ -15,6 +15,7 @@ import (
// @Tags Admins KindBoxes // @Tags Admins KindBoxes
// @Accept json // @Accept json
// @Produce 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_id query int false "Filter by ID"
// @Param filter_kind_box_req_id query int false "Filter by KindBox request 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" // @Param filter_benefactor_id query int false "Filter by benefactor ID"

View File

@ -15,6 +15,7 @@ import (
// @Tags Admins KindBoxReqs // @Tags Admins KindBoxReqs
// @Accept json // @Accept json
// @Produce 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_id query int false "Filter by ID"
// @Param filter_benefactor_id query int false "Filter by benefactor 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" // @Param filter_sender_agent_id query int false "Filter by sender agent ID"

View File

@ -10,10 +10,6 @@ func (h Handler) SetRoutes(e *echo.Echo) {
r := e.Group("/admins/refer-times") r := e.Group("/admins/refer-times")
r.Use(middleware.Auth(h.authSvc)) 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))
} }

View File

@ -66,6 +66,12 @@ const docTemplate = `{
], ],
"summary": "Get all benefactors by admin", "summary": "Get all benefactors by admin",
"parameters": [ "parameters": [
{
"type": "string",
"description": "Search by id, phone_number, concat(first_name, last_name) benefactor",
"name": "search",
"in": "query"
},
{ {
"type": "integer", "type": "integer",
"description": "Filter by ID", "description": "Filter by ID",
@ -215,7 +221,7 @@ const docTemplate = `{
"200": { "200": {
"description": "OK", "description": "OK",
"schema": { "schema": {
"$ref": "#/definitions/adminbenefactoreparam.GetBenefactorByIDResponse" "$ref": "#/definitions/adminbenefactorhandler.BenefactorAggregatedResponse"
} }
}, },
"400": { "400": {
@ -414,6 +420,12 @@ const docTemplate = `{
], ],
"summary": "Get all KindBoxes by admin", "summary": "Get all KindBoxes by admin",
"parameters": [ "parameters": [
{
"type": "string",
"description": "Search by id, phone_number, concat(first_name, last_name) benefactor",
"name": "search",
"in": "query"
},
{ {
"type": "integer", "type": "integer",
"description": "Filter by ID", "description": "Filter by ID",
@ -850,6 +862,12 @@ const docTemplate = `{
], ],
"summary": "Admin get all kindboxreq", "summary": "Admin get all kindboxreq",
"parameters": [ "parameters": [
{
"type": "string",
"description": "Search by id, phone_number, concat(first_name, last_name) benefactor",
"name": "search",
"in": "query"
},
{ {
"type": "integer", "type": "integer",
"description": "Filter by ID", "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": { "adminagentparam.Data": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -3290,11 +3340,37 @@ const docTemplate = `{
} }
} }
}, },
"adminbenefactoreparam.GetBenefactorByIDResponse": { "adminbenefactorhandler.BenefactorAggregatedResponse": {
"type": "object", "type": "object",
"properties": { "properties": {
"data": { "data": {
"$ref": "#/definitions/adminbenefactorhandler.Data"
}
}
},
"adminbenefactorhandler.Data": {
"type": "object",
"properties": {
"addresses": {
"type": "array",
"items": {
"$ref": "#/definitions/adminaddressparam.Data"
}
},
"benefactor": {
"$ref": "#/definitions/adminbenefactoreparam.Data" "$ref": "#/definitions/adminbenefactoreparam.Data"
},
"kind_box_reqs": {
"type": "array",
"items": {
"$ref": "#/definitions/adminkindboxreqparam.Data"
}
},
"kind_boxes": {
"type": "array",
"items": {
"$ref": "#/definitions/adminkindboxparam.Data"
}
} }
} }
}, },

View File

@ -55,6 +55,12 @@
], ],
"summary": "Get all benefactors by admin", "summary": "Get all benefactors by admin",
"parameters": [ "parameters": [
{
"type": "string",
"description": "Search by id, phone_number, concat(first_name, last_name) benefactor",
"name": "search",
"in": "query"
},
{ {
"type": "integer", "type": "integer",
"description": "Filter by ID", "description": "Filter by ID",
@ -204,7 +210,7 @@
"200": { "200": {
"description": "OK", "description": "OK",
"schema": { "schema": {
"$ref": "#/definitions/adminbenefactoreparam.GetBenefactorByIDResponse" "$ref": "#/definitions/adminbenefactorhandler.BenefactorAggregatedResponse"
} }
}, },
"400": { "400": {
@ -403,6 +409,12 @@
], ],
"summary": "Get all KindBoxes by admin", "summary": "Get all KindBoxes by admin",
"parameters": [ "parameters": [
{
"type": "string",
"description": "Search by id, phone_number, concat(first_name, last_name) benefactor",
"name": "search",
"in": "query"
},
{ {
"type": "integer", "type": "integer",
"description": "Filter by ID", "description": "Filter by ID",
@ -839,6 +851,12 @@
], ],
"summary": "Admin get all kindboxreq", "summary": "Admin get all kindboxreq",
"parameters": [ "parameters": [
{
"type": "string",
"description": "Search by id, phone_number, concat(first_name, last_name) benefactor",
"name": "search",
"in": "query"
},
{ {
"type": "integer", "type": "integer",
"description": "Filter by ID", "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": { "adminagentparam.Data": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -3279,11 +3329,37 @@
} }
} }
}, },
"adminbenefactoreparam.GetBenefactorByIDResponse": { "adminbenefactorhandler.BenefactorAggregatedResponse": {
"type": "object", "type": "object",
"properties": { "properties": {
"data": { "data": {
"$ref": "#/definitions/adminbenefactorhandler.Data"
}
}
},
"adminbenefactorhandler.Data": {
"type": "object",
"properties": {
"addresses": {
"type": "array",
"items": {
"$ref": "#/definitions/adminaddressparam.Data"
}
},
"benefactor": {
"$ref": "#/definitions/adminbenefactoreparam.Data" "$ref": "#/definitions/adminbenefactoreparam.Data"
},
"kind_box_reqs": {
"type": "array",
"items": {
"$ref": "#/definitions/adminkindboxreqparam.Data"
}
},
"kind_boxes": {
"type": "array",
"items": {
"$ref": "#/definitions/adminkindboxparam.Data"
}
} }
} }
}, },

View File

@ -101,6 +101,27 @@ definitions:
example: "1234567890" example: "1234567890"
type: string type: string
type: object 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: adminagentparam.Data:
properties: properties:
first_name: first_name:
@ -166,10 +187,27 @@ definitions:
status: status:
$ref: '#/definitions/entity.BenefactorStatus' $ref: '#/definitions/entity.BenefactorStatus'
type: object type: object
adminbenefactoreparam.GetBenefactorByIDResponse: adminbenefactorhandler.BenefactorAggregatedResponse:
properties: properties:
data: data:
$ref: '#/definitions/adminbenefactorhandler.Data'
type: object
adminbenefactorhandler.Data:
properties:
addresses:
items:
$ref: '#/definitions/adminaddressparam.Data'
type: array
benefactor:
$ref: '#/definitions/adminbenefactoreparam.Data' $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 type: object
adminkindboxparam.AssignReceiverRequest: adminkindboxparam.AssignReceiverRequest:
properties: properties:
@ -1085,6 +1123,10 @@ paths:
consumes: consumes:
- application/json - application/json
parameters: parameters:
- description: Search by id, phone_number, concat(first_name, last_name) benefactor
in: query
name: search
type: string
- description: Filter by ID - description: Filter by ID
in: query in: query
name: filter_id name: filter_id
@ -1188,7 +1230,7 @@ paths:
"200": "200":
description: OK description: OK
schema: schema:
$ref: '#/definitions/adminbenefactoreparam.GetBenefactorByIDResponse' $ref: '#/definitions/adminbenefactorhandler.BenefactorAggregatedResponse'
"400": "400":
description: Bad request description: Bad request
schema: schema:
@ -1314,6 +1356,10 @@ paths:
description: Retrieves a list of all KindBoxes with filtering, sorting, and description: Retrieves a list of all KindBoxes with filtering, sorting, and
pagination options pagination options
parameters: parameters:
- description: Search by id, phone_number, concat(first_name, last_name) benefactor
in: query
name: search
type: string
- description: Filter by ID - description: Filter by ID
in: query in: query
name: filter_id name: filter_id
@ -1605,6 +1651,10 @@ paths:
description: Retrieves a list of all KindBox requests with filtering, sorting, description: Retrieves a list of all KindBox requests with filtering, sorting,
and pagination options and pagination options
parameters: parameters:
- description: Search by id, phone_number, concat(first_name, last_name) benefactor
in: query
name: search
type: string
- description: Filter by ID - description: Filter by ID
in: query in: query
name: filter_id name: filter_id

View File

@ -25,4 +25,5 @@ const (
AdminBenefactorGetPermission = AdminPermission("benefactor-get") AdminBenefactorGetPermission = AdminPermission("benefactor-get")
AdminBenefactorUpdatePermission = AdminPermission("benefactor-update") AdminBenefactorUpdatePermission = AdminPermission("benefactor-update")
AdminBenefactorUpdateStatusPermission = AdminPermission("benefactor-update-status") AdminBenefactorUpdateStatusPermission = AdminPermission("benefactor-update-status")
AdminReferTimeGetAllPermission = AdminPermission("refertime-getall")
) )

View File

@ -14,6 +14,6 @@ type Data struct {
Description string `json:"description"` Description string `json:"description"`
Email string `json:"email"` Email string `json:"email"`
Gender entity.Gender `json:"gender"` Gender entity.Gender `json:"gender"`
BirthDate time.Time `json:"birth_date"` BirthDate *time.Time `json:"birth_date"`
Status entity.BenefactorStatus `json:"status"` Status entity.BenefactorStatus `json:"status"`
} }

View File

@ -8,6 +8,7 @@ type BenefactorGetAllRequest struct {
Pagination param.PaginationRequest Pagination param.PaginationRequest
Sort param.SortRequest Sort param.SortRequest
Filter param.FilterRequest Filter param.FilterRequest
Search param.SearchRequest
} }
type BenefactorGetAllResponse struct { type BenefactorGetAllResponse struct {
Data []Data `json:"data"` Data []Data `json:"data"`

View File

@ -20,8 +20,8 @@ type Data struct {
SenderAgentID uint `json:"sender_agent_id"` SenderAgentID uint `json:"sender_agent_id"`
DeliveredAt time.Time `json:"delivered_at"` DeliveredAt time.Time `json:"delivered_at"`
ReturnReferTimeID uint `json:"return_refer_time_id"` 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"` ReturnAddressID uint `json:"return_address_id"`
ReceiverAgentID uint `json:"receiver_agent_id"` ReceiverAgentID uint `json:"receiver_agent_id"`
ReturnedAt time.Time `json:"returned_at"` ReturnedAt *time.Time `json:"returned_at"`
} }

View File

@ -8,6 +8,7 @@ type KindBoxGetAllRequest struct {
Pagination param.PaginationRequest Pagination param.PaginationRequest
Sort param.SortRequest Sort param.SortRequest
Filter param.FilterRequest Filter param.FilterRequest
Search param.SearchRequest
} }
type KindBoxGetAllResponse struct { type KindBoxGetAllResponse struct {

View File

@ -18,5 +18,5 @@ type Data struct {
DeliverReferDate time.Time `json:"deliver_refer_date"` DeliverReferDate time.Time `json:"deliver_refer_date"`
DeliverAddressID uint `json:"deliver_address_id"` DeliverAddressID uint `json:"deliver_address_id"`
SenderAgentID uint `json:"sender_agent_id"` SenderAgentID uint `json:"sender_agent_id"`
DeliveredAt time.Time `json:"delivered_at"` DeliveredAt *time.Time `json:"delivered_at"`
} }

View File

@ -8,6 +8,7 @@ type KindBoxReqGetAllRequest struct {
Pagination param.PaginationRequest Pagination param.PaginationRequest
Sort param.SortRequest Sort param.SortRequest
Filter param.FilterRequest Filter param.FilterRequest
Search param.SearchRequest
} }
type KindBoxReqGetAllResponse struct { type KindBoxReqGetAllResponse struct {

View File

@ -20,8 +20,8 @@ type Data struct {
SenderAgentID uint `json:"sender_agent_id"` SenderAgentID uint `json:"sender_agent_id"`
DeliveredAt time.Time `json:"delivered_at"` DeliveredAt time.Time `json:"delivered_at"`
ReturnReferTimeID uint `json:"return_refer_time_id"` 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"` ReturnAddressID uint `json:"return_address_id"`
ReceiverAgentID uint `json:"receiver_agent_id"` ReceiverAgentID uint `json:"receiver_agent_id"`
ReturnedAt time.Time `json:"returned_at"` ReturnedAt *time.Time `json:"returned_at"`
} }

View File

@ -18,5 +18,5 @@ type Data struct {
DeliverReferDate time.Time `json:"deliver_refer_date"` DeliverReferDate time.Time `json:"deliver_refer_date"`
DeliverAddressID uint `json:"deliver_address_id"` DeliverAddressID uint `json:"deliver_address_id"`
SenderAgentID uint `json:"sender_agent_id"` SenderAgentID uint `json:"sender_agent_id"`
DeliveredAt time.Time `json:"delivered_at"` DeliveredAt *time.Time `json:"delivered_at"`
} }

View File

@ -20,8 +20,8 @@ type Data struct {
SenderAgentID uint `json:"sender_agent_id"` SenderAgentID uint `json:"sender_agent_id"`
DeliveredAt time.Time `json:"delivered_at"` DeliveredAt time.Time `json:"delivered_at"`
ReturnReferTimeID uint `json:"return_refer_time_id"` 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"` ReturnAddressID uint `json:"return_address_id"`
ReceiverAgentID uint `json:"receiver_agent_id"` ReceiverAgentID uint `json:"receiver_agent_id"`
ReturnedAt time.Time `json:"returned_at"` ReturnedAt *time.Time `json:"returned_at"`
} }

View File

@ -18,5 +18,5 @@ type Data struct {
DeliverReferDate time.Time `json:"deliver_refer_date"` DeliverReferDate time.Time `json:"deliver_refer_date"`
DeliverAddressID uint `json:"deliver_address_id"` DeliverAddressID uint `json:"deliver_address_id"`
SenderAgentID uint `json:"sender_agent_id"` SenderAgentID uint `json:"sender_agent_id"`
DeliveredAt time.Time `json:"delivered_at"` DeliveredAt *time.Time `json:"delivered_at"`
} }

34
param/search.go Normal file
View File

@ -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
}

View File

@ -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:]
}

View File

@ -12,16 +12,16 @@ func isValidDateOrDateTime(value string) bool {
return datePattern.MatchString(value) 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 conditions []string
var args []any var args []any
for key, value := range filter { for key, value := range filter {
if strVal, ok := value.(string); ok && isValidDateOrDateTime(strVal) { 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) args = append(args, strVal)
} else { } else {
conditions = append(conditions, fmt.Sprintf("%s = ?", key)) conditions = append(conditions, fmt.Sprintf("%s.%s = ?", table, key))
args = append(args, value) args = append(args, value)
} }
} }

View File

@ -6,8 +6,8 @@ import (
"git.gocasts.ir/ebhomengo/niki/param" "git.gocasts.ir/ebhomengo/niki/param"
) )
func BuildGetAllQuery(baseQuery string, filter param.FilterRequest, pagination param.PaginationRequest, sort param.SortRequest) (query string, args []any) { func BuildGetAllQuery(baseQuery, table string, filter param.FilterRequest, pagination param.PaginationRequest, sort param.SortRequest) (query string, args []any) {
filterQuery, fArgs := BuildFilterQuery(baseQuery, filter) filterQuery, fArgs := BuildFilterQuery(baseQuery, table, filter)
paginationQuery, pArgs := BuildPaginationQuery(pagination) paginationQuery, pArgs := BuildPaginationQuery(pagination)
sortQuery := BuildSortQuery(sort) sortQuery := BuildSortQuery(sort)

View File

@ -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
}

View File

@ -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
}

View File

@ -10,11 +10,16 @@ import (
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" 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" const op = "mysqlbenefactor.GetAllBenefactor"
table := "benefactors"
baseQuery := `SELECT * FROM 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...) rows, qErr := d.conn.Conn().QueryContext(ctx, query, args...)
if qErr != nil { if qErr != nil {
return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected) 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 var total uint
baseQuery = `SELECT COUNT(*) FROM benefactors` 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) qErr = d.conn.Conn().QueryRowContext(ctx, query, args...).Scan(&total)
if qErr != nil { if qErr != nil {
return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected) return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)

View File

@ -10,11 +10,17 @@ import (
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" 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" 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...) rows, qErr := d.conn.Conn().QueryContext(ctx, query, args...)
if qErr != nil { if qErr != nil {
return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected) 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 var total uint
baseQuery = `SELECT COUNT(*) FROM kind_boxes WHERE deleted_at IS NULL` 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) qErr = d.conn.Conn().QueryRowContext(ctx, query, args...).Scan(&total)
if qErr != nil { if qErr != nil {
return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected) return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)

View File

@ -10,11 +10,17 @@ import (
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" 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" 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...) rows, qErr := d.conn.Conn().QueryContext(ctx, query, args...)
if qErr != nil { if qErr != nil {
return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected) 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 var total uint
baseQuery = `SELECT COUNT(*) FROM kind_box_reqs WHERE deleted_at IS NULL` 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) qErr = d.conn.Conn().QueryRowContext(ctx, query, args...).Scan(&total)
if qErr != nil { if qErr != nil {
return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected) return nil, 0, richerror.New(op).WithErr(qErr).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)

View File

@ -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`;

View File

@ -4,6 +4,7 @@ import (
"context" "context"
param "git.gocasts.ir/ebhomengo/niki/param/admin/benefactor" 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" 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, Description: bnf.Description,
Email: bnf.Email, Email: bnf.Email,
Gender: bnf.Gender, Gender: bnf.Gender,
BirthDate: bnf.BirthDate, BirthDate: response.GetNullDate(bnf.BirthDate),
Status: bnf.Status, Status: bnf.Status,
}, },
}, nil }, nil

View File

@ -5,6 +5,7 @@ import (
paginationparam "git.gocasts.ir/ebhomengo/niki/param" paginationparam "git.gocasts.ir/ebhomengo/niki/param"
param "git.gocasts.ir/ebhomengo/niki/param/admin/benefactor" 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" 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.GetPageSize()
req.Pagination.GetPageNumber() 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 { if err != nil {
return param.BenefactorGetAllResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected) 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, Description: benefactor.Description,
Email: benefactor.Email, Email: benefactor.Email,
Gender: benefactor.Gender, Gender: benefactor.Gender,
BirthDate: benefactor.BirthDate, BirthDate: response.GetNullDate(benefactor.BirthDate),
Status: benefactor.Status, Status: benefactor.Status,
}) })
} }

View File

@ -12,9 +12,9 @@ import (
type Repository interface { type Repository interface {
IsExistBenefactorByID(ctx context.Context, id uint) (bool, error) IsExistBenefactorByID(ctx context.Context, id uint) (bool, error)
GetByID(ctx context.Context, id uint) (entity.Benefactor, 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 UpdateBenefactor(ctx context.Context, benefactor entity.Benefactor) error
UpdateStatusBenefactor(ctx context.Context, benefactor entity.Benefactor, status entity.BenefactorStatus) 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 { type AddressSvc interface {
GetAddressByID(ctx context.Context, request adminaddressparam.AddressGetRequest) (adminaddressparam.AddressGetResponse, error) GetAddressByID(ctx context.Context, request adminaddressparam.AddressGetRequest) (adminaddressparam.AddressGetResponse, error)

View File

@ -4,6 +4,7 @@ import (
"context" "context"
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box" 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" 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, SenderAgentID: kindBox.SenderAgentID,
DeliveredAt: kindBox.DeliveredAt, DeliveredAt: kindBox.DeliveredAt,
ReturnReferTimeID: kindBox.ReturnReferTimeID, ReturnReferTimeID: kindBox.ReturnReferTimeID,
ReturnReferDate: kindBox.ReturnReferDate, ReturnReferDate: response.GetNullDate(kindBox.ReturnReferDate),
ReturnAddressID: kindBox.ReturnAddressID, ReturnAddressID: kindBox.ReturnAddressID,
ReceiverAgentID: kindBox.ReceiverAgentID, ReceiverAgentID: kindBox.ReceiverAgentID,
ReturnedAt: kindBox.ReturnedAt, ReturnedAt: response.GetNullDate(kindBox.ReturnedAt),
}}, nil }}, nil
} }

View File

@ -5,6 +5,7 @@ import (
paginationparam "git.gocasts.ir/ebhomengo/niki/param" paginationparam "git.gocasts.ir/ebhomengo/niki/param"
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box" 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" 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.GetPageSize()
req.Pagination.GetPageNumber() 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 { if err != nil {
return param.KindBoxGetAllResponse{}, richerror.New(op).WithErr(err) 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, SenderAgentID: kindBox.SenderAgentID,
DeliveredAt: kindBox.DeliveredAt, DeliveredAt: kindBox.DeliveredAt,
ReturnReferTimeID: kindBox.ReturnReferTimeID, ReturnReferTimeID: kindBox.ReturnReferTimeID,
ReturnReferDate: kindBox.ReturnReferDate, ReturnReferDate: response.GetNullDate(kindBox.ReturnReferDate),
ReturnAddressID: kindBox.ReturnAddressID, ReturnAddressID: kindBox.ReturnAddressID,
ReceiverAgentID: kindBox.ReceiverAgentID, ReceiverAgentID: kindBox.ReceiverAgentID,
ReturnedAt: kindBox.ReturnedAt, ReturnedAt: response.GetNullDate(kindBox.ReturnedAt),
}) })
} }

View File

@ -11,7 +11,7 @@ import (
type Repository interface { type Repository interface {
GetKindBox(ctx context.Context, kindBoxID uint) (entity.KindBox, error) GetKindBox(ctx context.Context, kindBoxID uint) (entity.KindBox, error)
AssignReceiverAgent(ctx context.Context, kindBox 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 EnumerateKindBox(ctx context.Context, kindBoxID uint, amount uint) error
UpdateKindBox(ctx context.Context, KindBox entity.KindBox) error UpdateKindBox(ctx context.Context, KindBox entity.KindBox) error
} }

View File

@ -4,6 +4,7 @@ import (
"context" "context"
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req" 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" 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, DeliverReferDate: kindBoxReq.DeliverReferDate,
DeliverAddressID: kindBoxReq.DeliverAddressID, DeliverAddressID: kindBoxReq.DeliverAddressID,
SenderAgentID: kindBoxReq.SenderAgentID, SenderAgentID: kindBoxReq.SenderAgentID,
DeliveredAt: kindBoxReq.DeliveredAt, DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt),
}}, nil }}, nil
} }

View File

@ -5,6 +5,7 @@ import (
"git.gocasts.ir/ebhomengo/niki/entity" "git.gocasts.ir/ebhomengo/niki/entity"
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req" 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" 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, DeliverReferDate: kindBoxReq.DeliverReferDate,
DeliverAddressID: kindBoxReq.DeliverAddressID, DeliverAddressID: kindBoxReq.DeliverAddressID,
SenderAgentID: kindBoxReq.SenderAgentID, SenderAgentID: kindBoxReq.SenderAgentID,
DeliveredAt: kindBoxReq.DeliveredAt, DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt),
}}, nil }}, nil
} }

View File

@ -4,6 +4,7 @@ import (
"context" "context"
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req" 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" 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, DeliverReferDate: kindBoxReq.DeliverReferDate,
DeliverAddressID: kindBoxReq.DeliverAddressID, DeliverAddressID: kindBoxReq.DeliverAddressID,
SenderAgentID: kindBoxReq.SenderAgentID, SenderAgentID: kindBoxReq.SenderAgentID,
DeliveredAt: kindBoxReq.DeliveredAt, DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt),
}, },
}, nil }, nil
} }

View File

@ -5,6 +5,7 @@ import (
paginationparam "git.gocasts.ir/ebhomengo/niki/param" paginationparam "git.gocasts.ir/ebhomengo/niki/param"
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req" 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" 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.GetPageSize()
req.Pagination.GetPageNumber() 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 { if err != nil {
return param.KindBoxReqGetAllResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected) 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, DeliverReferDate: kindBoxReq.DeliverReferDate,
DeliverAddressID: kindBoxReq.DeliverAddressID, DeliverAddressID: kindBoxReq.DeliverAddressID,
SenderAgentID: kindBoxReq.SenderAgentID, SenderAgentID: kindBoxReq.SenderAgentID,
DeliveredAt: kindBoxReq.DeliveredAt, DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt),
}) })
} }

View File

@ -4,6 +4,7 @@ import (
"context" "context"
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req" 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" 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, DeliverReferDate: kindBoxReq.DeliverReferDate,
DeliverAddressID: kindBoxReq.DeliverAddressID, DeliverAddressID: kindBoxReq.DeliverAddressID,
SenderAgentID: kindBoxReq.SenderAgentID, SenderAgentID: kindBoxReq.SenderAgentID,
DeliveredAt: kindBoxReq.DeliveredAt, DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt),
}, },
}, nil }, nil
} }

View File

@ -14,7 +14,7 @@ type Repository interface {
RejectKindBoxReq(ctx context.Context, kindBoxReqID uint, description string) error RejectKindBoxReq(ctx context.Context, kindBoxReqID uint, description string) error
AssignSenderAgentToKindBoxReq(ctx context.Context, kindBoxReqID uint, senderAgentID uint) error AssignSenderAgentToKindBoxReq(ctx context.Context, kindBoxReqID uint, senderAgentID uint) error
DeliverKindBoxReq(ctx context.Context, kindBoxReqID 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) GetAwaitingDeliveryByAgent(ctx context.Context, kindBoxReqID uint, agentID uint) (entity.KindBoxReq, error)
AddKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) (entity.KindBoxReq, error) AddKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) (entity.KindBoxReq, error)
UpdateKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) error UpdateKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) error

View File

@ -5,6 +5,7 @@ import (
paginationparam "git.gocasts.ir/ebhomengo/niki/param" paginationparam "git.gocasts.ir/ebhomengo/niki/param"
param "git.gocasts.ir/ebhomengo/niki/param/agent/kind_box" 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" 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["receiver_agent_id"] = req.ReceiverAgentId
req.Filter["status"] = req.Status 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 { if err != nil {
return param.GetAllResponse{}, richerror.New(op).WithErr(err) 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, SenderAgentID: kindBox.SenderAgentID,
DeliveredAt: kindBox.DeliveredAt, DeliveredAt: kindBox.DeliveredAt,
ReturnReferTimeID: kindBox.ReturnReferTimeID, ReturnReferTimeID: kindBox.ReturnReferTimeID,
ReturnReferDate: kindBox.ReturnReferDate, ReturnReferDate: response.GetNullDate(kindBox.ReturnReferDate),
ReturnAddressID: kindBox.ReturnAddressID, ReturnAddressID: kindBox.ReturnAddressID,
ReceiverAgentID: kindBox.ReceiverAgentID, ReceiverAgentID: kindBox.ReceiverAgentID,
ReturnedAt: kindBox.ReturnedAt, ReturnedAt: response.GetNullDate(kindBox.ReturnedAt),
}) })
} }

View File

@ -4,6 +4,7 @@ import (
"context" "context"
param "git.gocasts.ir/ebhomengo/niki/param/agent/kind_box" 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" 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, SenderAgentID: kindBox.SenderAgentID,
DeliveredAt: kindBox.DeliveredAt, DeliveredAt: kindBox.DeliveredAt,
ReturnReferTimeID: kindBox.ReturnReferTimeID, ReturnReferTimeID: kindBox.ReturnReferTimeID,
ReturnReferDate: kindBox.ReturnReferDate, ReturnReferDate: response.GetNullDate(kindBox.ReturnReferDate),
ReturnAddressID: kindBox.ReturnAddressID, ReturnAddressID: kindBox.ReturnAddressID,
ReceiverAgentID: kindBox.ReceiverAgentID, ReceiverAgentID: kindBox.ReceiverAgentID,
ReturnedAt: kindBox.ReturnedAt, ReturnedAt: response.GetNullDate(kindBox.ReturnedAt),
}, },
}, nil }, nil
} }

View File

@ -10,7 +10,7 @@ import (
type Repository interface { type Repository interface {
GetAwaitingReturnByAgent(ctx context.Context, kindBoxID uint, agentID uint) (entity.KindBox, error) 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 ReturnKindBox(ctx context.Context, kindBoxID uint, serialNumber string) error
AddBatchKindBox(ctx context.Context, kindBoxes []entity.KindBox) error AddBatchKindBox(ctx context.Context, kindBoxes []entity.KindBox) error
} }

View File

@ -5,6 +5,7 @@ import (
paginationparam "git.gocasts.ir/ebhomengo/niki/param" paginationparam "git.gocasts.ir/ebhomengo/niki/param"
param "git.gocasts.ir/ebhomengo/niki/param/agent/kind_box_req" 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" 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["sender_agent_id"] = req.SenderAgentId
req.Filter["status"] = req.Status 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 { if err != nil {
return param.DeliveryAwaitingGetAllResponse{}, richerror.New(op).WithErr(err) 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, DeliverReferDate: kindBoxReq.DeliverReferDate,
DeliverAddressID: kindBoxReq.DeliverAddressID, DeliverAddressID: kindBoxReq.DeliverAddressID,
SenderAgentID: kindBoxReq.SenderAgentID, SenderAgentID: kindBoxReq.SenderAgentID,
DeliveredAt: kindBoxReq.DeliveredAt, DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt),
}) })
} }

View File

@ -4,6 +4,7 @@ import (
"context" "context"
param "git.gocasts.ir/ebhomengo/niki/param/agent/kind_box_req" 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" 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, DeliverReferDate: kindBoxReq.DeliverReferDate,
DeliverAddressID: kindBoxReq.DeliverAddressID, DeliverAddressID: kindBoxReq.DeliverAddressID,
SenderAgentID: kindBoxReq.SenderAgentID, SenderAgentID: kindBoxReq.SenderAgentID,
DeliveredAt: kindBoxReq.DeliveredAt, DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt),
}, },
}, nil }, nil
} }

View File

@ -10,7 +10,7 @@ import (
) )
type Repository interface { 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 DeliverKindBoxReq(ctx context.Context, kindBoxReqID uint) error
GetAwaitingDeliveryByAgent(ctx context.Context, kindBoxReqID uint, agentID uint) (entity.KindBoxReq, error) GetAwaitingDeliveryByAgent(ctx context.Context, kindBoxReqID uint, agentID uint) (entity.KindBoxReq, error)
GetByID(ctx context.Context, id uint) (entity.KindBoxReq, error) GetByID(ctx context.Context, id uint) (entity.KindBoxReq, error)

View File

@ -4,6 +4,7 @@ import (
"context" "context"
param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box" 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" 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, SenderAgentID: kindBox.SenderAgentID,
DeliveredAt: kindBox.DeliveredAt, DeliveredAt: kindBox.DeliveredAt,
ReturnReferTimeID: kindBox.ReturnReferTimeID, ReturnReferTimeID: kindBox.ReturnReferTimeID,
ReturnReferDate: kindBox.ReturnReferDate, ReturnReferDate: response.GetNullDate(kindBox.ReturnReferDate),
ReturnAddressID: kindBox.ReturnAddressID, ReturnAddressID: kindBox.ReturnAddressID,
ReceiverAgentID: kindBox.ReceiverAgentID, ReceiverAgentID: kindBox.ReceiverAgentID,
ReturnedAt: kindBox.ReturnedAt, ReturnedAt: response.GetNullDate(kindBox.ReturnedAt),
}}, nil }}, nil
} }

View File

@ -5,6 +5,7 @@ import (
params "git.gocasts.ir/ebhomengo/niki/param" params "git.gocasts.ir/ebhomengo/niki/param"
param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box" 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" 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.GetPageSize()
req.Pagination.GetPageNumber() 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 { if err != nil {
return param.KindBoxGetAllResponse{}, richerror.New(op).WithErr(err) 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, SenderAgentID: kindBox.SenderAgentID,
DeliveredAt: kindBox.DeliveredAt, DeliveredAt: kindBox.DeliveredAt,
ReturnReferTimeID: kindBox.ReturnReferTimeID, ReturnReferTimeID: kindBox.ReturnReferTimeID,
ReturnReferDate: kindBox.ReturnReferDate, ReturnReferDate: response.GetNullDate(kindBox.ReturnReferDate),
ReturnAddressID: kindBox.ReturnAddressID, ReturnAddressID: kindBox.ReturnAddressID,
ReceiverAgentID: kindBox.ReceiverAgentID, ReceiverAgentID: kindBox.ReceiverAgentID,
ReturnedAt: kindBox.ReturnedAt, ReturnedAt: response.GetNullDate(kindBox.ReturnedAt),
}) })
} }

View File

@ -9,7 +9,7 @@ import (
) )
type Repository interface { 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) GetKindBox(ctx context.Context, kindBoxID uint) (entity.KindBox, error)
RegisterEmptyingRequestForKindBox(ctx context.Context, kindBox entity.KindBox) error RegisterEmptyingRequestForKindBox(ctx context.Context, kindBox entity.KindBox) error
} }

View File

@ -5,6 +5,7 @@ import (
"git.gocasts.ir/ebhomengo/niki/entity" "git.gocasts.ir/ebhomengo/niki/entity"
param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req" 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" 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, DeliverReferDate: kindBoxReq.DeliverReferDate,
DeliverAddressID: kindBoxReq.DeliverAddressID, DeliverAddressID: kindBoxReq.DeliverAddressID,
SenderAgentID: kindBoxReq.SenderAgentID, SenderAgentID: kindBoxReq.SenderAgentID,
DeliveredAt: kindBoxReq.DeliveredAt, DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt),
}}, nil }}, nil
} }

View File

@ -4,6 +4,7 @@ import (
"context" "context"
param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req" 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" 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, DeliverReferDate: kindBoxReq.DeliverReferDate,
DeliverAddressID: kindBoxReq.DeliverAddressID, DeliverAddressID: kindBoxReq.DeliverAddressID,
SenderAgentID: kindBoxReq.SenderAgentID, SenderAgentID: kindBoxReq.SenderAgentID,
DeliveredAt: kindBoxReq.DeliveredAt, DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt),
}}, nil }}, nil
} }

View File

@ -5,6 +5,7 @@ import (
params "git.gocasts.ir/ebhomengo/niki/param" params "git.gocasts.ir/ebhomengo/niki/param"
param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req" 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" 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.GetPageSize()
req.Pagination.GetPageNumber() 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 { if err != nil {
return param.GetAllResponse{}, richerror.New(op).WithErr(err) 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, DeliverReferDate: kindBoxReq.DeliverReferDate,
DeliverAddressID: kindBoxReq.DeliverAddressID, DeliverAddressID: kindBoxReq.DeliverAddressID,
SenderAgentID: kindBoxReq.SenderAgentID, SenderAgentID: kindBoxReq.SenderAgentID,
DeliveredAt: kindBoxReq.DeliveredAt, DeliveredAt: response.GetNullDate(kindBoxReq.DeliveredAt),
}) })
} }

View File

@ -12,7 +12,7 @@ type Repository interface {
AddKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) (entity.KindBoxReq, error) AddKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) (entity.KindBoxReq, error)
GetKindBoxReqByID(ctx context.Context, kindBoxReqID uint) (entity.KindBoxReq, error) GetKindBoxReqByID(ctx context.Context, kindBoxReqID uint) (entity.KindBoxReq, error)
DeleteKindBoxReqByID(ctx context.Context, kindBoxReqID uint) 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 UpdateKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) error
} }

View File

@ -17,6 +17,7 @@ func (v Validator) ValidateGetAll(req param.BenefactorGetAllRequest) (map[string
if err := validation.ValidateStruct(&req, if err := validation.ValidateStruct(&req,
validation.Field(&req.Filter, validation.By(v.AreFilterFieldsValid(validFields))), validation.Field(&req.Filter, validation.By(v.AreFilterFieldsValid(validFields))),
validation.Field(&req.Sort, validation.By(v.AreSortFieldsValid(validFields))), validation.Field(&req.Sort, validation.By(v.AreSortFieldsValid(validFields))),
validation.Field(&req.Search, validation.By(v.AreSearchValid())),
); err != nil { ); err != nil {
fieldErrors := make(map[string]string) fieldErrors := make(map[string]string)

View File

@ -18,6 +18,7 @@ const (
maxLengthFirstName = 40 maxLengthFirstName = 40
minLengthLastName = 3 minLengthLastName = 3
maxLengthLastName = 40 maxLengthLastName = 40
MaxLengthQuerySearch = 32
) )
type Repository interface { 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 { func (v Validator) isDateValid(value interface{}) error {
date, ok := value.(params.Date) date, ok := value.(params.Date)
if !ok { if !ok {

View File

@ -21,6 +21,7 @@ func (v Validator) ValidateGetAll(req param.KindBoxGetAllRequest) (map[string]st
if err := validation.ValidateStruct(&req, if err := validation.ValidateStruct(&req,
validation.Field(&req.Filter, validation.By(v.AreFilterFieldsValid(validFields))), validation.Field(&req.Filter, validation.By(v.AreFilterFieldsValid(validFields))),
validation.Field(&req.Sort, validation.By(v.AreSortFieldsValid(validFields))), validation.Field(&req.Sort, validation.By(v.AreSortFieldsValid(validFields))),
validation.Field(&req.Search, validation.By(v.AreSearchValid())),
); err != nil { ); err != nil {
fieldErrors := make(map[string]string) fieldErrors := make(map[string]string)

View File

@ -18,6 +18,10 @@ import (
validation "github.com/go-ozzo/ozzo-validation/v4" validation "github.com/go-ozzo/ozzo-validation/v4"
) )
const (
MaxLengthQuerySearch = 32
)
//go:generate mockery --name Repository //go:generate mockery --name Repository
type Repository interface { type Repository interface {
KindBoxExist(ctx context.Context, kindBoxID uint) (bool, error) KindBoxExist(ctx context.Context, kindBoxID uint) (bool, error)
@ -279,3 +283,17 @@ func (v Validator) AreFilterFieldsValid(validFilters []string) validation.RuleFu
return nil 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
}
}

View File

@ -20,6 +20,7 @@ func (v Validator) ValidateGetAll(req param.KindBoxReqGetAllRequest) (map[string
if err := validation.ValidateStruct(&req, if err := validation.ValidateStruct(&req,
validation.Field(&req.Filter, validation.By(v.AreFilterFieldsValid(validFields))), validation.Field(&req.Filter, validation.By(v.AreFilterFieldsValid(validFields))),
validation.Field(&req.Sort, validation.By(v.AreSortFieldsValid(validFields))), validation.Field(&req.Sort, validation.By(v.AreSortFieldsValid(validFields))),
validation.Field(&req.Search, validation.By(v.AreSearchValid())),
); err != nil { ); err != nil {
fieldErrors := make(map[string]string) fieldErrors := make(map[string]string)

View File

@ -20,6 +20,7 @@ import (
const ( const (
MinKindBoxReq = 1 MinKindBoxReq = 1
MaxKindBoxReq = 100 MaxKindBoxReq = 100
MaxLengthQuerySearch = 32
) )
type Repository interface { type Repository interface {
@ -340,3 +341,17 @@ func (v Validator) AreFilterFieldsValid(validFilters []string) validation.RuleFu
return nil 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
}
}