89 lines
1.9 KiB
Go
89 lines
1.9 KiB
Go
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
|
|
}
|