forked from ebhomengo/niki
				
			✨feat(niki): add kindboxreq benefactor
This commit is contained in:
		
							parent
							
								
									f622b6edd0
								
							
						
					
					
						commit
						91409f0275
					
				| 
						 | 
					@ -1,32 +1,32 @@
 | 
				
			||||||
package adminkindboxreqhandler
 | 
					package adminkindboxreqhandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					// import (
 | 
				
			||||||
	"net/http"
 | 
					//	"net/http"
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
 | 
					//	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
 | 
				
			||||||
	httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
 | 
					//	httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
 | 
				
			||||||
	echo "github.com/labstack/echo/v4"
 | 
					//	echo "github.com/labstack/echo/v4"
 | 
				
			||||||
)
 | 
					//)
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
func (h Handler) Add(c echo.Context) error {
 | 
					// func (h Handler) Add(c echo.Context) error {
 | 
				
			||||||
	var req param.KindBoxReqAddRequest
 | 
					//	var req param.KindBoxReqAddRequest
 | 
				
			||||||
	if bErr := c.Bind(&req); bErr != nil {
 | 
					//	if bErr := c.Bind(&req); bErr != nil {
 | 
				
			||||||
		return echo.NewHTTPError(http.StatusBadRequest)
 | 
					//		return echo.NewHTTPError(http.StatusBadRequest)
 | 
				
			||||||
	}
 | 
					//	}
 | 
				
			||||||
	if fieldErrors, err := h.adminKindBoxReqVld.ValidateAddRequest(req); err != nil {
 | 
					//	if fieldErrors, err := h.adminKindBoxReqVld.ValidateAddRequest(req); err != nil {
 | 
				
			||||||
		msg, code := httpmsg.Error(err)
 | 
					//		msg, code := httpmsg.Error(err)
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
		return c.JSON(code, echo.Map{
 | 
					//		return c.JSON(code, echo.Map{
 | 
				
			||||||
			"message": msg,
 | 
					//			"message": msg,
 | 
				
			||||||
			"errors":  fieldErrors,
 | 
					//			"errors":  fieldErrors,
 | 
				
			||||||
		})
 | 
					//		})
 | 
				
			||||||
	}
 | 
					//	}
 | 
				
			||||||
	resp, sErr := h.adminKindBoxReqSvc.Add(c.Request().Context(), req)
 | 
					//	resp, sErr := h.adminKindBoxReqSvc.Add(c.Request().Context(), req)
 | 
				
			||||||
	if sErr != nil {
 | 
					//	if sErr != nil {
 | 
				
			||||||
		msg, code := httpmsg.Error(sErr)
 | 
					//		msg, code := httpmsg.Error(sErr)
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
		return echo.NewHTTPError(code, msg)
 | 
					//		return echo.NewHTTPError(code, msg)
 | 
				
			||||||
	}
 | 
					//	}
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
	return c.JSON(http.StatusCreated, resp)
 | 
					//	return c.JSON(http.StatusCreated, resp)
 | 
				
			||||||
}
 | 
					//}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,8 +7,10 @@ import (
 | 
				
			||||||
func (h Handler) SetRoutes(e *echo.Echo) {
 | 
					func (h Handler) SetRoutes(e *echo.Echo) {
 | 
				
			||||||
	r := e.Group("/admin/kindboxreqs")
 | 
						r := e.Group("/admin/kindboxreqs")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	r.POST("/", h.Add).Name = "admin-addkindboxreq"
 | 
						//nolint:gocritic
 | 
				
			||||||
 | 
						//r.POST("/", h.Add).Name = "admin-addkindboxreq"
 | 
				
			||||||
	r.GET("/:id", h.Get).Name = "admin-getkindboxreqbyid"
 | 
						r.GET("/:id", h.Get).Name = "admin-getkindboxreqbyid"
 | 
				
			||||||
	r.GET("/", h.GetAll).Name = "admin-getallkindboxreq"
 | 
						r.GET("/", h.GetAll).Name = "admin-getallkindboxreq"
 | 
				
			||||||
	r.PATCH("/:id", h.Update).Name = "admin-updatekindboxreq"
 | 
						//nolint:gocritic
 | 
				
			||||||
 | 
						//r.PATCH("/:id", h.Update).Name = "admin-updatekindboxreq"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,32 +1,32 @@
 | 
				
			||||||
package adminkindboxreqhandler
 | 
					package adminkindboxreqhandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					// import (
 | 
				
			||||||
	"net/http"
 | 
					//	"net/http"
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
 | 
					//	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
 | 
				
			||||||
	httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
 | 
					//	httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
 | 
				
			||||||
	echo "github.com/labstack/echo/v4"
 | 
					//	echo "github.com/labstack/echo/v4"
 | 
				
			||||||
)
 | 
					//)
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
func (h Handler) Update(c echo.Context) error {
 | 
					// func (h Handler) Update(c echo.Context) error {
 | 
				
			||||||
	var req param.KindBoxReqUpdateRequest
 | 
					//	var req param.KindBoxReqUpdateRequest
 | 
				
			||||||
	if bErr := c.Bind(&req); bErr != nil {
 | 
					//	if bErr := c.Bind(&req); bErr != nil {
 | 
				
			||||||
		return echo.NewHTTPError(http.StatusBadRequest)
 | 
					//		return echo.NewHTTPError(http.StatusBadRequest)
 | 
				
			||||||
	}
 | 
					//	}
 | 
				
			||||||
	if fieldErrors, err := h.adminKindBoxReqVld.ValidateUpdateRequest(req); err != nil {
 | 
					//	if fieldErrors, err := h.adminKindBoxReqVld.ValidateUpdateRequest(req); err != nil {
 | 
				
			||||||
		msg, code := httpmsg.Error(err)
 | 
					//		msg, code := httpmsg.Error(err)
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
		return c.JSON(code, echo.Map{
 | 
					//		return c.JSON(code, echo.Map{
 | 
				
			||||||
			"message": msg,
 | 
					//			"message": msg,
 | 
				
			||||||
			"errors":  fieldErrors,
 | 
					//			"errors":  fieldErrors,
 | 
				
			||||||
		})
 | 
					//		})
 | 
				
			||||||
	}
 | 
					//	}
 | 
				
			||||||
	resp, sErr := h.adminKindBoxReqSvc.Update(c.Request().Context(), req)
 | 
					//	resp, sErr := h.adminKindBoxReqSvc.Update(c.Request().Context(), req)
 | 
				
			||||||
	if sErr != nil {
 | 
					//	if sErr != nil {
 | 
				
			||||||
		msg, code := httpmsg.Error(sErr)
 | 
					//		msg, code := httpmsg.Error(sErr)
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
		return echo.NewHTTPError(code, msg)
 | 
					//		return echo.NewHTTPError(code, msg)
 | 
				
			||||||
	}
 | 
					//	}
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
	return c.JSON(http.StatusCreated, resp)
 | 
					//	return c.JSON(http.StatusCreated, resp)
 | 
				
			||||||
}
 | 
					//}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,15 +4,18 @@ import (
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
						param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/pkg/claim"
 | 
				
			||||||
	httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
 | 
						httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
 | 
				
			||||||
	echo "github.com/labstack/echo/v4"
 | 
						echo "github.com/labstack/echo/v4"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (h Handler) Add(c echo.Context) error {
 | 
					func (h Handler) Add(c echo.Context) error {
 | 
				
			||||||
	var req param.KindBoxReqAddRequest
 | 
						claims := claim.GetClaimsFromEchoContext(c)
 | 
				
			||||||
 | 
						req := param.KindBoxReqAddRequest{BenefactorID: claims.UserID}
 | 
				
			||||||
	if bErr := c.Bind(&req); bErr != nil {
 | 
						if bErr := c.Bind(&req); bErr != nil {
 | 
				
			||||||
		return echo.NewHTTPError(http.StatusBadRequest)
 | 
							return echo.NewHTTPError(http.StatusBadRequest)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if fieldErrors, err := h.benefactorKindBoxReqVld.ValidateAddRequest(req); err != nil {
 | 
						if fieldErrors, err := h.benefactorKindBoxReqVld.ValidateAddRequest(req); err != nil {
 | 
				
			||||||
		msg, code := httpmsg.Error(err)
 | 
							msg, code := httpmsg.Error(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,32 +1,24 @@
 | 
				
			||||||
package benefactorkindboxreqhandler
 | 
					package benefactorkindboxreqhandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					// func (h Handler) Get(c echo.Context) error {
 | 
				
			||||||
	"net/http"
 | 
					//	var req param.KindBoxReqGetRequest
 | 
				
			||||||
 | 
					//	if bErr := c.Bind(&req); bErr != nil {
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
					//		return echo.NewHTTPError(http.StatusBadRequest)
 | 
				
			||||||
	httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
 | 
					//	}
 | 
				
			||||||
	echo "github.com/labstack/echo/v4"
 | 
					//	if fieldErrors, err := h.benefactorKindBoxReqVld.ValidateGetRequest(req); err != nil {
 | 
				
			||||||
)
 | 
					//		msg, code := httpmsg.Error(err)
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
func (h Handler) Get(c echo.Context) error {
 | 
					//		return c.JSON(code, echo.Map{
 | 
				
			||||||
	var req param.KindBoxReqGetRequest
 | 
					//			"message": msg,
 | 
				
			||||||
	if bErr := c.Bind(&req); bErr != nil {
 | 
					//			"errors":  fieldErrors,
 | 
				
			||||||
		return echo.NewHTTPError(http.StatusBadRequest)
 | 
					//		})
 | 
				
			||||||
	}
 | 
					//	}
 | 
				
			||||||
	if fieldErrors, err := h.benefactorKindBoxReqVld.ValidateGetRequest(req); err != nil {
 | 
					//	resp, sErr := h.benefactorKindBoxReqSvc.Get(c.Request().Context(), req)
 | 
				
			||||||
		msg, code := httpmsg.Error(err)
 | 
					//	if sErr != nil {
 | 
				
			||||||
 | 
					//		msg, code := httpmsg.Error(sErr)
 | 
				
			||||||
		return c.JSON(code, echo.Map{
 | 
					//
 | 
				
			||||||
			"message": msg,
 | 
					//		return echo.NewHTTPError(code, msg)
 | 
				
			||||||
			"errors":  fieldErrors,
 | 
					//	}
 | 
				
			||||||
		})
 | 
					//
 | 
				
			||||||
	}
 | 
					//	return c.JSON(http.StatusCreated, resp)
 | 
				
			||||||
	resp, sErr := h.benefactorKindBoxReqSvc.Get(c.Request().Context(), req)
 | 
					//}
 | 
				
			||||||
	if sErr != nil {
 | 
					 | 
				
			||||||
		msg, code := httpmsg.Error(sErr)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return echo.NewHTTPError(code, msg)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return c.JSON(http.StatusCreated, resp)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,25 +1,17 @@
 | 
				
			||||||
package benefactorkindboxreqhandler
 | 
					package benefactorkindboxreqhandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					// func (h Handler) GetAll(c echo.Context) error {
 | 
				
			||||||
	"net/http"
 | 
					//	var req param.KindBoxReqGetAllRequest
 | 
				
			||||||
 | 
					//	if bErr := c.Bind(&req); bErr != nil {
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
					//		return echo.NewHTTPError(http.StatusBadRequest)
 | 
				
			||||||
	httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
 | 
					//	}
 | 
				
			||||||
	echo "github.com/labstack/echo/v4"
 | 
					//
 | 
				
			||||||
)
 | 
					//	resp, sErr := h.benefactorKindBoxReqSvc.GetAll(c.Request().Context(), req)
 | 
				
			||||||
 | 
					//	if sErr != nil {
 | 
				
			||||||
func (h Handler) GetAll(c echo.Context) error {
 | 
					//		msg, code := httpmsg.Error(sErr)
 | 
				
			||||||
	var req param.KindBoxReqGetAllRequest
 | 
					//
 | 
				
			||||||
	if bErr := c.Bind(&req); bErr != nil {
 | 
					//		return echo.NewHTTPError(code, msg)
 | 
				
			||||||
		return echo.NewHTTPError(http.StatusBadRequest)
 | 
					//	}
 | 
				
			||||||
	}
 | 
					//
 | 
				
			||||||
 | 
					//	return c.JSON(http.StatusCreated, resp)
 | 
				
			||||||
	resp, sErr := h.benefactorKindBoxReqSvc.GetAll(c.Request().Context(), req)
 | 
					//}
 | 
				
			||||||
	if sErr != nil {
 | 
					 | 
				
			||||||
		msg, code := httpmsg.Error(sErr)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return echo.NewHTTPError(code, msg)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return c.JSON(http.StatusCreated, resp)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,14 +1,16 @@
 | 
				
			||||||
package benefactorkindboxreqhandler
 | 
					package benefactorkindboxreqhandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/delivery/http_server/middleware"
 | 
				
			||||||
	echo "github.com/labstack/echo/v4"
 | 
						echo "github.com/labstack/echo/v4"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (h Handler) SetRoutes(e *echo.Echo) {
 | 
					func (h Handler) SetRoutes(e *echo.Echo) {
 | 
				
			||||||
	r := e.Group("/benefactor/kindboxreqs")
 | 
						r := e.Group("/benefactor/kindboxreqs")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	r.POST("/", h.Add).Name = "benefactor-addkindboxreq"
 | 
						r.POST("/", h.Add, middleware.Auth(h.authSvc, h.authConfig))
 | 
				
			||||||
	r.GET("/:id", h.Get).Name = "benefactor-get-kindboxreqbyid"
 | 
						//nolint:gocritic
 | 
				
			||||||
	r.GET("/", h.GetAll).Name = "benefactor-getallkindboxreq"
 | 
						// r.GET("/:id", h.Get)
 | 
				
			||||||
	r.PATCH("/:id", h.Update).Name = "benefactor-updatekindboxreq"
 | 
						// r.GET("/", h.GetAll)
 | 
				
			||||||
 | 
						// r.PATCH("/:id", h.Update)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,32 +1,24 @@
 | 
				
			||||||
package benefactorkindboxreqhandler
 | 
					package benefactorkindboxreqhandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					// func (h Handler) Update(c echo.Context) error {
 | 
				
			||||||
	"net/http"
 | 
					//	var req param.KindBoxReqUpdateRequest
 | 
				
			||||||
 | 
					//	if bErr := c.Bind(&req); bErr != nil {
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
					//		return echo.NewHTTPError(http.StatusBadRequest)
 | 
				
			||||||
	httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
 | 
					//	}
 | 
				
			||||||
	echo "github.com/labstack/echo/v4"
 | 
					//	if fieldErrors, err := h.benefactorKindBoxReqVld.ValidateUpdateRequest(req); err != nil {
 | 
				
			||||||
)
 | 
					//		msg, code := httpmsg.Error(err)
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
func (h Handler) Update(c echo.Context) error {
 | 
					//		return c.JSON(code, echo.Map{
 | 
				
			||||||
	var req param.KindBoxReqUpdateRequest
 | 
					//			"message": msg,
 | 
				
			||||||
	if bErr := c.Bind(&req); bErr != nil {
 | 
					//			"errors":  fieldErrors,
 | 
				
			||||||
		return echo.NewHTTPError(http.StatusBadRequest)
 | 
					//		})
 | 
				
			||||||
	}
 | 
					//	}
 | 
				
			||||||
	if fieldErrors, err := h.benefactorKindBoxReqVld.ValidateUpdateRequest(req); err != nil {
 | 
					//	resp, sErr := h.benefactorKindBoxReqSvc.Update(c.Request().Context(), req)
 | 
				
			||||||
		msg, code := httpmsg.Error(err)
 | 
					//	if sErr != nil {
 | 
				
			||||||
 | 
					//		msg, code := httpmsg.Error(sErr)
 | 
				
			||||||
		return c.JSON(code, echo.Map{
 | 
					//
 | 
				
			||||||
			"message": msg,
 | 
					//		return echo.NewHTTPError(code, msg)
 | 
				
			||||||
			"errors":  fieldErrors,
 | 
					//	}
 | 
				
			||||||
		})
 | 
					//
 | 
				
			||||||
	}
 | 
					//	return c.JSON(http.StatusCreated, resp)
 | 
				
			||||||
	resp, sErr := h.benefactorKindBoxReqSvc.Update(c.Request().Context(), req)
 | 
					//}
 | 
				
			||||||
	if sErr != nil {
 | 
					 | 
				
			||||||
		msg, code := httpmsg.Error(sErr)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return echo.NewHTTPError(code, msg)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return c.JSON(http.StatusCreated, resp)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					package middleware
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/config"
 | 
				
			||||||
 | 
						authservice "git.gocasts.ir/ebhomengo/niki/service/auth/benefactor"
 | 
				
			||||||
 | 
						mw "github.com/labstack/echo-jwt/v4"
 | 
				
			||||||
 | 
						"github.com/labstack/echo/v4"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Auth(service authservice.Service, cfg authservice.Config) echo.MiddlewareFunc {
 | 
				
			||||||
 | 
						return mw.WithConfig(mw.Config{
 | 
				
			||||||
 | 
							ContextKey: config.AuthMiddlewareContextKey,
 | 
				
			||||||
 | 
							SigningKey: []byte(cfg.SignKey),
 | 
				
			||||||
 | 
							// TODO  - as sign method string to config
 | 
				
			||||||
 | 
							SigningMethod: "HS256",
 | 
				
			||||||
 | 
							ParseTokenFunc: func(c echo.Context, auth string) (interface{}, error) {
 | 
				
			||||||
 | 
								claims, err := service.ParseToken(auth)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return nil, err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								return claims, nil
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -5,23 +5,36 @@ import (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config "git.gocasts.ir/ebhomengo/niki/config"
 | 
						config "git.gocasts.ir/ebhomengo/niki/config"
 | 
				
			||||||
	benefactorhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/benefactor"
 | 
						benefactorhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/benefactor"
 | 
				
			||||||
 | 
						benefactorkindboxreqhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/kind_box_req"
 | 
				
			||||||
 | 
						authservice "git.gocasts.ir/ebhomengo/niki/service/auth/benefactor"
 | 
				
			||||||
	benefactorservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/benefactor"
 | 
						benefactorservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/benefactor"
 | 
				
			||||||
 | 
						benefactorkindboxreqservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/kind_box_req"
 | 
				
			||||||
	benefactorvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/benefactor"
 | 
						benefactorvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/benefactor"
 | 
				
			||||||
 | 
						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"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Server struct {
 | 
					type Server struct {
 | 
				
			||||||
	config            config.Config
 | 
						config                      config.Config
 | 
				
			||||||
	Router            *echo.Echo
 | 
						Router                      *echo.Echo
 | 
				
			||||||
	benefactorHandler benefactorhandler.Handler
 | 
						benefactorHandler           benefactorhandler.Handler
 | 
				
			||||||
 | 
						benefactorkindboxreqhandler benefactorkindboxreqhandler.Handler
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func New(cfg config.Config, benefactorSvc benefactorservice.Service, benefactorVld benefactorvalidator.Validator) Server {
 | 
					func New(
 | 
				
			||||||
 | 
						cfg config.Config,
 | 
				
			||||||
 | 
						benefactorSvc benefactorservice.Service,
 | 
				
			||||||
 | 
						benefactorVld benefactorvalidator.Validator,
 | 
				
			||||||
 | 
						authSvc authservice.Service,
 | 
				
			||||||
 | 
						benefactorKindBoxReqSvc benefactorkindboxreqservice.Service,
 | 
				
			||||||
 | 
						benefactorKindBoxReqVld benefactorkindboxreqvalidator.Validator,
 | 
				
			||||||
 | 
					) Server {
 | 
				
			||||||
	return Server{
 | 
						return Server{
 | 
				
			||||||
		Router:            echo.New(),
 | 
							Router:                      echo.New(),
 | 
				
			||||||
		config:            cfg,
 | 
							config:                      cfg,
 | 
				
			||||||
		benefactorHandler: benefactorhandler.New(cfg.Auth, benefactorSvc, benefactorVld),
 | 
							benefactorHandler:           benefactorhandler.New(cfg.Auth, benefactorSvc, benefactorVld),
 | 
				
			||||||
 | 
							benefactorkindboxreqhandler: benefactorkindboxreqhandler.New(cfg.Auth, authSvc, benefactorKindBoxReqSvc, benefactorKindBoxReqVld),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,6 +46,7 @@ func (s Server) Serve() {
 | 
				
			||||||
	// Routes
 | 
						// Routes
 | 
				
			||||||
	s.Router.GET("/health-check", s.healthCheck)
 | 
						s.Router.GET("/health-check", s.healthCheck)
 | 
				
			||||||
	s.benefactorHandler.SetRoutes(s.Router)
 | 
						s.benefactorHandler.SetRoutes(s.Router)
 | 
				
			||||||
 | 
						s.benefactorkindboxreqhandler.SetRoutes(s.Router)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Start server
 | 
						// Start server
 | 
				
			||||||
	address := fmt.Sprintf(":%d", s.config.HTTPServer.Port)
 | 
						address := fmt.Sprintf(":%d", s.config.HTTPServer.Port)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					package entity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Province struct {
 | 
				
			||||||
 | 
						ID   uint
 | 
				
			||||||
 | 
						Name string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					package entity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Address struct {
 | 
				
			||||||
 | 
						ID           uint
 | 
				
			||||||
 | 
						PostalCode   string
 | 
				
			||||||
 | 
						Address      string
 | 
				
			||||||
 | 
						Lat          float32
 | 
				
			||||||
 | 
						Lon          float32
 | 
				
			||||||
 | 
						CityID       uint
 | 
				
			||||||
 | 
						ProvinceID   uint
 | 
				
			||||||
 | 
						BenefactorID uint
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package entity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type City struct {
 | 
				
			||||||
 | 
						ID         uint
 | 
				
			||||||
 | 
						Name       string
 | 
				
			||||||
 | 
						ProvinceID uint
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -3,12 +3,13 @@ package entity
 | 
				
			||||||
import "time"
 | 
					import "time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type KindBoxReq struct {
 | 
					type KindBoxReq struct {
 | 
				
			||||||
	ID              uint
 | 
						ID             uint
 | 
				
			||||||
	TypeID          uint
 | 
						KindBoxType    KindBoxType
 | 
				
			||||||
	CountRequested  uint
 | 
						CountRequested uint
 | 
				
			||||||
	CountAccepted   uint
 | 
						CountAccepted  uint
 | 
				
			||||||
	BenefactorID    uint
 | 
						BenefactorID   uint
 | 
				
			||||||
	Status          KindBoxReqStatus
 | 
						Status         KindBoxReqStatus
 | 
				
			||||||
	Description     string
 | 
						Description    string
 | 
				
			||||||
	StatusChangedAt time.Time
 | 
						ReferDate      time.Time
 | 
				
			||||||
 | 
						AddressID      uint
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,27 +1,28 @@
 | 
				
			||||||
package entity
 | 
					package entity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO - use config file instead of const.
 | 
				
			||||||
type KindBoxType uint
 | 
					type KindBoxType uint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// const (
 | 
					const (
 | 
				
			||||||
// KindBoxPendingSendStatus KindBoxType = iota + 1
 | 
						KindBoxOnTable KindBoxType = iota + 1
 | 
				
			||||||
// KindBoxSentStatus
 | 
						KindBoxCylindrical
 | 
				
			||||||
// KindBoxPendingReceivedStatus
 | 
						KindBoxStandUp
 | 
				
			||||||
// KindBoxReceivedStatus
 | 
					)
 | 
				
			||||||
// KindBoxEnumeratedStatus
 | 
					 | 
				
			||||||
// )
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var KindBoxTypeStrings = map[KindBoxType]string{
 | 
					var KindBoxTypeStrings = map[KindBoxType]string{
 | 
				
			||||||
	// KindBoxPendingSendStatus:     "pending-send",
 | 
						KindBoxOnTable:     "on-table",
 | 
				
			||||||
	// KindBoxSentStatus:            "sent",
 | 
						KindBoxCylindrical: "cylindrical",
 | 
				
			||||||
	// KindBoxPendingReceivedStatus: "pending-received",
 | 
						KindBoxStandUp:     "stand-up",
 | 
				
			||||||
	// KindBoxReceivedStatus:        "received",
 | 
					 | 
				
			||||||
	// KindBoxEnumeratedStatus:      "enumerated",
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s KindBoxType) String() string {
 | 
					func (s KindBoxType) String() string {
 | 
				
			||||||
	return KindBoxTypeStrings[s]
 | 
						return KindBoxTypeStrings[s]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s KindBoxType) IsValid() bool {
 | 
				
			||||||
 | 
						return s > 0 && int(s) <= len(KindBoxTypeStrings)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AllKindBoxType returns a slice containing all string values of KindBoxType.
 | 
					// AllKindBoxType returns a slice containing all string values of KindBoxType.
 | 
				
			||||||
func AllKindBoxType() []string {
 | 
					func AllKindBoxType() []string {
 | 
				
			||||||
	statusStrings := make([]string, len(KindBoxTypeStrings))
 | 
						statusStrings := make([]string, len(KindBoxTypeStrings))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										2
									
								
								go.mod
								
								
								
								
							| 
						 | 
					@ -8,6 +8,7 @@ require (
 | 
				
			||||||
	github.com/go-sql-driver/mysql v1.6.0
 | 
						github.com/go-sql-driver/mysql v1.6.0
 | 
				
			||||||
	github.com/golang-jwt/jwt/v4 v4.5.0
 | 
						github.com/golang-jwt/jwt/v4 v4.5.0
 | 
				
			||||||
	github.com/knadh/koanf v1.5.0
 | 
						github.com/knadh/koanf v1.5.0
 | 
				
			||||||
 | 
						github.com/labstack/echo-jwt/v4 v4.2.0
 | 
				
			||||||
	github.com/labstack/echo/v4 v4.11.4
 | 
						github.com/labstack/echo/v4 v4.11.4
 | 
				
			||||||
	github.com/redis/go-redis/v9 v9.4.0
 | 
						github.com/redis/go-redis/v9 v9.4.0
 | 
				
			||||||
	github.com/rubenv/sql-migrate v1.6.0
 | 
						github.com/rubenv/sql-migrate v1.6.0
 | 
				
			||||||
| 
						 | 
					@ -22,6 +23,7 @@ require (
 | 
				
			||||||
	github.com/fsnotify/fsnotify v1.4.9 // indirect
 | 
						github.com/fsnotify/fsnotify v1.4.9 // indirect
 | 
				
			||||||
	github.com/go-gorp/gorp/v3 v3.1.0 // indirect
 | 
						github.com/go-gorp/gorp/v3 v3.1.0 // indirect
 | 
				
			||||||
	github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
 | 
						github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
 | 
				
			||||||
 | 
						github.com/golang-jwt/jwt/v5 v5.0.0 // indirect
 | 
				
			||||||
	github.com/labstack/gommon v0.4.2 // indirect
 | 
						github.com/labstack/gommon v0.4.2 // indirect
 | 
				
			||||||
	github.com/mattn/go-colorable v0.1.13 // indirect
 | 
						github.com/mattn/go-colorable v0.1.13 // indirect
 | 
				
			||||||
	github.com/mattn/go-isatty v0.0.20 // indirect
 | 
						github.com/mattn/go-isatty v0.0.20 // indirect
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										4
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										4
									
								
								go.sum
								
								
								
								
							| 
						 | 
					@ -82,6 +82,8 @@ github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keL
 | 
				
			||||||
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
 | 
					github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
 | 
				
			||||||
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
 | 
					github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
 | 
				
			||||||
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
 | 
					github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
 | 
				
			||||||
 | 
					github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE=
 | 
				
			||||||
 | 
					github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
 | 
				
			||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 | 
					github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 | 
				
			||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 | 
					github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 | 
				
			||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 | 
					github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 | 
				
			||||||
| 
						 | 
					@ -174,6 +176,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 | 
				
			||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 | 
					github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 | 
				
			||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 | 
					github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 | 
				
			||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 | 
					github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 | 
				
			||||||
 | 
					github.com/labstack/echo-jwt/v4 v4.2.0 h1:odSISV9JgcSCuhgQSV/6Io3i7nUmfM/QkBeR5GVJj5c=
 | 
				
			||||||
 | 
					github.com/labstack/echo-jwt/v4 v4.2.0/go.mod h1:MA2RqdXdEn4/uEglx0HcUOgQSyBaTh5JcaHIan3biwU=
 | 
				
			||||||
github.com/labstack/echo/v4 v4.11.4 h1:vDZmA+qNeh1pd/cCkEicDMrjtrnMGQ1QFI9gWN1zGq8=
 | 
					github.com/labstack/echo/v4 v4.11.4 h1:vDZmA+qNeh1pd/cCkEicDMrjtrnMGQ1QFI9gWN1zGq8=
 | 
				
			||||||
github.com/labstack/echo/v4 v4.11.4/go.mod h1:noh7EvLwqDsmh/X/HWKPUl1AjzJrhyptRyEbQJfxen8=
 | 
					github.com/labstack/echo/v4 v4.11.4/go.mod h1:noh7EvLwqDsmh/X/HWKPUl1AjzJrhyptRyEbQJfxen8=
 | 
				
			||||||
github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0=
 | 
					github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0=
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										26
									
								
								main.go
								
								
								
								
							
							
						
						
									
										26
									
								
								main.go
								
								
								
								
							| 
						 | 
					@ -5,12 +5,18 @@ import (
 | 
				
			||||||
	smsprovider "git.gocasts.ir/ebhomengo/niki/adapter/sms_provider"
 | 
						smsprovider "git.gocasts.ir/ebhomengo/niki/adapter/sms_provider"
 | 
				
			||||||
	"git.gocasts.ir/ebhomengo/niki/config"
 | 
						"git.gocasts.ir/ebhomengo/niki/config"
 | 
				
			||||||
	httpserver "git.gocasts.ir/ebhomengo/niki/delivery/http_server"
 | 
						httpserver "git.gocasts.ir/ebhomengo/niki/delivery/http_server"
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/repository/migrator"
 | 
				
			||||||
	"git.gocasts.ir/ebhomengo/niki/repository/mysql"
 | 
						"git.gocasts.ir/ebhomengo/niki/repository/mysql"
 | 
				
			||||||
 | 
						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"
 | 
				
			||||||
 | 
						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"
 | 
				
			||||||
	authservice "git.gocasts.ir/ebhomengo/niki/service/auth/benefactor"
 | 
						authservice "git.gocasts.ir/ebhomengo/niki/service/auth/benefactor"
 | 
				
			||||||
 | 
						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"
 | 
				
			||||||
 | 
						benefactorkindboxreqservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/kind_box_req"
 | 
				
			||||||
	benefactorvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/benefactor"
 | 
						benefactorvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/benefactor"
 | 
				
			||||||
 | 
						benefactorkindboxreqvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/kind_box_req"
 | 
				
			||||||
	_ "github.com/go-sql-driver/mysql"
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,16 +24,18 @@ func main() {
 | 
				
			||||||
	cfg := config.C()
 | 
						cfg := config.C()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// TODO - add command for migrations
 | 
						// TODO - add command for migrations
 | 
				
			||||||
	// mgr := migrator.New(cfg.Mysql)
 | 
						mgr := migrator.New(cfg.Mysql)
 | 
				
			||||||
	// mgr.Up()
 | 
						mgr.Up()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, benefactorSvc, benefactorVld := setupServices(cfg)
 | 
						authSvc, benefactorSvc, benefactorVld, benefactorKindBoxReqSvc, benefactorKindBoxReqVld := setupServices(cfg)
 | 
				
			||||||
	server := httpserver.New(cfg, benefactorSvc, benefactorVld)
 | 
						server := httpserver.New(cfg, benefactorSvc, benefactorVld, authSvc, benefactorKindBoxReqSvc, benefactorKindBoxReqVld)
 | 
				
			||||||
	server.Serve()
 | 
						server.Serve()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//nolint:nakedret // we are sure of this
 | 
				
			||||||
func setupServices(cfg config.Config) (
 | 
					func setupServices(cfg config.Config) (
 | 
				
			||||||
	authSvc authservice.Service, benefactorSvc benefactorservice.Service, benefactorVld benefactorvalidator.Validator,
 | 
						authSvc authservice.Service, benefactorSvc benefactorservice.Service, benefactorVld benefactorvalidator.Validator,
 | 
				
			||||||
 | 
						benefactorKindBoxReqSvc benefactorkindboxreqservice.Service, benefactorKindBoxReqVld benefactorkindboxreqvalidator.Validator,
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
	authSvc = authservice.New(cfg.Auth)
 | 
						authSvc = authservice.New(cfg.Auth)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,5 +51,13 @@ func setupServices(cfg config.Config) (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	benefactorVld = benefactorvalidator.New()
 | 
						benefactorVld = benefactorvalidator.New()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return authSvc, benefactorSvc, benefactorVld
 | 
						benefactorkindBoxReqMysql := mysqlkindboxreq.New(MysqlRepo)
 | 
				
			||||||
 | 
						benefactorKindBoxReqSvc = benefactorkindboxreqservice.New(benefactorkindBoxReqMysql)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						benefactorAddressMysql := mysqladdress.New(MysqlRepo)
 | 
				
			||||||
 | 
						benefactorAddressSvc := benefactoraddressservice.New(benefactorAddressMysql)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						benefactorKindBoxReqVld = benefactorkindboxreqvalidator.New(benefactorkindBoxReqMysql, benefactorSvc, benefactorAddressSvc)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					package addressparam
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type BenefactorAddAddressRequest struct {
 | 
				
			||||||
 | 
						PostalCode   string  `json:"postal_code"`
 | 
				
			||||||
 | 
						Address      string  `json:"address"`
 | 
				
			||||||
 | 
						Lat          float32 `json:"lat"`
 | 
				
			||||||
 | 
						Lon          float32 `json:"lon"`
 | 
				
			||||||
 | 
						CityID       uint    `json:"city_id"`
 | 
				
			||||||
 | 
						ProvinceID   uint    `json:"province_id"`
 | 
				
			||||||
 | 
						BenefactorID uint    `json:"benefactor_id"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type BenefactorAddAddressResponse struct {
 | 
				
			||||||
 | 
						Address entity.Address `json:"address"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,10 @@
 | 
				
			||||||
 | 
					package addressparam
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type GetAddressByIDRequest struct {
 | 
				
			||||||
 | 
						ID uint
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					type GetAddressByIDResponse struct {
 | 
				
			||||||
 | 
						Address *entity.Address
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,8 @@
 | 
				
			||||||
 | 
					package benefactoreparam
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type BenefactorExistByIDRequest struct {
 | 
				
			||||||
 | 
						ID uint
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					type BenefactorExistByIDResponse struct {
 | 
				
			||||||
 | 
						Existed bool
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,13 +1,17 @@
 | 
				
			||||||
package benefactorkindboxreqparam
 | 
					package benefactorkindboxreqparam
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
					import (
 | 
				
			||||||
 | 
						entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type KindBoxReqAddRequest struct {
 | 
					type KindBoxReqAddRequest struct {
 | 
				
			||||||
	BenefactorID   uint
 | 
						BenefactorID   uint               `json:"benefactor_id"`
 | 
				
			||||||
	TypeID         uint
 | 
						TypeID         entity.KindBoxType `json:"type_id"`
 | 
				
			||||||
	CountRequested uint
 | 
						AddressID      uint               `json:"address_id"`
 | 
				
			||||||
 | 
						ReferDate      string             `json:"refer_date"`
 | 
				
			||||||
 | 
						CountRequested uint               `json:"count_requested"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type KindBoxReqAddResponse struct {
 | 
					type KindBoxReqAddResponse struct {
 | 
				
			||||||
	KindBoxReq entity.KindBoxReq
 | 
						KindBoxReq entity.KindBoxReq `json:"kind_box_req"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,7 @@ import entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
type KindBoxReqUpdateRequest struct {
 | 
					type KindBoxReqUpdateRequest struct {
 | 
				
			||||||
	BenefactorID   uint
 | 
						BenefactorID   uint
 | 
				
			||||||
	KindBoxReqID   uint
 | 
						KindBoxReqID   uint
 | 
				
			||||||
	TypeID         uint
 | 
						TypeID         entity.KindBoxType
 | 
				
			||||||
	CountRequested uint
 | 
						CountRequested uint
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					package claim
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/config"
 | 
				
			||||||
 | 
						authservice "git.gocasts.ir/ebhomengo/niki/service/auth/benefactor"
 | 
				
			||||||
 | 
						"github.com/labstack/echo/v4"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func GetClaimsFromEchoContext(c echo.Context) *authservice.Claims {
 | 
				
			||||||
 | 
						//nolint:forcetypeassert //defensive programming vs let it crash - log-metric-recover ,...
 | 
				
			||||||
 | 
						return c.Get(config.AuthMiddlewareContextKey).(*authservice.Claims)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					package mysqladdress
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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) CreateBenefactorAddress(ctx context.Context, address entity.Address) (entity.Address, error) {
 | 
				
			||||||
 | 
						const op = "mysqlbenefactor.createBenefactorAddress"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						res, err := d.conn.Conn().ExecContext(ctx, `insert into addresses(postal_code, address, lat, lon,province_id,city_id,benefactor_id) values(?, ?, ?,?,?,?,?)`,
 | 
				
			||||||
 | 
							address.PostalCode, address.Address, address.Lat, address.Lon, address.ProvinceID, address.CityID, address.BenefactorID)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return entity.Address{}, richerror.New(op).WithErr(err).
 | 
				
			||||||
 | 
								WithMessage(errmsg.ErrorMsgNotFound).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//nolint
 | 
				
			||||||
 | 
						// error is always nil
 | 
				
			||||||
 | 
						id, _ := res.LastInsertId()
 | 
				
			||||||
 | 
						address.ID = uint(id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return address, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					package mysqladdress
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/repository/mysql"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type DB struct {
 | 
				
			||||||
 | 
						conn *mysql.DB
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func New(conn *mysql.DB) *DB {
 | 
				
			||||||
 | 
						return &DB{
 | 
				
			||||||
 | 
							conn: conn,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,47 @@
 | 
				
			||||||
 | 
					package mysqladdress
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"database/sql"
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
						errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
				
			||||||
 | 
						richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/repository/mysql"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO - use this approach or return (bool,entity.Address,error).
 | 
				
			||||||
 | 
					func (d DB) GetAddressByID(ctx context.Context, id uint) (*entity.Address, error) {
 | 
				
			||||||
 | 
						const op = "mysqladdress.IsExistAddressByID"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						row := d.conn.Conn().QueryRowContext(ctx, `select * from addresses where id = ?`, id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						address, err := scanAddress(row)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							sErr := sql.ErrNoRows
 | 
				
			||||||
 | 
							//TODO-errorsas: second argument to errors.As should not be *error
 | 
				
			||||||
 | 
							//nolint
 | 
				
			||||||
 | 
							if errors.As(err, &sErr) {
 | 
				
			||||||
 | 
								return nil, nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// TODO - log unexpected error for better observability
 | 
				
			||||||
 | 
							return nil, richerror.New(op).WithErr(err).
 | 
				
			||||||
 | 
								WithMessage(errmsg.ErrorMsgCantScanQueryResult).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &address, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func scanAddress(scanner mysql.Scanner) (entity.Address, error) {
 | 
				
			||||||
 | 
						var createdAt time.Time
 | 
				
			||||||
 | 
						var address entity.Address
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err := scanner.Scan(&address.ID, &address.PostalCode, &address.Address, &address.Lat, &address.Lon,
 | 
				
			||||||
 | 
							&address.ProvinceID, &address.CityID, &address.BenefactorID,
 | 
				
			||||||
 | 
							&createdAt)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return address, err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -34,6 +34,28 @@ func (d DB) IsExistBenefactorByPhoneNumber(ctx context.Context, phoneNumber stri
 | 
				
			||||||
	return true, Benefactor, nil
 | 
						return true, Benefactor, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *DB) IsExistBenefactorByID(ctx context.Context, id uint) (bool, error) {
 | 
				
			||||||
 | 
						const op = "mysqlbenefactor.IsExistBenefactorByID"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						row := d.conn.Conn().QueryRowContext(ctx, `select * from benefactors where id = ?`, id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_, err := scanBenefactor(row)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							sErr := sql.ErrNoRows
 | 
				
			||||||
 | 
							//TODO-errorsas: second argument to errors.As should not be *error
 | 
				
			||||||
 | 
							//nolint
 | 
				
			||||||
 | 
							if errors.As(err, &sErr) {
 | 
				
			||||||
 | 
								return false, nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// TODO - log unexpected error for better observability
 | 
				
			||||||
 | 
							return false, richerror.New(op).WithErr(err).
 | 
				
			||||||
 | 
								WithMessage(errmsg.ErrorMsgCantScanQueryResult).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return true, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func scanBenefactor(scanner mysql.Scanner) (entity.Benefactor, error) {
 | 
					func scanBenefactor(scanner mysql.Scanner) (entity.Benefactor, error) {
 | 
				
			||||||
	var createdAt time.Time
 | 
						var createdAt time.Time
 | 
				
			||||||
	var benefactor entity.Benefactor
 | 
						var benefactor entity.Benefactor
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					package mysqlkindboxreq
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/repository/mysql"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type DB struct {
 | 
				
			||||||
 | 
						conn *mysql.DB
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func New(conn *mysql.DB) *DB {
 | 
				
			||||||
 | 
						return &DB{
 | 
				
			||||||
 | 
							conn: conn,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					package mysqlkindboxreq
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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) AddKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) (entity.KindBoxReq, error) {
 | 
				
			||||||
 | 
						const op = "mysqlkindboxreq.AddKindBoxReq"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						res, err := d.conn.Conn().ExecContext(ctx, `insert into kind_box_reqs(benefactor_id,kind_box_type,address_id,count_requested,refer_date,status) values (?,?,?,?,?,?)`,
 | 
				
			||||||
 | 
							kindBoxReq.BenefactorID, kindBoxReq.KindBoxType.String(), kindBoxReq.AddressID, kindBoxReq.CountRequested, kindBoxReq.ReferDate, kindBoxReq.Status.String())
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return entity.KindBoxReq{}, richerror.New(op).WithErr(err).
 | 
				
			||||||
 | 
								WithMessage(errmsg.ErrorMsgNotFound).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//nolint
 | 
				
			||||||
 | 
						// err is always nil
 | 
				
			||||||
 | 
						id, _ := res.LastInsertId()
 | 
				
			||||||
 | 
						kindBoxReq.ID = uint(id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return kindBoxReq, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					-- +migrate Up
 | 
				
			||||||
 | 
					CREATE TABLE `provinces` (
 | 
				
			||||||
 | 
					                               `id` INT PRIMARY KEY AUTO_INCREMENT,
 | 
				
			||||||
 | 
					                               `name` VARCHAR(191) NOT NULL ,
 | 
				
			||||||
 | 
					                               `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- +migrate Down
 | 
				
			||||||
 | 
					DROP TABLE `provinces`;
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					-- +migrate Up
 | 
				
			||||||
 | 
					CREATE TABLE `cities` (
 | 
				
			||||||
 | 
					                             `id` INT PRIMARY KEY AUTO_INCREMENT,
 | 
				
			||||||
 | 
					                             `name` VARCHAR(191) NOT NULL,
 | 
				
			||||||
 | 
					                             `province_id` INT NOT NULL,
 | 
				
			||||||
 | 
					                             `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 | 
				
			||||||
 | 
					                             FOREIGN KEY (`province_id`) REFERENCES `provinces`(`id`)
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- +migrate Down
 | 
				
			||||||
 | 
					DROP TABLE `cities`;
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					-- +migrate Up
 | 
				
			||||||
 | 
					CREATE TABLE `addresses`
 | 
				
			||||||
 | 
					(
 | 
				
			||||||
 | 
					    `id`            INT PRIMARY KEY AUTO_INCREMENT,
 | 
				
			||||||
 | 
					    `postal_code`   VARCHAR(191) NOT NULL,
 | 
				
			||||||
 | 
					    `address`       TEXT         NOT NULL,
 | 
				
			||||||
 | 
					    `lat`           FLOAT        NOT NULL,
 | 
				
			||||||
 | 
					    `lon`           FLOAT        NOT NULL,
 | 
				
			||||||
 | 
					    `province_id`   INT          NOT NULL,
 | 
				
			||||||
 | 
					    `city_id`       INT          NOT NULL,
 | 
				
			||||||
 | 
					    `benefactor_id` INT          NOT NULL,
 | 
				
			||||||
 | 
					    `created_at`    TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 | 
				
			||||||
 | 
					    FOREIGN KEY (`province_id`) REFERENCES `provinces` (`id`),
 | 
				
			||||||
 | 
					    FOREIGN KEY (`city_id`) REFERENCES `cities` (`id`),
 | 
				
			||||||
 | 
					    FOREIGN KEY (`benefactor_id`) REFERENCES `benefactors` (`id`)
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- +migrate Down
 | 
				
			||||||
 | 
					DROP TABLE `addresses`;
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					-- +migrate Up
 | 
				
			||||||
 | 
					CREATE TABLE `kind_box_reqs`
 | 
				
			||||||
 | 
					(
 | 
				
			||||||
 | 
					    `id`              INT PRIMARY KEY AUTO_INCREMENT,
 | 
				
			||||||
 | 
					    `benefactor_id`   INT      NOT NULL,
 | 
				
			||||||
 | 
					    `kind_box_type`   ENUM('on-table','cylindrical','stand-up') NOT NULL,
 | 
				
			||||||
 | 
					    `address_id`      INT      NOT NULL,
 | 
				
			||||||
 | 
					    `count_requested` INT UNSIGNED NOT NULL,
 | 
				
			||||||
 | 
					    `count_accepted`  INT,
 | 
				
			||||||
 | 
					    `description`     TEXT,
 | 
				
			||||||
 | 
					    `refer_date`      DATETIME NOT NULL,
 | 
				
			||||||
 | 
					    `status`          varchar(191),
 | 
				
			||||||
 | 
					    `created_at`      TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 | 
				
			||||||
 | 
					    FOREIGN KEY (`address_id`) REFERENCES `addresses` (`id`),
 | 
				
			||||||
 | 
					    FOREIGN KEY (`benefactor_id`) REFERENCES `benefactors` (`id`)
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- +migrate Down
 | 
				
			||||||
 | 
					DROP TABLE `kind_box_reqs`;
 | 
				
			||||||
| 
						 | 
					@ -1,25 +1,17 @@
 | 
				
			||||||
package adminkindboxreqservice
 | 
					package adminkindboxreqservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					// func (s Service) Add(ctx context.Context, req param.KindBoxReqAddRequest) (param.KindBoxReqAddResponse, error) {
 | 
				
			||||||
	"context"
 | 
					//	const op = "adminkindboxreqservice.Add"
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
	entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
					//	kindBoxReq, err := s.repo.AddKindBoxReq(ctx, entity.KindBoxReq{
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
 | 
					//		BenefactorID:   req.BenefactorID,
 | 
				
			||||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
					//		KindBoxType:         req.TypeID,
 | 
				
			||||||
)
 | 
					//		CountRequested: req.CountRequested,
 | 
				
			||||||
 | 
					//		Status:         entity.KindBoxReqPendingStatus,
 | 
				
			||||||
func (s Service) Add(ctx context.Context, req param.KindBoxReqAddRequest) (param.KindBoxReqAddResponse, error) {
 | 
					//	})
 | 
				
			||||||
	const op = "adminkindboxreqservice.Add"
 | 
					//	if err != nil {
 | 
				
			||||||
 | 
					//		return param.KindBoxReqAddResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
	kindBoxReq, err := s.repo.AddKindBoxReq(ctx, entity.KindBoxReq{
 | 
					//	}
 | 
				
			||||||
		BenefactorID:   req.BenefactorID,
 | 
					//
 | 
				
			||||||
		TypeID:         req.TypeID,
 | 
					//	return param.KindBoxReqAddResponse{KindBoxReq: kindBoxReq}, nil
 | 
				
			||||||
		CountRequested: req.CountRequested,
 | 
					//}
 | 
				
			||||||
		Status:         entity.KindBoxReqPendingStatus,
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return param.KindBoxReqAddResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return param.KindBoxReqAddResponse{KindBoxReq: kindBoxReq}, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,28 +1,29 @@
 | 
				
			||||||
package adminkindboxreqservice
 | 
					package adminkindboxreqservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					//
 | 
				
			||||||
	"context"
 | 
					// import (
 | 
				
			||||||
 | 
					//	"context"
 | 
				
			||||||
	entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
					//
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
 | 
					//	entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
					//	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
 | 
				
			||||||
)
 | 
					//	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
				
			||||||
 | 
					//)
 | 
				
			||||||
func (s Service) Update(ctx context.Context, req param.KindBoxReqUpdateRequest) (param.KindBoxReqUpdateResponse, error) {
 | 
					//
 | 
				
			||||||
	// TODO: can benefactor update its request ?
 | 
					// func (s Service) Update(ctx context.Context, req param.KindBoxReqUpdateRequest) (param.KindBoxReqUpdateResponse, error) {
 | 
				
			||||||
	// TODO: Is Update Mothod Service Responsible to check which kindboxreqID belongs to benefactorID ?
 | 
					//	// TODO: can benefactor update its request ?
 | 
				
			||||||
	// TODO: updating data(s) may have side-effect on other entities by masood-keshvary accepted -> rejected
 | 
					//	// TODO: Is Update Mothod Service Responsible to check which kindboxreqID belongs to benefactorID ?
 | 
				
			||||||
 | 
					//	// TODO: updating data(s) may have side-effect on other entities by masood-keshvary accepted -> rejected
 | 
				
			||||||
	const op = "adminkindboxreqservice.Update"
 | 
					//
 | 
				
			||||||
 | 
					//	const op = "adminkindboxreqservice.Update"
 | 
				
			||||||
	kindBoxReq, uErr := s.repo.UpdateKindBoxReq(ctx, req.KindBoxReqID, entity.KindBoxReq{
 | 
					//
 | 
				
			||||||
		BenefactorID:   req.BenefactorID,
 | 
					//	kindBoxReq, uErr := s.repo.UpdateKindBoxReq(ctx, req.KindBoxReqID, entity.KindBoxReq{
 | 
				
			||||||
		TypeID:         req.TypeID,
 | 
					//		BenefactorID:   req.BenefactorID,
 | 
				
			||||||
		CountRequested: req.CountRequested,
 | 
					//		TypeID:         req.TypeID,
 | 
				
			||||||
	})
 | 
					//		CountRequested: req.CountRequested,
 | 
				
			||||||
	if uErr != nil {
 | 
					//	})
 | 
				
			||||||
		return param.KindBoxReqUpdateResponse{}, richerror.New(op).WithErr(uErr).WithKind(richerror.KindUnexpected)
 | 
					//	if uErr != nil {
 | 
				
			||||||
	}
 | 
					//		return param.KindBoxReqUpdateResponse{}, richerror.New(op).WithErr(uErr).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
 | 
					//	}
 | 
				
			||||||
	return param.KindBoxReqUpdateResponse{KindBoxReq: kindBoxReq}, nil
 | 
					//
 | 
				
			||||||
}
 | 
					//	return param.KindBoxReqUpdateResponse{KindBoxReq: kindBoxReq}, nil
 | 
				
			||||||
 | 
					//}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,52 @@
 | 
				
			||||||
 | 
					package benefactoraddressservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
						param "git.gocasts.ir/ebhomengo/niki/param/benefactor/address"
 | 
				
			||||||
 | 
						richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Repository interface {
 | 
				
			||||||
 | 
						CreateBenefactorAddress(ctx context.Context, address entity.Address) (entity.Address, error)
 | 
				
			||||||
 | 
						GetAddressByID(ctx context.Context, id uint) (*entity.Address, error)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Service struct {
 | 
				
			||||||
 | 
						repo Repository
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func New(repo Repository) Service {
 | 
				
			||||||
 | 
						return Service{repo: repo}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s Service) Add(ctx context.Context, req param.BenefactorAddAddressRequest) (param.BenefactorAddAddressResponse, error) {
 | 
				
			||||||
 | 
						const op = "benefactoraddressservice.Add"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						address, err := s.repo.CreateBenefactorAddress(ctx, entity.Address{
 | 
				
			||||||
 | 
							PostalCode:   req.PostalCode,
 | 
				
			||||||
 | 
							Address:      req.Address,
 | 
				
			||||||
 | 
							Lat:          req.Lat,
 | 
				
			||||||
 | 
							Lon:          req.Lon,
 | 
				
			||||||
 | 
							CityID:       req.CityID,
 | 
				
			||||||
 | 
							ProvinceID:   req.ProvinceID,
 | 
				
			||||||
 | 
							BenefactorID: req.BenefactorID,
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return param.BenefactorAddAddressResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return param.BenefactorAddAddressResponse{Address: address}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s Service) AddressExistByID(ctx context.Context, req param.GetAddressByIDRequest) (param.GetAddressByIDResponse, error) {
 | 
				
			||||||
 | 
						const op = "benefactorservice.BenefactorExistByID"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						address, err := s.repo.GetAddressByID(ctx, req.ID)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return param.GetAddressByIDResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return param.GetAddressByIDResponse{Address: address}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					package benefactorservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						param "git.gocasts.ir/ebhomengo/niki/param/benefactor/benefactore"
 | 
				
			||||||
 | 
						richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s Service) BenefactorExistByID(ctx context.Context, req param.BenefactorExistByIDRequest) (param.BenefactorExistByIDResponse, error) {
 | 
				
			||||||
 | 
						const op = "benefactorservice.BenefactorExistByID"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						isExisted, err := s.repo.IsExistBenefactorByID(ctx, req.ID)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return param.BenefactorExistByIDResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return param.BenefactorExistByIDResponse{Existed: isExisted}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,7 @@ type Config struct {
 | 
				
			||||||
type Repository interface {
 | 
					type Repository interface {
 | 
				
			||||||
	IsExistBenefactorByPhoneNumber(ctx context.Context, phoneNumber string) (bool, entity.Benefactor, error)
 | 
						IsExistBenefactorByPhoneNumber(ctx context.Context, phoneNumber string) (bool, entity.Benefactor, error)
 | 
				
			||||||
	CreateBenefactor(ctx context.Context, benefactor entity.Benefactor) (entity.Benefactor, error)
 | 
						CreateBenefactor(ctx context.Context, benefactor entity.Benefactor) (entity.Benefactor, error)
 | 
				
			||||||
 | 
						IsExistBenefactorByID(ctx context.Context, id uint) (bool, error)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type AuthGenerator interface {
 | 
					type AuthGenerator interface {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,7 @@ package benefactorkindboxreqservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
						entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
						param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
				
			||||||
| 
						 | 
					@ -10,10 +11,15 @@ import (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s Service) Add(ctx context.Context, req param.KindBoxReqAddRequest) (param.KindBoxReqAddResponse, error) {
 | 
					func (s Service) Add(ctx context.Context, req param.KindBoxReqAddRequest) (param.KindBoxReqAddResponse, error) {
 | 
				
			||||||
	const op = "userkindboxreqservice.Add"
 | 
						const op = "userkindboxreqservice.Add"
 | 
				
			||||||
 | 
						t, tErr := time.Parse(time.DateTime, req.ReferDate)
 | 
				
			||||||
 | 
						if tErr != nil {
 | 
				
			||||||
 | 
							return param.KindBoxReqAddResponse{}, richerror.New(op).WithErr(tErr).WithKind(richerror.KindInvalid)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	kindBoxReq, err := s.repo.AddKindBoxReq(ctx, entity.KindBoxReq{
 | 
						kindBoxReq, err := s.repo.AddKindBoxReq(ctx, entity.KindBoxReq{
 | 
				
			||||||
		BenefactorID:   req.BenefactorID,
 | 
							BenefactorID:   req.BenefactorID,
 | 
				
			||||||
		TypeID:         req.TypeID,
 | 
							KindBoxType:    req.TypeID,
 | 
				
			||||||
 | 
							AddressID:      req.AddressID,
 | 
				
			||||||
 | 
							ReferDate:      t,
 | 
				
			||||||
		CountRequested: req.CountRequested,
 | 
							CountRequested: req.CountRequested,
 | 
				
			||||||
		Status:         entity.KindBoxReqPendingStatus,
 | 
							Status:         entity.KindBoxReqPendingStatus,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,20 +1,13 @@
 | 
				
			||||||
package benefactorkindboxreqservice
 | 
					package benefactorkindboxreqservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					// func (s Service) Delete(ctx context.Context, req param.KindBoxReqDeleteRequest) (param.KindBoxReqDeleteResponse, error) {
 | 
				
			||||||
	"context"
 | 
					//	// TODO: Does business domain need to delete an kindboxreq ?
 | 
				
			||||||
 | 
					//	const op = "userkindboxreqservice.Delete"
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
					//
 | 
				
			||||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
					//	dErr := s.repo.DeleteKindBoxReq(ctx, req.KindBoxReqID)
 | 
				
			||||||
)
 | 
					//	if dErr != nil {
 | 
				
			||||||
 | 
					//		return param.KindBoxReqDeleteResponse{}, richerror.New(op).WithErr(dErr).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
func (s Service) Delete(ctx context.Context, req param.KindBoxReqDeleteRequest) (param.KindBoxReqDeleteResponse, error) {
 | 
					//	}
 | 
				
			||||||
	// TODO: Does business domain need to delete an kindboxreq ?
 | 
					//
 | 
				
			||||||
	const op = "userkindboxreqservice.Delete"
 | 
					//	return param.KindBoxReqDeleteResponse{}, nil
 | 
				
			||||||
 | 
					//}
 | 
				
			||||||
	dErr := s.repo.DeleteKindBoxReq(ctx, req.KindBoxReqID)
 | 
					 | 
				
			||||||
	if dErr != nil {
 | 
					 | 
				
			||||||
		return param.KindBoxReqDeleteResponse{}, richerror.New(op).WithErr(dErr).WithKind(richerror.KindUnexpected)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return param.KindBoxReqDeleteResponse{}, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,19 +1,12 @@
 | 
				
			||||||
package benefactorkindboxreqservice
 | 
					package benefactorkindboxreqservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					// func (s Service) Get(ctx context.Context, req param.KindBoxReqGetRequest) (param.KindBoxReqGetResponse, error) {
 | 
				
			||||||
	"context"
 | 
					//	const op = "userkindboxreqservice.Get"
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
					//	kindBoxReq, err := s.repo.GetKindBoxReq(ctx, req.KindBoxReqID)
 | 
				
			||||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
					//	if err != nil {
 | 
				
			||||||
)
 | 
					//		return param.KindBoxReqGetResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
 | 
					//	}
 | 
				
			||||||
func (s Service) Get(ctx context.Context, req param.KindBoxReqGetRequest) (param.KindBoxReqGetResponse, error) {
 | 
					//
 | 
				
			||||||
	const op = "userkindboxreqservice.Get"
 | 
					//	return param.KindBoxReqGetResponse{KindBoxReq: kindBoxReq}, nil
 | 
				
			||||||
 | 
					//}
 | 
				
			||||||
	kindBoxReq, err := s.repo.GetKindBoxReq(ctx, req.KindBoxReqID)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return param.KindBoxReqGetResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return param.KindBoxReqGetResponse{KindBoxReq: kindBoxReq}, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,20 +1,13 @@
 | 
				
			||||||
package benefactorkindboxreqservice
 | 
					package benefactorkindboxreqservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					//// TODO: Pagination, Filters, Sort.
 | 
				
			||||||
	"context"
 | 
					// func (s Service) GetAll(ctx context.Context, req param.KindBoxReqGetAllRequest) (param.KindBoxReqGetAllResponse, error) {
 | 
				
			||||||
 | 
					//	const op = "userkindboxreqservice.GetAll"
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
					//
 | 
				
			||||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
					//	allKindBoxReq, err := s.repo.GetAllKindBoxReq(ctx, req.BenefactorID)
 | 
				
			||||||
)
 | 
					//	if err != nil {
 | 
				
			||||||
 | 
					//		return param.KindBoxReqGetAllResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
// TODO: Pagination, Filters, Sort.
 | 
					//	}
 | 
				
			||||||
func (s Service) GetAll(ctx context.Context, req param.KindBoxReqGetAllRequest) (param.KindBoxReqGetAllResponse, error) {
 | 
					//
 | 
				
			||||||
	const op = "userkindboxreqservice.GetAll"
 | 
					//	return param.KindBoxReqGetAllResponse{AllKindBoxReq: allKindBoxReq}, nil
 | 
				
			||||||
 | 
					//}
 | 
				
			||||||
	allKindBoxReq, err := s.repo.GetAllKindBoxReq(ctx, req.BenefactorID)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return param.KindBoxReqGetAllResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return param.KindBoxReqGetAllResponse{AllKindBoxReq: allKindBoxReq}, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,11 +8,11 @@ import (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Repository interface {
 | 
					type Repository interface {
 | 
				
			||||||
	AddKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) (entity.KindBoxReq, error)
 | 
						AddKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) (entity.KindBoxReq, error)
 | 
				
			||||||
	UpdateKindBoxReq(ctx context.Context, kindBoxReqID uint, kindBoxReq entity.KindBoxReq) (entity.KindBoxReq, error)
 | 
						// UpdateKindBoxReq(ctx context.Context, kindBoxReqID uint, kindBoxReq entity.KindBoxReq) (entity.KindBoxReq, error)
 | 
				
			||||||
	// TODO: can benefactor cancel its request ?
 | 
						// TODO: can benefactor cancel its request ?
 | 
				
			||||||
	DeleteKindBoxReq(ctx context.Context, kindBoxReqID uint) error
 | 
						// DeleteKindBoxReq(ctx context.Context, kindBoxReqID uint) error
 | 
				
			||||||
	GetAllKindBoxReq(ctx context.Context, benefactorID uint) ([]entity.KindBoxReq, error)
 | 
						// GetAllKindBoxReq(ctx context.Context, benefactorID uint) ([]entity.KindBoxReq, error)
 | 
				
			||||||
	GetKindBoxReq(ctx context.Context, kindBoxReqID uint) (entity.KindBoxReq, error)
 | 
						// GetKindBoxReq(ctx context.Context, kindBoxReqID uint) (entity.KindBoxReq, error)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Service struct {
 | 
					type Service struct {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,26 +1,18 @@
 | 
				
			||||||
package benefactorkindboxreqservice
 | 
					package benefactorkindboxreqservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					// func (s Service) Update(ctx context.Context, req param.KindBoxReqUpdateRequest) (param.KindBoxReqUpdateResponse, error) {
 | 
				
			||||||
	"context"
 | 
					//	// TODO: can benefactor update its request ?
 | 
				
			||||||
 | 
					//	// TODO: Is Update Mothod Service Responsible to check which kindboxreqID belongs to benefactorID ?
 | 
				
			||||||
	entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
					//	const op = "userkindboxreqservice.Update"
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
					//
 | 
				
			||||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
					//	kindBoxReq, uErr := s.repo.UpdateKindBoxReq(ctx, req.KindBoxReqID, entity.KindBoxReq{
 | 
				
			||||||
)
 | 
					//		BenefactorID:   req.BenefactorID,
 | 
				
			||||||
 | 
					//		KindBoxType:    req.TypeID,
 | 
				
			||||||
func (s Service) Update(ctx context.Context, req param.KindBoxReqUpdateRequest) (param.KindBoxReqUpdateResponse, error) {
 | 
					//		CountRequested: req.CountRequested,
 | 
				
			||||||
	// TODO: can benefactor update its request ?
 | 
					//	})
 | 
				
			||||||
	// TODO: Is Update Mothod Service Responsible to check which kindboxreqID belongs to benefactorID ?
 | 
					//	if uErr != nil {
 | 
				
			||||||
	const op = "userkindboxreqservice.Update"
 | 
					//		return param.KindBoxReqUpdateResponse{}, richerror.New(op).WithErr(uErr).WithKind(richerror.KindUnexpected)
 | 
				
			||||||
 | 
					//	}
 | 
				
			||||||
	kindBoxReq, uErr := s.repo.UpdateKindBoxReq(ctx, req.KindBoxReqID, entity.KindBoxReq{
 | 
					//
 | 
				
			||||||
		BenefactorID:   req.BenefactorID,
 | 
					//	return param.KindBoxReqUpdateResponse{KindBoxReq: kindBoxReq}, nil
 | 
				
			||||||
		TypeID:         req.TypeID,
 | 
					//}
 | 
				
			||||||
		CountRequested: req.CountRequested,
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
	if uErr != nil {
 | 
					 | 
				
			||||||
		return param.KindBoxReqUpdateResponse{}, richerror.New(op).WithErr(uErr).WithKind(richerror.KindUnexpected)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return param.KindBoxReqUpdateResponse{KindBoxReq: kindBoxReq}, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,7 @@ package benefactorkindboxreqvalidator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
						param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
				
			||||||
	errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
						errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
				
			||||||
| 
						 | 
					@ -23,7 +24,17 @@ func (v Validator) ValidateAddRequest(req param.KindBoxReqAddRequest) (map[strin
 | 
				
			||||||
		validation.Field(&req.TypeID,
 | 
							validation.Field(&req.TypeID,
 | 
				
			||||||
			validation.Required,
 | 
								validation.Required,
 | 
				
			||||||
			validation.By(v.doesTypeExist)),
 | 
								validation.By(v.doesTypeExist)),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							validation.Field(&req.AddressID,
 | 
				
			||||||
 | 
								validation.Required,
 | 
				
			||||||
 | 
								validation.By(v.doesAddressExist(req.BenefactorID))),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							validation.Field(&req.ReferDate,
 | 
				
			||||||
 | 
								validation.Required,
 | 
				
			||||||
 | 
								validation.Date(time.DateTime),
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
	); err != nil {
 | 
						); err != nil {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		fieldErrors := make(map[string]string)
 | 
							fieldErrors := make(map[string]string)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var errV validation.Errors
 | 
							var errV validation.Errors
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,11 +17,11 @@ func (v Validator) ValidateDeleteRequest(req param.KindBoxReqDeleteRequest) (map
 | 
				
			||||||
			validation.Required,
 | 
								validation.Required,
 | 
				
			||||||
			validation.By(v.doesBenefactorExist)),
 | 
								validation.By(v.doesBenefactorExist)),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		validation.Field(&req.KindBoxReqID,
 | 
							// validation.Field(&req.KindBoxReqID,
 | 
				
			||||||
			validation.Required,
 | 
							//	validation.Required,
 | 
				
			||||||
			validation.By(v.doesKindBoxRequestExist),
 | 
							//	validation.By(v.doesKindBoxRequestExist),
 | 
				
			||||||
			validation.By(v.hasPendingStatus),
 | 
							//	validation.By(v.hasPendingStatus),
 | 
				
			||||||
			validation.By(v.doesKindBoxBelongToBenefactor(req.BenefactorID))),
 | 
							//	validation.By(v.doesKindBoxBelongToBenefactor(req.BenefactorID))),
 | 
				
			||||||
	); err != nil {
 | 
						); err != nil {
 | 
				
			||||||
		fieldErrors := make(map[string]string)
 | 
							fieldErrors := make(map[string]string)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,10 +17,10 @@ func (v Validator) ValidateGetRequest(req param.KindBoxReqGetRequest) (map[strin
 | 
				
			||||||
			validation.Required,
 | 
								validation.Required,
 | 
				
			||||||
			validation.By(v.doesBenefactorExist)),
 | 
								validation.By(v.doesBenefactorExist)),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		validation.Field(&req.KindBoxReqID,
 | 
							// validation.Field(&req.KindBoxReqID,
 | 
				
			||||||
			validation.Required,
 | 
							//	validation.Required,
 | 
				
			||||||
			validation.By(v.doesKindBoxRequestExist),
 | 
							//	validation.By(v.doesKindBoxRequestExist),
 | 
				
			||||||
			validation.By(v.doesKindBoxBelongToBenefactor(req.BenefactorID))),
 | 
							//	validation.By(v.doesKindBoxBelongToBenefactor(req.BenefactorID))),
 | 
				
			||||||
	); err != nil {
 | 
						); err != nil {
 | 
				
			||||||
		fieldErrors := make(map[string]string)
 | 
							fieldErrors := make(map[string]string)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,11 +19,11 @@ func (v Validator) ValidateUpdateRequest(req param.KindBoxReqUpdateRequest) (map
 | 
				
			||||||
			validation.Required,
 | 
								validation.Required,
 | 
				
			||||||
			validation.By(v.doesBenefactorExist)),
 | 
								validation.By(v.doesBenefactorExist)),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		validation.Field(&req.KindBoxReqID,
 | 
							// validation.Field(&req.KindBoxReqID,
 | 
				
			||||||
			validation.Required,
 | 
							//	validation.Required,
 | 
				
			||||||
			validation.By(v.doesKindBoxRequestExist),
 | 
							//	validation.By(v.doesKindBoxRequestExist),
 | 
				
			||||||
			validation.By(v.hasPendingStatus),
 | 
							//	validation.By(v.hasPendingStatus),
 | 
				
			||||||
			validation.By(v.doesKindBoxBelongToBenefactor(req.BenefactorID))),
 | 
							//	validation.By(v.doesKindBoxBelongToBenefactor(req.BenefactorID))),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		validation.Field(&req.TypeID,
 | 
							validation.Field(&req.TypeID,
 | 
				
			||||||
			validation.Required,
 | 
								validation.Required,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,31 +1,43 @@
 | 
				
			||||||
package benefactorkindboxreqvalidator
 | 
					package benefactorkindboxreqvalidator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
						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"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
	MinKindBoxReq = 1
 | 
						MinKindBoxReq uint = 1
 | 
				
			||||||
	MaxKindBoxReq = 100
 | 
						MaxKindBoxReq uint = 100
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Repository interface {
 | 
					type Repository interface {
 | 
				
			||||||
	BenefactorExist(id uint) (bool, error)
 | 
						// KindBoxReqExist(id uint) (bool, error)
 | 
				
			||||||
	KindBoxReqExist(id uint) (bool, error)
 | 
						// KindBoxBelongToBenefactor(bID uint, kbID uint) (bool, error)
 | 
				
			||||||
	TypeExist(id uint) (bool, error)
 | 
						// PendingStatus(id uint) (bool, error)
 | 
				
			||||||
	KindBoxBelongToBenefactor(bID uint, kbID uint) (bool, error)
 | 
					}
 | 
				
			||||||
	PendingStatus(id 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 Validator struct {
 | 
					type Validator struct {
 | 
				
			||||||
	repo Repository
 | 
						repo          Repository
 | 
				
			||||||
 | 
						benefactorSvc BenefactorSvc
 | 
				
			||||||
 | 
						addressSvc    AddressSvc
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func New(repo Repository) Validator {
 | 
					func New(repo Repository, benefactorSvc BenefactorSvc, addressSvc AddressSvc) Validator {
 | 
				
			||||||
	return Validator{repo: repo}
 | 
						return Validator{repo: repo, benefactorSvc: benefactorSvc, addressSvc: addressSvc}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (v Validator) doesBenefactorExist(value interface{}) error {
 | 
					func (v Validator) doesBenefactorExist(value interface{}) error {
 | 
				
			||||||
| 
						 | 
					@ -33,7 +45,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)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -42,39 +54,31 @@ func (v Validator) doesBenefactorExist(value interface{}) error {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (v Validator) doesTypeExist(value interface{}) error {
 | 
					func (v Validator) doesTypeExist(value interface{}) error {
 | 
				
			||||||
	typeID, ok := value.(uint)
 | 
						typeID, ok := value.(entity.KindBoxType)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
							return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, err := v.repo.TypeExist(typeID)
 | 
						if !typeID.IsValid() {
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
							return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (v Validator) doesKindBoxRequestExist(value interface{}) error {
 | 
					func (v Validator) doesAddressExist(benefactorID uint) validation.RuleFunc {
 | 
				
			||||||
	kindBoxReqID, ok := value.(uint)
 | 
					 | 
				
			||||||
	if !ok {
 | 
					 | 
				
			||||||
		return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	_, err := v.repo.KindBoxReqExist(kindBoxReqID)
 | 
					 | 
				
			||||||
	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)
 | 
							addressID, ok := value.(uint)
 | 
				
			||||||
		if !ok {
 | 
							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)
 | 
								return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		_, err := v.repo.KindBoxBelongToBenefactor(benefactorID, kbID)
 | 
							if address.Address.BenefactorID != benefactorID {
 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
								return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -82,15 +86,43 @@ func (v Validator) doesKindBoxBelongToBenefactor(benefactorID uint) validation.R
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (v Validator) hasPendingStatus(value interface{}) error {
 | 
					// func (v Validator) doesKindBoxRequestExist(value interface{}) error {
 | 
				
			||||||
	kindboxID, ok := value.(uint)
 | 
					//	kindBoxReqID, ok := value.(uint)
 | 
				
			||||||
	if !ok {
 | 
					//	if !ok {
 | 
				
			||||||
		return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
					//		return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
	}
 | 
					//	}
 | 
				
			||||||
	_, err := v.repo.PendingStatus(kindboxID)
 | 
					//	_, err := v.repo.KindBoxReqExist(kindBoxReqID)
 | 
				
			||||||
	if err != nil {
 | 
					//	if err != nil {
 | 
				
			||||||
		return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
					//		return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
				
			||||||
	}
 | 
					//	}
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
	return nil
 | 
					//	return nil
 | 
				
			||||||
}
 | 
					//}
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// func (v Validator) doesKindBoxBelongToBenefactor(benefactorID uint) validation.RuleFunc {
 | 
				
			||||||
 | 
					//	return func(value interface{}) error {
 | 
				
			||||||
 | 
					//		kbID, ok := value.(uint)
 | 
				
			||||||
 | 
					//		if !ok {
 | 
				
			||||||
 | 
					//			return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
				
			||||||
 | 
					//		}
 | 
				
			||||||
 | 
					//		_, err := v.repo.KindBoxBelongToBenefactor(benefactorID, kbID)
 | 
				
			||||||
 | 
					//		if err != nil {
 | 
				
			||||||
 | 
					//			return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
				
			||||||
 | 
					//		}
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//		return nil
 | 
				
			||||||
 | 
					//	}
 | 
				
			||||||
 | 
					//}
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// func (v Validator) hasPendingStatus(value interface{}) error {
 | 
				
			||||||
 | 
					//	kindboxID, ok := value.(uint)
 | 
				
			||||||
 | 
					//	if !ok {
 | 
				
			||||||
 | 
					//		return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
 | 
					//	}
 | 
				
			||||||
 | 
					//	_, err := v.repo.PendingStatus(kindboxID)
 | 
				
			||||||
 | 
					//	if err != nil {
 | 
				
			||||||
 | 
					//		return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
				
			||||||
 | 
					//	}
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//	return nil
 | 
				
			||||||
 | 
					//}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue