54 lines
1.8 KiB
Go
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
|
|
}
|