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