forked from ebhomengo/niki
				
			fix(niki): benefactor update address
This commit is contained in:
		
							parent
							
								
									ba905cf334
								
							
						
					
					
						commit
						d60e4d605e
					
				| 
						 | 
					@ -1,7 +1,6 @@
 | 
				
			||||||
package benefactoraddresshandler
 | 
					package benefactoraddresshandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/address"
 | 
						param "git.gocasts.ir/ebhomengo/niki/param/benefactor/address"
 | 
				
			||||||
| 
						 | 
					@ -24,10 +23,12 @@ import (
 | 
				
			||||||
func (h Handler) UpdateAddress(c echo.Context) error {
 | 
					func (h Handler) UpdateAddress(c echo.Context) error {
 | 
				
			||||||
	var req param.UpdateAddressRequest
 | 
						var req param.UpdateAddressRequest
 | 
				
			||||||
	if bErr := c.Bind(&req); bErr != nil {
 | 
						if bErr := c.Bind(&req); bErr != nil {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return echo.NewHTTPError(http.StatusBadRequest)
 | 
							return echo.NewHTTPError(http.StatusBadRequest)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	fmt.Println(req)
 | 
					
 | 
				
			||||||
	if bErr := echo.PathParamsBinder(c).Uint("id", &req.ID).BindError(); bErr != nil {
 | 
						if bErr := echo.PathParamsBinder(c).Uint("id", &req.ID).BindError(); bErr != nil {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return echo.NewHTTPError(http.StatusBadRequest)
 | 
							return echo.NewHTTPError(http.StatusBadRequest)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -219,9 +219,7 @@ const docTemplate = `{
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
        "/address/{id}": {
 | 
					 | 
				
			||||||
            "patch": {
 | 
					            "patch": {
 | 
				
			||||||
                "security": [
 | 
					                "security": [
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -208,9 +208,7 @@
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
        "/address/{id}": {
 | 
					 | 
				
			||||||
            "patch": {
 | 
					            "patch": {
 | 
				
			||||||
                "security": [
 | 
					                "security": [
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -641,7 +641,6 @@ paths:
 | 
				
			||||||
      summary: Get a benefactor address
 | 
					      summary: Get a benefactor address
 | 
				
			||||||
      tags:
 | 
					      tags:
 | 
				
			||||||
      - Address
 | 
					      - Address
 | 
				
			||||||
  /address/{id}:
 | 
					 | 
				
			||||||
    patch:
 | 
					    patch:
 | 
				
			||||||
      consumes:
 | 
					      consumes:
 | 
				
			||||||
      - application/json
 | 
					      - application/json
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,22 +0,0 @@
 | 
				
			||||||
package querybuilder
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
	"strings"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// BuildUpdateQuery constructs a dynamic SQL update query based on the provided fields
 | 
					 | 
				
			||||||
func BuildUpdateQuery(table string, fields map[string]interface{}, idField string, idValue interface{}) (string, []interface{}) {
 | 
					 | 
				
			||||||
	var setClauses []string
 | 
					 | 
				
			||||||
	var args []interface{}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for field, value := range fields {
 | 
					 | 
				
			||||||
		setClauses = append(setClauses, fmt.Sprintf("%s = ?", field))
 | 
					 | 
				
			||||||
		args = append(args, value)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	query := fmt.Sprintf("UPDATE %s SET %s WHERE %s = ?", table, strings.Join(setClauses, ", "), idField)
 | 
					 | 
				
			||||||
	args = append(args, idValue)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return query, args
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -5,45 +5,25 @@ import (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"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"
 | 
				
			||||||
	querybuilder "git.gocasts.ir/ebhomengo/niki/pkg/query_builder"
 | 
					 | 
				
			||||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
						richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (d *DB) UpdateAddress(ctx context.Context, address entity.Address) error {
 | 
					func (d *DB) UpdateAddress(ctx context.Context, address entity.Address) error {
 | 
				
			||||||
	const op = "mysqladdress.UpdateAddress"
 | 
						const op = "mysqladdress.UpdateAddress"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fields := make(map[string]interface{})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if address.PostalCode != "" {
 | 
					 | 
				
			||||||
		fields["postal_code"] = address.PostalCode
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if address.Address != "" {
 | 
					 | 
				
			||||||
		fields["address"] = address.Address
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if address.Name != "" {
 | 
					 | 
				
			||||||
		fields["name"] = address.Name
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if address.Lat != 0 {
 | 
					 | 
				
			||||||
		fields["lat"] = address.Lat
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if address.Lon != 0 {
 | 
					 | 
				
			||||||
		fields["lon"] = address.Lon
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if address.CityID != 0 {
 | 
					 | 
				
			||||||
	provinceID, err := d.getProvinceIDByCityID(ctx, address.CityID)
 | 
						provinceID, err := d.getProvinceIDByCityID(ctx, address.CityID)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
		fields["province_id"] = provinceID
 | 
					 | 
				
			||||||
		fields["city_id"] = address.CityID
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	query, values := querybuilder.BuildUpdateQuery("addresses", fields, "id", address.ID)
 | 
						query := `UPDATE addresses 
 | 
				
			||||||
	query += " and benefactor_id = ?"
 | 
								  SET postal_code = ?, address = ?, lat = ?, lon = ?, name = ?, city_id = ?, province_id = ? 
 | 
				
			||||||
	values = append(values, address.BenefactorID)
 | 
								  WHERE id = ? AND benefactor_id = ? AND deleted_at IS NULL`
 | 
				
			||||||
	_, err := d.conn.Conn().ExecContext(ctx, query, values...)
 | 
						_, uErr := d.conn.Conn().ExecContext(ctx, query, address.PostalCode, address.Address, address.Lat, address.Lon, address.Name, address.CityID, provinceID, address.ID, address.BenefactorID)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return richerror.New(op).WithErr(err).WithMessage(errmsg.ErrorMsgCantUpdateRecord).
 | 
					
 | 
				
			||||||
 | 
							return richerror.New(op).WithErr(uErr).WithMessage(errmsg.ErrorMsgCantUpdateRecord).
 | 
				
			||||||
			WithKind(richerror.KindUnexpected)
 | 
								WithKind(richerror.KindUnexpected)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,6 +22,7 @@ func (s Service) Update(ctx context.Context, req param.UpdateAddressRequest) err
 | 
				
			||||||
		BenefactorID: req.BenefactorID,
 | 
							BenefactorID: req.BenefactorID,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return richerror.New(op).WithErr(err)
 | 
							return richerror.New(op).WithErr(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,16 +12,6 @@ import (
 | 
				
			||||||
func (v Validator) ValidateUpdateAddress(req param.UpdateAddressRequest) (map[string]string, error) {
 | 
					func (v Validator) ValidateUpdateAddress(req param.UpdateAddressRequest) (map[string]string, error) {
 | 
				
			||||||
	const op = "benefactoraddressvalidator.ValidateUpdateAddress"
 | 
						const op = "benefactoraddressvalidator.ValidateUpdateAddress"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if req.PostalCode == "" && req.Address == "" && req.Name == "" &&
 | 
					 | 
				
			||||||
		req.Lat == 0 && req.Lon == 0 && req.CityID == 0 {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return map[string]string{"update": "at least one field should be provided"}, richerror.New(op).
 | 
					 | 
				
			||||||
			WithMessage(errmsg.ErrorMsgInvalidInput).
 | 
					 | 
				
			||||||
			WithKind(richerror.KindInvalid).
 | 
					 | 
				
			||||||
			WithMeta(map[string]interface{}{"req": req}).
 | 
					 | 
				
			||||||
			WithErr(errors.New("at least one field should be provided"))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err := validation.ValidateStruct(&req,
 | 
						if err := validation.ValidateStruct(&req,
 | 
				
			||||||
		validation.Field(&req.BenefactorID, validation.Required,
 | 
							validation.Field(&req.BenefactorID, validation.Required,
 | 
				
			||||||
			validation.By(v.doesBenefactorExist)),
 | 
								validation.By(v.doesBenefactorExist)),
 | 
				
			||||||
| 
						 | 
					@ -29,8 +19,14 @@ func (v Validator) ValidateUpdateAddress(req param.UpdateAddressRequest) (map[st
 | 
				
			||||||
		validation.Field(&req.ID, validation.Required,
 | 
							validation.Field(&req.ID, validation.Required,
 | 
				
			||||||
			validation.By(v.doesAddressExist(req.BenefactorID))),
 | 
								validation.By(v.doesAddressExist(req.BenefactorID))),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		validation.Field(&req.CityID,
 | 
							validation.Field(&req.Address, validation.Required),
 | 
				
			||||||
			validation.When(req.CityID != 0, validation.By(v.doesCityExist))),
 | 
					
 | 
				
			||||||
 | 
							validation.Field(&req.Name, validation.Required),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							validation.Field(&req.PostalCode, validation.Required),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							validation.Field(&req.CityID, validation.Required,
 | 
				
			||||||
 | 
								validation.By(v.doesCityExist)),
 | 
				
			||||||
	); err != nil {
 | 
						); err != nil {
 | 
				
			||||||
		fieldErrors := make(map[string]string)
 | 
							fieldErrors := make(map[string]string)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue