123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- package version
- import (
- "context"
- "go-common/app/interface/main/app-resource/conf"
- "go-common/app/interface/main/app-resource/model"
- "go-common/app/interface/main/app-resource/model/version"
- "go-common/library/database/sql"
- "go-common/library/log"
- )
- const (
- // version
- _allSQL = "SELECT id,plat,description,version,build,ptime FROM version WHERE state=0 ORDER BY ptime DESC"
- // version_update AND version
- _allUpsSQL = `SELECT up.id,up.channel,up.url,up.size,up.md5,v.build,v.version,v.description,up.sdkint_list,up.model,up.policy,up.is_force,
- up.is_push,up.policy_name,v.state,up.mtime,v.plat,up.policy_url,up.buvid_start,up.buvid_end
- FROM version v RIGHT JOIN version_update up ON v.id=up.vid AND v.plat in(0,7,8,9,11,12) WHERE up.state=1 AND v.state!=1 AND up.url!='' ORDER BY v.build DESC`
- _allUpsLimitSQL = `SELECT up_id,value,condi FROM version_update_limit ORDER BY value ASC`
- _allSosSQL = `SELECT id,package,name,description,clear,ver_code,ver_name,url,size,enable_state,force_state,md5,min_build,coverage,sdkint,model
- FROM version_so WHERE enable_state!=2 ORDER BY id DESC`
- _allIncreSQL = `SELECT i.id,i.target_version,i.target_build,i.target_id,i.source_version,i.source_build,i.source_id,i.task_id,i.file_path,i.url,i.md5,i.size,v.build,v.plat
- FROM version v RIGHT JOIN version_incremental i ON v.id=i.vid AND v.plat in(0,7,8,9,11,12) WHERE i.state=1 AND v.state!=1 AND i.url!='' ORDER BY v.build DESC`
- _allRnSQL = `SELECT id,deployment_key,bundle_id,url,md5,size,version FROM version_rn WHERE state=1 ORDER BY ctime DESC`
- )
- // Dao is a version dao
- type Dao struct {
- db *sql.DB
- get *sql.Stmt
- update *sql.Stmt
- so *sql.Stmt
- incre *sql.Stmt
- rn *sql.Stmt
- limit *sql.Stmt
- }
- // New new a version dao and return.
- func New(c *conf.Config) (d *Dao) {
- d = &Dao{
- db: sql.NewMySQL(c.MySQL.Show),
- }
- // prepare
- d.get = d.db.Prepared(_allSQL)
- d.update = d.db.Prepared(_allUpsSQL)
- d.so = d.db.Prepared(_allSosSQL)
- d.incre = d.db.Prepared(_allIncreSQL)
- d.rn = d.db.Prepared(_allRnSQL)
- d.limit = d.db.Prepared(_allUpsLimitSQL)
- return
- }
- // GetVersion get version.
- func (d *Dao) All(ctx context.Context) (ver map[int8][]*version.Version, err error) {
- rows, err := d.get.Query(ctx)
- if err != nil {
- log.Error("d.get error(%v)", err)
- return
- }
- defer rows.Close()
- ver = map[int8][]*version.Version{}
- for rows.Next() {
- a := &version.Version{}
- if err = rows.Scan(&a.Id, &a.Plat, &a.Desc, &a.Version, &a.Build, &a.PTime); err != nil {
- log.Error("row.Scan error(%v)", err)
- return
- }
- ver[a.Plat] = append(ver[a.Plat], a)
- }
- return
- }
- // GetUpdate get active version AND version_update
- func (d *Dao) Updates(ctx context.Context) (ver map[int8]map[string][]*version.VersionUpdate, err error) {
- var (
- masterChannel = "master"
- defaultChannel = "bili"
- )
- rows, err := d.update.Query(ctx)
- if err != nil {
- log.Error("d.update error(%v)", err)
- return
- }
- defer rows.Close()
- ver = map[int8]map[string][]*version.VersionUpdate{}
- for rows.Next() {
- a := &version.VersionUpdate{}
- if err = rows.Scan(&a.Id, &a.Channel, &a.Url, &a.Size, &a.MD5, &a.Build, &a.Version, &a.Desc, &a.SdkInts, &a.Model, &a.Policy, &a.IsForce,
- &a.IsPush, &a.PolicyName, &a.State, &a.Mtime, &a.Plat, &a.PolicyURL, &a.BuvidStart, &a.BuvidEnd); err != nil {
- log.Error("row.Scan error(%v)", err)
- return
- }
- a.VersionUpdateChange()
- if a.State == 2 {
- a.IsGray = 1
- } else {
- a.IsGray = 0
- }
- if a.Channel == masterChannel && a.Plat != model.PlatAndroidTVYST {
- a.Channel = defaultChannel
- }
- if v, ok := ver[a.Plat]; !ok {
- ver[a.Plat] = map[string][]*version.VersionUpdate{
- a.Channel: []*version.VersionUpdate{a},
- }
- } else {
- v[a.Channel] = append(v[a.Channel], a)
- }
- }
- return
- }
- // Limits version update limits
- func (d *Dao) Limits(ctx context.Context) (res map[int][]*version.UpdateLimit, err error) {
- res = map[int][]*version.UpdateLimit{}
- rows, err := d.limit.Query(ctx)
- if err != nil {
- log.Error("d.update error(%v)", err)
- return
- }
- defer rows.Close()
- for rows.Next() {
- l := &version.UpdateLimit{}
- if err = rows.Scan(&l.ID, &l.BuildLimit, &l.Conditions); err != nil {
- log.Error("version update limit sql error(%v)", err)
- return
- }
- res[l.ID] = append(res[l.ID], l)
- }
- return
- }
- // GetSos get version_so
- func (d *Dao) Sos(ctx context.Context) (ver map[string][]*version.VersionSo, err error) {
- rows, err := d.so.Query(ctx)
- if err != nil {
- log.Error("d.so error(%v)", err)
- return
- }
- defer rows.Close()
- ver = map[string][]*version.VersionSo{}
- for rows.Next() {
- s := &version.VersionSo{}
- if err = rows.Scan(&s.Id, &s.Package, &s.Name, &s.Description, &s.Clear, &s.Ver_code, &s.Ver_name, &s.Url, &s.Size, &s.Enable_state,
- &s.Force_state, &s.Md5, &s.Min_build, &s.Coverage, &s.Sdkint, &s.Model); err != nil {
- log.Error("row.Scan error(%v)", err)
- return
- }
- ver[s.Name] = append(ver[s.Name], s)
- }
- return
- }
- // Incrementals version incrementals
- func (d *Dao) Incrementals(ctx context.Context) (ver map[int8]map[string][]*version.Incremental, err error) {
- rows, err := d.incre.Query(ctx)
- if err != nil {
- log.Error("d.incre error(%v)", err)
- return
- }
- defer rows.Close()
- ver = map[int8]map[string][]*version.Incremental{}
- for rows.Next() {
- v := &version.Incremental{}
- if err = rows.Scan(&v.ID, &v.TargetVersion, &v.TargetBuild, &v.TargetID, &v.SourceVersion, &v.SourceBuild, &v.SourceID, &v.TaskID, &v.FilePath, &v.URL, &v.Md5,
- &v.Size, &v.Build, &v.Plat); err != nil {
- log.Error("row.Scan error(%v)", err)
- return
- }
- if vi, ok := ver[v.Plat]; !ok {
- ver[v.Plat] = map[string][]*version.Incremental{
- v.SourceID: []*version.Incremental{v},
- }
- } else {
- vi[v.SourceID] = append(vi[v.SourceID], v)
- }
- }
- return
- }
- // Rn version rn
- func (d *Dao) Rn(ctx context.Context) (ver map[string]map[string]*version.Rn, err error) {
- rows, err := d.rn.Query(ctx)
- if err != nil {
- log.Error("d.rn error(%v)", err)
- return
- }
- defer rows.Close()
- ver = map[string]map[string]*version.Rn{}
- for rows.Next() {
- v := &version.Rn{}
- if err = rows.Scan(&v.ID, &v.DeploymentKey, &v.BundleID, &v.URL, &v.Md5, &v.Size, &v.Version); err != nil {
- log.Error("row.Scan error(%v)", err)
- return
- }
- if vi, ok := ver[v.DeploymentKey]; !ok {
- ver[v.DeploymentKey] = map[string]*version.Rn{
- v.Version: v,
- }
- } else if _, ok := vi[v.Version]; !ok {
- vi[v.Version] = v
- }
- }
- return
- }
- // Close close db resource.
- func (dao *Dao) Close() {
- if dao.db != nil {
- dao.db.Close()
- }
- }
|