forked from ebhomengo/niki
				
			Merge pull request 'feat(niki): get all kindboxes by admin' (#75) from stage/erfan/admin-getall-kindboxes into develop
Reviewed-on: ebhomengo/niki#75
This commit is contained in:
		
						commit
						9de27badb9
					
				| 
						 | 
				
			
			@ -0,0 +1,67 @@
 | 
			
		|||
package adminkindboxhandler
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
 | 
			
		||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box"
 | 
			
		||||
	httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
 | 
			
		||||
	queryparam "git.gocasts.ir/ebhomengo/niki/pkg/query_param"
 | 
			
		||||
	"github.com/labstack/echo/v4"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// GetAll godoc
 | 
			
		||||
// @Summary 	 Get all KindBoxes by admin
 | 
			
		||||
// @Description  Retrieves a list of all KindBoxes with filtering, sorting, and pagination options
 | 
			
		||||
// @Tags         KindBox
 | 
			
		||||
// @Accept       json
 | 
			
		||||
// @Produce      json
 | 
			
		||||
// @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"
 | 
			
		||||
// @Param 		 filter_kind_box_type query string false "Filter by KindBox type" Enums(on-table,cylindrical,stand-up)
 | 
			
		||||
// @Param        filter_amount query int false "Filter by amount"
 | 
			
		||||
// @Param        filter_serial_number query string false "Filter by serial number"
 | 
			
		||||
// @Param        filter_status query string false "Filter by status" Enums(delivered,ready-to-return,assigned-receiver-agent,returned,enumerated)
 | 
			
		||||
// @Param        filter_delivered_at query string false "Filter by delivered at" Format(date-time)
 | 
			
		||||
// @Param        filter_return_refer_time_id query int false "Filter by return refer time ID"
 | 
			
		||||
// @Param        filter_return_refer_date query string false "Filter by return refer date" Format(date)
 | 
			
		||||
// @Param        filter_return_address_id query int false "Filter by return address ID"
 | 
			
		||||
// @Param        filter_receiver_agent_id query int false "Filter by receiver agent ID"
 | 
			
		||||
// @Param        filter_returned_at query string false "Filter by returned at" Format(date-time)
 | 
			
		||||
// @Param        filter_sender_agent_id query int false "Filter by sender agent ID"
 | 
			
		||||
// @Param        filter_deliver_refer_date query string false "Filter by deliver refer date" Format(date)
 | 
			
		||||
// @Param        filter_deliver_address_id query int false "Filter by deliver address ID"
 | 
			
		||||
// @Param        page_number query int false "Page number"
 | 
			
		||||
// @Param        page_size query int false "Page size"
 | 
			
		||||
// @Param        sort_field query string false "Sort by field" Enums(id,kind_box_req_id,benefactor_id,kind_box_type,amount,serial_number,status,delivered_at,return_refer_time_id,return_refer_date,return_address_id,receiver_agent_id,returned_at,sender_agent_id,deliver_refer_date,deliver_address_id)
 | 
			
		||||
// @Param        sort_direction query string false "Sort order" Enums(asc,desc)
 | 
			
		||||
// @Success      200  {object}  param.KindBoxGetAllResponse
 | 
			
		||||
// @Failure      400  {string}  "Bad request"
 | 
			
		||||
// @Security 	 AuthBearerAdmin
 | 
			
		||||
// @Router       /admin/kindboxes [get].
 | 
			
		||||
func (h Handler) GetAll(c echo.Context) error {
 | 
			
		||||
	var req param.KindBoxGetAllRequest
 | 
			
		||||
 | 
			
		||||
	if bErr := c.Bind(&req); bErr != nil {
 | 
			
		||||
		return echo.NewHTTPError(http.StatusBadRequest)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	req.Filter = queryparam.GetFilterParams(c)
 | 
			
		||||
	if fieldErrors, err := h.adminKindBoxVld.ValidateGetAll(req); err != nil {
 | 
			
		||||
		msg, code := httpmsg.Error(err)
 | 
			
		||||
 | 
			
		||||
		return c.JSON(code, echo.Map{
 | 
			
		||||
			"message": msg,
 | 
			
		||||
			"errors":  fieldErrors,
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	resp, sErr := h.adminKindBoxSvc.GetAll(c.Request().Context(), req)
 | 
			
		||||
	if sErr != nil {
 | 
			
		||||
		msg, code := httpmsg.Error(sErr)
 | 
			
		||||
 | 
			
		||||
		return echo.NewHTTPError(code, msg)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return c.JSON(http.StatusOK, resp)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -13,4 +13,5 @@ func (h Handler) SetRoutes(e *echo.Echo) {
 | 
			
		|||
 | 
			
		||||
	r.GET("/:id", h.Get, middleware.AdminAuthorization(h.adminAuthorizeSvc, entity.AdminKindBoxGetPermission))
 | 
			
		||||
	r.PATCH("/assign-receiver-agent/:id", h.AssignReceiverAgent, middleware.AdminAuthorization(h.adminAuthorizeSvc, entity.AdminKindBoxAssignReceiverAgentPermission))
 | 
			
		||||
	r.GET("", h.GetAll, middleware.AdminAuthorization(h.adminAuthorizeSvc, entity.AdminKindBoxGetAllPermission))
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										261
									
								
								docs/docs.go
								
								
								
								
							
							
						
						
									
										261
									
								
								docs/docs.go
								
								
								
								
							| 
						 | 
				
			
			@ -267,6 +267,200 @@ const docTemplate = `{
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "/admin/kindboxes": {
 | 
			
		||||
            "get": {
 | 
			
		||||
                "security": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "AuthBearerAdmin": []
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "description": "Retrieves a list of all KindBoxes with filtering, sorting, and pagination options",
 | 
			
		||||
                "consumes": [
 | 
			
		||||
                    "application/json"
 | 
			
		||||
                ],
 | 
			
		||||
                "produces": [
 | 
			
		||||
                    "application/json"
 | 
			
		||||
                ],
 | 
			
		||||
                "tags": [
 | 
			
		||||
                    "KindBox"
 | 
			
		||||
                ],
 | 
			
		||||
                "summary": "Get all KindBoxes by admin",
 | 
			
		||||
                "parameters": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by ID",
 | 
			
		||||
                        "name": "filter_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by KindBox request ID",
 | 
			
		||||
                        "name": "filter_kind_box_req_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by benefactor ID",
 | 
			
		||||
                        "name": "filter_benefactor_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "enum": [
 | 
			
		||||
                            "on-table",
 | 
			
		||||
                            "cylindrical",
 | 
			
		||||
                            "stand-up"
 | 
			
		||||
                        ],
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "description": "Filter by KindBox type",
 | 
			
		||||
                        "name": "filter_kind_box_type",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by amount",
 | 
			
		||||
                        "name": "filter_amount",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "description": "Filter by serial number",
 | 
			
		||||
                        "name": "filter_serial_number",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "enum": [
 | 
			
		||||
                            "delivered",
 | 
			
		||||
                            "ready-to-return",
 | 
			
		||||
                            "assigned-receiver-agent",
 | 
			
		||||
                            "returned",
 | 
			
		||||
                            "enumerated"
 | 
			
		||||
                        ],
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "description": "Filter by status",
 | 
			
		||||
                        "name": "filter_status",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "format": "date-time",
 | 
			
		||||
                        "description": "Filter by delivered at",
 | 
			
		||||
                        "name": "filter_delivered_at",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by return refer time ID",
 | 
			
		||||
                        "name": "filter_return_refer_time_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "format": "date",
 | 
			
		||||
                        "description": "Filter by return refer date",
 | 
			
		||||
                        "name": "filter_return_refer_date",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by return address ID",
 | 
			
		||||
                        "name": "filter_return_address_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by receiver agent ID",
 | 
			
		||||
                        "name": "filter_receiver_agent_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "format": "date-time",
 | 
			
		||||
                        "description": "Filter by returned at",
 | 
			
		||||
                        "name": "filter_returned_at",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by sender agent ID",
 | 
			
		||||
                        "name": "filter_sender_agent_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "format": "date",
 | 
			
		||||
                        "description": "Filter by deliver refer date",
 | 
			
		||||
                        "name": "filter_deliver_refer_date",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by deliver address ID",
 | 
			
		||||
                        "name": "filter_deliver_address_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Page number",
 | 
			
		||||
                        "name": "page_number",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Page size",
 | 
			
		||||
                        "name": "page_size",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "enum": [
 | 
			
		||||
                            "id",
 | 
			
		||||
                            "kind_box_req_id",
 | 
			
		||||
                            "benefactor_id",
 | 
			
		||||
                            "kind_box_type",
 | 
			
		||||
                            "amount",
 | 
			
		||||
                            "serial_number",
 | 
			
		||||
                            "status",
 | 
			
		||||
                            "delivered_at",
 | 
			
		||||
                            "return_refer_time_id",
 | 
			
		||||
                            "return_refer_date",
 | 
			
		||||
                            "return_address_id",
 | 
			
		||||
                            "receiver_agent_id",
 | 
			
		||||
                            "returned_at",
 | 
			
		||||
                            "sender_agent_id",
 | 
			
		||||
                            "deliver_refer_date",
 | 
			
		||||
                            "deliver_address_id"
 | 
			
		||||
                        ],
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "description": "Sort by field",
 | 
			
		||||
                        "name": "sort_field",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "enum": [
 | 
			
		||||
                            "asc",
 | 
			
		||||
                            "desc"
 | 
			
		||||
                        ],
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "description": "Sort order",
 | 
			
		||||
                        "name": "sort_direction",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "responses": {
 | 
			
		||||
                    "200": {
 | 
			
		||||
                        "description": "OK",
 | 
			
		||||
                        "schema": {
 | 
			
		||||
                            "$ref": "#/definitions/adminkindboxparam.KindBoxGetAllResponse"
 | 
			
		||||
                        }
 | 
			
		||||
                    },
 | 
			
		||||
                    "400": {
 | 
			
		||||
                        "description": "Bad request",
 | 
			
		||||
                        "schema": {
 | 
			
		||||
                            "type": "string"
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "/admin/kindboxes/assign-receiver-agent/{id}": {
 | 
			
		||||
            "patch": {
 | 
			
		||||
                "security": [
 | 
			
		||||
| 
						 | 
				
			
			@ -1520,6 +1714,20 @@ const docTemplate = `{
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "adminkindboxparam.KindBoxGetAllResponse": {
 | 
			
		||||
            "type": "object",
 | 
			
		||||
            "properties": {
 | 
			
		||||
                "all_kind_box": {
 | 
			
		||||
                    "type": "array",
 | 
			
		||||
                    "items": {
 | 
			
		||||
                        "$ref": "#/definitions/entity.KindBox"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "pagination": {
 | 
			
		||||
                    "$ref": "#/definitions/param.PaginationResponse"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "adminkindboxparam.KindBoxGetResponse": {
 | 
			
		||||
            "type": "object",
 | 
			
		||||
            "properties": {
 | 
			
		||||
| 
						 | 
				
			
			@ -2289,6 +2497,59 @@ const docTemplate = `{
 | 
			
		|||
                "FemaleGender"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "entity.KindBox": {
 | 
			
		||||
            "type": "object",
 | 
			
		||||
            "properties": {
 | 
			
		||||
                "amount": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "benefactorID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "deliverAddressID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "deliverReferDate": {
 | 
			
		||||
                    "type": "string"
 | 
			
		||||
                },
 | 
			
		||||
                "deliveredAt": {
 | 
			
		||||
                    "type": "string"
 | 
			
		||||
                },
 | 
			
		||||
                "id": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "kindBoxReqID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "kindBoxType": {
 | 
			
		||||
                    "$ref": "#/definitions/entity.KindBoxType"
 | 
			
		||||
                },
 | 
			
		||||
                "receiverAgentID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "returnAddressID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "returnReferDate": {
 | 
			
		||||
                    "type": "string"
 | 
			
		||||
                },
 | 
			
		||||
                "returnReferTimeID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "returnedAt": {
 | 
			
		||||
                    "type": "string"
 | 
			
		||||
                },
 | 
			
		||||
                "senderAgentID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "serialNumber": {
 | 
			
		||||
                    "type": "string"
 | 
			
		||||
                },
 | 
			
		||||
                "status": {
 | 
			
		||||
                    "$ref": "#/definitions/entity.KindBoxStatus"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "entity.KindBoxReq": {
 | 
			
		||||
            "type": "object",
 | 
			
		||||
            "properties": {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -256,6 +256,200 @@
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "/admin/kindboxes": {
 | 
			
		||||
            "get": {
 | 
			
		||||
                "security": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "AuthBearerAdmin": []
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "description": "Retrieves a list of all KindBoxes with filtering, sorting, and pagination options",
 | 
			
		||||
                "consumes": [
 | 
			
		||||
                    "application/json"
 | 
			
		||||
                ],
 | 
			
		||||
                "produces": [
 | 
			
		||||
                    "application/json"
 | 
			
		||||
                ],
 | 
			
		||||
                "tags": [
 | 
			
		||||
                    "KindBox"
 | 
			
		||||
                ],
 | 
			
		||||
                "summary": "Get all KindBoxes by admin",
 | 
			
		||||
                "parameters": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by ID",
 | 
			
		||||
                        "name": "filter_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by KindBox request ID",
 | 
			
		||||
                        "name": "filter_kind_box_req_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by benefactor ID",
 | 
			
		||||
                        "name": "filter_benefactor_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "enum": [
 | 
			
		||||
                            "on-table",
 | 
			
		||||
                            "cylindrical",
 | 
			
		||||
                            "stand-up"
 | 
			
		||||
                        ],
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "description": "Filter by KindBox type",
 | 
			
		||||
                        "name": "filter_kind_box_type",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by amount",
 | 
			
		||||
                        "name": "filter_amount",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "description": "Filter by serial number",
 | 
			
		||||
                        "name": "filter_serial_number",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "enum": [
 | 
			
		||||
                            "delivered",
 | 
			
		||||
                            "ready-to-return",
 | 
			
		||||
                            "assigned-receiver-agent",
 | 
			
		||||
                            "returned",
 | 
			
		||||
                            "enumerated"
 | 
			
		||||
                        ],
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "description": "Filter by status",
 | 
			
		||||
                        "name": "filter_status",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "format": "date-time",
 | 
			
		||||
                        "description": "Filter by delivered at",
 | 
			
		||||
                        "name": "filter_delivered_at",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by return refer time ID",
 | 
			
		||||
                        "name": "filter_return_refer_time_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "format": "date",
 | 
			
		||||
                        "description": "Filter by return refer date",
 | 
			
		||||
                        "name": "filter_return_refer_date",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by return address ID",
 | 
			
		||||
                        "name": "filter_return_address_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by receiver agent ID",
 | 
			
		||||
                        "name": "filter_receiver_agent_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "format": "date-time",
 | 
			
		||||
                        "description": "Filter by returned at",
 | 
			
		||||
                        "name": "filter_returned_at",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by sender agent ID",
 | 
			
		||||
                        "name": "filter_sender_agent_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "format": "date",
 | 
			
		||||
                        "description": "Filter by deliver refer date",
 | 
			
		||||
                        "name": "filter_deliver_refer_date",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Filter by deliver address ID",
 | 
			
		||||
                        "name": "filter_deliver_address_id",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Page number",
 | 
			
		||||
                        "name": "page_number",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "type": "integer",
 | 
			
		||||
                        "description": "Page size",
 | 
			
		||||
                        "name": "page_size",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "enum": [
 | 
			
		||||
                            "id",
 | 
			
		||||
                            "kind_box_req_id",
 | 
			
		||||
                            "benefactor_id",
 | 
			
		||||
                            "kind_box_type",
 | 
			
		||||
                            "amount",
 | 
			
		||||
                            "serial_number",
 | 
			
		||||
                            "status",
 | 
			
		||||
                            "delivered_at",
 | 
			
		||||
                            "return_refer_time_id",
 | 
			
		||||
                            "return_refer_date",
 | 
			
		||||
                            "return_address_id",
 | 
			
		||||
                            "receiver_agent_id",
 | 
			
		||||
                            "returned_at",
 | 
			
		||||
                            "sender_agent_id",
 | 
			
		||||
                            "deliver_refer_date",
 | 
			
		||||
                            "deliver_address_id"
 | 
			
		||||
                        ],
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "description": "Sort by field",
 | 
			
		||||
                        "name": "sort_field",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "enum": [
 | 
			
		||||
                            "asc",
 | 
			
		||||
                            "desc"
 | 
			
		||||
                        ],
 | 
			
		||||
                        "type": "string",
 | 
			
		||||
                        "description": "Sort order",
 | 
			
		||||
                        "name": "sort_direction",
 | 
			
		||||
                        "in": "query"
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "responses": {
 | 
			
		||||
                    "200": {
 | 
			
		||||
                        "description": "OK",
 | 
			
		||||
                        "schema": {
 | 
			
		||||
                            "$ref": "#/definitions/adminkindboxparam.KindBoxGetAllResponse"
 | 
			
		||||
                        }
 | 
			
		||||
                    },
 | 
			
		||||
                    "400": {
 | 
			
		||||
                        "description": "Bad request",
 | 
			
		||||
                        "schema": {
 | 
			
		||||
                            "type": "string"
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "/admin/kindboxes/assign-receiver-agent/{id}": {
 | 
			
		||||
            "patch": {
 | 
			
		||||
                "security": [
 | 
			
		||||
| 
						 | 
				
			
			@ -1509,6 +1703,20 @@
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "adminkindboxparam.KindBoxGetAllResponse": {
 | 
			
		||||
            "type": "object",
 | 
			
		||||
            "properties": {
 | 
			
		||||
                "all_kind_box": {
 | 
			
		||||
                    "type": "array",
 | 
			
		||||
                    "items": {
 | 
			
		||||
                        "$ref": "#/definitions/entity.KindBox"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "pagination": {
 | 
			
		||||
                    "$ref": "#/definitions/param.PaginationResponse"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "adminkindboxparam.KindBoxGetResponse": {
 | 
			
		||||
            "type": "object",
 | 
			
		||||
            "properties": {
 | 
			
		||||
| 
						 | 
				
			
			@ -2278,6 +2486,59 @@
 | 
			
		|||
                "FemaleGender"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "entity.KindBox": {
 | 
			
		||||
            "type": "object",
 | 
			
		||||
            "properties": {
 | 
			
		||||
                "amount": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "benefactorID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "deliverAddressID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "deliverReferDate": {
 | 
			
		||||
                    "type": "string"
 | 
			
		||||
                },
 | 
			
		||||
                "deliveredAt": {
 | 
			
		||||
                    "type": "string"
 | 
			
		||||
                },
 | 
			
		||||
                "id": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "kindBoxReqID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "kindBoxType": {
 | 
			
		||||
                    "$ref": "#/definitions/entity.KindBoxType"
 | 
			
		||||
                },
 | 
			
		||||
                "receiverAgentID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "returnAddressID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "returnReferDate": {
 | 
			
		||||
                    "type": "string"
 | 
			
		||||
                },
 | 
			
		||||
                "returnReferTimeID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "returnedAt": {
 | 
			
		||||
                    "type": "string"
 | 
			
		||||
                },
 | 
			
		||||
                "senderAgentID": {
 | 
			
		||||
                    "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "serialNumber": {
 | 
			
		||||
                    "type": "string"
 | 
			
		||||
                },
 | 
			
		||||
                "status": {
 | 
			
		||||
                    "$ref": "#/definitions/entity.KindBoxStatus"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "entity.KindBoxReq": {
 | 
			
		||||
            "type": "object",
 | 
			
		||||
            "properties": {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,6 +77,15 @@ definitions:
 | 
			
		|||
      receiver_agent_id:
 | 
			
		||||
        type: integer
 | 
			
		||||
    type: object
 | 
			
		||||
  adminkindboxparam.KindBoxGetAllResponse:
 | 
			
		||||
    properties:
 | 
			
		||||
      all_kind_box:
 | 
			
		||||
        items:
 | 
			
		||||
          $ref: '#/definitions/entity.KindBox'
 | 
			
		||||
        type: array
 | 
			
		||||
      pagination:
 | 
			
		||||
        $ref: '#/definitions/param.PaginationResponse'
 | 
			
		||||
    type: object
 | 
			
		||||
  adminkindboxparam.KindBoxGetResponse:
 | 
			
		||||
    properties:
 | 
			
		||||
      amount:
 | 
			
		||||
| 
						 | 
				
			
			@ -583,6 +592,41 @@ definitions:
 | 
			
		|||
    x-enum-varnames:
 | 
			
		||||
    - MaleGender
 | 
			
		||||
    - FemaleGender
 | 
			
		||||
  entity.KindBox:
 | 
			
		||||
    properties:
 | 
			
		||||
      amount:
 | 
			
		||||
        type: integer
 | 
			
		||||
      benefactorID:
 | 
			
		||||
        type: integer
 | 
			
		||||
      deliverAddressID:
 | 
			
		||||
        type: integer
 | 
			
		||||
      deliverReferDate:
 | 
			
		||||
        type: string
 | 
			
		||||
      deliveredAt:
 | 
			
		||||
        type: string
 | 
			
		||||
      id:
 | 
			
		||||
        type: integer
 | 
			
		||||
      kindBoxReqID:
 | 
			
		||||
        type: integer
 | 
			
		||||
      kindBoxType:
 | 
			
		||||
        $ref: '#/definitions/entity.KindBoxType'
 | 
			
		||||
      receiverAgentID:
 | 
			
		||||
        type: integer
 | 
			
		||||
      returnAddressID:
 | 
			
		||||
        type: integer
 | 
			
		||||
      returnReferDate:
 | 
			
		||||
        type: string
 | 
			
		||||
      returnReferTimeID:
 | 
			
		||||
        type: integer
 | 
			
		||||
      returnedAt:
 | 
			
		||||
        type: string
 | 
			
		||||
      senderAgentID:
 | 
			
		||||
        type: integer
 | 
			
		||||
      serialNumber:
 | 
			
		||||
        type: string
 | 
			
		||||
      status:
 | 
			
		||||
        $ref: '#/definitions/entity.KindBoxStatus'
 | 
			
		||||
    type: object
 | 
			
		||||
  entity.KindBoxReq:
 | 
			
		||||
    properties:
 | 
			
		||||
      benefactorID:
 | 
			
		||||
| 
						 | 
				
			
			@ -829,6 +873,143 @@ paths:
 | 
			
		|||
      summary: Get all provinces
 | 
			
		||||
      tags:
 | 
			
		||||
      - Address
 | 
			
		||||
  /admin/kindboxes:
 | 
			
		||||
    get:
 | 
			
		||||
      consumes:
 | 
			
		||||
      - application/json
 | 
			
		||||
      description: Retrieves a list of all KindBoxes with filtering, sorting, and
 | 
			
		||||
        pagination options
 | 
			
		||||
      parameters:
 | 
			
		||||
      - description: Filter by ID
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_id
 | 
			
		||||
        type: integer
 | 
			
		||||
      - description: Filter by KindBox request ID
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_kind_box_req_id
 | 
			
		||||
        type: integer
 | 
			
		||||
      - description: Filter by benefactor ID
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_benefactor_id
 | 
			
		||||
        type: integer
 | 
			
		||||
      - description: Filter by KindBox type
 | 
			
		||||
        enum:
 | 
			
		||||
        - on-table
 | 
			
		||||
        - cylindrical
 | 
			
		||||
        - stand-up
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_kind_box_type
 | 
			
		||||
        type: string
 | 
			
		||||
      - description: Filter by amount
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_amount
 | 
			
		||||
        type: integer
 | 
			
		||||
      - description: Filter by serial number
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_serial_number
 | 
			
		||||
        type: string
 | 
			
		||||
      - description: Filter by status
 | 
			
		||||
        enum:
 | 
			
		||||
        - delivered
 | 
			
		||||
        - ready-to-return
 | 
			
		||||
        - assigned-receiver-agent
 | 
			
		||||
        - returned
 | 
			
		||||
        - enumerated
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_status
 | 
			
		||||
        type: string
 | 
			
		||||
      - description: Filter by delivered at
 | 
			
		||||
        format: date-time
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_delivered_at
 | 
			
		||||
        type: string
 | 
			
		||||
      - description: Filter by return refer time ID
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_return_refer_time_id
 | 
			
		||||
        type: integer
 | 
			
		||||
      - description: Filter by return refer date
 | 
			
		||||
        format: date
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_return_refer_date
 | 
			
		||||
        type: string
 | 
			
		||||
      - description: Filter by return address ID
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_return_address_id
 | 
			
		||||
        type: integer
 | 
			
		||||
      - description: Filter by receiver agent ID
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_receiver_agent_id
 | 
			
		||||
        type: integer
 | 
			
		||||
      - description: Filter by returned at
 | 
			
		||||
        format: date-time
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_returned_at
 | 
			
		||||
        type: string
 | 
			
		||||
      - description: Filter by sender agent ID
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_sender_agent_id
 | 
			
		||||
        type: integer
 | 
			
		||||
      - description: Filter by deliver refer date
 | 
			
		||||
        format: date
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_deliver_refer_date
 | 
			
		||||
        type: string
 | 
			
		||||
      - description: Filter by deliver address ID
 | 
			
		||||
        in: query
 | 
			
		||||
        name: filter_deliver_address_id
 | 
			
		||||
        type: integer
 | 
			
		||||
      - description: Page number
 | 
			
		||||
        in: query
 | 
			
		||||
        name: page_number
 | 
			
		||||
        type: integer
 | 
			
		||||
      - description: Page size
 | 
			
		||||
        in: query
 | 
			
		||||
        name: page_size
 | 
			
		||||
        type: integer
 | 
			
		||||
      - description: Sort by field
 | 
			
		||||
        enum:
 | 
			
		||||
        - id
 | 
			
		||||
        - kind_box_req_id
 | 
			
		||||
        - benefactor_id
 | 
			
		||||
        - kind_box_type
 | 
			
		||||
        - amount
 | 
			
		||||
        - serial_number
 | 
			
		||||
        - status
 | 
			
		||||
        - delivered_at
 | 
			
		||||
        - return_refer_time_id
 | 
			
		||||
        - return_refer_date
 | 
			
		||||
        - return_address_id
 | 
			
		||||
        - receiver_agent_id
 | 
			
		||||
        - returned_at
 | 
			
		||||
        - sender_agent_id
 | 
			
		||||
        - deliver_refer_date
 | 
			
		||||
        - deliver_address_id
 | 
			
		||||
        in: query
 | 
			
		||||
        name: sort_field
 | 
			
		||||
        type: string
 | 
			
		||||
      - description: Sort order
 | 
			
		||||
        enum:
 | 
			
		||||
        - asc
 | 
			
		||||
        - desc
 | 
			
		||||
        in: query
 | 
			
		||||
        name: sort_direction
 | 
			
		||||
        type: string
 | 
			
		||||
      produces:
 | 
			
		||||
      - application/json
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: OK
 | 
			
		||||
          schema:
 | 
			
		||||
            $ref: '#/definitions/adminkindboxparam.KindBoxGetAllResponse'
 | 
			
		||||
        "400":
 | 
			
		||||
          description: Bad request
 | 
			
		||||
          schema:
 | 
			
		||||
            type: string
 | 
			
		||||
      security:
 | 
			
		||||
      - AuthBearerAdmin: []
 | 
			
		||||
      summary: Get all KindBoxes by admin
 | 
			
		||||
      tags:
 | 
			
		||||
      - KindBox
 | 
			
		||||
  /admin/kindboxes/{id}:
 | 
			
		||||
    get:
 | 
			
		||||
      consumes:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,15 +3,16 @@ package entity
 | 
			
		|||
type AdminPermission string
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	AdminAdminRegisterPermission               = AdminPermission("admin-register")
 | 
			
		||||
	AdminKindBoxReqAcceptPermission            = AdminPermission("kindboxreq-accept")
 | 
			
		||||
	AdminKindBoxReqAddPermission               = AdminPermission("kindboxreq-add")
 | 
			
		||||
	AdminKindBoxReqRejectPermission            = AdminPermission("kindboxreq-reject")
 | 
			
		||||
	AdminKindBoxReqGetAllPermission            = AdminPermission("kindboxreq-getall")
 | 
			
		||||
	AdminKindBoxReqDeliverPermission           = AdminPermission("kindboxreq-deliver")
 | 
			
		||||
	AdminKindBoxReqAssignSenderAgentPermission = AdminPermission("kindboxreq-assign_sender_agent")
 | 
			
		||||
	AdminAdminGetAllAgentPermission            = AdminPermission("admin-getall_agent")
 | 
			
		||||
	AdminAdminRegisterPermission                 = AdminPermission("admin-register")
 | 
			
		||||
	AdminKindBoxReqAcceptPermission              = AdminPermission("kindboxreq-accept")
 | 
			
		||||
	AdminKindBoxReqAddPermission                 = AdminPermission("kindboxreq-add")
 | 
			
		||||
	AdminKindBoxReqRejectPermission              = AdminPermission("kindboxreq-reject")
 | 
			
		||||
	AdminKindBoxReqGetAllPermission              = AdminPermission("kindboxreq-getall")
 | 
			
		||||
	AdminKindBoxReqDeliverPermission             = AdminPermission("kindboxreq-deliver")
 | 
			
		||||
	AdminKindBoxReqAssignSenderAgentPermission   = AdminPermission("kindboxreq-assign_sender_agent")
 | 
			
		||||
	AdminAdminGetAllAgentPermission              = AdminPermission("admin-getall_agent")
 | 
			
		||||
	AdminKindBoxReqGetAwaitingDeliveryPermission = AdminPermission("kindboxreq-get_awaiting_delivery")
 | 
			
		||||
	AdminKindBoxGetPermission                    = AdminPermission("kindbox-get")
 | 
			
		||||
	AdminKindBoxAssignReceiverAgentPermission    = AdminPermission("kindbox-assign_receiver_agent")
 | 
			
		||||
	AdminKindBoxGetAllPermission                 = AdminPermission("kindbox-getall")
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,17 @@
 | 
			
		|||
package adminkindboxparam
 | 
			
		||||
 | 
			
		||||
import entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
import (
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/param"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type KindBoxGetAllRequest struct{}
 | 
			
		||||
type KindBoxGetAllRequest struct {
 | 
			
		||||
	Pagination param.PaginationRequest
 | 
			
		||||
	Sort       param.SortRequest
 | 
			
		||||
	Filter     param.FilterRequest
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type KindBoxGetAllResponse struct {
 | 
			
		||||
	AllKindBox []entity.KindBox
 | 
			
		||||
	AllKindBox []entity.KindBox         `json:"all_kind_box"`
 | 
			
		||||
	Pagination param.PaginationResponse `json:"pagination"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,8 +27,3 @@ func (d DB) GetKindBox(ctx context.Context, kindBoxID uint) (entity.KindBox, err
 | 
			
		|||
 | 
			
		||||
	return k, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d DB) GetAllKindBox(ctx context.Context, benefactorID uint) ([]entity.KindBox, error) {
 | 
			
		||||
	// TODO implement me
 | 
			
		||||
	panic("implement me")
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,47 @@
 | 
			
		|||
package mysqlkindbox
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	params "git.gocasts.ir/ebhomengo/niki/param"
 | 
			
		||||
	errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
			
		||||
	builder "git.gocasts.ir/ebhomengo/niki/pkg/query_builder/mysql"
 | 
			
		||||
	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) {
 | 
			
		||||
	const op = "mysqlkindbox.GetAllKindBox"
 | 
			
		||||
 | 
			
		||||
	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)
 | 
			
		||||
	}
 | 
			
		||||
	defer rows.Close()
 | 
			
		||||
	kindBoxes := make([]entity.KindBox, 0)
 | 
			
		||||
	for rows.Next() {
 | 
			
		||||
		kindBox, sErr := scanKindBox(rows)
 | 
			
		||||
		if sErr != nil {
 | 
			
		||||
			return nil, 0, richerror.New(op).WithErr(sErr).
 | 
			
		||||
				WithMessage(errmsg.ErrorMsgCantScanQueryResult).WithKind(richerror.KindUnexpected)
 | 
			
		||||
		}
 | 
			
		||||
		kindBoxes = append(kindBoxes, kindBox)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if rErr := rows.Err(); rErr != nil {
 | 
			
		||||
		return nil, 0, richerror.New(op).WithErr(rErr).
 | 
			
		||||
			WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var total uint
 | 
			
		||||
	baseQuery = `SELECT COUNT(*) FROM kind_boxes WHERE deleted_at IS NULL`
 | 
			
		||||
	query, args = builder.BuildGetAllQuery(baseQuery, filter, pagination, sort)
 | 
			
		||||
	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)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return kindBoxes, total, nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2,7 +2,6 @@ package mysqlkindboxreq
 | 
			
		|||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/param"
 | 
			
		||||
	builder "git.gocasts.ir/ebhomengo/niki/pkg/query_builder/mysql"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +24,6 @@ func (d DB) GetAllKindBoxReq(ctx context.Context, filter param.FilterRequest, pa
 | 
			
		|||
	for rows.Next() {
 | 
			
		||||
		kindBoxReq, sErr := scanKindBoxReq(rows)
 | 
			
		||||
		if sErr != nil {
 | 
			
		||||
			fmt.Println(sErr)
 | 
			
		||||
			return nil, 0, richerror.New(op).WithErr(sErr).
 | 
			
		||||
				WithMessage(errmsg.ErrorMsgCantScanQueryResult).WithKind(richerror.KindUnexpected)
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,9 @@ ALTER TABLE `admin_access_controls` MODIFY COLUMN `permission`
 | 
			
		|||
        'admin-getall_agent',
 | 
			
		||||
        'kindboxreq-get_awaiting_delivery',
 | 
			
		||||
        'kindbox-get',
 | 
			
		||||
        'kindboxreq-add'
 | 
			
		||||
        'kindboxreq-add',
 | 
			
		||||
        'kindbox-assign_receiver_agent',
 | 
			
		||||
        'kindbox-getall'
 | 
			
		||||
    ) NOT NULL;
 | 
			
		||||
    
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
| 
						 | 
				
			
			@ -19,7 +19,11 @@ INSERT INTO `admin_access_controls` (`id`, `actor_id`, `actor_type`,`permission`
 | 
			
		|||
        (17, 1 , 'role','kindbox-get'),
 | 
			
		||||
        (18, 2 , 'role','kindbox-get'),
 | 
			
		||||
        (19, 1 , 'role','kindbox-assign_receiver_agent'),
 | 
			
		||||
        (20, 2 , 'role','kindbox-assign_receiver_agent');
 | 
			
		||||
        (20, 2 , 'role','kindbox-assign_receiver_agent'),
 | 
			
		||||
        (21, 1 , 'role','kindboxreq-add'),
 | 
			
		||||
        (22, 2 , 'role','kindboxreq-add'),
 | 
			
		||||
        (23, 1 , 'role','kindbox-getall'),
 | 
			
		||||
        (24, 2 , 'role','kindbox-getall');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
package adminkindboxservice
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
 | 
			
		||||
	paginationparam "git.gocasts.ir/ebhomengo/niki/param"
 | 
			
		||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box"
 | 
			
		||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (s Service) GetAll(ctx context.Context, req param.KindBoxGetAllRequest) (param.KindBoxGetAllResponse, error) {
 | 
			
		||||
	const op = "adminkindboxservice.GetAll"
 | 
			
		||||
 | 
			
		||||
	allKindBox, total, err := s.repo.GetAllKindBox(ctx, req.Filter, req.Pagination, req.Sort)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return param.KindBoxGetAllResponse{}, richerror.New(op).WithErr(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return param.KindBoxGetAllResponse{
 | 
			
		||||
		AllKindBox: allKindBox,
 | 
			
		||||
		Pagination: paginationparam.PaginationResponse{
 | 
			
		||||
			PageSize:   req.Pagination.GetPageSize(),
 | 
			
		||||
			PageNumber: req.Pagination.GetPageNumber(),
 | 
			
		||||
			Total:      total,
 | 
			
		||||
		},
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -3,7 +3,8 @@ package adminkindboxservice
 | 
			
		|||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
 | 
			
		||||
	entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	params "git.gocasts.ir/ebhomengo/niki/param"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Repository interface {
 | 
			
		||||
| 
						 | 
				
			
			@ -11,6 +12,7 @@ type Repository interface {
 | 
			
		|||
	AddKindBox(ctx context.Context, kindBox entity.KindBox) error
 | 
			
		||||
	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)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Service struct {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ package benefactorkindboxservice
 | 
			
		|||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
 | 
			
		||||
	params "git.gocasts.ir/ebhomengo/niki/param"
 | 
			
		||||
	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box"
 | 
			
		||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -11,7 +12,7 @@ import (
 | 
			
		|||
func (s Service) GetAll(ctx context.Context, req param.KindBoxGetAllRequest) (param.KindBoxGetAllResponse, error) {
 | 
			
		||||
	const op = "userkindboxservice.GetAll"
 | 
			
		||||
 | 
			
		||||
	allKindBox, err := s.repo.GetAllKindBox(ctx, req.BenefactorID)
 | 
			
		||||
	allKindBox, _, err := s.repo.GetAllKindBox(ctx, params.FilterRequest{}, params.PaginationRequest{}, params.SortRequest{})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return param.KindBoxGetAllResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,10 +4,11 @@ import (
 | 
			
		|||
	"context"
 | 
			
		||||
 | 
			
		||||
	entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	params "git.gocasts.ir/ebhomengo/niki/param"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Repository interface {
 | 
			
		||||
	GetAllKindBox(ctx context.Context, benefactorID uint) ([]entity.KindBox, error)
 | 
			
		||||
	GetAllKindBox(ctx context.Context, filter params.FilterRequest, pagination params.PaginationRequest, sort params.SortRequest) ([]entity.KindBox, uint, error)
 | 
			
		||||
	GetKindBox(ctx context.Context, kindBoxID uint) (entity.KindBox, error)
 | 
			
		||||
	RegisterEmptyingRequestForKindBox(ctx context.Context, kindBox entity.KindBox) error
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
package adminkindboxvalidator
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
 | 
			
		||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box"
 | 
			
		||||
	errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
			
		||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
			
		||||
	validation "github.com/go-ozzo/ozzo-validation/v4"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (v Validator) ValidateGetAll(req param.KindBoxGetAllRequest) (map[string]string, error) {
 | 
			
		||||
	const op = "adminkindboxvalidator.ValidateGetAll"
 | 
			
		||||
 | 
			
		||||
	validFields := []string{
 | 
			
		||||
		"id", "kind_box_req_id", "benefactor_id", "kind_box_type", "amount", "serial_number",
 | 
			
		||||
		"status", "deliver_refer_date", "deliver_address_id", "sender_agent_id",
 | 
			
		||||
		"delivered_at", "return_refer_time_id", "return_refer_date",
 | 
			
		||||
		"return_address_id", "receiver_agent_id", "returned_at",
 | 
			
		||||
	}
 | 
			
		||||
	if err := validation.ValidateStruct(&req,
 | 
			
		||||
		validation.Field(&req.Filter, validation.By(v.areFilterFieldsValid(validFields))),
 | 
			
		||||
		validation.Field(&req.Sort, validation.By(v.areSortFieldsValid(validFields))),
 | 
			
		||||
	); err != nil {
 | 
			
		||||
 | 
			
		||||
		fieldErrors := make(map[string]string)
 | 
			
		||||
 | 
			
		||||
		var errV validation.Errors
 | 
			
		||||
		if errors.As(err, &errV) {
 | 
			
		||||
			for key, value := range errV {
 | 
			
		||||
				if value != nil {
 | 
			
		||||
					fieldErrors[key] = value.Error()
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return fieldErrors, richerror.New(op).
 | 
			
		||||
			WithMessage(errmsg.ErrorMsgInvalidInput).
 | 
			
		||||
			WithKind(richerror.KindInvalid).
 | 
			
		||||
			WithMeta(map[string]interface{}{"req": req}).
 | 
			
		||||
			WithErr(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return map[string]string{}, nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -3,9 +3,12 @@ package adminkindboxvalidator
 | 
			
		|||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"slices"
 | 
			
		||||
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	params "git.gocasts.ir/ebhomengo/niki/param"
 | 
			
		||||
	errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
			
		||||
	validation "github.com/go-ozzo/ozzo-validation/v4"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Repository interface {
 | 
			
		||||
| 
						 | 
				
			
			@ -73,3 +76,37 @@ func (v Validator) doesAgentExist(value interface{}) error {
 | 
			
		|||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v Validator) areFilterFieldsValid(validFilters []string) validation.RuleFunc {
 | 
			
		||||
	return func(value interface{}) error {
 | 
			
		||||
		filters, ok := value.(params.FilterRequest)
 | 
			
		||||
		if !ok {
 | 
			
		||||
			return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
			
		||||
		}
 | 
			
		||||
		for filter := range filters {
 | 
			
		||||
			if !slices.Contains(validFilters, filter) {
 | 
			
		||||
				return fmt.Errorf(errmsg.ErrorMsgFiltersAreNotValid)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v Validator) areSortFieldsValid(validSortFields []string) validation.RuleFunc {
 | 
			
		||||
	return func(value interface{}) error {
 | 
			
		||||
		sort, ok := value.(params.SortRequest)
 | 
			
		||||
		if !ok {
 | 
			
		||||
			return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
			
		||||
		}
 | 
			
		||||
		if sort.Field == "" && sort.Direction != "" {
 | 
			
		||||
			return fmt.Errorf(errmsg.ErrorMsgSortFieldIsRequired)
 | 
			
		||||
		}
 | 
			
		||||
		if sort.Direction != "" && sort.Direction != params.AscSortDirection && sort.Direction != params.DescSortDirection {
 | 
			
		||||
			return fmt.Errorf(errmsg.ErrorMsgSortDirectionShouldBeAscOrDesc)
 | 
			
		||||
		}
 | 
			
		||||
		if sort.Field != "" && !slices.Contains(validSortFields, sort.Field) {
 | 
			
		||||
			return fmt.Errorf(errmsg.ErrorMsgSortFieldIsNotValid)
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue