142 lines
3.4 KiB
Go
142 lines
3.4 KiB
Go
package queries
|
|
|
|
import (
|
|
"github.com/fiskerinc/cloud-services/pkg/common"
|
|
"github.com/fiskerinc/cloud-services/pkg/validator"
|
|
|
|
"github.com/go-pg/pg/v10/orm"
|
|
"github.com/google/uuid"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
var subFeaturesCols = []string{}
|
|
|
|
type SubscriptionFeaturesInterface interface {
|
|
Delete(model *common.SubscriptionFeature) (orm.Result, error)
|
|
Insert(model *common.SubscriptionFeature) (orm.Result, error)
|
|
Update(model *common.SubscriptionFeature) (orm.Result, error)
|
|
Count(filter *common.SubscriptionFeature) (int, error)
|
|
Select(fitler *common.SubscriptionFeature, paging *PageQueryOptions) ([]common.SubscriptionFeature, error)
|
|
Load(model *common.SubscriptionFeature) error
|
|
}
|
|
|
|
type SubscriptionFeatures struct {
|
|
QueryBase
|
|
}
|
|
|
|
func (sf *SubscriptionFeatures) Delete(model *common.SubscriptionFeature) (orm.Result, error) {
|
|
var err error
|
|
total := &ORMResults{}
|
|
tx, err := sf.GetDBConn().Begin()
|
|
if err != nil {
|
|
return total, errors.WithStack(err)
|
|
}
|
|
defer func() {
|
|
if err != nil {
|
|
tx.Rollback()
|
|
}
|
|
tx.Close()
|
|
}()
|
|
|
|
result, err := tx.Model(&common.SubscriptionConfiguration{SubscriptionFeatureID: model.ID}).Where("subscription_feature_id = ?subscription_feature_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 (sf *SubscriptionFeatures) Insert(model *common.SubscriptionFeature) (orm.Result, error) {
|
|
return sf.insert(model)
|
|
}
|
|
|
|
func (sf *SubscriptionFeatures) Update(model *common.SubscriptionFeature) (orm.Result, error) {
|
|
err := validator.ValidateStruct(model)
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
return sf.resultWithStack(sf.GetDBConn().Model(model).Column(subFeaturesCols...).WherePK().Update())
|
|
}
|
|
|
|
func (sf *SubscriptionFeatures) Count(filter *common.SubscriptionFeature) (int, error) {
|
|
query := sf.GetDBConn().Model(filter)
|
|
|
|
sf.selectFilter(query, filter)
|
|
|
|
count, err := query.Count()
|
|
|
|
return count, errors.WithStack(err)
|
|
}
|
|
|
|
func (sf *SubscriptionFeatures) Load(model *common.SubscriptionFeature) error {
|
|
var err error
|
|
|
|
tx, err := sf.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)
|
|
}
|
|
|
|
configs := []common.SubscriptionConfiguration{}
|
|
err = tx.Model(&configs).Where("subscription_feature_id = ?", model.ID).Select()
|
|
if err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
model.Configurations = configs
|
|
|
|
err = tx.Commit()
|
|
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
func (sf *SubscriptionFeatures) selectFilter(query *orm.Query, filter *common.SubscriptionFeature) {
|
|
if filter.ID != uuid.Nil {
|
|
query.Where("ID = ?", filter.ID)
|
|
}
|
|
|
|
if filter.Name != "" {
|
|
query.Where("name = ?", filter.Name)
|
|
}
|
|
|
|
if filter.Description != "" {
|
|
query.Where("description = ?", filter.Description)
|
|
}
|
|
}
|
|
|
|
func (sf *SubscriptionFeatures) Select(filter *common.SubscriptionFeature, paging *PageQueryOptions) ([]common.SubscriptionFeature, error) {
|
|
items := []common.SubscriptionFeature{}
|
|
query := sf.GetDBConn().Model(&items)
|
|
|
|
sf.selectFilter(query, filter)
|
|
if paging != nil {
|
|
sf.pageQuery(query, paging)
|
|
}
|
|
|
|
err := query.Select()
|
|
|
|
return items, errors.WithStack(err)
|
|
}
|