forked from ebhomengo/niki
				
			fix(niki): update kindbox request by admin
This commit is contained in:
		
							parent
							
								
									ecb3e9aedc
								
							
						
					
					
						commit
						15698b18f9
					
				
							
								
								
									
										89
									
								
								docs/docs.go
								
								
								
								
							
							
						
						
									
										89
									
								
								docs/docs.go
								
								
								
								
							| 
						 | 
					@ -1007,6 +1007,54 @@ const docTemplate = `{
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "/admin/kindboxreqs/{id}": {
 | 
				
			||||||
 | 
					            "put": {
 | 
				
			||||||
 | 
					                "security": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "AuthBearerAdmin": []
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "consumes": [
 | 
				
			||||||
 | 
					                    "application/json"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "produces": [
 | 
				
			||||||
 | 
					                    "application/json"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "tags": [
 | 
				
			||||||
 | 
					                    "KindBoxReq"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "summary": "Update kind box request by admin",
 | 
				
			||||||
 | 
					                "parameters": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "type": "integer",
 | 
				
			||||||
 | 
					                        "description": "KindBoxReq ID",
 | 
				
			||||||
 | 
					                        "name": "id",
 | 
				
			||||||
 | 
					                        "in": "path",
 | 
				
			||||||
 | 
					                        "required": true
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "description": "Update KindBoxReq Request Body",
 | 
				
			||||||
 | 
					                        "name": "Request",
 | 
				
			||||||
 | 
					                        "in": "body",
 | 
				
			||||||
 | 
					                        "required": true,
 | 
				
			||||||
 | 
					                        "schema": {
 | 
				
			||||||
 | 
					                            "$ref": "#/definitions/adminkindboxreqparam.KindBoxReqUpdateRequest"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "responses": {
 | 
				
			||||||
 | 
					                    "204": {
 | 
				
			||||||
 | 
					                        "description": "No Content"
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "400": {
 | 
				
			||||||
 | 
					                        "description": "Bad request",
 | 
				
			||||||
 | 
					                        "schema": {
 | 
				
			||||||
 | 
					                            "type": "string"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "/admins/agents": {
 | 
					        "/admins/agents": {
 | 
				
			||||||
            "get": {
 | 
					            "get": {
 | 
				
			||||||
                "security": [
 | 
					                "security": [
 | 
				
			||||||
| 
						 | 
					@ -1986,6 +2034,47 @@ const docTemplate = `{
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "adminkindboxreqparam.KindBoxReqUpdateRequest": {
 | 
				
			||||||
 | 
					            "type": "object",
 | 
				
			||||||
 | 
					            "properties": {
 | 
				
			||||||
 | 
					                "count_accepted": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 3
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "count_requested": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 5
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "deliver_address_id": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 1
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "deliver_refer_date": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "example": "2025-01-02T15:04:05Z"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "deliver_refer_time_id": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 1
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "description": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "example": "description"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "kind_box_type": {
 | 
				
			||||||
 | 
					                    "allOf": [
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            "$ref": "#/definitions/entity.KindBoxType"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    "example": 2
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "sender_agent_id": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 1
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "adminserviceparam.AdminInfo": {
 | 
					        "adminserviceparam.AdminInfo": {
 | 
				
			||||||
            "type": "object",
 | 
					            "type": "object",
 | 
				
			||||||
            "properties": {
 | 
					            "properties": {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -996,6 +996,54 @@
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "/admin/kindboxreqs/{id}": {
 | 
				
			||||||
 | 
					            "put": {
 | 
				
			||||||
 | 
					                "security": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "AuthBearerAdmin": []
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "consumes": [
 | 
				
			||||||
 | 
					                    "application/json"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "produces": [
 | 
				
			||||||
 | 
					                    "application/json"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "tags": [
 | 
				
			||||||
 | 
					                    "KindBoxReq"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "summary": "Update kind box request by admin",
 | 
				
			||||||
 | 
					                "parameters": [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "type": "integer",
 | 
				
			||||||
 | 
					                        "description": "KindBoxReq ID",
 | 
				
			||||||
 | 
					                        "name": "id",
 | 
				
			||||||
 | 
					                        "in": "path",
 | 
				
			||||||
 | 
					                        "required": true
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "description": "Update KindBoxReq Request Body",
 | 
				
			||||||
 | 
					                        "name": "Request",
 | 
				
			||||||
 | 
					                        "in": "body",
 | 
				
			||||||
 | 
					                        "required": true,
 | 
				
			||||||
 | 
					                        "schema": {
 | 
				
			||||||
 | 
					                            "$ref": "#/definitions/adminkindboxreqparam.KindBoxReqUpdateRequest"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "responses": {
 | 
				
			||||||
 | 
					                    "204": {
 | 
				
			||||||
 | 
					                        "description": "No Content"
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "400": {
 | 
				
			||||||
 | 
					                        "description": "Bad request",
 | 
				
			||||||
 | 
					                        "schema": {
 | 
				
			||||||
 | 
					                            "type": "string"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "/admins/agents": {
 | 
					        "/admins/agents": {
 | 
				
			||||||
            "get": {
 | 
					            "get": {
 | 
				
			||||||
                "security": [
 | 
					                "security": [
 | 
				
			||||||
| 
						 | 
					@ -1975,6 +2023,47 @@
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "adminkindboxreqparam.KindBoxReqUpdateRequest": {
 | 
				
			||||||
 | 
					            "type": "object",
 | 
				
			||||||
 | 
					            "properties": {
 | 
				
			||||||
 | 
					                "count_accepted": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 3
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "count_requested": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 5
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "deliver_address_id": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 1
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "deliver_refer_date": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "example": "2025-01-02T15:04:05Z"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "deliver_refer_time_id": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 1
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "description": {
 | 
				
			||||||
 | 
					                    "type": "string",
 | 
				
			||||||
 | 
					                    "example": "description"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "kind_box_type": {
 | 
				
			||||||
 | 
					                    "allOf": [
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            "$ref": "#/definitions/entity.KindBoxType"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    "example": 2
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "sender_agent_id": {
 | 
				
			||||||
 | 
					                    "type": "integer",
 | 
				
			||||||
 | 
					                    "example": 1
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "adminserviceparam.AdminInfo": {
 | 
					        "adminserviceparam.AdminInfo": {
 | 
				
			||||||
            "type": "object",
 | 
					            "type": "object",
 | 
				
			||||||
            "properties": {
 | 
					            "properties": {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -254,6 +254,34 @@ definitions:
 | 
				
			||||||
        - $ref: '#/definitions/entity.KindBoxReqStatus'
 | 
					        - $ref: '#/definitions/entity.KindBoxReqStatus'
 | 
				
			||||||
        example: 1
 | 
					        example: 1
 | 
				
			||||||
    type: object
 | 
					    type: object
 | 
				
			||||||
 | 
					  adminkindboxreqparam.KindBoxReqUpdateRequest:
 | 
				
			||||||
 | 
					    properties:
 | 
				
			||||||
 | 
					      count_accepted:
 | 
				
			||||||
 | 
					        example: 3
 | 
				
			||||||
 | 
					        type: integer
 | 
				
			||||||
 | 
					      count_requested:
 | 
				
			||||||
 | 
					        example: 5
 | 
				
			||||||
 | 
					        type: integer
 | 
				
			||||||
 | 
					      deliver_address_id:
 | 
				
			||||||
 | 
					        example: 1
 | 
				
			||||||
 | 
					        type: integer
 | 
				
			||||||
 | 
					      deliver_refer_date:
 | 
				
			||||||
 | 
					        example: "2025-01-02T15:04:05Z"
 | 
				
			||||||
 | 
					        type: string
 | 
				
			||||||
 | 
					      deliver_refer_time_id:
 | 
				
			||||||
 | 
					        example: 1
 | 
				
			||||||
 | 
					        type: integer
 | 
				
			||||||
 | 
					      description:
 | 
				
			||||||
 | 
					        example: description
 | 
				
			||||||
 | 
					        type: string
 | 
				
			||||||
 | 
					      kind_box_type:
 | 
				
			||||||
 | 
					        allOf:
 | 
				
			||||||
 | 
					        - $ref: '#/definitions/entity.KindBoxType'
 | 
				
			||||||
 | 
					        example: 2
 | 
				
			||||||
 | 
					      sender_agent_id:
 | 
				
			||||||
 | 
					        example: 1
 | 
				
			||||||
 | 
					        type: integer
 | 
				
			||||||
 | 
					    type: object
 | 
				
			||||||
  adminserviceparam.AdminInfo:
 | 
					  adminserviceparam.AdminInfo:
 | 
				
			||||||
    properties:
 | 
					    properties:
 | 
				
			||||||
      description:
 | 
					      description:
 | 
				
			||||||
| 
						 | 
					@ -1122,6 +1150,36 @@ paths:
 | 
				
			||||||
      summary: Add a new kind box request for a benefactor by admin
 | 
					      summary: Add a new kind box request for a benefactor by admin
 | 
				
			||||||
      tags:
 | 
					      tags:
 | 
				
			||||||
      - KindBoxReq
 | 
					      - KindBoxReq
 | 
				
			||||||
 | 
					  /admin/kindboxreqs/{id}:
 | 
				
			||||||
 | 
					    put:
 | 
				
			||||||
 | 
					      consumes:
 | 
				
			||||||
 | 
					      - application/json
 | 
				
			||||||
 | 
					      parameters:
 | 
				
			||||||
 | 
					      - description: KindBoxReq ID
 | 
				
			||||||
 | 
					        in: path
 | 
				
			||||||
 | 
					        name: id
 | 
				
			||||||
 | 
					        required: true
 | 
				
			||||||
 | 
					        type: integer
 | 
				
			||||||
 | 
					      - description: Update KindBoxReq Request Body
 | 
				
			||||||
 | 
					        in: body
 | 
				
			||||||
 | 
					        name: Request
 | 
				
			||||||
 | 
					        required: true
 | 
				
			||||||
 | 
					        schema:
 | 
				
			||||||
 | 
					          $ref: '#/definitions/adminkindboxreqparam.KindBoxReqUpdateRequest'
 | 
				
			||||||
 | 
					      produces:
 | 
				
			||||||
 | 
					      - application/json
 | 
				
			||||||
 | 
					      responses:
 | 
				
			||||||
 | 
					        "204":
 | 
				
			||||||
 | 
					          description: No Content
 | 
				
			||||||
 | 
					        "400":
 | 
				
			||||||
 | 
					          description: Bad request
 | 
				
			||||||
 | 
					          schema:
 | 
				
			||||||
 | 
					            type: string
 | 
				
			||||||
 | 
					      security:
 | 
				
			||||||
 | 
					      - AuthBearerAdmin: []
 | 
				
			||||||
 | 
					      summary: Update kind box request by admin
 | 
				
			||||||
 | 
					      tags:
 | 
				
			||||||
 | 
					      - KindBoxReq
 | 
				
			||||||
  /admin/kindboxreqs/accept-kind-box-req/{id}:
 | 
					  /admin/kindboxreqs/accept-kind-box-req/{id}:
 | 
				
			||||||
    patch:
 | 
					    patch:
 | 
				
			||||||
      consumes:
 | 
					      consumes:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@ type Validators struct {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func InitAdminKindBoxReqValidator(db *mysql.DB, cfg config.Config) adminkindboxreqvalidator.Validator {
 | 
					func InitAdminKindBoxReqValidator(db *mysql.DB, cfg config.Config) adminkindboxreqvalidator.Validator {
 | 
				
			||||||
	return adminkindboxreqvalidator.New(InitBenefactorKindBoxReqDB(db), InitAdminService(cfg, db), InitBenefactorForAdminService(db))
 | 
						return adminkindboxreqvalidator.New(InitBenefactorKindBoxReqDB(db), InitAdminService(cfg, db), InitBenefactorForAdminService(db), InitAdminReferTimeService(db), InitBenefactorAddressService(db))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func InitAdminValidator(db *mysql.DB) adminvalidator.Validator {
 | 
					func InitAdminValidator(db *mysql.DB) adminvalidator.Validator {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,13 +7,13 @@ import (
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type KindBoxReqUpdateRequest struct {
 | 
					type KindBoxReqUpdateRequest struct {
 | 
				
			||||||
	ID                 uint               `json:"-" param:"id"`
 | 
						ID                 uint               `json:"-" param:"id" example:"1"`
 | 
				
			||||||
	KindBoxType        entity.KindBoxType `json:"kind_box_type"`
 | 
						KindBoxType        entity.KindBoxType `json:"kind_box_type" example:"2"`
 | 
				
			||||||
	CountRequested     uint               `json:"count_requested"`
 | 
						CountRequested     uint               `json:"count_requested" example:"5"`
 | 
				
			||||||
	CountAccepted      uint               `json:"count_accepted"`
 | 
						CountAccepted      uint               `json:"count_accepted" example:"3"`
 | 
				
			||||||
	Description        string             `json:"description"`
 | 
						Description        string             `json:"description" example:"description"`
 | 
				
			||||||
	DeliverReferTimeID uint               `json:"deliver_refer_time_id"`
 | 
						DeliverReferTimeID uint               `json:"deliver_refer_time_id" example:"1"`
 | 
				
			||||||
	DeliverReferDate   time.Time          `json:"deliver_refer_date"`
 | 
						DeliverReferDate   time.Time          `json:"deliver_refer_date" example:"2025-01-02T15:04:05Z"`
 | 
				
			||||||
	DeliverAddressID   uint               `json:"deliver_address_id"`
 | 
						DeliverAddressID   uint               `json:"deliver_address_id" example:"1"`
 | 
				
			||||||
	SenderAgentID      uint               `json:"sender_agent_id"`
 | 
						SenderAgentID      uint               `json:"sender_agent_id" example:"1"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,8 @@ package mysqlkindboxreq
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"database/sql"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.gocasts.ir/ebhomengo/niki/entity"
 | 
						"git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
	errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
						errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
				
			||||||
| 
						 | 
					@ -11,12 +13,31 @@ import (
 | 
				
			||||||
func (d DB) UpdateKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) error {
 | 
					func (d DB) UpdateKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) error {
 | 
				
			||||||
	const op = "mysqlkindboxreq.UpdateKindBoxReq"
 | 
						const op = "mysqlkindboxreq.UpdateKindBoxReq"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	query := `UPDATE kind_box_reqs
 | 
						var (
 | 
				
			||||||
			  SET benfactor_id = ?, kind_box_type = ?, count_requested = ?, count_accepted = ?, description = ?, status = ?, deliver_refer_time_id = ?, deliver_refer_date = ?, deliver_address_id + ?, sender_agent_id = ?, delivered_at = ? 
 | 
							senderAgentID sql.NullInt64
 | 
				
			||||||
			  WHERE id = ? AND deleted_at IS NULL`
 | 
							deliveredAt   sql.NullTime
 | 
				
			||||||
	_, uErr := d.conn.Conn().ExecContext(ctx, query, kindBoxReq.BenefactorID, kindBoxReq.KindBoxType, kindBoxReq.CountRequested, kindBoxReq.CountAccepted, kindBoxReq.Description, kindBoxReq.Status, kindBoxReq.DeliverReferTimeID, kindBoxReq.DeliverReferDate, kindBoxReq.DeliverAddressID, kindBoxReq.SenderAgentID, kindBoxReq.DeliveredAt)
 | 
						)
 | 
				
			||||||
	if uErr != nil {
 | 
						if kindBoxReq.SenderAgentID != 0 {
 | 
				
			||||||
 | 
							senderAgentID = sql.NullInt64{Int64: int64(kindBoxReq.SenderAgentID), Valid: true}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							senderAgentID = sql.NullInt64{Int64: 0, Valid: false}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !kindBoxReq.DeliveredAt.IsZero() {
 | 
				
			||||||
 | 
							deliveredAt = sql.NullTime{Time: kindBoxReq.DeliveredAt, Valid: true}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							deliveredAt = sql.NullTime{Time: time.Time{}, Valid: false}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						query := `UPDATE kind_box_reqs
 | 
				
			||||||
 | 
								  SET benefactor_id = ?, kind_box_type = ?, count_requested = ?, count_accepted = ?,
 | 
				
			||||||
 | 
								      description = ?, status = ?, deliver_refer_time_id = ?, deliver_refer_date = ?,
 | 
				
			||||||
 | 
								      deliver_address_id = ?, sender_agent_id = ?, delivered_at = ? 
 | 
				
			||||||
 | 
								  WHERE id = ? AND deleted_at IS NULL`
 | 
				
			||||||
 | 
						_, uErr := d.conn.Conn().ExecContext(ctx, query, kindBoxReq.BenefactorID, kindBoxReq.KindBoxType,
 | 
				
			||||||
 | 
							kindBoxReq.CountRequested, kindBoxReq.CountAccepted, kindBoxReq.Description, kindBoxReq.Status,
 | 
				
			||||||
 | 
							kindBoxReq.DeliverReferTimeID, kindBoxReq.DeliverReferDate, kindBoxReq.DeliverAddressID,
 | 
				
			||||||
 | 
							senderAgentID, deliveredAt, kindBoxReq.ID)
 | 
				
			||||||
 | 
						if uErr != nil {
 | 
				
			||||||
		return richerror.New(op).WithErr(uErr).WithMessage(errmsg.ErrorMsgCantUpdateRecord).
 | 
							return richerror.New(op).WithErr(uErr).WithMessage(errmsg.ErrorMsgCantUpdateRecord).
 | 
				
			||||||
			WithKind(richerror.KindUnexpected)
 | 
								WithKind(richerror.KindUnexpected)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,6 @@ package adminkindboxreqservice
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.gocasts.ir/ebhomengo/niki/entity"
 | 
					 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
 | 
						param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
 | 
				
			||||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
						richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -15,22 +14,19 @@ func (s Service) Update(ctx context.Context, req param.KindBoxReqUpdateRequest)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return richerror.New(op).WithErr(err)
 | 
							return richerror.New(op).WithErr(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	uErr := s.repo.UpdateKindBoxReq(ctx, entity.KindBoxReq{
 | 
					
 | 
				
			||||||
		ID:                 req.ID,
 | 
						kindBoxReq.KindBoxType = req.KindBoxType
 | 
				
			||||||
		BenefactorID:       kindBoxReq.BenefactorID,
 | 
						kindBoxReq.CountRequested = req.CountRequested
 | 
				
			||||||
		KindBoxType:        req.KindBoxType,
 | 
						kindBoxReq.CountAccepted = req.CountAccepted
 | 
				
			||||||
		CountRequested:     req.CountRequested,
 | 
						kindBoxReq.Description = req.Description
 | 
				
			||||||
		CountAccepted:      req.CountAccepted,
 | 
						kindBoxReq.DeliverReferTimeID = req.DeliverReferTimeID
 | 
				
			||||||
		Description:        req.Description,
 | 
						kindBoxReq.DeliverReferDate = req.DeliverReferDate
 | 
				
			||||||
		Status:             kindBoxReq.Status,
 | 
						kindBoxReq.DeliverAddressID = req.DeliverAddressID
 | 
				
			||||||
		DeliverReferTimeID: req.DeliverReferTimeID,
 | 
						kindBoxReq.SenderAgentID = req.SenderAgentID
 | 
				
			||||||
		DeliverReferDate:   req.DeliverReferDate,
 | 
					
 | 
				
			||||||
		DeliverAddressID:   req.DeliverAddressID,
 | 
						uErr := s.repo.UpdateKindBoxReq(ctx, kindBoxReq)
 | 
				
			||||||
		SenderAgentID:      req.SenderAgentID,
 | 
					 | 
				
			||||||
		DeliveredAt:        kindBoxReq.DeliveredAt,
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
	if uErr != nil {
 | 
						if uErr != nil {
 | 
				
			||||||
		return richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
 | 
							return richerror.New(op).WithErr(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -111,15 +111,11 @@ func (v Validator) doesAddressExist(benefactorID uint) validation.RuleFunc {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (v Validator) isDateValid(value interface{}) error {
 | 
					func (v Validator) isDateValid(value interface{}) error {
 | 
				
			||||||
	date, ok := value.(string)
 | 
						date, ok := value.(time.Time)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
							return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	t, err := time.Parse(time.DateTime, date)
 | 
						if date.Before(time.Now()) {
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf(errmsg.ErrorMsgInvalidInput)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if t.Before(time.Now()) {
 | 
					 | 
				
			||||||
		return fmt.Errorf(errmsg.ErrorMsgInvalidInput)
 | 
							return fmt.Errorf(errmsg.ErrorMsgInvalidInput)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,29 +14,39 @@ func (v Validator) ValidateUpdateRequest(req param.KindBoxReqUpdateRequest) (map
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := validation.ValidateStruct(&req,
 | 
						if err := validation.ValidateStruct(&req,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		validation.Field(&req.ID, validation.Required, validation.By(v.doesKindBoxRequestExist)),
 | 
							validation.Field(&req.ID,
 | 
				
			||||||
 | 
								validation.Required,
 | 
				
			||||||
		validation.Field(&req.CountRequested, validation.Required, validation.Min(uint(MinKindBoxReq)), validation.Max(uint(MaxKindBoxReq))),
 | 
								validation.By(v.doesKindBoxRequestExist),
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
							validation.Field(&req.CountRequested,
 | 
				
			||||||
 | 
								validation.Required,
 | 
				
			||||||
 | 
								validation.Min(uint(MinKindBoxReq)),
 | 
				
			||||||
 | 
								validation.Max(uint(MaxKindBoxReq)),
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
							validation.Field(&req.CountAccepted,
 | 
				
			||||||
 | 
								validation.Min(uint(MinKindBoxReq)),
 | 
				
			||||||
 | 
								validation.Max(uint(MaxKindBoxReq)),
 | 
				
			||||||
 | 
								validation.When(req.CountRequested > 0, validation.Max(uint(req.CountRequested))),
 | 
				
			||||||
 | 
								validation.By(v.checkCountAcceptedMustBeLessThanCountRequested(req.ID)),
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
		validation.Field(&req.KindBoxType,
 | 
							validation.Field(&req.KindBoxType,
 | 
				
			||||||
			validation.Required,
 | 
								validation.Required,
 | 
				
			||||||
			validation.By(v.doesTypeExist)),
 | 
								validation.By(v.doesTypeExist),
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
		validation.Field(&req.DeliverAddressID,
 | 
							validation.Field(&req.DeliverAddressID,
 | 
				
			||||||
			validation.Required,
 | 
								validation.Required,
 | 
				
			||||||
			validation.By(v.doesAddressExist(req.BenefactorID))),
 | 
								validation.By(v.doesBenefactorAddressExist(req.ID)),
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
		validation.Field(&req.DeliverReferDate,
 | 
							validation.Field(&req.DeliverReferDate,
 | 
				
			||||||
			validation.Required,
 | 
								validation.Required,
 | 
				
			||||||
			validation.By(v.isDateValid),
 | 
								validation.By(v.isDateValid),
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
		validation.Field(&req.DeliverReferTimeID,
 | 
							validation.Field(&req.DeliverReferTimeID,
 | 
				
			||||||
			validation.Required,
 | 
								validation.Required,
 | 
				
			||||||
			validation.By(v.isDateValid),
 | 
								validation.By(v.isReferTimeIDValid),
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
		validation.Field(&req.SenderAgentID,
 | 
							validation.Field(&req.SenderAgentID,
 | 
				
			||||||
			validation.Required,
 | 
								validation.When(req.SenderAgentID > 0, validation.By(v.doesAgentExist)),
 | 
				
			||||||
			validation.By(v.isDateValid),
 | 
					 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
	); err != nil {
 | 
						); err != nil {
 | 
				
			||||||
		fieldErrors := make(map[string]string)
 | 
							fieldErrors := make(map[string]string)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,6 +9,8 @@ import (
 | 
				
			||||||
	"git.gocasts.ir/ebhomengo/niki/entity"
 | 
						"git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
	params "git.gocasts.ir/ebhomengo/niki/param"
 | 
						params "git.gocasts.ir/ebhomengo/niki/param"
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/admin"
 | 
						param "git.gocasts.ir/ebhomengo/niki/param/admin/admin"
 | 
				
			||||||
 | 
						refertimeparam "git.gocasts.ir/ebhomengo/niki/param/admin/refer_time"
 | 
				
			||||||
 | 
						addressparam "git.gocasts.ir/ebhomengo/niki/param/benefactor/address"
 | 
				
			||||||
	errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
						errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
				
			||||||
	benefactorsvc "git.gocasts.ir/ebhomengo/niki/service/admin/benefactor"
 | 
						benefactorsvc "git.gocasts.ir/ebhomengo/niki/service/admin/benefactor"
 | 
				
			||||||
	validation "github.com/go-ozzo/ozzo-validation/v4"
 | 
						validation "github.com/go-ozzo/ozzo-validation/v4"
 | 
				
			||||||
| 
						 | 
					@ -26,16 +28,27 @@ type Repository interface {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type AdminSvc interface {
 | 
					type AdminSvc interface {
 | 
				
			||||||
	AdminExistByID(ctx context.Context, req param.AdminExistByIDRequest) (param.AdminExistByIDResponse, error)
 | 
						AdminExistByID(ctx context.Context, req param.AdminExistByIDRequest) (param.AdminExistByIDResponse, error)
 | 
				
			||||||
 | 
						AgentExistByID(ctx context.Context, agentID uint) (bool, error)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ReferTimeSvc interface {
 | 
				
			||||||
 | 
						GetReferTimeByID(ctx context.Context, req refertimeparam.GetReferTimeRequest) (refertimeparam.GetReferTimeResponse, error)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type AddressSvc interface {
 | 
				
			||||||
 | 
						AddressExistByID(ctx context.Context, request addressparam.GetAddressByIDRequest) (addressparam.GetAddressByIDResponse, error)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Validator struct {
 | 
					type Validator struct {
 | 
				
			||||||
	repo          Repository
 | 
						repo          Repository
 | 
				
			||||||
	adminSvc      AdminSvc
 | 
						adminSvc      AdminSvc
 | 
				
			||||||
	benefactorSvc benefactorsvc.Service
 | 
						benefactorSvc benefactorsvc.Service
 | 
				
			||||||
 | 
						referTimeSvc  ReferTimeSvc
 | 
				
			||||||
 | 
						addressSvc    AddressSvc
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func New(repo Repository, adminSvc AdminSvc, benefactorSvc benefactorsvc.Service) Validator {
 | 
					func New(repo Repository, adminSvc AdminSvc, benefactorSvc benefactorsvc.Service, referTimeSvc ReferTimeSvc, addressSvc AddressSvc) Validator {
 | 
				
			||||||
	return Validator{repo: repo, adminSvc: adminSvc, benefactorSvc: benefactorSvc}
 | 
						return Validator{repo: repo, adminSvc: adminSvc, benefactorSvc: benefactorSvc, referTimeSvc: referTimeSvc, addressSvc: addressSvc}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (v Validator) doesKindBoxRequestExist(value interface{}) error {
 | 
					func (v Validator) doesKindBoxRequestExist(value interface{}) error {
 | 
				
			||||||
| 
						 | 
					@ -187,3 +200,63 @@ func (v Validator) areSortFieldsValid(validSortFields []string) validation.RuleF
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (v Validator) isReferTimeIDValid(value interface{}) error {
 | 
				
			||||||
 | 
						referTimeID, ok := value.(uint)
 | 
				
			||||||
 | 
						if !ok {
 | 
				
			||||||
 | 
							return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						resp, gErr := v.referTimeSvc.GetReferTimeByID(context.Background(), refertimeparam.GetReferTimeRequest{
 | 
				
			||||||
 | 
							ReferTimeID: referTimeID,
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						if gErr != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf(errmsg.ErrorMsgReferTimeNotFound)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if resp.ReferTime.Status != entity.ReferTimeActiveStatus {
 | 
				
			||||||
 | 
							return fmt.Errorf(errmsg.ErrorMsgReferTimeIsNotActive)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (v Validator) 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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (v Validator) doesBenefactorAddressExist(kindBoxReqID uint) validation.RuleFunc {
 | 
				
			||||||
 | 
						return func(value interface{}) error {
 | 
				
			||||||
 | 
							addressID, ok := value.(uint)
 | 
				
			||||||
 | 
							if !ok {
 | 
				
			||||||
 | 
								return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							kindBoxReq, err := v.repo.GetByID(context.Background(), kindBoxReqID)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							address, aErr := v.addressSvc.AddressExistByID(context.Background(), addressparam.GetAddressByIDRequest{ID: addressID})
 | 
				
			||||||
 | 
							if aErr != nil {
 | 
				
			||||||
 | 
								return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if address.Address == nil {
 | 
				
			||||||
 | 
								return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if address.Address.BenefactorID != kindBoxReq.BenefactorID {
 | 
				
			||||||
 | 
								return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue