package repository import ( "context" "gorm.io/gorm" "gorm.io/gorm/clause" "time" ) // UserDO 游戏帐号表 type UserDO struct { Id uint64 `gorm:"column:id;type:bigint(20) unsigned;primary_key;AUTO_INCREMENT" json:"id"` Account string `gorm:"column:account;type:varchar(64);comment:账号;NOT NULL" json:"account"` Pwd string `gorm:"column:pwd;type:varchar(128);comment:密码;NOT NULL" json:"pwd"` NickName string `gorm:"column:nickname;type:varchar(64);nickname:昵称" json:"nickname"` Avatar string `gorm:"column:avatar;type:varchar(128);comment:头像" json:"avatar"` Gender uint `gorm:"column:gender;type:smallint(4) unsigned;default:0;comment:性别。0:未知 ;1:男;2:女; 3:其他" json:"gender"` Phone string `gorm:"column:phone;type:varchar(16);comment:手机号码" json:"phone"` WxId string `gorm:"column:wxId;type:varchar(16);comment:微信unionId" json:"wxId"` QqId string `gorm:"column:qqId;type:varchar(16);comment:qqId" json:"qqId"` Email string `gorm:"column:email;type:varchar(64);comment:email" json:"email"` GoogleId string `gorm:"column:google_id;type:varchar(32);comment:GoogleId" json:"google_id"` FacebookId string `gorm:"column:facebook_id;type:varchar(32);comment:FacebookId" json:"facebook_id"` VipType uint `gorm:"column:vip_type;type:smallint(4) unsigned;default:0;comment:会员类型:0:非会员;1:普通会员;2:永久会员;NOT NULL" json:"vip_type"` VipExpired *uint64 `gorm:"column:vip_expired;type:smallint(4) unsigned;default:0;comment:会员过期时间;NOT NULL" json:"vip_expired"` RegisterSource string `gorm:"column:register_source;type:varchar(16);comment:注册来源" json:"register_source"` LatestIp string `gorm:"column:latest_ip;type:varchar(32);comment:最近登录的ip" json:"latest_ip"` LatestLoginTime string `gorm:"column:latest_login_time;type:varchar(32);comment:最近登录的时间戳" json:"latest_login_time"` Status uint `gorm:"column:status;type:smallint(4) unsigned;default:1;comment:是否有效。0:否;1:是;NOT NULL" json:"status"` Deleted uint `gorm:"column:deleted;type:smallint(4) unsigned;default:0;comment:逻辑删除。 0:未删除;1:已删除;NOT NULL" json:"deleted"` Remark string `gorm:"column:remark;type:varchar(64);comment:备注" json:"remark"` CreateTime time.Time `gorm:"column:create_time;type:timestamp;default:CURRENT_TIMESTAMP;comment:创建时间;NOT NULL" json:"create_time"` UpdateTime time.Time `gorm:"column:update_time;type:timestamp;default:CURRENT_TIMESTAMP;comment:更新时间;NOT NULL" json:"update_time"` } func (m *UserDO) TableName() string { return "g_account" } type gUserRepositoryImpl struct { } func (gUserRepositoryImpl) FindById(ctx context.Context, id int64) *UserDO { //验证参数 if id <= 0 { return nil } db, ok := ctx.Value("db").(*gorm.DB) if !ok { db = Db } var model UserDO sqlErr := db.Model(&model).Where("id=?", id).First(&model).Error if sqlErr != nil { return nil } return &model } func (gUserRepositoryImpl) FindByAccount(ctx context.Context, account string) *UserDO { //验证参数 if account == "" { return nil } db, ok := ctx.Value("db").(*gorm.DB) if !ok { db = Db } var model UserDO sqlErr := db.Model(&model).Where("account=?", account).First(&model).Error if sqlErr != nil { return nil } return &model } func (gUserRepositoryImpl) FindByEmail(ctx context.Context, email string) *UserDO { //验证参数 if email == "" { return nil } db, ok := ctx.Value("db").(*gorm.DB) if !ok { db = Db } var model UserDO sqlErr := db.Model(&model).Where("email=?", email).First(&model).Error if sqlErr != nil { return nil } return &model } func (gUserRepositoryImpl) FindByPhone(ctx context.Context, phone string) *UserDO { //验证参数 if phone == "" { return nil } db, ok := ctx.Value("db").(*gorm.DB) if !ok { db = Db } var model UserDO sqlErr := db.Model(&model).Where("phone=?", phone).First(&model).Error if sqlErr != nil { return nil } return &model } func (gUserRepositoryImpl) FindByWxId(ctx context.Context, wxId string) *UserDO { //验证参数 if wxId == "" { return nil } db, ok := ctx.Value("db").(*gorm.DB) if !ok { db = Db } var model UserDO sqlErr := db.Model(&model).Where("wxId=?", wxId).First(&model).Error if sqlErr != nil { return nil } return &model } func (gUserRepositoryImpl) FindByQqId(ctx context.Context, qqId string) *UserDO { //验证参数 if qqId == "" { return nil } db, ok := ctx.Value("db").(*gorm.DB) if !ok { db = Db } var model UserDO sqlErr := db.Model(&model).Where("qqId=?", qqId).First(&model).Error if sqlErr != nil { return nil } return &model } func (gUserRepositoryImpl) FindByGoogleId(ctx context.Context, googleId string) *UserDO { //验证参数 if googleId == "" { return nil } db, ok := ctx.Value("db").(*gorm.DB) if !ok { db = Db } var model UserDO sqlErr := db.Model(&model).Where("googleId=?", googleId).First(&model).Error if sqlErr != nil { return nil } return &model } func (gUserRepositoryImpl) FindByFacebookId(ctx context.Context, facebookId string) *UserDO { //验证参数 if facebookId == "" { return nil } db, ok := ctx.Value("db").(*gorm.DB) if !ok { db = Db } var model UserDO sqlErr := db.Model(&model).Where("facebookId=?", facebookId).First(&model).Error if sqlErr != nil { return nil } return &model } // Create 创建用户 func (gUserRepositoryImpl) Create(ctx context.Context, data *UserDO) error { db, ok := ctx.Value("db").(*gorm.DB) if !ok { db = Db } data.Deleted = 0 return db.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "email"}}, DoUpdates: clause.AssignmentColumns([]string{"deleted"}), }).Create(data).Error } // UpdateById 根据ID更新用户 func (gUserRepositoryImpl) UpdateById(ctx context.Context, data *UserDO) error { db, ok := ctx.Value("db").(*gorm.DB) if !ok { db = Db } sqlErr := db.Model(data).Where("id=?", data.Id).Updates(data).Error if sqlErr != nil { return sqlErr } return nil }