forked from ebhomengo/niki
				
			feat(niki): benefactor requests emptying a KindBox
This commit is contained in:
		
							parent
							
								
									857d26fd10
								
							
						
					
					
						commit
						620db23582
					
				| 
						 | 
					@ -16,7 +16,7 @@ import (
 | 
				
			||||||
// @Success      200  {object}  param.KindBoxGetResponse
 | 
					// @Success      200  {object}  param.KindBoxGetResponse
 | 
				
			||||||
// @Failure      400  {string}  "Bad request"
 | 
					// @Failure      400  {string}  "Bad request"
 | 
				
			||||||
// @Security	 AuthBearerBenefactor
 | 
					// @Security	 AuthBearerBenefactor
 | 
				
			||||||
// @Router       /benefactor/kindboxes/ [get]
 | 
					// @Router       /benefactor/kindboxes [get]
 | 
				
			||||||
func (h Handler) GetAll(c echo.Context) error {
 | 
					func (h Handler) GetAll(c echo.Context) error {
 | 
				
			||||||
	var req param.KindBoxGetAllRequest
 | 
						var req param.KindBoxGetAllRequest
 | 
				
			||||||
	if bErr := c.Bind(&req); bErr != nil {
 | 
						if bErr := c.Bind(&req); bErr != nil {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,48 @@
 | 
				
			||||||
 | 
					package benefactorkindboxhandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box"
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/pkg/claim"
 | 
				
			||||||
 | 
						httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
 | 
				
			||||||
 | 
						"github.com/labstack/echo/v4"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RegisterEmptyingRequest godoc
 | 
				
			||||||
 | 
					// @Summary      Register a new emptying request for a kind box by benefactor
 | 
				
			||||||
 | 
					// @Tags         Benefactor
 | 
				
			||||||
 | 
					// @Accept       json
 | 
				
			||||||
 | 
					// @Produce      json
 | 
				
			||||||
 | 
					// @Param        id path int true "KindBox ID"
 | 
				
			||||||
 | 
					// @Param        Request body   param.KindBoxRegisterEmptyingRequest  true  "Request body"
 | 
				
			||||||
 | 
					// @Success      204  {string}  "No content"
 | 
				
			||||||
 | 
					// @Failure      400  {string}  "Bad request"
 | 
				
			||||||
 | 
					// @Security     AuthBearerBenefactor
 | 
				
			||||||
 | 
					// @Router       /benefactor/kindboxes/{id}/emptying-requests [patch].
 | 
				
			||||||
 | 
					func (h Handler) RegisterEmptyingRequest(c echo.Context) error {
 | 
				
			||||||
 | 
						var req param.KindBoxRegisterEmptyingRequest
 | 
				
			||||||
 | 
						if bErr := c.Bind(&req); bErr != nil {
 | 
				
			||||||
 | 
							return echo.NewHTTPError(http.StatusBadRequest)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						claims := claim.GetClaimsFromEchoContext(c)
 | 
				
			||||||
 | 
						req.BenefactorID = claims.UserID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if fieldErrors, err := h.benefactorKindBoxVld.ValidateRegisterEmptyingRequest(req); err != nil {
 | 
				
			||||||
 | 
							msg, code := httpmsg.Error(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return c.JSON(code, echo.Map{
 | 
				
			||||||
 | 
								"message": msg,
 | 
				
			||||||
 | 
								"errors":  fieldErrors,
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						sErr := h.benefactorKindBoxSvc.RegisterEmptyingRequest(c.Request().Context(), req)
 | 
				
			||||||
 | 
						if sErr != nil {
 | 
				
			||||||
 | 
							msg, code := httpmsg.Error(sErr)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return echo.NewHTTPError(code, msg)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return c.JSON(http.StatusNoContent, nil)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,12 +1,20 @@
 | 
				
			||||||
package benefactorkindboxhandler
 | 
					package benefactorkindboxhandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	echo "github.com/labstack/echo/v4"
 | 
						"git.gocasts.ir/ebhomengo/niki/delivery/http_server/middleware"
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
						"github.com/labstack/echo/v4"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (h Handler) SetRoutes(e *echo.Echo) {
 | 
					func (h Handler) SetRoutes(e *echo.Echo) {
 | 
				
			||||||
	r := e.Group("/benefactor/kindboxes")
 | 
						r := e.Group("/benefactor/kindboxes")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	r.GET("/:id", h.Get).Name = "benefactor-getkindboxbyid"
 | 
						r.Use(
 | 
				
			||||||
	r.GET("/", h.GetAll).Name = "benefactor-getallkindbox"
 | 
							middleware.Auth(h.authSvc, h.authConfig),
 | 
				
			||||||
 | 
							middleware.BenefactorAuthorization(entity.UserBenefactorRole),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						r.GET("/:id", h.Get)
 | 
				
			||||||
 | 
						r.GET("", h.GetAll)
 | 
				
			||||||
 | 
						r.PATCH("/:id/emptying-requests", h.RegisterEmptyingRequest)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@ import (
 | 
				
			||||||
	adminkindboxreqhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/admin/kind_box_req"
 | 
						adminkindboxreqhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/admin/kind_box_req"
 | 
				
			||||||
	benefactoraddresshandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/address"
 | 
						benefactoraddresshandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/address"
 | 
				
			||||||
	benefactorhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/benefactor"
 | 
						benefactorhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/benefactor"
 | 
				
			||||||
 | 
						benefactorkindboxhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/kind_box"
 | 
				
			||||||
	benefactorkindboxreqhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/kind_box_req"
 | 
						benefactorkindboxreqhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/kind_box_req"
 | 
				
			||||||
	"git.gocasts.ir/ebhomengo/niki/docs"
 | 
						"git.gocasts.ir/ebhomengo/niki/docs"
 | 
				
			||||||
	adminservice "git.gocasts.ir/ebhomengo/niki/service/admin/admin"
 | 
						adminservice "git.gocasts.ir/ebhomengo/niki/service/admin/admin"
 | 
				
			||||||
| 
						 | 
					@ -15,11 +16,13 @@ import (
 | 
				
			||||||
	authservice "git.gocasts.ir/ebhomengo/niki/service/auth"
 | 
						authservice "git.gocasts.ir/ebhomengo/niki/service/auth"
 | 
				
			||||||
	benefactoraddressservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/address"
 | 
						benefactoraddressservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/address"
 | 
				
			||||||
	benefactorservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/benefactor"
 | 
						benefactorservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/benefactor"
 | 
				
			||||||
 | 
						benefactorkindboxservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/kind_box"
 | 
				
			||||||
	benefactorkindboxreqservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/kind_box_req"
 | 
						benefactorkindboxreqservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/kind_box_req"
 | 
				
			||||||
	adminvalidator "git.gocasts.ir/ebhomengo/niki/validator/admin/admin"
 | 
						adminvalidator "git.gocasts.ir/ebhomengo/niki/validator/admin/admin"
 | 
				
			||||||
	adminkindboxreqvalidator "git.gocasts.ir/ebhomengo/niki/validator/admin/kind_box_req"
 | 
						adminkindboxreqvalidator "git.gocasts.ir/ebhomengo/niki/validator/admin/kind_box_req"
 | 
				
			||||||
	benefactoraddressvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/address"
 | 
						benefactoraddressvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/address"
 | 
				
			||||||
	benefactorvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/benefactor"
 | 
						benefactorvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/benefactor"
 | 
				
			||||||
 | 
						benefactorkindboxvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/kind_box"
 | 
				
			||||||
	benefactorkindboxreqvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/kind_box_req"
 | 
						benefactorkindboxreqvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/kind_box_req"
 | 
				
			||||||
	echo "github.com/labstack/echo/v4"
 | 
						echo "github.com/labstack/echo/v4"
 | 
				
			||||||
	middleware "github.com/labstack/echo/v4/middleware"
 | 
						middleware "github.com/labstack/echo/v4/middleware"
 | 
				
			||||||
| 
						 | 
					@ -32,6 +35,7 @@ type Server struct {
 | 
				
			||||||
	benefactorHandler           benefactorhandler.Handler
 | 
						benefactorHandler           benefactorhandler.Handler
 | 
				
			||||||
	benefactorKindBoxReqHandler benefactorkindboxreqhandler.Handler
 | 
						benefactorKindBoxReqHandler benefactorkindboxreqhandler.Handler
 | 
				
			||||||
	benefactorAddressHandler    benefactoraddresshandler.Handler
 | 
						benefactorAddressHandler    benefactoraddresshandler.Handler
 | 
				
			||||||
 | 
						benefactorKindBoxHandler    benefactorkindboxhandler.Handler
 | 
				
			||||||
	adminHandler                adminhandler.Handler
 | 
						adminHandler                adminhandler.Handler
 | 
				
			||||||
	adminKindBoxReqHandler      adminkindboxreqhandler.Handler
 | 
						adminKindBoxReqHandler      adminkindboxreqhandler.Handler
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -45,6 +49,8 @@ func New(
 | 
				
			||||||
	benefactorKindBoxReqVld benefactorkindboxreqvalidator.Validator,
 | 
						benefactorKindBoxReqVld benefactorkindboxreqvalidator.Validator,
 | 
				
			||||||
	benefactorAddressSvc benefactoraddressservice.Service,
 | 
						benefactorAddressSvc benefactoraddressservice.Service,
 | 
				
			||||||
	benefactorAddressVld benefactoraddressvalidator.Validator,
 | 
						benefactorAddressVld benefactoraddressvalidator.Validator,
 | 
				
			||||||
 | 
						benefactorKindBoxSvc benefactorkindboxservice.Service,
 | 
				
			||||||
 | 
						benefactorKindBoxVld benefactorkindboxvalidator.Validator,
 | 
				
			||||||
	adminSvc adminservice.Service,
 | 
						adminSvc adminservice.Service,
 | 
				
			||||||
	adminVld adminvalidator.Validator,
 | 
						adminVld adminvalidator.Validator,
 | 
				
			||||||
	adminAuthSvc authservice.Service,
 | 
						adminAuthSvc authservice.Service,
 | 
				
			||||||
| 
						 | 
					@ -58,6 +64,7 @@ func New(
 | 
				
			||||||
		benefactorHandler:           benefactorhandler.New(cfg.Auth, benefactorAuthSvc, benefactorSvc, benefactorVld),
 | 
							benefactorHandler:           benefactorhandler.New(cfg.Auth, benefactorAuthSvc, benefactorSvc, benefactorVld),
 | 
				
			||||||
		benefactorKindBoxReqHandler: benefactorkindboxreqhandler.New(cfg.Auth, benefactorAuthSvc, benefactorKindBoxReqSvc, benefactorKindBoxReqVld),
 | 
							benefactorKindBoxReqHandler: benefactorkindboxreqhandler.New(cfg.Auth, benefactorAuthSvc, benefactorKindBoxReqSvc, benefactorKindBoxReqVld),
 | 
				
			||||||
		benefactorAddressHandler:    benefactoraddresshandler.New(cfg.Auth, benefactorAuthSvc, benefactorAddressSvc, benefactorAddressVld),
 | 
							benefactorAddressHandler:    benefactoraddresshandler.New(cfg.Auth, benefactorAuthSvc, benefactorAddressSvc, benefactorAddressVld),
 | 
				
			||||||
 | 
							benefactorKindBoxHandler:    benefactorkindboxhandler.New(cfg.Auth, benefactorAuthSvc, benefactorKindBoxSvc, benefactorKindBoxVld),
 | 
				
			||||||
		adminHandler:                adminhandler.New(cfg.AdminAuth, adminAuthSvc, adminSvc, adminVld, adminAuthorizeSvc),
 | 
							adminHandler:                adminhandler.New(cfg.AdminAuth, adminAuthSvc, adminSvc, adminVld, adminAuthorizeSvc),
 | 
				
			||||||
		adminKindBoxReqHandler:      adminkindboxreqhandler.New(cfg.Auth, adminAuthSvc, adminKinBoxReqSvc, adminKinBoxReqVld, adminAuthorizeSvc),
 | 
							adminKindBoxReqHandler:      adminkindboxreqhandler.New(cfg.Auth, adminAuthSvc, adminKinBoxReqSvc, adminKinBoxReqVld, adminAuthorizeSvc),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -73,6 +80,7 @@ func (s Server) Serve() {
 | 
				
			||||||
	s.benefactorHandler.SetRoutes(s.Router)
 | 
						s.benefactorHandler.SetRoutes(s.Router)
 | 
				
			||||||
	s.benefactorKindBoxReqHandler.SetRoutes(s.Router)
 | 
						s.benefactorKindBoxReqHandler.SetRoutes(s.Router)
 | 
				
			||||||
	s.benefactorAddressHandler.SetRoutes(s.Router)
 | 
						s.benefactorAddressHandler.SetRoutes(s.Router)
 | 
				
			||||||
 | 
						s.benefactorKindBoxHandler.SetRoutes(s.Router)
 | 
				
			||||||
	s.adminHandler.SetRoutes(s.Router)
 | 
						s.adminHandler.SetRoutes(s.Router)
 | 
				
			||||||
	s.adminKindBoxReqHandler.SetRoutes(s.Router)
 | 
						s.adminKindBoxReqHandler.SetRoutes(s.Router)
 | 
				
			||||||
	// Start server
 | 
						// Start server
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										73
									
								
								docs/docs.go
								
								
								
								
							
							
						
						
									
										73
									
								
								docs/docs.go
								
								
								
								
							| 
						 | 
					@ -796,7 +796,7 @@ const docTemplate = `{
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "/benefactor/kindboxes/": {
 | 
					        "/benefactor/kindboxes": {
 | 
				
			||||||
            "get": {
 | 
					            "get": {
 | 
				
			||||||
                "security": [
 | 
					                "security": [
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
| 
						 | 
					@ -872,6 +872,57 @@ const docTemplate = `{
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "/benefactor/kindboxes/{id}/emptying-requests": {
 | 
				
			||||||
 | 
					            "patch": {
 | 
				
			||||||
 | 
					                "security": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "AuthBearerBenefactor": []
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "consumes": [
 | 
				
			||||||
 | 
					                    "application/json"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "produces": [
 | 
				
			||||||
 | 
					                    "application/json"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "tags": [
 | 
				
			||||||
 | 
					                    "Benefactor"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "summary": "Register a new emptying request for a kind box by benefactor",
 | 
				
			||||||
 | 
					                "parameters": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "type": "integer",
 | 
				
			||||||
 | 
					                        "description": "KindBox ID",
 | 
				
			||||||
 | 
					                        "name": "id",
 | 
				
			||||||
 | 
					                        "in": "path",
 | 
				
			||||||
 | 
					                        "required": true
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "description": "Request body",
 | 
				
			||||||
 | 
					                        "name": "Request",
 | 
				
			||||||
 | 
					                        "in": "body",
 | 
				
			||||||
 | 
					                        "required": true,
 | 
				
			||||||
 | 
					                        "schema": {
 | 
				
			||||||
 | 
					                            "$ref": "#/definitions/benefactorkindboxparam.KindBoxRegisterEmptyingRequest"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "responses": {
 | 
				
			||||||
 | 
					                    "204": {
 | 
				
			||||||
 | 
					                        "description": "No content",
 | 
				
			||||||
 | 
					                        "schema": {
 | 
				
			||||||
 | 
					                            "type": "string"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "400": {
 | 
				
			||||||
 | 
					                        "description": "Bad request",
 | 
				
			||||||
 | 
					                        "schema": {
 | 
				
			||||||
 | 
					                            "type": "string"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "/benefactor/kindboxreqs/": {
 | 
					        "/benefactor/kindboxreqs/": {
 | 
				
			||||||
            "post": {
 | 
					            "post": {
 | 
				
			||||||
                "security": [
 | 
					                "security": [
 | 
				
			||||||
| 
						 | 
					@ -1648,6 +1699,9 @@ const docTemplate = `{
 | 
				
			||||||
                "returnReferDate": {
 | 
					                "returnReferDate": {
 | 
				
			||||||
                    "type": "string"
 | 
					                    "type": "string"
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
 | 
					                "returnReferTimeID": {
 | 
				
			||||||
 | 
					                    "type": "integer"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
                "returnedAt": {
 | 
					                "returnedAt": {
 | 
				
			||||||
                    "type": "string"
 | 
					                    "type": "string"
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
| 
						 | 
					@ -1665,6 +1719,23 @@ const docTemplate = `{
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "benefactorkindboxparam.KindBoxRegisterEmptyingRequest": {
 | 
				
			||||||
 | 
					            "type": "object",
 | 
				
			||||||
 | 
					            "properties": {
 | 
				
			||||||
 | 
					                "return_address_id": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 1
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "return_refer_date": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "example": "2025-01-02T15:04:05Z"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "return_refer_time_id": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 1
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "benefactorkindboxreqparam.KindBoxReqAddRequest": {
 | 
					        "benefactorkindboxreqparam.KindBoxReqAddRequest": {
 | 
				
			||||||
            "type": "object",
 | 
					            "type": "object",
 | 
				
			||||||
            "properties": {
 | 
					            "properties": {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -785,7 +785,7 @@
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "/benefactor/kindboxes/": {
 | 
					        "/benefactor/kindboxes": {
 | 
				
			||||||
            "get": {
 | 
					            "get": {
 | 
				
			||||||
                "security": [
 | 
					                "security": [
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
| 
						 | 
					@ -861,6 +861,57 @@
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "/benefactor/kindboxes/{id}/emptying-requests": {
 | 
				
			||||||
 | 
					            "patch": {
 | 
				
			||||||
 | 
					                "security": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "AuthBearerBenefactor": []
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "consumes": [
 | 
				
			||||||
 | 
					                    "application/json"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "produces": [
 | 
				
			||||||
 | 
					                    "application/json"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "tags": [
 | 
				
			||||||
 | 
					                    "Benefactor"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "summary": "Register a new emptying request for a kind box by benefactor",
 | 
				
			||||||
 | 
					                "parameters": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "type": "integer",
 | 
				
			||||||
 | 
					                        "description": "KindBox ID",
 | 
				
			||||||
 | 
					                        "name": "id",
 | 
				
			||||||
 | 
					                        "in": "path",
 | 
				
			||||||
 | 
					                        "required": true
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "description": "Request body",
 | 
				
			||||||
 | 
					                        "name": "Request",
 | 
				
			||||||
 | 
					                        "in": "body",
 | 
				
			||||||
 | 
					                        "required": true,
 | 
				
			||||||
 | 
					                        "schema": {
 | 
				
			||||||
 | 
					                            "$ref": "#/definitions/benefactorkindboxparam.KindBoxRegisterEmptyingRequest"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "responses": {
 | 
				
			||||||
 | 
					                    "204": {
 | 
				
			||||||
 | 
					                        "description": "No content",
 | 
				
			||||||
 | 
					                        "schema": {
 | 
				
			||||||
 | 
					                            "type": "string"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "400": {
 | 
				
			||||||
 | 
					                        "description": "Bad request",
 | 
				
			||||||
 | 
					                        "schema": {
 | 
				
			||||||
 | 
					                            "type": "string"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "/benefactor/kindboxreqs/": {
 | 
					        "/benefactor/kindboxreqs/": {
 | 
				
			||||||
            "post": {
 | 
					            "post": {
 | 
				
			||||||
                "security": [
 | 
					                "security": [
 | 
				
			||||||
| 
						 | 
					@ -1637,6 +1688,9 @@
 | 
				
			||||||
                "returnReferDate": {
 | 
					                "returnReferDate": {
 | 
				
			||||||
                    "type": "string"
 | 
					                    "type": "string"
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
 | 
					                "returnReferTimeID": {
 | 
				
			||||||
 | 
					                    "type": "integer"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
                "returnedAt": {
 | 
					                "returnedAt": {
 | 
				
			||||||
                    "type": "string"
 | 
					                    "type": "string"
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
| 
						 | 
					@ -1654,6 +1708,23 @@
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "benefactorkindboxparam.KindBoxRegisterEmptyingRequest": {
 | 
				
			||||||
 | 
					            "type": "object",
 | 
				
			||||||
 | 
					            "properties": {
 | 
				
			||||||
 | 
					                "return_address_id": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 1
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "return_refer_date": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "example": "2025-01-02T15:04:05Z"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "return_refer_time_id": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 1
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "benefactorkindboxreqparam.KindBoxReqAddRequest": {
 | 
					        "benefactorkindboxreqparam.KindBoxReqAddRequest": {
 | 
				
			||||||
            "type": "object",
 | 
					            "type": "object",
 | 
				
			||||||
            "properties": {
 | 
					            "properties": {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -372,6 +372,8 @@ definitions:
 | 
				
			||||||
        type: integer
 | 
					        type: integer
 | 
				
			||||||
      returnReferDate:
 | 
					      returnReferDate:
 | 
				
			||||||
        type: string
 | 
					        type: string
 | 
				
			||||||
 | 
					      returnReferTimeID:
 | 
				
			||||||
 | 
					        type: integer
 | 
				
			||||||
      returnedAt:
 | 
					      returnedAt:
 | 
				
			||||||
        type: string
 | 
					        type: string
 | 
				
			||||||
      senderAgentID:
 | 
					      senderAgentID:
 | 
				
			||||||
| 
						 | 
					@ -383,6 +385,18 @@ definitions:
 | 
				
			||||||
      type:
 | 
					      type:
 | 
				
			||||||
        $ref: '#/definitions/entity.KindBoxType'
 | 
					        $ref: '#/definitions/entity.KindBoxType'
 | 
				
			||||||
    type: object
 | 
					    type: object
 | 
				
			||||||
 | 
					  benefactorkindboxparam.KindBoxRegisterEmptyingRequest:
 | 
				
			||||||
 | 
					    properties:
 | 
				
			||||||
 | 
					      return_address_id:
 | 
				
			||||||
 | 
					        example: 1
 | 
				
			||||||
 | 
					        type: integer
 | 
				
			||||||
 | 
					      return_refer_date:
 | 
				
			||||||
 | 
					        example: "2025-01-02T15:04:05Z"
 | 
				
			||||||
 | 
					        type: string
 | 
				
			||||||
 | 
					      return_refer_time_id:
 | 
				
			||||||
 | 
					        example: 1
 | 
				
			||||||
 | 
					        type: integer
 | 
				
			||||||
 | 
					    type: object
 | 
				
			||||||
  benefactorkindboxreqparam.KindBoxReqAddRequest:
 | 
					  benefactorkindboxreqparam.KindBoxReqAddRequest:
 | 
				
			||||||
    properties:
 | 
					    properties:
 | 
				
			||||||
      benefactor_id:
 | 
					      benefactor_id:
 | 
				
			||||||
| 
						 | 
					@ -1080,7 +1094,7 @@ paths:
 | 
				
			||||||
      summary: Register an admin by super-admin
 | 
					      summary: Register an admin by super-admin
 | 
				
			||||||
      tags:
 | 
					      tags:
 | 
				
			||||||
      - Admin
 | 
					      - Admin
 | 
				
			||||||
  /benefactor/kindboxes/:
 | 
					  /benefactor/kindboxes:
 | 
				
			||||||
    get:
 | 
					    get:
 | 
				
			||||||
      consumes:
 | 
					      consumes:
 | 
				
			||||||
      - application/json
 | 
					      - application/json
 | 
				
			||||||
| 
						 | 
					@ -1128,6 +1142,38 @@ paths:
 | 
				
			||||||
      summary: Get a specific kind box for a benefactor
 | 
					      summary: Get a specific kind box for a benefactor
 | 
				
			||||||
      tags:
 | 
					      tags:
 | 
				
			||||||
      - KindBox
 | 
					      - KindBox
 | 
				
			||||||
 | 
					  /benefactor/kindboxes/{id}/emptying-requests:
 | 
				
			||||||
 | 
					    patch:
 | 
				
			||||||
 | 
					      consumes:
 | 
				
			||||||
 | 
					      - application/json
 | 
				
			||||||
 | 
					      parameters:
 | 
				
			||||||
 | 
					      - description: KindBox ID
 | 
				
			||||||
 | 
					        in: path
 | 
				
			||||||
 | 
					        name: id
 | 
				
			||||||
 | 
					        required: true
 | 
				
			||||||
 | 
					        type: integer
 | 
				
			||||||
 | 
					      - description: Request body
 | 
				
			||||||
 | 
					        in: body
 | 
				
			||||||
 | 
					        name: Request
 | 
				
			||||||
 | 
					        required: true
 | 
				
			||||||
 | 
					        schema:
 | 
				
			||||||
 | 
					          $ref: '#/definitions/benefactorkindboxparam.KindBoxRegisterEmptyingRequest'
 | 
				
			||||||
 | 
					      produces:
 | 
				
			||||||
 | 
					      - application/json
 | 
				
			||||||
 | 
					      responses:
 | 
				
			||||||
 | 
					        "204":
 | 
				
			||||||
 | 
					          description: No content
 | 
				
			||||||
 | 
					          schema:
 | 
				
			||||||
 | 
					            type: string
 | 
				
			||||||
 | 
					        "400":
 | 
				
			||||||
 | 
					          description: Bad request
 | 
				
			||||||
 | 
					          schema:
 | 
				
			||||||
 | 
					            type: string
 | 
				
			||||||
 | 
					      security:
 | 
				
			||||||
 | 
					      - AuthBearerBenefactor: []
 | 
				
			||||||
 | 
					      summary: Register a new emptying request for a kind box by benefactor
 | 
				
			||||||
 | 
					      tags:
 | 
				
			||||||
 | 
					      - Benefactor
 | 
				
			||||||
  /benefactor/kindboxreqs/:
 | 
					  /benefactor/kindboxreqs/:
 | 
				
			||||||
    post:
 | 
					    post:
 | 
				
			||||||
      consumes:
 | 
					      consumes:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,19 +3,20 @@ package entity
 | 
				
			||||||
import "time"
 | 
					import "time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type KindBox struct {
 | 
					type KindBox struct {
 | 
				
			||||||
	ID               uint
 | 
						ID                uint
 | 
				
			||||||
	KindBoxReqID     uint
 | 
						KindBoxReqID      uint
 | 
				
			||||||
	BenefactorID     uint
 | 
						BenefactorID      uint
 | 
				
			||||||
	Type             KindBoxType
 | 
						Type              KindBoxType
 | 
				
			||||||
	Amount           uint
 | 
						Amount            uint
 | 
				
			||||||
	SerialNumber     string
 | 
						SerialNumber      string
 | 
				
			||||||
	Status           KindBoxStatus
 | 
						Status            KindBoxStatus
 | 
				
			||||||
	DeliverReferDate time.Time
 | 
						DeliverReferDate  time.Time
 | 
				
			||||||
	DeliverAddressID uint
 | 
						DeliverAddressID  uint
 | 
				
			||||||
	SenderAgentID    uint
 | 
						SenderAgentID     uint
 | 
				
			||||||
	DeliveredAt      time.Time
 | 
						DeliveredAt       time.Time
 | 
				
			||||||
	ReturnReferDate  time.Time
 | 
						ReturnReferTimeID uint
 | 
				
			||||||
	ReturnAddressID  uint
 | 
						ReturnReferDate   time.Time
 | 
				
			||||||
	ReceiverAgentID  uint
 | 
						ReturnAddressID   uint
 | 
				
			||||||
	ReturnedAt       time.Time
 | 
						ReceiverAgentID   uint
 | 
				
			||||||
 | 
						ReturnedAt        time.Time
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,7 @@ import (
 | 
				
			||||||
	"git.gocasts.ir/ebhomengo/niki/repository/mysql"
 | 
						"git.gocasts.ir/ebhomengo/niki/repository/mysql"
 | 
				
			||||||
	mysqladdress "git.gocasts.ir/ebhomengo/niki/repository/mysql/address"
 | 
						mysqladdress "git.gocasts.ir/ebhomengo/niki/repository/mysql/address"
 | 
				
			||||||
	mysqlbenefactor "git.gocasts.ir/ebhomengo/niki/repository/mysql/benefactor"
 | 
						mysqlbenefactor "git.gocasts.ir/ebhomengo/niki/repository/mysql/benefactor"
 | 
				
			||||||
 | 
						mysqlkindbox "git.gocasts.ir/ebhomengo/niki/repository/mysql/kind_box"
 | 
				
			||||||
	mysqlkindboxreq "git.gocasts.ir/ebhomengo/niki/repository/mysql/kind_box_req"
 | 
						mysqlkindboxreq "git.gocasts.ir/ebhomengo/niki/repository/mysql/kind_box_req"
 | 
				
			||||||
	redisotp "git.gocasts.ir/ebhomengo/niki/repository/redis/redis_otp"
 | 
						redisotp "git.gocasts.ir/ebhomengo/niki/repository/redis/redis_otp"
 | 
				
			||||||
	adminservice "git.gocasts.ir/ebhomengo/niki/service/admin/admin"
 | 
						adminservice "git.gocasts.ir/ebhomengo/niki/service/admin/admin"
 | 
				
			||||||
| 
						 | 
					@ -16,6 +17,7 @@ import (
 | 
				
			||||||
	adminrefertimeservice "git.gocasts.ir/ebhomengo/niki/service/admin/refer_time"
 | 
						adminrefertimeservice "git.gocasts.ir/ebhomengo/niki/service/admin/refer_time"
 | 
				
			||||||
	benefactoraddressservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/address"
 | 
						benefactoraddressservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/address"
 | 
				
			||||||
	benefactorservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/benefactor"
 | 
						benefactorservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/benefactor"
 | 
				
			||||||
 | 
						benefactorkindboxservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/kind_box"
 | 
				
			||||||
	benefactorkindboxreqservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/kind_box_req"
 | 
						benefactorkindboxreqservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/kind_box_req"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,6 +25,7 @@ type Services struct {
 | 
				
			||||||
	BenefactorSvc           benefactorservice.Service
 | 
						BenefactorSvc           benefactorservice.Service
 | 
				
			||||||
	BenefactorKindBoxReqSvc benefactorkindboxreqservice.Service
 | 
						BenefactorKindBoxReqSvc benefactorkindboxreqservice.Service
 | 
				
			||||||
	BenefactorAddressSvc    benefactoraddressservice.Service
 | 
						BenefactorAddressSvc    benefactoraddressservice.Service
 | 
				
			||||||
 | 
						BenefactorKindBoxSvc    benefactorkindboxservice.Service
 | 
				
			||||||
	AdminKindBoxSvc         adminkindboxservice.Service
 | 
						AdminKindBoxSvc         adminkindboxservice.Service
 | 
				
			||||||
	AdminSvc                adminservice.Service
 | 
						AdminSvc                adminservice.Service
 | 
				
			||||||
	AdminKindBoxReqSvc      adminkindboxreqservice.Service
 | 
						AdminKindBoxReqSvc      adminkindboxreqservice.Service
 | 
				
			||||||
| 
						 | 
					@ -62,8 +65,13 @@ func InitAdminKindBoxService(db *mysql.DB) adminkindboxservice.Service {
 | 
				
			||||||
func InitAdminKindBoxReqService(db *mysql.DB) adminkindboxreqservice.Service {
 | 
					func InitAdminKindBoxReqService(db *mysql.DB) adminkindboxreqservice.Service {
 | 
				
			||||||
	return adminkindboxreqservice.New(InitBenefactorKindBoxReqDB(db), InitAdminKindBoxService(db))
 | 
						return adminkindboxreqservice.New(InitBenefactorKindBoxReqDB(db), InitAdminKindBoxService(db))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func InitAdminReferTimeService(db *mysql.DB) adminrefertimeservice.Service {
 | 
					func InitAdminReferTimeService(db *mysql.DB) adminrefertimeservice.Service {
 | 
				
			||||||
	return adminrefertimeservice.New(
 | 
						return adminrefertimeservice.New(
 | 
				
			||||||
		InitAdminReferTimeDB(db),
 | 
							InitAdminReferTimeDB(db),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func InitBenefactorKindBoxService(db *mysql.DB) benefactorkindboxservice.Service {
 | 
				
			||||||
 | 
						return benefactorkindboxservice.New(mysqlkindbox.New(db))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,7 @@ import (
 | 
				
			||||||
	adminkindboxreqvalidator "git.gocasts.ir/ebhomengo/niki/validator/admin/kind_box_req"
 | 
						adminkindboxreqvalidator "git.gocasts.ir/ebhomengo/niki/validator/admin/kind_box_req"
 | 
				
			||||||
	benefactoraddressvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/address"
 | 
						benefactoraddressvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/address"
 | 
				
			||||||
	benefactorvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/benefactor"
 | 
						benefactorvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/benefactor"
 | 
				
			||||||
 | 
						benefactorkindboxvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/kind_box"
 | 
				
			||||||
	benefactorkindboxreqvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/kind_box_req"
 | 
						benefactorkindboxreqvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/kind_box_req"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,6 +16,7 @@ type Validators struct {
 | 
				
			||||||
	BenefactorVld           benefactorvalidator.Validator
 | 
						BenefactorVld           benefactorvalidator.Validator
 | 
				
			||||||
	BenefactorKindBoxReqVld benefactorkindboxreqvalidator.Validator
 | 
						BenefactorKindBoxReqVld benefactorkindboxreqvalidator.Validator
 | 
				
			||||||
	BenefactorAddressVld    benefactoraddressvalidator.Validator
 | 
						BenefactorAddressVld    benefactoraddressvalidator.Validator
 | 
				
			||||||
 | 
						BenefactorKindBoxVld    benefactorkindboxvalidator.Validator
 | 
				
			||||||
	AdminKindBoxReqVld      adminkindboxreqvalidator.Validator
 | 
						AdminKindBoxReqVld      adminkindboxreqvalidator.Validator
 | 
				
			||||||
	AdminVld                adminvalidator.Validator
 | 
						AdminVld                adminvalidator.Validator
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -46,3 +48,12 @@ func InitBenefactorAddressValidator(cfg config.Config, redisAdapter redis.Adapte
 | 
				
			||||||
		InitBenefactorAddressDB(db),
 | 
							InitBenefactorAddressDB(db),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func InitBenefactorKindBoxValidator(cfg config.Config, redisAdapter redis.Adapter, db *mysql.DB) benefactorkindboxvalidator.Validator {
 | 
				
			||||||
 | 
						return benefactorkindboxvalidator.New(
 | 
				
			||||||
 | 
							InitKindBoxRepo(db),
 | 
				
			||||||
 | 
							InitBenefactorService(cfg, redisAdapter, db),
 | 
				
			||||||
 | 
							InitBenefactorAddressService(db),
 | 
				
			||||||
 | 
							InitAdminReferTimeService(db),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								main.go
								
								
								
								
							
							
						
						
									
										3
									
								
								main.go
								
								
								
								
							| 
						 | 
					@ -62,6 +62,7 @@ func initDependencies(cfg config.Config, redisAdapter redis.Adapter, db *mysql.D
 | 
				
			||||||
			BenefactorVld:           initial.InitBenefactorValidator(),
 | 
								BenefactorVld:           initial.InitBenefactorValidator(),
 | 
				
			||||||
			BenefactorKindBoxReqVld: initial.InitBenefactorKindBoxReqValidator(cfg, redisAdapter, db),
 | 
								BenefactorKindBoxReqVld: initial.InitBenefactorKindBoxReqValidator(cfg, redisAdapter, db),
 | 
				
			||||||
			BenefactorAddressVld:    initial.InitBenefactorAddressValidator(cfg, redisAdapter, db),
 | 
								BenefactorAddressVld:    initial.InitBenefactorAddressValidator(cfg, redisAdapter, db),
 | 
				
			||||||
 | 
								BenefactorKindBoxVld:    initial.InitBenefactorKindBoxValidator(cfg, redisAdapter, db),
 | 
				
			||||||
			AdminKindBoxReqVld:      initial.InitAdminKindBoxReqValidator(db, cfg),
 | 
								AdminKindBoxReqVld:      initial.InitAdminKindBoxReqValidator(db, cfg),
 | 
				
			||||||
			AdminVld:                initial.InitAdminValidator(db),
 | 
								AdminVld:                initial.InitAdminValidator(db),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
| 
						 | 
					@ -69,6 +70,7 @@ func initDependencies(cfg config.Config, redisAdapter redis.Adapter, db *mysql.D
 | 
				
			||||||
			BenefactorSvc:           initial.InitBenefactorService(cfg, redisAdapter, db),
 | 
								BenefactorSvc:           initial.InitBenefactorService(cfg, redisAdapter, db),
 | 
				
			||||||
			BenefactorKindBoxReqSvc: initial.InitBenefactorKindBoxReqService(db),
 | 
								BenefactorKindBoxReqSvc: initial.InitBenefactorKindBoxReqService(db),
 | 
				
			||||||
			BenefactorAddressSvc:    initial.InitBenefactorAddressService(db),
 | 
								BenefactorAddressSvc:    initial.InitBenefactorAddressService(db),
 | 
				
			||||||
 | 
								BenefactorKindBoxSvc:    initial.InitBenefactorKindBoxService(db),
 | 
				
			||||||
			AdminKindBoxSvc:         initial.InitAdminKindBoxService(db),
 | 
								AdminKindBoxSvc:         initial.InitAdminKindBoxService(db),
 | 
				
			||||||
			AdminKindBoxReqSvc:      initial.InitAdminKindBoxReqService(db),
 | 
								AdminKindBoxReqSvc:      initial.InitAdminKindBoxReqService(db),
 | 
				
			||||||
			AdminSvc:                initial.InitAdminService(cfg, db),
 | 
								AdminSvc:                initial.InitAdminService(cfg, db),
 | 
				
			||||||
| 
						 | 
					@ -85,6 +87,7 @@ func initAndRunServer(cfg config.Config, dependencies *Dependencies) {
 | 
				
			||||||
		dependencies.BenefactorSvc, dependencies.BenefactorVld, dependencies.BenefactorAuthSvc,
 | 
							dependencies.BenefactorSvc, dependencies.BenefactorVld, dependencies.BenefactorAuthSvc,
 | 
				
			||||||
		dependencies.BenefactorKindBoxReqSvc, dependencies.BenefactorKindBoxReqVld,
 | 
							dependencies.BenefactorKindBoxReqSvc, dependencies.BenefactorKindBoxReqVld,
 | 
				
			||||||
		dependencies.BenefactorAddressSvc, dependencies.BenefactorAddressVld,
 | 
							dependencies.BenefactorAddressSvc, dependencies.BenefactorAddressVld,
 | 
				
			||||||
 | 
							dependencies.BenefactorKindBoxSvc, dependencies.BenefactorKindBoxVld,
 | 
				
			||||||
		dependencies.AdminSvc, dependencies.AdminVld, dependencies.AdminAuthSvc,
 | 
							dependencies.AdminSvc, dependencies.AdminVld, dependencies.AdminAuthSvc,
 | 
				
			||||||
		dependencies.AdminKindBoxReqSvc, dependencies.AdminKindBoxReqVld, dependencies.AdminAuthorizationSvc)
 | 
							dependencies.AdminKindBoxReqSvc, dependencies.AdminKindBoxReqVld, dependencies.AdminAuthorizationSvc)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					package benefactorkindboxparam
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type KindBoxRegisterEmptyingRequest struct {
 | 
				
			||||||
 | 
						KindBoxID         uint      `json:"-" param:"id"`
 | 
				
			||||||
 | 
						BenefactorID      uint      `json:"-"`
 | 
				
			||||||
 | 
						ReturnAddressID   uint      `json:"return_address_id" example:"1"`
 | 
				
			||||||
 | 
						ReturnReferTimeID uint      `json:"return_refer_time_id" example:"1"`
 | 
				
			||||||
 | 
						ReturnReferDate   time.Time `json:"return_refer_date" example:"2025-01-02T15:04:05Z"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type KindBoxRegisterEmptyingRequestResponse struct {
 | 
				
			||||||
 | 
						entity.KindBox `json:"kind_box"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					package mysqlkindbox
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
				
			||||||
 | 
						richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d DB) BenefactorKindBoxExist(ctx context.Context, benefactorID, kindBoxID uint) (bool, error) {
 | 
				
			||||||
 | 
						const op = "mysqlkindbox.BenefactorKindBoxExist"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var count int
 | 
				
			||||||
 | 
						if err := d.conn.Conn().QueryRowContext(ctx, `SELECT COUNT(*) FROM kind_boxes WHERE benefactor_id = ? AND id = ?`, benefactorID, kindBoxID).Scan(&count); err != nil {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return false, richerror.New(op).WithErr(err).
 | 
				
			||||||
 | 
								WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return count > 0, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,34 @@
 | 
				
			||||||
 | 
					package mysqlkindbox
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"database/sql"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
						errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
				
			||||||
 | 
						richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d DB) GetKindBox(ctx context.Context, kindBoxID uint) (entity.KindBox, error) {
 | 
				
			||||||
 | 
						const op = "mysqlkindbox.GetKindBox"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						query := `SELECT * FROM kind_boxes WHERE id = ? AND deleted_at IS NULL`
 | 
				
			||||||
 | 
						row := d.conn.Conn().QueryRowContext(ctx, query, kindBoxID)
 | 
				
			||||||
 | 
						k, err := scanKindBox(row)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							if err == sql.ErrNoRows {
 | 
				
			||||||
 | 
								return entity.KindBox{}, richerror.New(op).WithErr(err).
 | 
				
			||||||
 | 
									WithMessage(errmsg.ErrorMsgNotFound).WithKind(richerror.KindNotFound)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return entity.KindBox{}, richerror.New(op).WithErr(err).
 | 
				
			||||||
 | 
								WithMessage(errmsg.ErrorMsgCantScanQueryResult).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return k, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d DB) GetAllKindBox(ctx context.Context, benefactorID uint) ([]entity.KindBox, error) {
 | 
				
			||||||
 | 
						// TODO implement me
 | 
				
			||||||
 | 
						panic("implement me")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					package mysqlkindbox
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
						errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
				
			||||||
 | 
						richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d DB) RegisterEmptyingRequestForKindBox(ctx context.Context, kindBox entity.KindBox) error {
 | 
				
			||||||
 | 
						const op = "mysqlkindbox.RegisterEmptyingRequest"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						query := `UPDATE kind_boxes 
 | 
				
			||||||
 | 
								  SET return_address_id = ?, return_refer_time_id = ?, return_refer_date = ?, status = ?
 | 
				
			||||||
 | 
								  WHERE id = ? AND benefactor_id = ? AND status = ? AND deleted_at IS NULL`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_, err := d.conn.Conn().ExecContext(ctx, query,
 | 
				
			||||||
 | 
							kindBox.ReturnAddressID, kindBox.ReturnReferTimeID, kindBox.ReturnReferDate, kindBox.Status.String(),
 | 
				
			||||||
 | 
							kindBox.ID, kindBox.BenefactorID, entity.KindBoxDeliveredStatus.String())
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return richerror.New(op).WithErr(err).WithMessage(errmsg.ErrorMsgSomethingWentWrong).
 | 
				
			||||||
 | 
								WithKind(richerror.KindUnexpected)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,86 @@
 | 
				
			||||||
 | 
					package mysqlkindbox
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"database/sql"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/repository/mysql"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func scanKindBox(scanner mysql.Scanner) (entity.KindBox, error) {
 | 
				
			||||||
 | 
						var kindBox entity.KindBox
 | 
				
			||||||
 | 
						var (
 | 
				
			||||||
 | 
							kindBoxType       string
 | 
				
			||||||
 | 
							amount            sql.NullInt64
 | 
				
			||||||
 | 
							serialNumber      sql.NullString
 | 
				
			||||||
 | 
							status            string
 | 
				
			||||||
 | 
							senderAgentID     sql.NullInt64
 | 
				
			||||||
 | 
							deliveredAt       sql.NullTime
 | 
				
			||||||
 | 
							returnReferTimeID sql.NullInt64
 | 
				
			||||||
 | 
							returnReferDate   sql.NullTime
 | 
				
			||||||
 | 
							returnAddressID   sql.NullInt64
 | 
				
			||||||
 | 
							receiverAgentID   sql.NullInt64
 | 
				
			||||||
 | 
							returnedAt        sql.NullTime
 | 
				
			||||||
 | 
							createdAt         time.Time
 | 
				
			||||||
 | 
							updatedAt         time.Time
 | 
				
			||||||
 | 
							deletedAt         sql.NullTime
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err := scanner.Scan(
 | 
				
			||||||
 | 
							&kindBox.ID,
 | 
				
			||||||
 | 
							&kindBox.KindBoxReqID,
 | 
				
			||||||
 | 
							&kindBox.BenefactorID,
 | 
				
			||||||
 | 
							&kindBoxType,
 | 
				
			||||||
 | 
							&amount,
 | 
				
			||||||
 | 
							&serialNumber,
 | 
				
			||||||
 | 
							&status,
 | 
				
			||||||
 | 
							&kindBox.DeliverReferDate,
 | 
				
			||||||
 | 
							&kindBox.DeliverAddressID,
 | 
				
			||||||
 | 
							&kindBox.SenderAgentID,
 | 
				
			||||||
 | 
							&kindBox.DeliveredAt,
 | 
				
			||||||
 | 
							&returnReferTimeID,
 | 
				
			||||||
 | 
							&returnReferDate,
 | 
				
			||||||
 | 
							&returnAddressID,
 | 
				
			||||||
 | 
							&receiverAgentID,
 | 
				
			||||||
 | 
							&returnedAt,
 | 
				
			||||||
 | 
							&createdAt,
 | 
				
			||||||
 | 
							&updatedAt,
 | 
				
			||||||
 | 
							&deletedAt,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return entity.KindBox{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						kindBox.Type = entity.MapToKindBoxType(kindBoxType)
 | 
				
			||||||
 | 
						if amount.Valid {
 | 
				
			||||||
 | 
							kindBox.Amount = uint(amount.Int64)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if serialNumber.Valid {
 | 
				
			||||||
 | 
							kindBox.SerialNumber = serialNumber.String
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						kindBox.Status = entity.MapToKindBoxStatus(status)
 | 
				
			||||||
 | 
						if senderAgentID.Valid {
 | 
				
			||||||
 | 
							kindBox.SenderAgentID = uint(senderAgentID.Int64)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if deliveredAt.Valid {
 | 
				
			||||||
 | 
							kindBox.DeliveredAt = deliveredAt.Time
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if returnReferTimeID.Valid {
 | 
				
			||||||
 | 
							kindBox.ReturnReferTimeID = uint(returnReferTimeID.Int64)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if returnReferDate.Valid {
 | 
				
			||||||
 | 
							kindBox.ReturnReferDate = returnReferDate.Time
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if returnAddressID.Valid {
 | 
				
			||||||
 | 
							kindBox.ReturnAddressID = uint(returnAddressID.Int64)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if receiverAgentID.Valid {
 | 
				
			||||||
 | 
							kindBox.ReceiverAgentID = uint(receiverAgentID.Int64)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if returnedAt.Valid {
 | 
				
			||||||
 | 
							kindBox.ReturnedAt = returnedAt.Time
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return kindBox, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -11,6 +11,7 @@ CREATE TABLE `kind_boxes` (
 | 
				
			||||||
                            `deliver_address_id`    INT NOT NULL,
 | 
					                            `deliver_address_id`    INT NOT NULL,
 | 
				
			||||||
                            `sender_agent_id`       INT NOT NULL,
 | 
					                            `sender_agent_id`       INT NOT NULL,
 | 
				
			||||||
                            `delivered_at`          DATETIME NOT NULL,
 | 
					                            `delivered_at`          DATETIME NOT NULL,
 | 
				
			||||||
 | 
					                            `return_refer_time_id`  INT,
 | 
				
			||||||
                            `return_refer_date`     DATETIME,
 | 
					                            `return_refer_date`     DATETIME,
 | 
				
			||||||
                            `return_address_id`     INT,
 | 
					                            `return_address_id`     INT,
 | 
				
			||||||
                            `receiver_agent_id`     INT,
 | 
					                            `receiver_agent_id`     INT,
 | 
				
			||||||
| 
						 | 
					@ -18,10 +19,12 @@ CREATE TABLE `kind_boxes` (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            `created_at`            TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | 
					                            `created_at`            TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | 
				
			||||||
                            `updated_at`            TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 | 
					                            `updated_at`            TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 | 
				
			||||||
 | 
					                            `deleted_at`            TIMESTAMP NULL,
 | 
				
			||||||
                            FOREIGN KEY (`kind_box_req_id`)     REFERENCES `kind_box_reqs` (`id`),
 | 
					                            FOREIGN KEY (`kind_box_req_id`)     REFERENCES `kind_box_reqs` (`id`),
 | 
				
			||||||
                            FOREIGN KEY (`benefactor_id`)       REFERENCES `benefactors` (`id`),
 | 
					                            FOREIGN KEY (`benefactor_id`)       REFERENCES `benefactors` (`id`),
 | 
				
			||||||
                            FOREIGN KEY (`deliver_address_id`)  REFERENCES `addresses` (`id`),
 | 
					                            FOREIGN KEY (`deliver_address_id`)  REFERENCES `addresses` (`id`),
 | 
				
			||||||
                            FOREIGN KEY (`sender_agent_id`)     REFERENCES `admins` (`id`),
 | 
					                            FOREIGN KEY (`sender_agent_id`)     REFERENCES `admins` (`id`),
 | 
				
			||||||
 | 
					                            FOREIGN KEY (`return_refer_time_id`)REFERENCES `refer_times` (`id`),
 | 
				
			||||||
                            FOREIGN KEY (`return_address_id`)   REFERENCES `addresses` (`id`),
 | 
					                            FOREIGN KEY (`return_address_id`)   REFERENCES `addresses` (`id`),
 | 
				
			||||||
                            FOREIGN KEY (`receiver_agent_id`)   REFERENCES `admins` (`id`),
 | 
					                            FOREIGN KEY (`receiver_agent_id`)   REFERENCES `admins` (`id`),
 | 
				
			||||||
                            INDEX `index_serial_number` (`serial_number`)
 | 
					                            INDEX `index_serial_number` (`serial_number`)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					package benefactorkindboxservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
						param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box"
 | 
				
			||||||
 | 
						richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s Service) RegisterEmptyingRequest(ctx context.Context, req param.KindBoxRegisterEmptyingRequest) error {
 | 
				
			||||||
 | 
						const op = "benefactorKindBoxService.RegisterEmptyingRequest"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err := s.repo.RegisterEmptyingRequestForKindBox(ctx, entity.KindBox{
 | 
				
			||||||
 | 
							ID:                req.KindBoxID,
 | 
				
			||||||
 | 
							ReturnAddressID:   req.ReturnAddressID,
 | 
				
			||||||
 | 
							ReturnReferTimeID: req.ReturnReferTimeID,
 | 
				
			||||||
 | 
							ReturnReferDate:   req.ReturnReferDate,
 | 
				
			||||||
 | 
							Status:            entity.KindBoxReadyToReturnStatus,
 | 
				
			||||||
 | 
							BenefactorID:      req.BenefactorID,
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return richerror.New(op).WithErr(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -9,6 +9,7 @@ import (
 | 
				
			||||||
type Repository interface {
 | 
					type Repository interface {
 | 
				
			||||||
	GetAllKindBox(ctx context.Context, benefactorID uint) ([]entity.KindBox, error)
 | 
						GetAllKindBox(ctx context.Context, benefactorID uint) ([]entity.KindBox, 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
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Service struct {
 | 
					type Service struct {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,10 +17,8 @@ func (v Validator) ValidateGetRequest(req param.KindBoxGetRequest) (map[string]s
 | 
				
			||||||
			validation.Required,
 | 
								validation.Required,
 | 
				
			||||||
			validation.By(v.doesBenefactorExist)),
 | 
								validation.By(v.doesBenefactorExist)),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		validation.Field(&req.KindBoxID,
 | 
							validation.Field(&req.KindBoxID, validation.Required,
 | 
				
			||||||
			validation.Required,
 | 
								validation.By(v.doesBenefactorKindBoxExist(req.BenefactorID))),
 | 
				
			||||||
			validation.By(v.doesKindBoxExist),
 | 
					 | 
				
			||||||
			validation.By(v.doesKindBoxBelongToBenefactor(req.BenefactorID))),
 | 
					 | 
				
			||||||
	); err != nil {
 | 
						); err != nil {
 | 
				
			||||||
		fieldErrors := make(map[string]string)
 | 
							fieldErrors := make(map[string]string)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,51 @@
 | 
				
			||||||
 | 
					package benefactorkindboxvalidator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						param "git.gocasts.ir/ebhomengo/niki/param/benefactor/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) ValidateRegisterEmptyingRequest(req param.KindBoxRegisterEmptyingRequest) (map[string]string, error) {
 | 
				
			||||||
 | 
						const op = "benefactorkindboxvalidator.ValidateRegisterEmptyingRequest"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := validation.ValidateStruct(&req,
 | 
				
			||||||
 | 
							validation.Field(&req.BenefactorID, validation.Required,
 | 
				
			||||||
 | 
								validation.By(v.doesBenefactorExist)),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							validation.Field(&req.KindBoxID, validation.Required,
 | 
				
			||||||
 | 
								validation.By(v.doesBenefactorKindBoxExist(req.BenefactorID)),
 | 
				
			||||||
 | 
								validation.By(v.doesKindBoxHaveDeliveredStatus)),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							validation.Field(&req.ReturnAddressID, validation.Required,
 | 
				
			||||||
 | 
								validation.By(v.doesAddressExist(req.BenefactorID))),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							validation.Field(&req.ReturnReferDate, validation.Required,
 | 
				
			||||||
 | 
								validation.By(v.isDateValid)),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							validation.Field(&req.ReturnReferTimeID, validation.Required,
 | 
				
			||||||
 | 
								validation.By(v.isReferTimeIDValid)),
 | 
				
			||||||
 | 
						); 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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,24 +1,44 @@
 | 
				
			||||||
package benefactorkindboxvalidator
 | 
					package benefactorkindboxvalidator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
						refertimeparam "git.gocasts.ir/ebhomengo/niki/param/admin/refer_time"
 | 
				
			||||||
 | 
						addressparam "git.gocasts.ir/ebhomengo/niki/param/benefactor/address"
 | 
				
			||||||
 | 
						param "git.gocasts.ir/ebhomengo/niki/param/benefactor/benefactore"
 | 
				
			||||||
	errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
						errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
				
			||||||
	validation "github.com/go-ozzo/ozzo-validation/v4"
 | 
						validation "github.com/go-ozzo/ozzo-validation/v4"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Repository interface {
 | 
					type Repository interface {
 | 
				
			||||||
	BenefactorExist(id uint) (bool, error)
 | 
						BenefactorKindBoxExist(ctx context.Context, benefactorID uint, kindBoxID uint) (bool, error)
 | 
				
			||||||
	KindBoxExist(id uint) (bool, error)
 | 
						GetKindBox(ctx context.Context, kindBoxID uint) (entity.KindBox, error)
 | 
				
			||||||
	KindBoxBelongToBenefactor(bID uint, kbID uint) (bool, error)
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type BenefactorSvc interface {
 | 
				
			||||||
 | 
						BenefactorExistByID(ctx context.Context, request param.BenefactorExistByIDRequest) (param.BenefactorExistByIDResponse, error)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type AddressSvc interface {
 | 
				
			||||||
 | 
						AddressExistByID(ctx context.Context, request addressparam.GetAddressByIDRequest) (addressparam.GetAddressByIDResponse, error)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ReferTimeSvc interface {
 | 
				
			||||||
 | 
						GetReferTimeByID(ctx context.Context, req refertimeparam.GetReferTimeRequest) (refertimeparam.GetReferTimeResponse, error)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Validator struct {
 | 
					type Validator struct {
 | 
				
			||||||
	repo Repository
 | 
						repo          Repository
 | 
				
			||||||
 | 
						benefactorSvc BenefactorSvc
 | 
				
			||||||
 | 
						addressSvc    AddressSvc
 | 
				
			||||||
 | 
						referTimeSvc  ReferTimeSvc
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func New(repo Repository) Validator {
 | 
					func New(repo Repository, benefactorSvc BenefactorSvc, addressSvc AddressSvc, referTimeSvc ReferTimeSvc) Validator {
 | 
				
			||||||
	return Validator{repo: repo}
 | 
						return Validator{repo: repo, benefactorSvc: benefactorSvc, addressSvc: addressSvc, referTimeSvc: referTimeSvc}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (v Validator) doesBenefactorExist(value interface{}) error {
 | 
					func (v Validator) doesBenefactorExist(value interface{}) error {
 | 
				
			||||||
| 
						 | 
					@ -26,7 +46,7 @@ func (v Validator) doesBenefactorExist(value interface{}) error {
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
							return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, err := v.repo.BenefactorExist(benefactorID)
 | 
						_, err := v.benefactorSvc.BenefactorExistByID(context.Background(), param.BenefactorExistByIDRequest{ID: benefactorID})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
							return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -34,30 +54,86 @@ func (v Validator) doesBenefactorExist(value interface{}) error {
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (v Validator) doesKindBoxExist(value interface{}) error {
 | 
					func (v Validator) doesBenefactorKindBoxExist(benefactorID uint) validation.RuleFunc {
 | 
				
			||||||
	kindBoxID, ok := value.(uint)
 | 
					 | 
				
			||||||
	if !ok {
 | 
					 | 
				
			||||||
		return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	_, err := v.repo.KindBoxExist(kindBoxID)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (v Validator) doesKindBoxBelongToBenefactor(benefactorID uint) validation.RuleFunc {
 | 
					 | 
				
			||||||
	return func(value interface{}) error {
 | 
						return func(value interface{}) error {
 | 
				
			||||||
		kbID, ok := value.(uint)
 | 
							kbID, ok := value.(uint)
 | 
				
			||||||
		if !ok {
 | 
							if !ok {
 | 
				
			||||||
			return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
								return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		_, err := v.repo.KindBoxBelongToBenefactor(benefactorID, kbID)
 | 
							exist, err := v.repo.BenefactorKindBoxExist(context.Background(), benefactorID, kbID)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if !exist {
 | 
				
			||||||
			return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
								return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (v Validator) doesAddressExist(benefactorID uint) validation.RuleFunc {
 | 
				
			||||||
 | 
						return func(value interface{}) error {
 | 
				
			||||||
 | 
							addressID, ok := value.(uint)
 | 
				
			||||||
 | 
							if !ok {
 | 
				
			||||||
 | 
								return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							address, err := v.addressSvc.AddressExistByID(context.Background(), addressparam.GetAddressByIDRequest{ID: addressID})
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if address.Address == nil {
 | 
				
			||||||
 | 
								return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if address.Address.BenefactorID != benefactorID {
 | 
				
			||||||
 | 
								return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (v Validator) isDateValid(value interface{}) error {
 | 
				
			||||||
 | 
						date, ok := value.(time.Time)
 | 
				
			||||||
 | 
						if !ok {
 | 
				
			||||||
 | 
							return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if date.Before(time.Now()) {
 | 
				
			||||||
 | 
							return fmt.Errorf(errmsg.ErrorMsgInvalidInput)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (v Validator) isReferTimeIDValid(value interface{}) error {
 | 
				
			||||||
 | 
						referTimeID, ok := value.(uint)
 | 
				
			||||||
 | 
						if !ok {
 | 
				
			||||||
 | 
							return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						resp, gErr := v.referTimeSvc.GetReferTimeByID(context.Background(), refertimeparam.GetReferTimeRequest{
 | 
				
			||||||
 | 
							ReferTimeID: referTimeID,
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						if gErr != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf(errmsg.ErrorMsgReferTimeNotFound)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if resp.ReferTime.Status != entity.ReferTimeActiveStatus {
 | 
				
			||||||
 | 
							return fmt.Errorf(errmsg.ErrorMsgReferTimeIsNotActive)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (v Validator) doesKindBoxHaveDeliveredStatus(value interface{}) error {
 | 
				
			||||||
 | 
						kindBoxID, ok := value.(uint)
 | 
				
			||||||
 | 
						if !ok {
 | 
				
			||||||
 | 
							return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						kindBox, err := v.repo.GetKindBox(context.Background(), kindBoxID)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if kindBox.Status != entity.KindBoxDeliveredStatus {
 | 
				
			||||||
 | 
							return fmt.Errorf(errmsg.ErrorMsgInvalidStatus)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue