forked from ebhomengo/niki
feat(niki): admin assign kindbox to a agent
This commit is contained in:
parent
8a66e43789
commit
47bc77baee
|
@ -0,0 +1,47 @@
|
|||
package adminkindboxhandler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box"
|
||||
httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
|
||||
"github.com/labstack/echo/v4"
|
||||
)
|
||||
|
||||
// AssignReceiverAgent godoc
|
||||
// @Summary Admin assign receiver agent to kindbox
|
||||
// @Tags KindBox
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param id path int true "KindBox ID"
|
||||
// @Param Request body param.AssignReceiverRequest true "Assign Receiver Agent Request Body"
|
||||
// @Success 204
|
||||
// @Failure 400 {string} "Bad request"
|
||||
// @Security AuthBearerAdmin
|
||||
// @Router /admin/kindboxes/assign-receiver-agent/{id} [patch].
|
||||
func (h Handler) AssignReceiverAgent(c echo.Context) error {
|
||||
var req param.AssignReceiverRequest
|
||||
|
||||
if bErr := c.Bind(&req); bErr != nil {
|
||||
return echo.NewHTTPError(http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if fieldErrors, err := h.adminKindBoxVld.ValidateAssignReceiverAgent(req); err != nil {
|
||||
msg, code := httpmsg.Error(err)
|
||||
|
||||
return c.JSON(code, echo.Map{
|
||||
"message": msg,
|
||||
"errors": fieldErrors,
|
||||
})
|
||||
}
|
||||
|
||||
sErr := h.adminKindBoxSvc.AssignReceiverAgent(c.Request().Context(), req)
|
||||
|
||||
if sErr != nil {
|
||||
msg, code := httpmsg.Error(sErr)
|
||||
|
||||
return echo.NewHTTPError(code, msg)
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusNoContent, nil)
|
||||
}
|
|
@ -12,4 +12,5 @@ func (h Handler) SetRoutes(e *echo.Echo) {
|
|||
r.Use(middleware.Auth(h.authSvc, h.authConfig))
|
||||
|
||||
r.GET("/:id", h.Get, middleware.AdminAuthorization(h.adminAuthorizeSvc, entity.AdminKindBoxGetPermission))
|
||||
r.PATCH("/assign-receiver-agent/:id", h.AssignReceiverAgent, middleware.AdminAuthorization(h.adminAuthorizeSvc, entity.AdminKindBoxAssignReceiverAgentPermission))
|
||||
}
|
||||
|
|
368
docs/docs.go
368
docs/docs.go
|
@ -267,14 +267,13 @@ const docTemplate = `{
|
|||
}
|
||||
}
|
||||
},
|
||||
"/admin/kindboxes/{id}": {
|
||||
"get": {
|
||||
"/admin/kindboxes/assign-receiver-agent/{id}": {
|
||||
"patch": {
|
||||
"security": [
|
||||
{
|
||||
"AuthBearerAdmin": []
|
||||
}
|
||||
],
|
||||
"description": "This endpoint retrieves a specific kind box by admin",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
|
@ -284,22 +283,28 @@ const docTemplate = `{
|
|||
"tags": [
|
||||
"KindBox"
|
||||
],
|
||||
"summary": "Get a specific kind box by admin",
|
||||
"summary": "Admin assign receiver agent to kindbox",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Kind box ID",
|
||||
"description": "KindBox ID",
|
||||
"name": "id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"description": "Assign Receiver Agent Request Body",
|
||||
"name": "Request",
|
||||
"in": "body",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"$ref": "#/definitions/adminkindboxparam.AssignReceiverRequest"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/adminkindboxparam.KindBoxGetResponse"
|
||||
}
|
||||
"204": {
|
||||
"description": "No Content"
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad request",
|
||||
|
@ -355,48 +360,6 @@ const docTemplate = `{
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"post": {
|
||||
"security": [
|
||||
{
|
||||
"AuthBearerAdmin": []
|
||||
}
|
||||
],
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"KindBoxReq"
|
||||
],
|
||||
"summary": "Add a new kind box request for a benefactor by admin",
|
||||
"parameters": [
|
||||
{
|
||||
"description": "New kind box request details",
|
||||
"name": "Request",
|
||||
"in": "body",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"$ref": "#/definitions/adminkindboxreqparam.KindBoxReqAddRequest"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/adminkindboxreqparam.KindBoxReqAddResponse"
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad request",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/admin/kindboxreqs/accept-kind-box-req/{id}": {
|
||||
|
@ -501,135 +464,6 @@ const docTemplate = `{
|
|||
}
|
||||
}
|
||||
},
|
||||
"/admin/kindboxreqs/awaiting-delivery": {
|
||||
"get": {
|
||||
"security": [
|
||||
{
|
||||
"AuthBearerAdmin": []
|
||||
}
|
||||
],
|
||||
"description": "Retrieves a list of all awaiting KindBox requests with filtering, sorting, and pagination options",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"KindBoxReq"
|
||||
],
|
||||
"summary": "Get all awaiting delivery KindBox requests",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Filter by ID",
|
||||
"name": "filter_id",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Filter by benefactor ID",
|
||||
"name": "filter_benefactor_id",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"enum": [
|
||||
1,
|
||||
2,
|
||||
3
|
||||
],
|
||||
"type": "integer",
|
||||
"format": "enum",
|
||||
"description": "Filter by KindBox type",
|
||||
"name": "filter_kind_box_type",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Filter by count requested",
|
||||
"name": "filter_count_requested",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Filter by count accepted",
|
||||
"name": "filter_count_accepted",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Filter by deliver refer time ID",
|
||||
"name": "filter_deliver_refer_time_id",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"format": "date",
|
||||
"description": "Filter by deliver refer date",
|
||||
"name": "filter_deliver_refer_date",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Filter by deliver address ID",
|
||||
"name": "filter_deliver_address_id",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Page number",
|
||||
"name": "page_number",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Page size",
|
||||
"name": "page_size",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"enum": [
|
||||
"id",
|
||||
"benefactor_id",
|
||||
"kind_box_type",
|
||||
"count_requested",
|
||||
"count_accepted",
|
||||
"deliver_refer_time_id",
|
||||
"deliver_refer_date",
|
||||
"deliver_address_id"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "Sort by field",
|
||||
"name": "sort_field",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"enum": [
|
||||
"asc",
|
||||
"desc"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "Sort order",
|
||||
"name": "sort_direction",
|
||||
"in": "query"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/adminkindboxreqparam.DeliveryAwaitingGetAllResponse"
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad request",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/admin/kindboxreqs/awaiting-delivery/{id}": {
|
||||
"get": {
|
||||
"security": [
|
||||
|
@ -881,7 +715,7 @@ const docTemplate = `{
|
|||
}
|
||||
}
|
||||
},
|
||||
"/benefactor/kindboxes": {
|
||||
"/benefactor/kindboxes/": {
|
||||
"get": {
|
||||
"security": [
|
||||
{
|
||||
|
@ -957,57 +791,6 @@ const docTemplate = `{
|
|||
}
|
||||
}
|
||||
},
|
||||
"/benefactor/kindboxes/{id}/emptying-requests": {
|
||||
"patch": {
|
||||
"security": [
|
||||
{
|
||||
"AuthBearerBenefactor": []
|
||||
}
|
||||
],
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"Benefactor"
|
||||
],
|
||||
"summary": "Register a new emptying request for a kind box by benefactor",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "KindBox ID",
|
||||
"name": "id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"description": "Request body",
|
||||
"name": "Request",
|
||||
"in": "body",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"$ref": "#/definitions/benefactorkindboxparam.KindBoxRegisterEmptyingRequest"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"204": {
|
||||
"description": "No content",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad request",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/benefactor/kindboxreqs/": {
|
||||
"post": {
|
||||
"security": [
|
||||
|
@ -1324,56 +1107,11 @@ const docTemplate = `{
|
|||
}
|
||||
}
|
||||
},
|
||||
"adminkindboxparam.KindBoxGetResponse": {
|
||||
"adminkindboxparam.AssignReceiverRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"amount": {
|
||||
"receiver_agent_id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"benefactorID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"deliverAddressID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"deliverReferDate": {
|
||||
"type": "string"
|
||||
},
|
||||
"deliveredAt": {
|
||||
"type": "string"
|
||||
},
|
||||
"id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"kindBoxReqID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"receiverAgentID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"returnAddressID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"returnReferDate": {
|
||||
"type": "string"
|
||||
},
|
||||
"returnReferTimeID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"returnedAt": {
|
||||
"type": "string"
|
||||
},
|
||||
"senderAgentID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"serialNumber": {
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"$ref": "#/definitions/entity.KindBoxStatus"
|
||||
},
|
||||
"type": {
|
||||
"$ref": "#/definitions/entity.KindBoxType"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1391,20 +1129,6 @@ const docTemplate = `{
|
|||
"adminkindboxreqparam.DeliverKindBoxReqResponse": {
|
||||
"type": "object"
|
||||
},
|
||||
"adminkindboxreqparam.DeliveryAwaitingGetAllResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"all_awaiting_kind_box_req": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/entity.KindBoxReq"
|
||||
}
|
||||
},
|
||||
"pagination": {
|
||||
"$ref": "#/definitions/param.PaginationResponse"
|
||||
}
|
||||
}
|
||||
},
|
||||
"adminkindboxreqparam.DeliveryAwaitingGetResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -1477,47 +1201,10 @@ const docTemplate = `{
|
|||
}
|
||||
}
|
||||
},
|
||||
"adminkindboxreqparam.KindBoxReqAddRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"benefactor_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"count_requested": {
|
||||
"type": "integer",
|
||||
"example": 2
|
||||
},
|
||||
"deliver_address_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"deliver_refer_date": {
|
||||
"type": "string",
|
||||
"example": "2025-01-02 15:04:05"
|
||||
},
|
||||
"type_id": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/entity.KindBoxType"
|
||||
}
|
||||
],
|
||||
"example": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"adminkindboxreqparam.KindBoxReqAddResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"kindBoxReq": {
|
||||
"$ref": "#/definitions/entity.KindBoxReq"
|
||||
}
|
||||
}
|
||||
},
|
||||
"adminkindboxreqparam.KindBoxReqGetAllResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"all_awaiting_kind_box_req": {
|
||||
"all_kind_box_req": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/entity.KindBoxReq"
|
||||
|
@ -1894,23 +1581,6 @@ const docTemplate = `{
|
|||
}
|
||||
}
|
||||
},
|
||||
"benefactorkindboxparam.KindBoxRegisterEmptyingRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"return_address_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"return_refer_date": {
|
||||
"type": "string",
|
||||
"example": "2025-01-02T15:04:05Z"
|
||||
},
|
||||
"return_refer_time_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"benefactorkindboxreqparam.KindBoxReqAddRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
|
|
@ -256,14 +256,13 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"/admin/kindboxes/{id}": {
|
||||
"get": {
|
||||
"/admin/kindboxes/assign-receiver-agent/{id}": {
|
||||
"patch": {
|
||||
"security": [
|
||||
{
|
||||
"AuthBearerAdmin": []
|
||||
}
|
||||
],
|
||||
"description": "This endpoint retrieves a specific kind box by admin",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
|
@ -273,22 +272,28 @@
|
|||
"tags": [
|
||||
"KindBox"
|
||||
],
|
||||
"summary": "Get a specific kind box by admin",
|
||||
"summary": "Admin assign receiver agent to kindbox",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Kind box ID",
|
||||
"description": "KindBox ID",
|
||||
"name": "id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"description": "Assign Receiver Agent Request Body",
|
||||
"name": "Request",
|
||||
"in": "body",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"$ref": "#/definitions/adminkindboxparam.AssignReceiverRequest"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/adminkindboxparam.KindBoxGetResponse"
|
||||
}
|
||||
"204": {
|
||||
"description": "No Content"
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad request",
|
||||
|
@ -344,48 +349,6 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"post": {
|
||||
"security": [
|
||||
{
|
||||
"AuthBearerAdmin": []
|
||||
}
|
||||
],
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"KindBoxReq"
|
||||
],
|
||||
"summary": "Add a new kind box request for a benefactor by admin",
|
||||
"parameters": [
|
||||
{
|
||||
"description": "New kind box request details",
|
||||
"name": "Request",
|
||||
"in": "body",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"$ref": "#/definitions/adminkindboxreqparam.KindBoxReqAddRequest"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/adminkindboxreqparam.KindBoxReqAddResponse"
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad request",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/admin/kindboxreqs/accept-kind-box-req/{id}": {
|
||||
|
@ -490,135 +453,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"/admin/kindboxreqs/awaiting-delivery": {
|
||||
"get": {
|
||||
"security": [
|
||||
{
|
||||
"AuthBearerAdmin": []
|
||||
}
|
||||
],
|
||||
"description": "Retrieves a list of all awaiting KindBox requests with filtering, sorting, and pagination options",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"KindBoxReq"
|
||||
],
|
||||
"summary": "Get all awaiting delivery KindBox requests",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Filter by ID",
|
||||
"name": "filter_id",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Filter by benefactor ID",
|
||||
"name": "filter_benefactor_id",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"enum": [
|
||||
1,
|
||||
2,
|
||||
3
|
||||
],
|
||||
"type": "integer",
|
||||
"format": "enum",
|
||||
"description": "Filter by KindBox type",
|
||||
"name": "filter_kind_box_type",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Filter by count requested",
|
||||
"name": "filter_count_requested",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Filter by count accepted",
|
||||
"name": "filter_count_accepted",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Filter by deliver refer time ID",
|
||||
"name": "filter_deliver_refer_time_id",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"format": "date",
|
||||
"description": "Filter by deliver refer date",
|
||||
"name": "filter_deliver_refer_date",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Filter by deliver address ID",
|
||||
"name": "filter_deliver_address_id",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Page number",
|
||||
"name": "page_number",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "Page size",
|
||||
"name": "page_size",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"enum": [
|
||||
"id",
|
||||
"benefactor_id",
|
||||
"kind_box_type",
|
||||
"count_requested",
|
||||
"count_accepted",
|
||||
"deliver_refer_time_id",
|
||||
"deliver_refer_date",
|
||||
"deliver_address_id"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "Sort by field",
|
||||
"name": "sort_field",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"enum": [
|
||||
"asc",
|
||||
"desc"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "Sort order",
|
||||
"name": "sort_direction",
|
||||
"in": "query"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/adminkindboxreqparam.DeliveryAwaitingGetAllResponse"
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad request",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/admin/kindboxreqs/awaiting-delivery/{id}": {
|
||||
"get": {
|
||||
"security": [
|
||||
|
@ -870,7 +704,7 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"/benefactor/kindboxes": {
|
||||
"/benefactor/kindboxes/": {
|
||||
"get": {
|
||||
"security": [
|
||||
{
|
||||
|
@ -946,57 +780,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"/benefactor/kindboxes/{id}/emptying-requests": {
|
||||
"patch": {
|
||||
"security": [
|
||||
{
|
||||
"AuthBearerBenefactor": []
|
||||
}
|
||||
],
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"Benefactor"
|
||||
],
|
||||
"summary": "Register a new emptying request for a kind box by benefactor",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "KindBox ID",
|
||||
"name": "id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"description": "Request body",
|
||||
"name": "Request",
|
||||
"in": "body",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"$ref": "#/definitions/benefactorkindboxparam.KindBoxRegisterEmptyingRequest"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"204": {
|
||||
"description": "No content",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Bad request",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/benefactor/kindboxreqs/": {
|
||||
"post": {
|
||||
"security": [
|
||||
|
@ -1313,56 +1096,11 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"adminkindboxparam.KindBoxGetResponse": {
|
||||
"adminkindboxparam.AssignReceiverRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"amount": {
|
||||
"receiver_agent_id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"benefactorID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"deliverAddressID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"deliverReferDate": {
|
||||
"type": "string"
|
||||
},
|
||||
"deliveredAt": {
|
||||
"type": "string"
|
||||
},
|
||||
"id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"kindBoxReqID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"receiverAgentID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"returnAddressID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"returnReferDate": {
|
||||
"type": "string"
|
||||
},
|
||||
"returnReferTimeID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"returnedAt": {
|
||||
"type": "string"
|
||||
},
|
||||
"senderAgentID": {
|
||||
"type": "integer"
|
||||
},
|
||||
"serialNumber": {
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"$ref": "#/definitions/entity.KindBoxStatus"
|
||||
},
|
||||
"type": {
|
||||
"$ref": "#/definitions/entity.KindBoxType"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1380,20 +1118,6 @@
|
|||
"adminkindboxreqparam.DeliverKindBoxReqResponse": {
|
||||
"type": "object"
|
||||
},
|
||||
"adminkindboxreqparam.DeliveryAwaitingGetAllResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"all_awaiting_kind_box_req": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/entity.KindBoxReq"
|
||||
}
|
||||
},
|
||||
"pagination": {
|
||||
"$ref": "#/definitions/param.PaginationResponse"
|
||||
}
|
||||
}
|
||||
},
|
||||
"adminkindboxreqparam.DeliveryAwaitingGetResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -1466,47 +1190,10 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"adminkindboxreqparam.KindBoxReqAddRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"benefactor_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"count_requested": {
|
||||
"type": "integer",
|
||||
"example": 2
|
||||
},
|
||||
"deliver_address_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"deliver_refer_date": {
|
||||
"type": "string",
|
||||
"example": "2025-01-02 15:04:05"
|
||||
},
|
||||
"type_id": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/entity.KindBoxType"
|
||||
}
|
||||
],
|
||||
"example": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"adminkindboxreqparam.KindBoxReqAddResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"kindBoxReq": {
|
||||
"$ref": "#/definitions/entity.KindBoxReq"
|
||||
}
|
||||
}
|
||||
},
|
||||
"adminkindboxreqparam.KindBoxReqGetAllResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"all_awaiting_kind_box_req": {
|
||||
"all_kind_box_req": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/entity.KindBoxReq"
|
||||
|
@ -1883,23 +1570,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"benefactorkindboxparam.KindBoxRegisterEmptyingRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"return_address_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"return_refer_date": {
|
||||
"type": "string",
|
||||
"example": "2025-01-02T15:04:05Z"
|
||||
},
|
||||
"return_refer_time_id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"benefactorkindboxreqparam.KindBoxReqAddRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
|
|
@ -72,40 +72,10 @@ definitions:
|
|||
example: "1234567890"
|
||||
type: string
|
||||
type: object
|
||||
adminkindboxparam.KindBoxGetResponse:
|
||||
adminkindboxparam.AssignReceiverRequest:
|
||||
properties:
|
||||
amount:
|
||||
receiver_agent_id:
|
||||
type: integer
|
||||
benefactorID:
|
||||
type: integer
|
||||
deliverAddressID:
|
||||
type: integer
|
||||
deliverReferDate:
|
||||
type: string
|
||||
deliveredAt:
|
||||
type: string
|
||||
id:
|
||||
type: integer
|
||||
kindBoxReqID:
|
||||
type: integer
|
||||
receiverAgentID:
|
||||
type: integer
|
||||
returnAddressID:
|
||||
type: integer
|
||||
returnReferDate:
|
||||
type: string
|
||||
returnReferTimeID:
|
||||
type: integer
|
||||
returnedAt:
|
||||
type: string
|
||||
senderAgentID:
|
||||
type: integer
|
||||
serialNumber:
|
||||
type: string
|
||||
status:
|
||||
$ref: '#/definitions/entity.KindBoxStatus'
|
||||
type:
|
||||
$ref: '#/definitions/entity.KindBoxType'
|
||||
type: object
|
||||
adminkindboxreqparam.AssignSenderRequest:
|
||||
properties:
|
||||
|
@ -116,15 +86,6 @@ definitions:
|
|||
type: object
|
||||
adminkindboxreqparam.DeliverKindBoxReqResponse:
|
||||
type: object
|
||||
adminkindboxreqparam.DeliveryAwaitingGetAllResponse:
|
||||
properties:
|
||||
all_awaiting_kind_box_req:
|
||||
items:
|
||||
$ref: '#/definitions/entity.KindBoxReq'
|
||||
type: array
|
||||
pagination:
|
||||
$ref: '#/definitions/param.PaginationResponse'
|
||||
type: object
|
||||
adminkindboxreqparam.DeliveryAwaitingGetResponse:
|
||||
properties:
|
||||
benefactorID:
|
||||
|
@ -172,33 +133,9 @@ definitions:
|
|||
kind_box_req_status:
|
||||
$ref: '#/definitions/entity.KindBoxReqStatus'
|
||||
type: object
|
||||
adminkindboxreqparam.KindBoxReqAddRequest:
|
||||
properties:
|
||||
benefactor_id:
|
||||
example: 1
|
||||
type: integer
|
||||
count_requested:
|
||||
example: 2
|
||||
type: integer
|
||||
deliver_address_id:
|
||||
example: 1
|
||||
type: integer
|
||||
deliver_refer_date:
|
||||
example: "2025-01-02 15:04:05"
|
||||
type: string
|
||||
type_id:
|
||||
allOf:
|
||||
- $ref: '#/definitions/entity.KindBoxType'
|
||||
example: 1
|
||||
type: object
|
||||
adminkindboxreqparam.KindBoxReqAddResponse:
|
||||
properties:
|
||||
kindBoxReq:
|
||||
$ref: '#/definitions/entity.KindBoxReq'
|
||||
type: object
|
||||
adminkindboxreqparam.KindBoxReqGetAllResponse:
|
||||
properties:
|
||||
all_awaiting_kind_box_req:
|
||||
all_kind_box_req:
|
||||
items:
|
||||
$ref: '#/definitions/entity.KindBoxReq'
|
||||
type: array
|
||||
|
@ -444,18 +381,6 @@ definitions:
|
|||
type:
|
||||
$ref: '#/definitions/entity.KindBoxType'
|
||||
type: object
|
||||
benefactorkindboxparam.KindBoxRegisterEmptyingRequest:
|
||||
properties:
|
||||
return_address_id:
|
||||
example: 1
|
||||
type: integer
|
||||
return_refer_date:
|
||||
example: "2025-01-02T15:04:05Z"
|
||||
type: string
|
||||
return_refer_time_id:
|
||||
example: 1
|
||||
type: integer
|
||||
type: object
|
||||
benefactorkindboxreqparam.KindBoxReqAddRequest:
|
||||
properties:
|
||||
benefactor_id:
|
||||
|
@ -815,31 +740,34 @@ paths:
|
|||
summary: Get all provinces
|
||||
tags:
|
||||
- Address
|
||||
/admin/kindboxes/{id}:
|
||||
get:
|
||||
/admin/kindboxes/assign-receiver-agent/{id}:
|
||||
patch:
|
||||
consumes:
|
||||
- application/json
|
||||
description: This endpoint retrieves a specific kind box by admin
|
||||
parameters:
|
||||
- description: Kind box ID
|
||||
- description: KindBox ID
|
||||
in: path
|
||||
name: id
|
||||
required: true
|
||||
type: integer
|
||||
- description: Assign Receiver Agent Request Body
|
||||
in: body
|
||||
name: Request
|
||||
required: true
|
||||
schema:
|
||||
$ref: '#/definitions/adminkindboxparam.AssignReceiverRequest'
|
||||
produces:
|
||||
- application/json
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
schema:
|
||||
$ref: '#/definitions/adminkindboxparam.KindBoxGetResponse'
|
||||
"204":
|
||||
description: No Content
|
||||
"400":
|
||||
description: Bad request
|
||||
schema:
|
||||
type: string
|
||||
security:
|
||||
- AuthBearerAdmin: []
|
||||
summary: Get a specific kind box by admin
|
||||
summary: Admin assign receiver agent to kindbox
|
||||
tags:
|
||||
- KindBox
|
||||
/admin/kindboxreqs:
|
||||
|
@ -871,32 +799,6 @@ paths:
|
|||
summary: Admin get all kindboxreq
|
||||
tags:
|
||||
- KindBoxReq
|
||||
post:
|
||||
consumes:
|
||||
- application/json
|
||||
parameters:
|
||||
- description: New kind box request details
|
||||
in: body
|
||||
name: Request
|
||||
required: true
|
||||
schema:
|
||||
$ref: '#/definitions/adminkindboxreqparam.KindBoxReqAddRequest'
|
||||
produces:
|
||||
- application/json
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
schema:
|
||||
$ref: '#/definitions/adminkindboxreqparam.KindBoxReqAddResponse'
|
||||
"400":
|
||||
description: Bad request
|
||||
schema:
|
||||
type: string
|
||||
security:
|
||||
- AuthBearerAdmin: []
|
||||
summary: Add a new kind box request for a benefactor by admin
|
||||
tags:
|
||||
- KindBoxReq
|
||||
/admin/kindboxreqs/accept-kind-box-req/{id}:
|
||||
patch:
|
||||
consumes:
|
||||
|
@ -961,95 +863,6 @@ paths:
|
|||
summary: Admin Assign Sender Agent to kindboxreq
|
||||
tags:
|
||||
- KindBoxReq
|
||||
/admin/kindboxreqs/awaiting-delivery:
|
||||
get:
|
||||
consumes:
|
||||
- application/json
|
||||
description: Retrieves a list of all awaiting KindBox requests with filtering,
|
||||
sorting, and pagination options
|
||||
parameters:
|
||||
- description: Filter by ID
|
||||
in: query
|
||||
name: filter_id
|
||||
type: integer
|
||||
- description: Filter by benefactor ID
|
||||
in: query
|
||||
name: filter_benefactor_id
|
||||
type: integer
|
||||
- description: Filter by KindBox type
|
||||
enum:
|
||||
- 1
|
||||
- 2
|
||||
- 3
|
||||
format: enum
|
||||
in: query
|
||||
name: filter_kind_box_type
|
||||
type: integer
|
||||
- description: Filter by count requested
|
||||
in: query
|
||||
name: filter_count_requested
|
||||
type: integer
|
||||
- description: Filter by count accepted
|
||||
in: query
|
||||
name: filter_count_accepted
|
||||
type: integer
|
||||
- description: Filter by deliver refer time ID
|
||||
in: query
|
||||
name: filter_deliver_refer_time_id
|
||||
type: integer
|
||||
- description: Filter by deliver refer date
|
||||
format: date
|
||||
in: query
|
||||
name: filter_deliver_refer_date
|
||||
type: string
|
||||
- description: Filter by deliver address ID
|
||||
in: query
|
||||
name: filter_deliver_address_id
|
||||
type: integer
|
||||
- description: Page number
|
||||
in: query
|
||||
name: page_number
|
||||
type: integer
|
||||
- description: Page size
|
||||
in: query
|
||||
name: page_size
|
||||
type: integer
|
||||
- description: Sort by field
|
||||
enum:
|
||||
- id
|
||||
- benefactor_id
|
||||
- kind_box_type
|
||||
- count_requested
|
||||
- count_accepted
|
||||
- deliver_refer_time_id
|
||||
- deliver_refer_date
|
||||
- deliver_address_id
|
||||
in: query
|
||||
name: sort_field
|
||||
type: string
|
||||
- description: Sort order
|
||||
enum:
|
||||
- asc
|
||||
- desc
|
||||
in: query
|
||||
name: sort_direction
|
||||
type: string
|
||||
produces:
|
||||
- application/json
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
schema:
|
||||
$ref: '#/definitions/adminkindboxreqparam.DeliveryAwaitingGetAllResponse'
|
||||
"400":
|
||||
description: Bad request
|
||||
schema:
|
||||
type: string
|
||||
security:
|
||||
- AuthBearerAdmin: []
|
||||
summary: Get all awaiting delivery KindBox requests
|
||||
tags:
|
||||
- KindBoxReq
|
||||
/admin/kindboxreqs/awaiting-delivery/{id}:
|
||||
get:
|
||||
consumes:
|
||||
|
@ -1206,7 +1019,7 @@ paths:
|
|||
summary: Register an admin by super-admin
|
||||
tags:
|
||||
- Admin
|
||||
/benefactor/kindboxes:
|
||||
/benefactor/kindboxes/:
|
||||
get:
|
||||
consumes:
|
||||
- application/json
|
||||
|
@ -1254,38 +1067,6 @@ paths:
|
|||
summary: Get a specific kind box for a benefactor
|
||||
tags:
|
||||
- KindBox
|
||||
/benefactor/kindboxes/{id}/emptying-requests:
|
||||
patch:
|
||||
consumes:
|
||||
- application/json
|
||||
parameters:
|
||||
- description: KindBox ID
|
||||
in: path
|
||||
name: id
|
||||
required: true
|
||||
type: integer
|
||||
- description: Request body
|
||||
in: body
|
||||
name: Request
|
||||
required: true
|
||||
schema:
|
||||
$ref: '#/definitions/benefactorkindboxparam.KindBoxRegisterEmptyingRequest'
|
||||
produces:
|
||||
- application/json
|
||||
responses:
|
||||
"204":
|
||||
description: No content
|
||||
schema:
|
||||
type: string
|
||||
"400":
|
||||
description: Bad request
|
||||
schema:
|
||||
type: string
|
||||
security:
|
||||
- AuthBearerBenefactor: []
|
||||
summary: Register a new emptying request for a kind box by benefactor
|
||||
tags:
|
||||
- Benefactor
|
||||
/benefactor/kindboxreqs/:
|
||||
post:
|
||||
consumes:
|
||||
|
|
|
@ -13,4 +13,5 @@ const (
|
|||
AdminAdminGetAllAgentPermission = AdminPermission("admin-getall_agent")
|
||||
AdminKindBoxReqGetAwaitingDeliveryPermission = AdminPermission("kindboxreq-get_awaiting_delivery")
|
||||
AdminKindBoxGetPermission = AdminPermission("kindbox-get")
|
||||
AdminKindBoxAssignReceiverAgentPermission = AdminPermission("kindbox-assign_receiver_agent")
|
||||
)
|
||||
|
|
|
@ -51,8 +51,8 @@ func InitBenefactorAddressValidator(cfg config.Config, redisAdapter redis.Adapte
|
|||
)
|
||||
}
|
||||
|
||||
func InitAdminKindBoxValidator(db *mysql.DB) adminkindboxvalidator.Validator {
|
||||
return adminkindboxvalidator.New(InitKindBoxRepo(db))
|
||||
func InitAdminKindBoxValidator(db *mysql.DB, cfg config.Config) adminkindboxvalidator.Validator {
|
||||
return adminkindboxvalidator.New(InitKindBoxRepo(db), InitAdminService(cfg, db))
|
||||
}
|
||||
|
||||
func InitBenefactorKindBoxValidator(cfg config.Config, redisAdapter redis.Adapter, db *mysql.DB) benefactorkindboxvalidator.Validator {
|
||||
|
|
2
main.go
2
main.go
|
@ -65,7 +65,7 @@ func initDependencies(cfg config.Config, redisAdapter redis.Adapter, db *mysql.D
|
|||
BenefactorKindBoxVld: initial.InitBenefactorKindBoxValidator(cfg, redisAdapter, db),
|
||||
AdminKindBoxReqVld: initial.InitAdminKindBoxReqValidator(db, cfg),
|
||||
AdminVld: initial.InitAdminValidator(db),
|
||||
AdminKindBoxVld: initial.InitAdminKindBoxValidator(db),
|
||||
AdminKindBoxVld: initial.InitAdminKindBoxValidator(db, cfg),
|
||||
},
|
||||
initial.Services{
|
||||
BenefactorSvc: initial.InitBenefactorService(cfg, redisAdapter, db),
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
package adminkindboxparam
|
||||
|
||||
type AssignReceiverRequest struct {
|
||||
KindBoxID uint `json:"-" param:"id"`
|
||||
ReceiverAgentID uint `json:"receiver_agent_id"`
|
||||
}
|
|
@ -33,4 +33,5 @@ const (
|
|||
ErrorMsgSortFieldIsRequired = "sort field is required"
|
||||
ErrorMsgSortDirectionShouldBeAscOrDesc = "sort direction should be asc or desc"
|
||||
ErrorMsgSortFieldIsNotValid = "sort field is not valid"
|
||||
ErrorMsgAssignReceiverAgentKindBoxStatus = "only ready to return kindboxes can be assigned to a receiver agent"
|
||||
)
|
||||
|
|
|
@ -75,3 +75,17 @@ func (d DB) GetAdminByID(ctx context.Context, adminID uint) (entity.Admin, error
|
|||
|
||||
return admin, nil
|
||||
}
|
||||
|
||||
func (d DB) AgentExistByID(ctx context.Context, agentID uint) (bool, error) {
|
||||
const op = "mysqladmin.AgentExistByID"
|
||||
|
||||
query := `select count(*) from admins where role = ? and id = ?`
|
||||
var count int
|
||||
err := d.conn.Conn().QueryRowContext(ctx, query, entity.AdminAgentRole.String(), agentID).Scan(&count)
|
||||
if err != nil {
|
||||
return false, richerror.New(op).WithErr(err).
|
||||
WithMessage(errmsg.ErrorMsgCantScanQueryResult).WithKind(richerror.KindUnexpected)
|
||||
}
|
||||
|
||||
return count > 0, nil
|
||||
}
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package mysqlkindbox
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"git.gocasts.ir/ebhomengo/niki/entity"
|
||||
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
|
||||
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
||||
)
|
||||
|
||||
func (d DB) AssignReceiverAgent(ctx context.Context, kindBox entity.KindBox) error {
|
||||
const op = "mysqlkindbox.AssignReceiverAgent"
|
||||
|
||||
query := `UPDATE kind_boxes SET receiver_agent_id = ?, status = ? WHERE status = ? AND id = ?`
|
||||
_, err := d.conn.Conn().ExecContext(ctx, query,
|
||||
kindBox.ReceiverAgentID, entity.KindBoxAssignedReceiverAgentStatus.String(), entity.KindBoxReadyToReturnStatus.String(), kindBox.ID)
|
||||
if err != nil {
|
||||
return richerror.New(op).WithErr(err).
|
||||
WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
|
@ -9,7 +9,8 @@ ALTER TABLE `admin_access_controls` MODIFY COLUMN `permission`
|
|||
'kindboxreq-assign_sender_agent',
|
||||
'admin-getall_agent',
|
||||
'kindboxreq-get_awaiting_delivery',
|
||||
'kindbox-get'
|
||||
'kindbox-get',
|
||||
'kindbox-assign_receiver_agent'
|
||||
) NOT NULL;
|
||||
|
||||
-- +migrate Down
|
|
@ -17,7 +17,9 @@ INSERT INTO `admin_access_controls` (`id`, `actor_id`, `actor_type`,`permission`
|
|||
(15, 1 , 'role','kindboxreq-get_awaiting_delivery'),
|
||||
(16, 3 , 'role','kindboxreq-get_awaiting_delivery'),
|
||||
(17, 1 , 'role','kindbox-get'),
|
||||
(18, 2 , 'role','kindbox-get');
|
||||
(18, 2 , 'role','kindbox-get'),
|
||||
(19, 1 , 'role','kindbox-assign_receiver_agent'),
|
||||
(20, 2 , 'role','kindbox-assign_receiver_agent');
|
||||
|
||||
|
||||
-- +migrate Down
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
package adminservice
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
||||
)
|
||||
|
||||
func (s Service) AgentExistByID(ctx context.Context, agentID uint) (bool, error) {
|
||||
const op = "adminservice.AgentExistByID"
|
||||
|
||||
exists, err := s.repo.AgentExistByID(ctx, agentID)
|
||||
if err != nil {
|
||||
return false, richerror.New(op).WithErr(err)
|
||||
}
|
||||
|
||||
return exists, nil
|
||||
}
|
|
@ -19,6 +19,7 @@ type Repository interface {
|
|||
GetAdminByPhoneNumber(ctx context.Context, phoneNumber string) (entity.Admin, error)
|
||||
GetAdminByID(ctx context.Context, adminID uint) (entity.Admin, error)
|
||||
GetAllAgent(ctx context.Context) ([]entity.Admin, error)
|
||||
AgentExistByID(ctx context.Context, agentID uint) (bool, error)
|
||||
}
|
||||
|
||||
type Service struct {
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package adminkindboxservice
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"git.gocasts.ir/ebhomengo/niki/entity"
|
||||
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box"
|
||||
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
||||
)
|
||||
|
||||
func (s Service) AssignReceiverAgent(ctx context.Context, req param.AssignReceiverRequest) error {
|
||||
const op = "AdminKindBoxService.AssignReceiverAgent"
|
||||
|
||||
err := s.repo.AssignReceiverAgent(ctx, entity.KindBox{
|
||||
ID: req.KindBoxID,
|
||||
ReceiverAgentID: req.ReceiverAgentID,
|
||||
})
|
||||
if err != nil {
|
||||
return richerror.New(op).WithErr(err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
|
@ -10,6 +10,7 @@ type Repository interface {
|
|||
AddBatchKindBox(ctx context.Context, kindBoxes []entity.KindBox) error
|
||||
AddKindBox(ctx context.Context, kindBox entity.KindBox) error
|
||||
GetKindBox(ctx context.Context, kindBoxID uint) (entity.KindBox, error)
|
||||
AssignReceiverAgent(ctx context.Context, kindBox entity.KindBox) error
|
||||
}
|
||||
|
||||
type Service struct {
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
package adminkindboxvalidator
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box"
|
||||
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
|
||||
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
||||
validation "github.com/go-ozzo/ozzo-validation/v4"
|
||||
)
|
||||
|
||||
func (v Validator) ValidateAssignReceiverAgent(req param.AssignReceiverRequest) (map[string]string, error) {
|
||||
const op = "adminkindboxvalidator.ValidateAssignReceiverAgent"
|
||||
|
||||
if err := validation.ValidateStruct(&req,
|
||||
|
||||
validation.Field(&req.KindBoxID, validation.Required,
|
||||
validation.By(v.doesKindBoxExist),
|
||||
validation.By(v.checkKindBoxStatusForAssigningReceiverAgent)),
|
||||
|
||||
validation.Field(&req.ReceiverAgentID, validation.Required,
|
||||
validation.By(v.doesAgentExist)),
|
||||
); err != nil {
|
||||
fieldErrors := make(map[string]string)
|
||||
|
||||
var errV validation.Errors
|
||||
if errors.As(err, &errV) {
|
||||
for key, value := range errV {
|
||||
if value != nil {
|
||||
fieldErrors[key] = value.Error()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return fieldErrors, richerror.New(op).
|
||||
WithMessage(errmsg.ErrorMsgInvalidInput).
|
||||
WithKind(richerror.KindInvalid).
|
||||
WithMeta(map[string]interface{}{"req": req}).
|
||||
WithErr(err)
|
||||
}
|
||||
|
||||
return map[string]string{}, nil
|
||||
}
|
|
@ -4,19 +4,26 @@ import (
|
|||
"context"
|
||||
"fmt"
|
||||
|
||||
"git.gocasts.ir/ebhomengo/niki/entity"
|
||||
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
|
||||
)
|
||||
|
||||
type Repository interface {
|
||||
KindBoxExist(ctx context.Context, kindBoxID uint) (bool, error)
|
||||
GetKindBox(ctx context.Context, kindBoxID uint) (entity.KindBox, error)
|
||||
}
|
||||
|
||||
type AdminSvc interface {
|
||||
AgentExistByID(ctx context.Context, agentID uint) (bool, error)
|
||||
}
|
||||
|
||||
type Validator struct {
|
||||
repo Repository
|
||||
repo Repository
|
||||
adminSvc AdminSvc
|
||||
}
|
||||
|
||||
func New(repo Repository) Validator {
|
||||
return Validator{repo: repo}
|
||||
func New(repo Repository, adminSvc AdminSvc) Validator {
|
||||
return Validator{repo: repo, adminSvc: adminSvc}
|
||||
}
|
||||
|
||||
func (v Validator) doesKindBoxExist(value interface{}) error {
|
||||
|
@ -34,3 +41,35 @@ func (v Validator) doesKindBoxExist(value interface{}) error {
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (v Validator) checkKindBoxStatusForAssigningReceiverAgent(value interface{}) error {
|
||||
kindboxID, ok := value.(uint)
|
||||
if !ok {
|
||||
return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
|
||||
}
|
||||
kindBox, err := v.repo.GetKindBox(context.Background(), kindboxID)
|
||||
if err != nil {
|
||||
return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
|
||||
}
|
||||
if kindBox.Status != entity.KindBoxReadyToReturnStatus {
|
||||
return fmt.Errorf(errmsg.ErrorMsgAssignReceiverAgentKindBoxStatus)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (v Validator) doesAgentExist(value interface{}) error {
|
||||
agentID, ok := value.(uint)
|
||||
if !ok {
|
||||
return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
|
||||
}
|
||||
exists, err := v.adminSvc.AgentExistByID(context.Background(), agentID)
|
||||
if err != nil {
|
||||
return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
|
||||
}
|
||||
if !exists {
|
||||
return fmt.Errorf(errmsg.ErrorMsgNotFound)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue