From db5ca9806c63f2e5a0a117c3cf21b433452f3a6f Mon Sep 17 00:00:00 2001 From: teguh nugroho Date: Tue, 25 Aug 2026 14:10:33 +0700 Subject: [PATCH] update --- cmd/api/main.go | 4 +++ internal/domain/basic_pricing.go | 32 +++++++++++----------- internal/usecases/basic_pricing.go | 41 +++++++++++++++-------------- internal/usecases/city.go | 6 ++--- internal/usecases/cost_component.go | 6 ++--- internal/usecases/district.go | 6 ++--- internal/usecases/postal_code.go | 6 ++--- internal/usecases/province.go | 6 ++--- internal/usecases/subdistrict.go | 6 ++--- migrations/generatemodel.go | 22 +++++++++++++--- 10 files changed, 78 insertions(+), 57 deletions(-) diff --git a/cmd/api/main.go b/cmd/api/main.go index 0ad28f6..6c8ad8f 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -24,6 +24,10 @@ func main() { db.Connect() db.RegisterCallback() + // tables := "basic_pricing" + // migrations.GenerateModel(&tables, db.Get("master")) + // os.Exit(0) + //redis redisDB := database.NewRedis(AppConfig, DBLogger) redisDB.Connect() diff --git a/internal/domain/basic_pricing.go b/internal/domain/basic_pricing.go index ae97214..5ad5d30 100644 --- a/internal/domain/basic_pricing.go +++ b/internal/domain/basic_pricing.go @@ -12,8 +12,8 @@ const TableNameBasicPricing = "basic_pricing" // BasicPricing mapped from table type BasicPricing struct { - Name *string `gorm:"column:name;type:character varying(255)" json:"name"` ID string `gorm:"column:id;type:character(26);not null;default:generate_ulid()" json:"id"` + Name *string `gorm:"column:name;type:character varying(255)" json:"name"` ProvinceSourceID *string `gorm:"column:province_source_id;type:character(26);index:basic_pricing_province_source_id_idx,priority:1" json:"province_source_id"` CitySourceID *string `gorm:"column:city_source_id;type:character(26);index:basic_pricing_city_source_id_idx,priority:1" json:"city_source_id"` DistrictSourceID *string `gorm:"column:district_source_id;type:character(26);index:basic_pricing_district_source_id_idx,priority:1" json:"district_source_id"` @@ -31,20 +31,22 @@ type BasicPricing struct { UpdatedOn *time.Time `gorm:"column:updated_on;type:timestamp without time zone;default:now()" json:"updated_on"` PackageTypeID *string `gorm:"column:package_type_id;type:character(26);index:basic_pricing_package_type_id_idx,priority:1" json:"package_type_id"` ModaID *string `gorm:"column:moda_id;type:character(26);index:basic_pricing_moda_id_idx,priority:1" json:"moda_id"` - CityDestination_Relation *City `gorm:"foreignKey:city_destination_id;references:id" json:"city_destination_relation"` - CitySource_Relation *City `gorm:"foreignKey:city_source_id;references:id" json:"city_source_relation"` - DistrictDestination_Relation *District `gorm:"foreignKey:district_destination_id;references:id" json:"district_destination_relation"` - DistrictSource_Relation *District `gorm:"foreignKey:district_source_id;references:id" json:"district_source_relation"` - Merchant_Relation *Merchant `gorm:"foreignKey:merchant_id;references:id" json:"merchant_relation"` - Moda_Relation *Moda `gorm:"foreignKey:moda_id;references:id" json:"moda_relation"` - PackageType_Relation *PackageType `gorm:"foreignKey:package_type_id;references:id" json:"package_type_relation"` - PostalCodeDestination_Relation *PostalCode `gorm:"foreignKey:postal_code_destination_id;references:id" json:"postal_code_destination_relation"` - PostalCodeSource_Relation *PostalCode `gorm:"foreignKey:postal_code_source_id;references:id" json:"postal_code_source_relation"` - ProvinceDestination_Relation *Province `gorm:"foreignKey:province_destination_id;references:id" json:"province_destination_relation"` - ProvinceSource_Relation *Province `gorm:"foreignKey:province_source_id;references:id" json:"province_source_relation"` - SubdistrictDestination_Relation *Subdistrict `gorm:"foreignKey:subdistrict_destination_id;references:id" json:"subdistrict_destination_relation"` - SubdistrictSource_Relation *Subdistrict `gorm:"foreignKey:subdistrict_source_id;references:id" json:"subdistrict_source_relation"` - Users_Relation *User `gorm:"foreignKey:created_by;references:id" json:"users_relation"` + LeadTime *string `gorm:"column:lead_time;type:character varying(10)" json:"lead_time"` + MinimumWeight *float32 `gorm:"column:minimum_weight;type:real" json:"minimum_weight"` + CityDestination_Relation City `gorm:"foreignKey:city_destination_id;references:id" json:"city_destination_relation"` + CitySource_Relation City `gorm:"foreignKey:city_source_id;references:id" json:"city_source_relation"` + DistrictDestination_Relation District `gorm:"foreignKey:district_destination_id;references:id" json:"district_destination_relation"` + DistrictSource_Relation District `gorm:"foreignKey:district_source_id;references:id" json:"district_source_relation"` + Merchant_Relation Merchant `gorm:"foreignKey:merchant_id;references:id" json:"merchant_relation"` + Moda_Relation Moda `gorm:"foreignKey:moda_id;references:id" json:"moda_relation"` + PackageType_Relation PackageType `gorm:"foreignKey:id;references:id" json:"package_type_relation"` + PostalCodeDestination_Relation PostalCode `gorm:"foreignKey:postal_code_destination_id;references:id" json:"postal_code_destination_relation"` + PostalCodeSource_Relation PostalCode `gorm:"foreignKey:postal_code_source_id;references:id" json:"postal_code_source_relation"` + ProvinceDestination_Relation Province `gorm:"foreignKey:province_destination_id;references:id" json:"province_destination_relation"` + ProvinceSource_Relation Province `gorm:"foreignKey:province_source_id;references:id" json:"province_source_relation"` + SubdistrictDestination_Relation Subdistrict `gorm:"foreignKey:subdistrict_destination_id;references:id" json:"subdistrict_destination_relation"` + SubdistrictSource_Relation Subdistrict `gorm:"foreignKey:subdistrict_source_id;references:id" json:"subdistrict_source_relation"` + Users_Relation User `gorm:"foreignKey:created_by;references:id" json:"users_relation"` BasicPricingComponent_ByBasicPricing_Relation []BasicPricingComponent `gorm:"foreignKey:basic_pricing_id;references:id" json:"basic_pricing_component_by_basic_pricing_relation"` } diff --git a/internal/usecases/basic_pricing.go b/internal/usecases/basic_pricing.go index 7b04008..2da882b 100644 --- a/internal/usecases/basic_pricing.go +++ b/internal/usecases/basic_pricing.go @@ -51,6 +51,7 @@ func (u *BasicPricingUsecase) loadComponents(pricingIDs []string) (map[string][] func (u *BasicPricingUsecase) toResponse(pricing domain.BasicPricing, components []domain.BasicPricingComponent) dto.CreateBasicPricingResponse { resp := dto.CreateBasicPricingResponse{ ID: pricing.ID, + Name: pricing.Name, ProvinceSourceID: pricing.ProvinceSourceID, CitySourceID: pricing.CitySourceID, DistrictSourceID: pricing.DistrictSourceID, @@ -83,7 +84,7 @@ func (u *BasicPricingUsecase) GetAll(filter dto.BasicPricingFilterAllRequest) ([ db := u.Helper.GetDB("slave") tx := db.Model(&pricings) if u.AuthUser.UsersRole_Relation == nil || u.AuthUser.UsersRole_Relation.RoleKey != "SPM" { - tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) + tx = tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) } v := reflect.ValueOf(filter) t := reflect.TypeOf(filter) @@ -91,7 +92,7 @@ func (u *BasicPricingUsecase) GetAll(filter dto.BasicPricingFilterAllRequest) ([ for i := 0; i < v.NumField(); i++ { if v.Field(i).String() != "" { tagKey := t.Field(i).Tag.Get("form") - tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) + tx = tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) } } tx.Model(&domain.BasicPricing{}).Count(&total) @@ -165,24 +166,24 @@ func (u *BasicPricingUsecase) Create(req dto.CreateBasicPricingRequest, createdB err := db.Transaction(func(tx *gorm.DB) error { pricing = domain.BasicPricing{ - Name: &req.Name, - ProvinceSourceID: strPtr(req.ProvinceSourceID), - CitySourceID: strPtr(req.CitySourceID), - DistrictSourceID: strPtr(req.DistrictSourceID), - SubdistrictSourceID: strPtr(req.SubdistrictSourceID), - PostalCodeSourceID: strPtr(req.PostalCodeSourceID), - ProvinceDestinationID: strPtr(req.ProvinceDestinationID), - CityDestinationID: strPtr(req.CityDestinationID), - DistrictDestinationID: strPtr(req.DistrictDestinationID), - SubdistrictDestinationID: strPtr(req.SubdistrictDestinationID), - PostalCodeDestinationID: strPtr(req.PostalCodeDestinationID), - PackageTypeID: strPtr(req.PackageTypeID), - ModaID: strPtr(req.ModaID), - MerchantID: merchantid, - CreatedBy: &createdBy, - CreatedOn: &now, - UpdatedBy: &createdBy, - UpdatedOn: &now, + Name: &req.Name, + ProvinceSourceID: strPtr(req.ProvinceSourceID), + CitySourceID: strPtr(req.CitySourceID), + DistrictSourceID: strPtr(req.DistrictSourceID), + SubdistrictSourceID: strPtr(req.SubdistrictSourceID), + PostalCodeSourceID: strPtr(req.PostalCodeSourceID), + ProvinceDestinationID: strPtr(req.ProvinceDestinationID), + CityDestinationID: strPtr(req.CityDestinationID), + DistrictDestinationID: strPtr(req.DistrictDestinationID), + SubdistrictDestinationID: strPtr(req.SubdistrictDestinationID), + PostalCodeDestinationID: strPtr(req.PostalCodeDestinationID), + PackageTypeID: strPtr(req.PackageTypeID), + ModaID: strPtr(req.ModaID), + MerchantID: merchantid, + CreatedBy: &createdBy, + CreatedOn: &now, + UpdatedBy: &createdBy, + UpdatedOn: &now, } if err := tx.Create(&pricing).Error; err != nil { return err diff --git a/internal/usecases/city.go b/internal/usecases/city.go index 5ecc4bb..323da94 100644 --- a/internal/usecases/city.go +++ b/internal/usecases/city.go @@ -37,7 +37,7 @@ func (u *CityUsecase) GetAll(filter dto.CityFilterAllRequest) ([]domain.City, in db := u.Helper.GetDB("slave") tx := db.Model(&cities) if u.AuthUser.UsersRole_Relation == nil || u.AuthUser.UsersRole_Relation.RoleKey != "SPM" { - tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) + tx = tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) } v := reflect.ValueOf(filter) t := reflect.TypeOf(filter) @@ -45,7 +45,7 @@ func (u *CityUsecase) GetAll(filter dto.CityFilterAllRequest) ([]domain.City, in for i := 0; i < v.NumField(); i++ { if v.Field(i).String() != "" { tagKey := t.Field(i).Tag.Get("form") - tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) + tx = tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) } } tx.Model(&domain.City{}).Count(&total) @@ -150,7 +150,7 @@ func (u *CityUsecase) Update(id string, name string, provinceID string, port str func (u *CityUsecase) Delete(id string) error { db := u.Helper.GetDB("master") if u.AuthUser.UsersRole_Relation == nil || u.AuthUser.UsersRole_Relation.RoleKey != "SPM" { - db.Where("merchant_id=?", u.AuthUser.MerchantID) + db = db.Where("merchant_id=?", u.AuthUser.MerchantID) } if err := db.Delete(&domain.City{}, "id = ?", id).Error; err != nil { return err diff --git a/internal/usecases/cost_component.go b/internal/usecases/cost_component.go index f8c3b03..8ef4837 100644 --- a/internal/usecases/cost_component.go +++ b/internal/usecases/cost_component.go @@ -39,7 +39,7 @@ func (u *CostComponentUsecase) GetAll(filter dto.CostComponentFilterAllRequest) db := u.Helper.GetDB("slave") tx := db.Model(&components) if u.AuthUser.UsersRole_Relation == nil || u.AuthUser.UsersRole_Relation.RoleKey != "SPM" { - tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) + tx = tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) } v := reflect.ValueOf(filter) t := reflect.TypeOf(filter) @@ -47,7 +47,7 @@ func (u *CostComponentUsecase) GetAll(filter dto.CostComponentFilterAllRequest) for i := 0; i < v.NumField(); i++ { if v.Field(i).String() != "" { tagKey := t.Field(i).Tag.Get("form") - tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) + tx = tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) } } tx.Model(&domain.CostComponent{}).Count(&total) @@ -173,7 +173,7 @@ func (u *CostComponentUsecase) Update(id string, name string, code string, value func (u *CostComponentUsecase) Delete(id string) error { db := u.Helper.GetDB("master") if u.AuthUser.UsersRole_Relation == nil || u.AuthUser.UsersRole_Relation.RoleKey != "SPM" { - db.Where("merchant_id=?", u.AuthUser.MerchantID) + db = db.Where("merchant_id=?", u.AuthUser.MerchantID) } if err := db.Delete(&domain.CostComponent{}, "id = ?", id).Error; err != nil { return err diff --git a/internal/usecases/district.go b/internal/usecases/district.go index e87bdf4..e1d2568 100644 --- a/internal/usecases/district.go +++ b/internal/usecases/district.go @@ -37,7 +37,7 @@ func (u *DistrictUsecase) GetAll(filter dto.DistrictFilterAllRequest) ([]domain. db := u.Helper.GetDB("slave") tx := db.Model(&districts) if u.AuthUser.UsersRole_Relation == nil || u.AuthUser.UsersRole_Relation.RoleKey != "SPM" { - tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) + tx = tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) } v := reflect.ValueOf(filter) t := reflect.TypeOf(filter) @@ -45,7 +45,7 @@ func (u *DistrictUsecase) GetAll(filter dto.DistrictFilterAllRequest) ([]domain. for i := 0; i < v.NumField(); i++ { if v.Field(i).String() != "" { tagKey := t.Field(i).Tag.Get("form") - tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) + tx = tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) } } tx.Model(&domain.District{}).Count(&total) @@ -159,7 +159,7 @@ func (u *DistrictUsecase) Update(id string, name string, provinceID string, city func (u *DistrictUsecase) Delete(id string) error { db := u.Helper.GetDB("master") if u.AuthUser.UsersRole_Relation == nil || u.AuthUser.UsersRole_Relation.RoleKey != "SPM" { - db.Where("merchant_id=?", u.AuthUser.MerchantID) + db = db.Where("merchant_id=?", u.AuthUser.MerchantID) } if err := db.Delete(&domain.District{}, "id = ?", id).Error; err != nil { return err diff --git a/internal/usecases/postal_code.go b/internal/usecases/postal_code.go index ba1dbde..d2ae206 100644 --- a/internal/usecases/postal_code.go +++ b/internal/usecases/postal_code.go @@ -37,7 +37,7 @@ func (u *PostalCodeUsecase) GetAll(filter dto.PostalCodeFilterAllRequest) ([]dom db := u.Helper.GetDB("slave") tx := db.Model(&postalCodes) if u.AuthUser.UsersRole_Relation == nil || u.AuthUser.UsersRole_Relation.RoleKey != "SPM" { - tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) + tx = tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) } v := reflect.ValueOf(filter) t := reflect.TypeOf(filter) @@ -45,7 +45,7 @@ func (u *PostalCodeUsecase) GetAll(filter dto.PostalCodeFilterAllRequest) ([]dom for i := 0; i < v.NumField(); i++ { if v.Field(i).String() != "" { tagKey := t.Field(i).Tag.Get("form") - tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) + tx = tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) } } tx.Model(&domain.PostalCode{}).Count(&total) @@ -181,7 +181,7 @@ func (u *PostalCodeUsecase) Update(id string, postalCode string, provinceID stri func (u *PostalCodeUsecase) Delete(id string) error { db := u.Helper.GetDB("master") if u.AuthUser.UsersRole_Relation == nil || u.AuthUser.UsersRole_Relation.RoleKey != "SPM" { - db.Where("merchant_id=?", u.AuthUser.MerchantID) + db = db.Where("merchant_id=?", u.AuthUser.MerchantID) } if err := db.Delete(&domain.PostalCode{}, "id = ?", id).Error; err != nil { return err diff --git a/internal/usecases/province.go b/internal/usecases/province.go index 7d769b8..3caf5b8 100644 --- a/internal/usecases/province.go +++ b/internal/usecases/province.go @@ -37,7 +37,7 @@ func (u *ProvinceUsecase) GetAll(filter dto.ProvinceFilterAllRequest) ([]domain. db := u.Helper.GetDB("slave") tx := db.Model(&provinces) if u.AuthUser.UsersRole_Relation == nil || u.AuthUser.UsersRole_Relation.RoleKey != "SPM" { - tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) + tx = tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) } v := reflect.ValueOf(filter) t := reflect.TypeOf(filter) @@ -45,7 +45,7 @@ func (u *ProvinceUsecase) GetAll(filter dto.ProvinceFilterAllRequest) ([]domain. for i := 0; i < v.NumField(); i++ { if v.Field(i).String() != "" { tagKey := t.Field(i).Tag.Get("form") - tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) + tx = tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) } } tx.Model(&domain.Province{}).Count(&total) @@ -144,7 +144,7 @@ func (u *ProvinceUsecase) Update(id string, name string, updatedBy string) (doma func (u *ProvinceUsecase) Delete(id string) error { db := u.Helper.GetDB("master") if u.AuthUser.UsersRole_Relation == nil || u.AuthUser.UsersRole_Relation.RoleKey != "SPM" { - db.Where("merchant_id=?", u.AuthUser.MerchantID) + db = db.Where("merchant_id=?", u.AuthUser.MerchantID) } if err := db.Delete(&domain.Province{}, "id = ?", id).Error; err != nil { return err diff --git a/internal/usecases/subdistrict.go b/internal/usecases/subdistrict.go index 1b96d64..89efefe 100644 --- a/internal/usecases/subdistrict.go +++ b/internal/usecases/subdistrict.go @@ -37,7 +37,7 @@ func (u *SubdistrictUsecase) GetAll(filter dto.SubdistrictFilterAllRequest) ([]d db := u.Helper.GetDB("slave") tx := db.Model(&subdistricts) if u.AuthUser.UsersRole_Relation == nil || u.AuthUser.UsersRole_Relation.RoleKey != "SPM" { - tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) + tx = tx.Where(db.Where("merchant_id IS NULL").Or("merchant_id=?", u.AuthUser.MerchantID)) } v := reflect.ValueOf(filter) t := reflect.TypeOf(filter) @@ -45,7 +45,7 @@ func (u *SubdistrictUsecase) GetAll(filter dto.SubdistrictFilterAllRequest) ([]d for i := 0; i < v.NumField(); i++ { if v.Field(i).String() != "" { tagKey := t.Field(i).Tag.Get("form") - tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) + tx = tx.Where(fmt.Sprintf("%v=?", tagKey), v.Field(i)) } } tx.Model(&domain.Subdistrict{}).Count(&total) @@ -170,7 +170,7 @@ func (u *SubdistrictUsecase) Update(id string, name string, provinceID string, c func (u *SubdistrictUsecase) Delete(id string) error { db := u.Helper.GetDB("master") if u.AuthUser.UsersRole_Relation == nil || u.AuthUser.UsersRole_Relation.RoleKey != "SPM" { - db.Where("merchant_id=?", u.AuthUser.MerchantID) + db = db.Where("merchant_id=?", u.AuthUser.MerchantID) } if err := db.Delete(&domain.Subdistrict{}, "id = ?", id).Error; err != nil { return err diff --git a/migrations/generatemodel.go b/migrations/generatemodel.go index 9f00323..437ad29 100644 --- a/migrations/generatemodel.go +++ b/migrations/generatemodel.go @@ -107,8 +107,20 @@ func GenerateModel(table *string, db *gorm.DB) { // --------------------------------------------------------- // Get tables // --------------------------------------------------------- - - rows, err := sqlDB.Query(` + qInfo := "" + if table != nil { + qInfo = fmt.Sprintf(` + SELECT + table_name + FROM information_schema.tables + WHERE + table_schema = 'public' + AND table_type = 'BASE TABLE' + AND table_name = '%v' + ORDER BY table_name + `, table) + } else { + qInfo = fmt.Sprintf(` SELECT table_name FROM information_schema.tables @@ -116,7 +128,9 @@ func GenerateModel(table *string, db *gorm.DB) { table_schema = 'public' AND table_type = 'BASE TABLE' ORDER BY table_name - `) + `, table) + } + rows, err := sqlDB.Query(qInfo) if err != nil { log.Fatalf( "Gagal mengambil daftar tabel: %v", @@ -818,4 +832,4 @@ func snakeToPascalCase( parts, "", ) -} \ No newline at end of file +}