diff --git a/internal/db/models/server_daily_stat_dao_test.go b/internal/db/models/server_daily_stat_dao_test.go index 34f5ef94..b9368131 100644 --- a/internal/db/models/server_daily_stat_dao_test.go +++ b/internal/db/models/server_daily_stat_dao_test.go @@ -14,10 +14,10 @@ func TestServerDailyStatDAO_SaveStats(t *testing.T) { var tx *dbs.Tx stats := []*pb.ServerDailyStat{ { - ServerId: 1, - RegionId: 2, - Bytes: 1, - CreatedAt: 1607671488, + ServerId: 1, + NodeRegionId: 2, + Bytes: 1, + CreatedAt: 1607671488, }, } err := NewServerDailyStatDAO().SaveStats(tx, stats) @@ -31,10 +31,10 @@ func TestServerDailyStatDAO_SaveStats2(t *testing.T) { var tx *dbs.Tx stats := []*pb.ServerDailyStat{ { - ServerId: 1, - RegionId: 3, - Bytes: 1, - CreatedAt: 1607671488, + ServerId: 1, + NodeRegionId: 3, + Bytes: 1, + CreatedAt: 1607671488, }, } err := NewServerDailyStatDAO().SaveStats(tx, stats) diff --git a/internal/db/models/traffic_package_dao.go b/internal/db/models/traffic_package_dao.go new file mode 100644 index 00000000..68a4fc3e --- /dev/null +++ b/internal/db/models/traffic_package_dao.go @@ -0,0 +1,63 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" + "github.com/iwind/TeaGo/Tea" + "github.com/iwind/TeaGo/dbs" +) + +const ( + TrafficPackageStateEnabled = 1 // 已启用 + TrafficPackageStateDisabled = 0 // 已禁用 +) + +type TrafficPackageDAO dbs.DAO + +func NewTrafficPackageDAO() *TrafficPackageDAO { + return dbs.NewDAO(&TrafficPackageDAO{ + DAOObject: dbs.DAOObject{ + DB: Tea.Env, + Table: "edgeTrafficPackages", + Model: new(TrafficPackage), + PkName: "id", + }, + }).(*TrafficPackageDAO) +} + +var SharedTrafficPackageDAO *TrafficPackageDAO + +func init() { + dbs.OnReady(func() { + SharedTrafficPackageDAO = NewTrafficPackageDAO() + }) +} + +// EnableTrafficPackage 启用条目 +func (this *TrafficPackageDAO) EnableTrafficPackage(tx *dbs.Tx, id uint32) error { + _, err := this.Query(tx). + Pk(id). + Set("state", TrafficPackageStateEnabled). + Update() + return err +} + +// DisableTrafficPackage 禁用条目 +func (this *TrafficPackageDAO) DisableTrafficPackage(tx *dbs.Tx, id int64) error { + _, err := this.Query(tx). + Pk(id). + Set("state", TrafficPackageStateDisabled). + Update() + return err +} + +// FindEnabledTrafficPackage 查找启用中的条目 +func (this *TrafficPackageDAO) FindEnabledTrafficPackage(tx *dbs.Tx, id int64) (*TrafficPackage, error) { + result, err := this.Query(tx). + Pk(id). + State(TrafficPackageStateEnabled). + Find() + if result == nil { + return nil, err + } + return result.(*TrafficPackage), err +} diff --git a/internal/db/models/traffic_package_dao_test.go b/internal/db/models/traffic_package_dao_test.go new file mode 100644 index 00000000..6595eab6 --- /dev/null +++ b/internal/db/models/traffic_package_dao_test.go @@ -0,0 +1,6 @@ +package models_test + +import ( + _ "github.com/go-sql-driver/mysql" + _ "github.com/iwind/TeaGo/bootstrap" +) diff --git a/internal/db/models/traffic_package_model.go b/internal/db/models/traffic_package_model.go new file mode 100644 index 00000000..17a2c4bd --- /dev/null +++ b/internal/db/models/traffic_package_model.go @@ -0,0 +1,24 @@ +package models + +// TrafficPackage 流量包 +type TrafficPackage struct { + Id uint32 `field:"id"` // ID + Size uint32 `field:"size"` // 尺寸 + Unit string `field:"unit"` // 单位(gb|tb等) + Bytes uint64 `field:"bytes"` // 字节 + IsOn bool `field:"isOn"` // 是否启用 + State uint8 `field:"state"` // 状态 +} + +type TrafficPackageOperator struct { + Id any // ID + Size any // 尺寸 + Unit any // 单位(gb|tb等) + Bytes any // 字节 + IsOn any // 是否启用 + State any // 状态 +} + +func NewTrafficPackageOperator() *TrafficPackageOperator { + return &TrafficPackageOperator{} +} diff --git a/internal/db/models/traffic_package_model_ext.go b/internal/db/models/traffic_package_model_ext.go new file mode 100644 index 00000000..2640e7f9 --- /dev/null +++ b/internal/db/models/traffic_package_model_ext.go @@ -0,0 +1 @@ +package models diff --git a/internal/db/models/traffic_package_period_dao.go b/internal/db/models/traffic_package_period_dao.go new file mode 100644 index 00000000..7265a4f7 --- /dev/null +++ b/internal/db/models/traffic_package_period_dao.go @@ -0,0 +1,63 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" + "github.com/iwind/TeaGo/Tea" + "github.com/iwind/TeaGo/dbs" +) + +const ( + TrafficPackagePeriodStateEnabled = 1 // 已启用 + TrafficPackagePeriodStateDisabled = 0 // 已禁用 +) + +type TrafficPackagePeriodDAO dbs.DAO + +func NewTrafficPackagePeriodDAO() *TrafficPackagePeriodDAO { + return dbs.NewDAO(&TrafficPackagePeriodDAO{ + DAOObject: dbs.DAOObject{ + DB: Tea.Env, + Table: "edgeTrafficPackagePeriods", + Model: new(TrafficPackagePeriod), + PkName: "id", + }, + }).(*TrafficPackagePeriodDAO) +} + +var SharedTrafficPackagePeriodDAO *TrafficPackagePeriodDAO + +func init() { + dbs.OnReady(func() { + SharedTrafficPackagePeriodDAO = NewTrafficPackagePeriodDAO() + }) +} + +// EnableTrafficPackagePeriod 启用条目 +func (this *TrafficPackagePeriodDAO) EnableTrafficPackagePeriod(tx *dbs.Tx, id int64) error { + _, err := this.Query(tx). + Pk(id). + Set("state", TrafficPackagePeriodStateEnabled). + Update() + return err +} + +// DisableTrafficPackagePeriod 禁用条目 +func (this *TrafficPackagePeriodDAO) DisableTrafficPackagePeriod(tx *dbs.Tx, id int64) error { + _, err := this.Query(tx). + Pk(id). + Set("state", TrafficPackagePeriodStateDisabled). + Update() + return err +} + +// FindEnabledTrafficPackagePeriod 查找启用中的条目 +func (this *TrafficPackagePeriodDAO) FindEnabledTrafficPackagePeriod(tx *dbs.Tx, id int64) (*TrafficPackagePeriod, error) { + result, err := this.Query(tx). + Pk(id). + State(TrafficPackagePeriodStateEnabled). + Find() + if result == nil { + return nil, err + } + return result.(*TrafficPackagePeriod), err +} diff --git a/internal/db/models/traffic_package_period_dao_test.go b/internal/db/models/traffic_package_period_dao_test.go new file mode 100644 index 00000000..6595eab6 --- /dev/null +++ b/internal/db/models/traffic_package_period_dao_test.go @@ -0,0 +1,6 @@ +package models_test + +import ( + _ "github.com/go-sql-driver/mysql" + _ "github.com/iwind/TeaGo/bootstrap" +) diff --git a/internal/db/models/traffic_package_period_model.go b/internal/db/models/traffic_package_period_model.go new file mode 100644 index 00000000..c5026640 --- /dev/null +++ b/internal/db/models/traffic_package_period_model.go @@ -0,0 +1,24 @@ +package models + +// TrafficPackagePeriod 流量包有效期 +type TrafficPackagePeriod struct { + Id uint32 `field:"id"` // ID + IsOn bool `field:"isOn"` // 是否启用 + Count uint32 `field:"count"` // 数量 + Unit string `field:"unit"` // 单位:month, year + Months uint32 `field:"months"` // 月数 + State uint8 `field:"state"` // 状态 +} + +type TrafficPackagePeriodOperator struct { + Id any // ID + IsOn any // 是否启用 + Count any // 数量 + Unit any // 单位:month, year + Months any // 月数 + State any // 状态 +} + +func NewTrafficPackagePeriodOperator() *TrafficPackagePeriodOperator { + return &TrafficPackagePeriodOperator{} +} diff --git a/internal/db/models/traffic_package_period_model_ext.go b/internal/db/models/traffic_package_period_model_ext.go new file mode 100644 index 00000000..2640e7f9 --- /dev/null +++ b/internal/db/models/traffic_package_period_model_ext.go @@ -0,0 +1 @@ +package models diff --git a/internal/db/models/traffic_package_price_dao.go b/internal/db/models/traffic_package_price_dao.go new file mode 100644 index 00000000..2aec4e6d --- /dev/null +++ b/internal/db/models/traffic_package_price_dao.go @@ -0,0 +1,28 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" + "github.com/iwind/TeaGo/Tea" + "github.com/iwind/TeaGo/dbs" +) + +type TrafficPackagePriceDAO dbs.DAO + +func NewTrafficPackagePriceDAO() *TrafficPackagePriceDAO { + return dbs.NewDAO(&TrafficPackagePriceDAO{ + DAOObject: dbs.DAOObject{ + DB: Tea.Env, + Table: "edgeTrafficPackagePrices", + Model: new(TrafficPackagePrice), + PkName: "id", + }, + }).(*TrafficPackagePriceDAO) +} + +var SharedTrafficPackagePriceDAO *TrafficPackagePriceDAO + +func init() { + dbs.OnReady(func() { + SharedTrafficPackagePriceDAO = NewTrafficPackagePriceDAO() + }) +} diff --git a/internal/db/models/traffic_package_price_dao_test.go b/internal/db/models/traffic_package_price_dao_test.go new file mode 100644 index 00000000..6595eab6 --- /dev/null +++ b/internal/db/models/traffic_package_price_dao_test.go @@ -0,0 +1,6 @@ +package models_test + +import ( + _ "github.com/go-sql-driver/mysql" + _ "github.com/iwind/TeaGo/bootstrap" +) diff --git a/internal/db/models/traffic_package_price_model.go b/internal/db/models/traffic_package_price_model.go new file mode 100644 index 00000000..8f6b2c22 --- /dev/null +++ b/internal/db/models/traffic_package_price_model.go @@ -0,0 +1,24 @@ +package models + +// TrafficPackagePrice 流量包价格 +type TrafficPackagePrice struct { + Id uint32 `field:"id"` // ID + PackageId uint32 `field:"packageId"` // 套餐ID + RegionId uint32 `field:"regionId"` // 区域ID + PeriodId uint32 `field:"periodId"` // 有效期ID + Price float64 `field:"price"` // 价格 + DiscountPrice float64 `field:"discountPrice"` // 折后价格 +} + +type TrafficPackagePriceOperator struct { + Id any // ID + PackageId any // 套餐ID + RegionId any // 区域ID + PeriodId any // 有效期ID + Price any // 价格 + DiscountPrice any // 折后价格 +} + +func NewTrafficPackagePriceOperator() *TrafficPackagePriceOperator { + return &TrafficPackagePriceOperator{} +} diff --git a/internal/db/models/traffic_package_price_model_ext.go b/internal/db/models/traffic_package_price_model_ext.go new file mode 100644 index 00000000..2640e7f9 --- /dev/null +++ b/internal/db/models/traffic_package_price_model_ext.go @@ -0,0 +1 @@ +package models diff --git a/internal/db/models/user_traffic_bill_model.go b/internal/db/models/user_traffic_bill_model.go index b499dd0c..a5f9ef1e 100644 --- a/internal/db/models/user_traffic_bill_model.go +++ b/internal/db/models/user_traffic_bill_model.go @@ -1,30 +1,36 @@ package models +import "github.com/iwind/TeaGo/dbs" + // UserTrafficBill 用户流量/带宽账单 type UserTrafficBill struct { - Id uint64 `field:"id"` // ID - BillId uint64 `field:"billId"` // 主账单ID - RegionId uint32 `field:"regionId"` // 区域ID - Amount float64 `field:"amount"` // 金额 - BandwidthMB float64 `field:"bandwidthMB"` // 带宽MB - BandwidthPercentile uint8 `field:"bandwidthPercentile"` // 带宽百分位 - TrafficGB float64 `field:"trafficGB"` // 流量GB - PricePerUnit float64 `field:"pricePerUnit"` // 单位价格 - PriceType string `field:"priceType"` // 计费方式:traffic|bandwidth - State uint8 `field:"state"` // 状态 + Id uint64 `field:"id"` // ID + BillId uint64 `field:"billId"` // 主账单ID + RegionId uint32 `field:"regionId"` // 区域ID + Amount float64 `field:"amount"` // 金额 + BandwidthMB float64 `field:"bandwidthMB"` // 带宽MB + BandwidthPercentile uint8 `field:"bandwidthPercentile"` // 带宽百分位 + TrafficGB float64 `field:"trafficGB"` // 流量GB + TrafficPackageGB float64 `field:"trafficPackageGB"` // 使用的流量包GB + UserTrafficPackageIds dbs.JSON `field:"userTrafficPackageIds"` // 使用的流量包ID + PricePerUnit float64 `field:"pricePerUnit"` // 单位价格 + PriceType string `field:"priceType"` // 计费方式:traffic|bandwidth + State uint8 `field:"state"` // 状态 } type UserTrafficBillOperator struct { - Id any // ID - BillId any // 主账单ID - RegionId any // 区域ID - Amount any // 金额 - BandwidthMB any // 带宽MB - BandwidthPercentile any // 带宽百分位 - TrafficGB any // 流量GB - PricePerUnit any // 单位价格 - PriceType any // 计费方式:traffic|bandwidth - State any // 状态 + Id any // ID + BillId any // 主账单ID + RegionId any // 区域ID + Amount any // 金额 + BandwidthMB any // 带宽MB + BandwidthPercentile any // 带宽百分位 + TrafficGB any // 流量GB + TrafficPackageGB any // 使用的流量包GB + UserTrafficPackageIds any // 使用的流量包ID + PricePerUnit any // 单位价格 + PriceType any // 计费方式:traffic|bandwidth + State any // 状态 } func NewUserTrafficBillOperator() *UserTrafficBillOperator { diff --git a/internal/db/models/user_traffic_package_dao.go b/internal/db/models/user_traffic_package_dao.go new file mode 100644 index 00000000..34839323 --- /dev/null +++ b/internal/db/models/user_traffic_package_dao.go @@ -0,0 +1,63 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" + "github.com/iwind/TeaGo/Tea" + "github.com/iwind/TeaGo/dbs" +) + +const ( + UserTrafficPackageStateEnabled = 1 // 已启用 + UserTrafficPackageStateDisabled = 0 // 已禁用 +) + +type UserTrafficPackageDAO dbs.DAO + +func NewUserTrafficPackageDAO() *UserTrafficPackageDAO { + return dbs.NewDAO(&UserTrafficPackageDAO{ + DAOObject: dbs.DAOObject{ + DB: Tea.Env, + Table: "edgeUserTrafficPackages", + Model: new(UserTrafficPackage), + PkName: "id", + }, + }).(*UserTrafficPackageDAO) +} + +var SharedUserTrafficPackageDAO *UserTrafficPackageDAO + +func init() { + dbs.OnReady(func() { + SharedUserTrafficPackageDAO = NewUserTrafficPackageDAO() + }) +} + +// EnableUserTrafficPackage 启用条目 +func (this *UserTrafficPackageDAO) EnableUserTrafficPackage(tx *dbs.Tx, id uint64) error { + _, err := this.Query(tx). + Pk(id). + Set("state", UserTrafficPackageStateEnabled). + Update() + return err +} + +// DisableUserTrafficPackage 禁用条目 +func (this *UserTrafficPackageDAO) DisableUserTrafficPackage(tx *dbs.Tx, id int64) error { + _, err := this.Query(tx). + Pk(id). + Set("state", UserTrafficPackageStateDisabled). + Update() + return err +} + +// FindEnabledUserTrafficPackage 查找启用中的条目 +func (this *UserTrafficPackageDAO) FindEnabledUserTrafficPackage(tx *dbs.Tx, id int64) (*UserTrafficPackage, error) { + result, err := this.Query(tx). + Pk(id). + State(UserTrafficPackageStateEnabled). + Find() + if result == nil { + return nil, err + } + return result.(*UserTrafficPackage), err +} diff --git a/internal/db/models/user_traffic_package_dao_test.go b/internal/db/models/user_traffic_package_dao_test.go new file mode 100644 index 00000000..6595eab6 --- /dev/null +++ b/internal/db/models/user_traffic_package_dao_test.go @@ -0,0 +1,6 @@ +package models_test + +import ( + _ "github.com/go-sql-driver/mysql" + _ "github.com/iwind/TeaGo/bootstrap" +) diff --git a/internal/db/models/user_traffic_package_model.go b/internal/db/models/user_traffic_package_model.go new file mode 100644 index 00000000..d616b934 --- /dev/null +++ b/internal/db/models/user_traffic_package_model.go @@ -0,0 +1,40 @@ +package models + +// UserTrafficPackage 用户购买的流量包 +type UserTrafficPackage struct { + Id uint64 `field:"id"` // ID + AdminId uint32 `field:"adminId"` // 管理员ID + UserId uint64 `field:"userId"` // 用户ID + PackageId uint32 `field:"packageId"` // 流量包ID + TotalBytes uint64 `field:"totalBytes"` // 总字节数 + UsedBytes uint64 `field:"usedBytes"` // 已使用字节数 + RegionId uint32 `field:"regionId"` // 区域ID + PeriodId uint32 `field:"periodId"` // 有效期ID + PeriodCount uint32 `field:"periodCount"` // 有效期数量 + PeriodUnit string `field:"periodUnit"` // 有效期单位 + DayFrom string `field:"dayFrom"` // 开始日期 + DayTo string `field:"dayTo"` // 结束日期 + CreatedAt uint64 `field:"createdAt"` // 创建时间 + State uint8 `field:"state"` // 状态 +} + +type UserTrafficPackageOperator struct { + Id any // ID + AdminId any // 管理员ID + UserId any // 用户ID + PackageId any // 流量包ID + TotalBytes any // 总字节数 + UsedBytes any // 已使用字节数 + RegionId any // 区域ID + PeriodId any // 有效期ID + PeriodCount any // 有效期数量 + PeriodUnit any // 有效期单位 + DayFrom any // 开始日期 + DayTo any // 结束日期 + CreatedAt any // 创建时间 + State any // 状态 +} + +func NewUserTrafficPackageOperator() *UserTrafficPackageOperator { + return &UserTrafficPackageOperator{} +} diff --git a/internal/db/models/user_traffic_package_model_ext.go b/internal/db/models/user_traffic_package_model_ext.go new file mode 100644 index 00000000..2640e7f9 --- /dev/null +++ b/internal/db/models/user_traffic_package_model_ext.go @@ -0,0 +1 @@ +package models diff --git a/internal/rpc/services/service_node_region.go b/internal/rpc/services/service_node_region.go index 57afaf0c..036048e5 100644 --- a/internal/rpc/services/service_node_region.go +++ b/internal/rpc/services/service_node_region.go @@ -129,7 +129,7 @@ func (this *NodeRegionService) UpdateNodeRegionOrders(ctx context.Context, req * // FindEnabledNodeRegion 查找单个区域信息 func (this *NodeRegionService) FindEnabledNodeRegion(ctx context.Context, req *pb.FindEnabledNodeRegionRequest) (*pb.FindEnabledNodeRegionResponse, error) { - _, err := this.ValidateAdmin(ctx) + _, _, err := this.ValidateAdminAndUser(ctx, false) if err != nil { return nil, err }