geoGo/internal/data/impl/plat.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
}