forked from ebhomengo/niki
				
			"fix(niki):Get Province ID by City ID"
This commit is contained in:
		
							parent
							
								
									5262356b5e
								
							
						
					
					
						commit
						bdf197e84b
					
				| 
						 | 
				
			
			@ -711,10 +711,6 @@ const docTemplate = `{
 | 
			
		|||
                "postal_code": {
 | 
			
		||||
                    "type": "string",
 | 
			
		||||
                    "example": "1234567890"
 | 
			
		||||
                },
 | 
			
		||||
                "province_id": {
 | 
			
		||||
                    "type": "integer",
 | 
			
		||||
                    "example": 1
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -700,10 +700,6 @@
 | 
			
		|||
                "postal_code": {
 | 
			
		||||
                    "type": "string",
 | 
			
		||||
                    "example": "1234567890"
 | 
			
		||||
                },
 | 
			
		||||
                "province_id": {
 | 
			
		||||
                    "type": "integer",
 | 
			
		||||
                    "example": 1
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,9 +19,6 @@ definitions:
 | 
			
		|||
      postal_code:
 | 
			
		||||
        example: "1234567890"
 | 
			
		||||
        type: string
 | 
			
		||||
      province_id:
 | 
			
		||||
        example: 1
 | 
			
		||||
        type: integer
 | 
			
		||||
    type: object
 | 
			
		||||
  addressparam.BenefactorAddAddressResponse:
 | 
			
		||||
    properties:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ type BenefactorAddAddressRequest struct {
 | 
			
		|||
	Lat          float64 `json:"lat" example:"22.23"`
 | 
			
		||||
	Lon          float64 `json:"lon" example:"22.22"`
 | 
			
		||||
	CityID       uint    `json:"city_id" example:"1"`
 | 
			
		||||
	ProvinceID   uint    `json:"province_id" example:"1"`
 | 
			
		||||
	ProvinceID   uint    `json:"-"`
 | 
			
		||||
	BenefactorID uint    `json:"benefactor_id" example:"1"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,14 @@ import (
 | 
			
		|||
func (d *DB) CreateBenefactorAddress(ctx context.Context, address entity.Address) (entity.Address, error) {
 | 
			
		||||
	const op = "mysqlbenefactor.createBenefactorAddress"
 | 
			
		||||
 | 
			
		||||
	// Get Province ID by City ID
 | 
			
		||||
	var provinceID uint
 | 
			
		||||
	pErr := d.conn.Conn().QueryRowContext(ctx, `SELECT province_id FROM cities WHERE id = ?`, address.CityID).Scan(&provinceID)
 | 
			
		||||
	if pErr != nil && pErr != sql.ErrNoRows {
 | 
			
		||||
		return entity.Address{}, richerror.New(op).WithErr(pErr).
 | 
			
		||||
			WithMessage("error querying for existing main address").WithKind(richerror.KindUnexpected)
 | 
			
		||||
	}
 | 
			
		||||
	address.ProvinceID = provinceID
 | 
			
		||||
	// Check if the user already has a main address
 | 
			
		||||
	var count int
 | 
			
		||||
	err := d.conn.Conn().QueryRowContext(ctx, `SELECT COUNT(*) FROM addresses WHERE is_main = true AND benefactor_id = ?`, address.BenefactorID).Scan(&count)
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +33,7 @@ func (d *DB) CreateBenefactorAddress(ctx context.Context, address entity.Address
 | 
			
		|||
 | 
			
		||||
	// Insert the new address
 | 
			
		||||
	res, err := d.conn.Conn().ExecContext(ctx, `INSERT INTO addresses (postal_code, address, lat, lon, is_main, city_id, province_id, benefactor_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
 | 
			
		||||
		address.PostalCode, address.Address, address.Lat, address.Lon, address.IsMain, address.CityID, address.ProvinceID, address.BenefactorID)
 | 
			
		||||
		address.PostalCode, address.Address, address.Lat, address.Lon, address.IsMain, address.CityID, provinceID, address.BenefactorID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return entity.Address{}, richerror.New(op).WithErr(err).
 | 
			
		||||
			WithMessage(errmsg.ErrorMsgNotFound).WithKind(richerror.KindUnexpected)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,7 +17,6 @@ func (s Service) Add(ctx context.Context, req param.BenefactorAddAddressRequest)
 | 
			
		|||
		Lat:          req.Lat,
 | 
			
		||||
		Lon:          req.Lon,
 | 
			
		||||
		CityID:       req.CityID,
 | 
			
		||||
		ProvinceID:   req.ProvinceID,
 | 
			
		||||
		BenefactorID: req.BenefactorID,
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,10 +31,6 @@ func (v Validator) ValidateAddAddress(req param.BenefactorAddAddressRequest) (ma
 | 
			
		|||
		validation.Field(&req.CityID,
 | 
			
		||||
			validation.Required,
 | 
			
		||||
			validation.By(v.doesCityExist)),
 | 
			
		||||
 | 
			
		||||
		validation.Field(&req.ProvinceID,
 | 
			
		||||
			validation.Required,
 | 
			
		||||
			validation.By(v.doesProvinceExist)),
 | 
			
		||||
	); err != nil {
 | 
			
		||||
 | 
			
		||||
		fieldErrors := make(map[string]string)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,6 @@ type BenefactorSvc interface {
 | 
			
		|||
}
 | 
			
		||||
type Repository interface {
 | 
			
		||||
	IsExistCityByID(ctx context.Context, id uint) (bool, error)
 | 
			
		||||
	IsExistProvinceByID(ctx context.Context, id uint) (bool, error)
 | 
			
		||||
}
 | 
			
		||||
type Validator struct {
 | 
			
		||||
	benefactorSvc BenefactorSvc
 | 
			
		||||
| 
						 | 
				
			
			@ -37,22 +36,6 @@ func (v Validator) doesBenefactorExist(value interface{}) error {
 | 
			
		|||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v Validator) doesProvinceExist(value interface{}) error {
 | 
			
		||||
	provinceID, ok := value.(uint)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
			
		||||
	}
 | 
			
		||||
	isExisted, err := v.repository.IsExistProvinceByID(context.Background(), provinceID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
			
		||||
	}
 | 
			
		||||
	if !isExisted {
 | 
			
		||||
		return fmt.Errorf(errmsg.ErrorMsgNotFound)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v Validator) doesCityExist(value interface{}) error {
 | 
			
		||||
	cityID, ok := value.(uint)
 | 
			
		||||
	if !ok {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue