Initial cloud-services repo - gateway service + pkg modules
This commit is contained in:
156
pkg/db/queries/subscription_packages.go
Normal file
156
pkg/db/queries/subscription_packages.go
Normal file
@@ -0,0 +1,156 @@
|
||||
package queries
|
||||
|
||||
import (
|
||||
"fiskerinc.com/modules/common"
|
||||
|
||||
"github.com/go-pg/pg/v10/orm"
|
||||
"github.com/google/uuid"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type SubscriptionPackagesInterface interface {
|
||||
Delete(model *common.SubscriptionPackage) (orm.Result, error)
|
||||
Insert(model *common.SubscriptionPackage) (orm.Result, error)
|
||||
Update(model *common.SubscriptionPackage) (orm.Result, error)
|
||||
Count(filter *common.SubscriptionPackage) (int, error)
|
||||
Select(fitler *common.SubscriptionPackage, paging *PageQueryOptions) ([]common.SubscriptionPackage, error)
|
||||
Load(model *common.SubscriptionPackage) error
|
||||
AddFeature(pack *common.SubscriptionPackage, feature *common.SubscriptionFeature) (bool, error)
|
||||
AssociateFeature(packageid uuid.UUID, featureid uuid.UUID) (bool, error)
|
||||
}
|
||||
|
||||
type SubscriptionPackages struct {
|
||||
QueryBase
|
||||
}
|
||||
|
||||
func (sp *SubscriptionPackages) Delete(model *common.SubscriptionPackage) (orm.Result, error) {
|
||||
var err error
|
||||
total := &ORMResults{}
|
||||
tx, err := sp.GetDBConn().Begin()
|
||||
if err != nil {
|
||||
return total, errors.WithStack(err)
|
||||
}
|
||||
defer func() {
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
tx.Close()
|
||||
}()
|
||||
|
||||
result, err := tx.Model(&common.SubscriptionPackageToFeature{SubscriptionPackageID: model.ID}).Where("subscription_package_id = ?subscription_package_id").Delete()
|
||||
if err != nil {
|
||||
return total, errors.WithStack(err)
|
||||
}
|
||||
total.AddResult(result)
|
||||
|
||||
result, err = tx.Model(model).WherePK().Delete()
|
||||
if err != nil {
|
||||
return total, errors.WithStack(err)
|
||||
}
|
||||
total.AddResult(result)
|
||||
|
||||
err = tx.Commit()
|
||||
if err != nil {
|
||||
return total, errors.WithStack(err)
|
||||
}
|
||||
|
||||
return total, nil
|
||||
}
|
||||
|
||||
func (sp *SubscriptionPackages) Insert(model *common.SubscriptionPackage) (orm.Result, error) {
|
||||
return sp.insert(model)
|
||||
}
|
||||
|
||||
func (sp *SubscriptionPackages) Update(model *common.SubscriptionPackage) (orm.Result, error) {
|
||||
return sp.update(model)
|
||||
}
|
||||
|
||||
func (sp *SubscriptionPackages) Count(filter *common.SubscriptionPackage) (int, error) {
|
||||
query := sp.GetDBConn().Model(filter)
|
||||
|
||||
sp.selectFilter(query, filter)
|
||||
|
||||
count, err := query.Count()
|
||||
|
||||
return count, errors.WithStack(err)
|
||||
}
|
||||
|
||||
func (sp *SubscriptionPackages) selectFilter(query *orm.Query, filter *common.SubscriptionPackage) {
|
||||
if filter.ID != uuid.Nil {
|
||||
query.Where("id = ?", filter.ID)
|
||||
}
|
||||
|
||||
if filter.Name != "" {
|
||||
query.Where("name = ?", filter.Name)
|
||||
}
|
||||
}
|
||||
|
||||
func (sp *SubscriptionPackages) Select(filter *common.SubscriptionPackage, paging *PageQueryOptions) ([]common.SubscriptionPackage, error) {
|
||||
items := []common.SubscriptionPackage{}
|
||||
query := sp.GetDBConn().Model(&items)
|
||||
|
||||
sp.selectFilter(query, filter)
|
||||
if paging != nil {
|
||||
sp.pageQuery(query, paging)
|
||||
}
|
||||
|
||||
err := query.Select()
|
||||
|
||||
return items, errors.WithStack(err)
|
||||
}
|
||||
|
||||
func (sp *SubscriptionPackages) Load(model *common.SubscriptionPackage) error {
|
||||
var err error
|
||||
tx, err := sp.GetDBConn().Begin()
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
defer func() {
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
tx.Close()
|
||||
}()
|
||||
|
||||
err = tx.Model(model).WherePK().First()
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
features := []common.SubscriptionFeature{}
|
||||
err = tx.Model(&features).Join("JOIN subscription_package_to_features").JoinOn("subscription_package_to_features.subscription_feature_id = subscription_feature.id").Where("subscription_package_to_features.subscription_package_id = ?", model.ID).Select()
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
model.Features = features
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sp *SubscriptionPackages) AddFeature(model *common.SubscriptionPackage, feature *common.SubscriptionFeature) (bool, error) {
|
||||
result, err := sp.AssociateFeature(model.ID, feature.ID)
|
||||
if err == nil {
|
||||
model.AddFeature(feature)
|
||||
}
|
||||
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (sp *SubscriptionPackages) AssociateFeature(packageid uuid.UUID, featureid uuid.UUID) (bool, error) {
|
||||
inserted, err := sp.GetDBConn().Model(&common.SubscriptionPackageToFeature{
|
||||
SubscriptionPackageID: packageid,
|
||||
SubscriptionFeatureID: featureid,
|
||||
}).SelectOrInsert()
|
||||
|
||||
return inserted, errors.WithStack(err)
|
||||
}
|
||||
|
||||
func (sp *SubscriptionPackages) RemoveFeature(model *common.SubscriptionPackage, feature *common.SubscriptionFeature) (orm.Result, error) {
|
||||
result, err := sp.resultWithStack(sp.GetDBConn().Model((*common.SubscriptionPackageToFeature)(nil)).Where("package_id = ? AND feature_id = ?", model.ID, feature.ID).Delete())
|
||||
if err == nil {
|
||||
model.RemoveFeature(feature)
|
||||
}
|
||||
|
||||
return result, err
|
||||
}
|
||||
Reference in New Issue
Block a user