package impl import ( "context" "fmt" "geo/internal/data/model" "geo/tmpl/dataTemp" "geo/utils" "xorm.io/builder" ) type PlatImpl struct { dataTemp.DataTemp db *utils.Db } func NewPlatImpl(db *utils.Db) *PlatImpl { return &PlatImpl{ DataTemp: *dataTemp.NewDataTemp(db, new(model.Plat)), db: db, } } func (p *PlatImpl) PrimaryKey() string { return "id" } func (p *PlatImpl) GetTemp() *dataTemp.DataTemp { return &p.DataTemp } // GetPlatListWithLoginStatus 获取平台列表并关联登录状态 func (p *PlatImpl) GetPlatListWithLoginStatus(ctx context.Context, cond *builder.Cond) ([]map[string]interface{}, error) { query, err := builder.ToBoundSQL(*cond) if err != nil { return nil, err } sql := ` SELECT plat.name, plat.img_url, plat.index, plat.desc, COALESCE(login_relation.login_status, 2) as login_status FROM plat LEFT JOIN login_relation ON login_relation.plat_index COLLATE utf8mb4_unicode_ci = plat.index AND login_relation.status = 1 WHERE %s ORDER BY plat.id ASC ` finalSQL := fmt.Sprintf(sql, query) var results []map[string]interface{} err = p.db.Client.WithContext(ctx).Raw(finalSQL).Scan(&results).Error if err != nil { return nil, err } return results, nil } // GetPlatListWithLoginStatusByUserIndex 根据用户索引获取平台列表及登录状态 func (p *PlatImpl) GetPlatListWithLoginStatusByUserIndex(ctx context.Context, userIndex string) ([]map[string]interface{}, error) { sql := ` SELECT pl.name, pl.img_url, pl.index, pl.desc, pl.login_url, pl.edit_url, pl.logined_url, COALESCE(lr.login_status, 2) as login_status FROM plat pl LEFT JOIN login_relation lr ON lr.plat_index = pl.index AND lr.user_index = ? AND lr.status = 1 WHERE pl.status = 1 ORDER BY pl.id ASC ` var results []map[string]interface{} err := p.db.Client.WithContext(ctx).Raw(sql, userIndex).Scan(&results).Error if err != nil { return nil, err } return results, nil }