Files
slogan/styleagent/dao/user_member_dao.go
T

54 lines
1.8 KiB
Go

package dao
import (
"context"
"slogan-agent/styleagent/consts"
"slogan-agent/styleagent/model/entity"
"github.com/gogf/gf/v2/frame/g"
)
var UserMember = &userMemberDao{}
type userMemberDao struct{}
func init() {
ctx := context.Background()
_, err := g.DB().Exec(ctx, `CREATE TABLE IF NOT EXISTS `+consts.TableNameUserMember+` (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL UNIQUE,
plan_id INTEGER NOT NULL DEFAULT 0,
expire_at DATETIME,
source TEXT NOT NULL DEFAULT 'vip_pay',
created_at DATETIME DEFAULT (datetime('now','localtime')),
updated_at DATETIME
)`)
if err != nil {
g.Log().Warningf(ctx, "create user_member table failed: %v", err)
}
}
func (d *userMemberDao) GetByUser(ctx context.Context, userId int64) (*entity.UserMember, error) {
var m *entity.UserMember
err := g.DB().Model(consts.TableNameUserMember).Ctx(ctx).
Where("user_id", userId).Scan(&m)
return m, err
}
// Upsert 无则插入有则整体覆盖(expire_at 由 Service 算好传入)
func (d *userMemberDao) Upsert(ctx context.Context, userId, planId int64, expireAt, source string) error {
_, err := g.DB().Exec(ctx,
"INSERT INTO "+consts.TableNameUserMember+" (user_id, plan_id, expire_at, source, created_at, updated_at) VALUES (?, ?, ?, ?, datetime('now','localtime'), datetime('now','localtime')) "+
"ON CONFLICT(user_id) DO UPDATE SET plan_id=excluded.plan_id, expire_at=excluded.expire_at, source=excluded.source, updated_at=datetime('now','localtime')",
userId, planId, expireAt, source)
return err
}
// IsVip 当前是否会员(未过期)
func (d *userMemberDao) IsVip(ctx context.Context, userId int64) bool {
n, err := g.DB().Model(consts.TableNameUserMember).Ctx(ctx).
Where("user_id", userId).Where("expire_at > datetime('now','localtime')").Count()
return err == nil && n > 0
}