package model import ( "context" "fmt" "git.noahlan.cn/northlan/ntools-go/gorm-zero/gormc" "gorm.io/gorm" ) var _ UserPlatformModel = (*customUserPlatformModel)(nil) type ( // UserPlatformModel is an interface to be customized, add more methods here, // and implement the added methods in customUserPlatformModel. UserPlatformModel interface { userPlatformModel // FindOneByPlatformAndPUid 查询平台用户 FindOneByPlatformAndPUid(ctx context.Context, platform, pUid string) (*UserPlatform, error) // FindEmptyList 查询从未更新过平台信息的用户 FindEmptyList(ctx context.Context, num int64) ([]UserPlatform, error) // FindUpdatableList 查询过期需要更新信息的用户 FindUpdatableList(ctx context.Context, duration int64, num int64) ([]UserPlatform, error) // FindOneForRankByUserId 查找用户信息 用于排行榜展示 FindOneForRankByUserId(ctx context.Context, uid int64) (*UserPlatformForRank, error) } UserPlatformForRank struct { UserId int64 // 用户ID PUname string // 平台用户名 PAvatar string // 平台用户头像地址 } customUserPlatformModel struct { *defaultUserPlatformModel } ) // NewUserPlatformModel returns a model for the database table. func NewUserPlatformModel(conn *gorm.DB) UserPlatformModel { return &customUserPlatformModel{ defaultUserPlatformModel: newUserPlatformModel(conn), } } func (m *customUserPlatformModel) FindOneByPlatformAndPUid(ctx context.Context, platform, pUid string) (*UserPlatform, error) { var resp UserPlatform err := m.conn.WithContext(ctx).Model(&UserPlatform{}).Where("`platform` = ? AND `p_uid` = ?", platform, pUid).Take(&resp).Error switch err { case nil: return &resp, nil case gormc.ErrNotFound: return nil, ErrNotFound default: return nil, err } } func (m *customUserPlatformModel) FindEmptyList(ctx context.Context, num int64) ([]UserPlatform, error) { var resp []UserPlatform err := m.conn.WithContext(ctx). Table(m.tableName()). Where("JSON_LENGTH(`p_info`) = 0 LIMIT ?", num). Find(&resp).Error switch err { case nil: return resp, nil case gormc.ErrNotFound: return nil, ErrNotFound default: return nil, err } } func (m *customUserPlatformModel) FindUpdatableList(ctx context.Context, duration int64, num int64) ([]UserPlatform, error) { var resp []UserPlatform err := m.conn.WithContext(ctx). Table(m.tableName()). Where("`update_time` < (NOW() - INTERVAL ? HOUR) LIMIT ?", duration, num). Find(&resp).Error switch err { case nil: return resp, nil case gormc.ErrNotFound: return nil, ErrNotFound default: return nil, err } } func (m *customUserPlatformModel) FindOneForRankByUserId(ctx context.Context, uid int64) (*UserPlatformForRank, error) { var resp UserPlatformForRank err := m.conn.WithContext(ctx). Table(m.table). Select(fmt.Sprintf("%s.user_id, %s.p_uname, %s.p_avatar", m.table, m.table, m.table)). Where("user_id = ?", uid). Take(&resp).Error switch err { case nil: return &resp, nil case gormc.ErrNotFound: return nil, ErrNotFound default: return nil, err } }