package models import ( "encoding/json" _ "github.com/go-sql-driver/mysql" "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/types" "time" ) const ( HTTPDNSAppStateEnabled = 1 HTTPDNSAppStateDisabled = 0 HTTPDNSSNIModeFixedHide = "fixed_hide" ) type HTTPDNSAppDAO dbs.DAO func NewHTTPDNSAppDAO() *HTTPDNSAppDAO { return dbs.NewDAO(&HTTPDNSAppDAO{ DAOObject: dbs.DAOObject{ DB: Tea.Env, Table: "edgeHTTPDNSApps", Model: new(HTTPDNSApp), PkName: "id", }, }).(*HTTPDNSAppDAO) } var SharedHTTPDNSAppDAO *HTTPDNSAppDAO func init() { dbs.OnReady(func() { SharedHTTPDNSAppDAO = NewHTTPDNSAppDAO() }) } func (this *HTTPDNSAppDAO) CreateApp(tx *dbs.Tx, name string, appId string, clusterIdsJSON []byte, isOn bool, userId int64) (int64, error) { var op = NewHTTPDNSAppOperator() op.Name = name op.AppId = appId if len(clusterIdsJSON) > 0 { op.ClusterIdsJSON = string(clusterIdsJSON) } else { op.ClusterIdsJSON = "[]" } op.IsOn = isOn op.UserId = userId op.SNIMode = HTTPDNSSNIModeFixedHide op.CreatedAt = time.Now().Unix() op.UpdatedAt = time.Now().Unix() op.State = HTTPDNSAppStateEnabled err := this.Save(tx, op) if err != nil { return 0, err } return types.Int64(op.Id), nil } func (this *HTTPDNSAppDAO) UpdateApp(tx *dbs.Tx, appDbId int64, name string, clusterIdsJSON []byte, isOn bool, userId int64) error { var op = NewHTTPDNSAppOperator() op.Id = appDbId op.Name = name if len(clusterIdsJSON) > 0 { op.ClusterIdsJSON = string(clusterIdsJSON) } else { op.ClusterIdsJSON = "[]" } op.IsOn = isOn op.UserId = userId op.UpdatedAt = time.Now().Unix() return this.Save(tx, op) } // ReadAppClusterIds reads cluster IDs from ClusterIdsJSON. func (this *HTTPDNSAppDAO) ReadAppClusterIds(app *HTTPDNSApp) []int64 { if app == nil { return nil } if len(app.ClusterIdsJSON) > 0 { var ids []int64 if err := json.Unmarshal([]byte(app.ClusterIdsJSON), &ids); err == nil && len(ids) > 0 { return ids } } return nil } func (this *HTTPDNSAppDAO) DisableApp(tx *dbs.Tx, appDbId int64) error { _, err := this.Query(tx). Pk(appDbId). Set("state", HTTPDNSAppStateDisabled). Update() return err } func (this *HTTPDNSAppDAO) FindEnabledApp(tx *dbs.Tx, appDbId int64) (*HTTPDNSApp, error) { one, err := this.Query(tx). Pk(appDbId). State(HTTPDNSAppStateEnabled). Find() if one == nil { return nil, err } return one.(*HTTPDNSApp), nil } func (this *HTTPDNSAppDAO) FindEnabledAppWithUser(tx *dbs.Tx, appDbId int64, userId int64) (*HTTPDNSApp, error) { one, err := this.Query(tx). Pk(appDbId). State(HTTPDNSAppStateEnabled). Attr("userId", userId). Find() if one == nil { return nil, err } return one.(*HTTPDNSApp), nil } func (this *HTTPDNSAppDAO) FindEnabledAppWithAppId(tx *dbs.Tx, appId string) (*HTTPDNSApp, error) { one, err := this.Query(tx). State(HTTPDNSAppStateEnabled). Attr("appId", appId). Find() if one == nil { return nil, err } return one.(*HTTPDNSApp), nil } func (this *HTTPDNSAppDAO) FindEnabledAppWithAppIdAndUser(tx *dbs.Tx, appId string, userId int64) (*HTTPDNSApp, error) { one, err := this.Query(tx). State(HTTPDNSAppStateEnabled). Attr("appId", appId). Attr("userId", userId). Find() if one == nil { return nil, err } return one.(*HTTPDNSApp), nil } func (this *HTTPDNSAppDAO) FindLatestEnabledAppWithNameAndUser(tx *dbs.Tx, name string, userId int64) (*HTTPDNSApp, error) { one, err := this.Query(tx). State(HTTPDNSAppStateEnabled). Attr("name", name). Attr("userId", userId). DescPk(). Find() if one == nil { return nil, err } return one.(*HTTPDNSApp), nil } func (this *HTTPDNSAppDAO) ListEnabledApps(tx *dbs.Tx, offset int64, size int64, keyword string) (result []*HTTPDNSApp, err error) { query := this.Query(tx). State(HTTPDNSAppStateEnabled). AscPk() if len(keyword) > 0 { query = query.Where("(name LIKE :kw OR appId LIKE :kw)").Param("kw", "%"+keyword+"%") } if size > 0 { query = query.Offset(offset).Limit(size) } _, err = query.Slice(&result).FindAll() return } func (this *HTTPDNSAppDAO) ListEnabledAppsWithUser(tx *dbs.Tx, userId int64, offset int64, size int64, keyword string) (result []*HTTPDNSApp, err error) { query := this.Query(tx). State(HTTPDNSAppStateEnabled). Attr("userId", userId). AscPk() if len(keyword) > 0 { query = query.Where("(name LIKE :kw OR appId LIKE :kw)").Param("kw", "%"+keyword+"%") } if size > 0 { query = query.Offset(offset).Limit(size) } _, err = query.Slice(&result).FindAll() return } func (this *HTTPDNSAppDAO) CountEnabledApps(tx *dbs.Tx, keyword string) (int64, error) { query := this.Query(tx).State(HTTPDNSAppStateEnabled) if len(keyword) > 0 { query = query.Where("(name LIKE :kw OR appId LIKE :kw)").Param("kw", "%"+keyword+"%") } return query.Count() } func (this *HTTPDNSAppDAO) CountEnabledAppsWithUser(tx *dbs.Tx, userId int64, keyword string) (int64, error) { query := this.Query(tx).State(HTTPDNSAppStateEnabled).Attr("userId", userId) if len(keyword) > 0 { query = query.Where("(name LIKE :kw OR appId LIKE :kw)").Param("kw", "%"+keyword+"%") } return query.Count() } func (this *HTTPDNSAppDAO) FindAllEnabledApps(tx *dbs.Tx) (result []*HTTPDNSApp, err error) { _, err = this.Query(tx). State(HTTPDNSAppStateEnabled). AscPk(). Slice(&result). FindAll() return } func (this *HTTPDNSAppDAO) FindAllEnabledAppsWithUser(tx *dbs.Tx, userId int64) (result []*HTTPDNSApp, err error) { _, err = this.Query(tx). State(HTTPDNSAppStateEnabled). Attr("userId", userId). AscPk(). Slice(&result). FindAll() return } func (this *HTTPDNSAppDAO) ListEnabledAppIdsWithUser(tx *dbs.Tx, userId int64) (result []string, err error) { apps, err := this.FindAllEnabledAppsWithUser(tx, userId) if err != nil { return nil, err } result = make([]string, 0, len(apps)) for _, app := range apps { if app == nil || len(app.AppId) == 0 { continue } result = append(result, app.AppId) } return }