// Code generated by goctl. DO NOT EDIT. package models import ( "context" "database/sql" "fmt" "strings" "time" "github.com/zeromicro/go-zero/core/stores/builder" "github.com/zeromicro/go-zero/core/stores/cache" "github.com/zeromicro/go-zero/core/stores/sqlc" "github.com/zeromicro/go-zero/core/stores/sqlx" "github.com/zeromicro/go-zero/core/stringx" ) var ( userFieldNames = builder.RawFieldNames(&User{}) userRows = strings.Join(userFieldNames, ",") userRowsExpectAutoSet = strings.Join(stringx.Remove(userFieldNames, "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",") userRowsWithPlaceHolder = strings.Join(stringx.Remove(userFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?" cacheOaUserIdPrefix = "cache:oa:user:id:" cacheOaUserEmailPrefix = "cache:oa:user:email:" cacheOaUserPhonePrefix = "cache:oa:user:phone:" cacheOaUserUsernamePrefix = "cache:oa:user:username:" ) type ( userModel interface { Insert(ctx context.Context, data *User) (sql.Result, error) FindOne(ctx context.Context, id string) (*User, error) FindOneByEmail(ctx context.Context, email sql.NullString) (*User, error) FindOneByPhone(ctx context.Context, phone sql.NullString) (*User, error) FindOneByUsername(ctx context.Context, username string) (*User, error) Update(ctx context.Context, data *User) error Delete(ctx context.Context, id string) error } defaultUserModel struct { sqlc.CachedConn table string } User struct { Id string `db:"id"` // User UUID Created time.Time `db:"created"` Updated time.Time `db:"updated"` Username string `db:"username"` Nickname sql.NullString `db:"nickname"` Email sql.NullString `db:"email"` Phone sql.NullString `db:"phone"` Icon sql.NullString `db:"icon"` RealCode sql.NullString `db:"_real_code"` CheckCode sql.NullString `db:"_check_code"` Status int64 `db:"status"` // 状态(0:ok,1:disabled) Used int64 `db:"used"` Space int64 `db:"space"` } ) func newUserModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) *defaultUserModel { return &defaultUserModel{ CachedConn: sqlc.NewConn(conn, c, opts...), table: "`user`", } } func (m *defaultUserModel) Delete(ctx context.Context, id string) error { data, err := m.FindOne(ctx, id) if err != nil { return err } oaUserEmailKey := fmt.Sprintf("%s%v", cacheOaUserEmailPrefix, data.Email) oaUserIdKey := fmt.Sprintf("%s%v", cacheOaUserIdPrefix, id) oaUserPhoneKey := fmt.Sprintf("%s%v", cacheOaUserPhonePrefix, data.Phone) oaUserUsernameKey := fmt.Sprintf("%s%v", cacheOaUserUsernamePrefix, data.Username) _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { query := fmt.Sprintf("delete from %s where `id` = ?", m.table) return conn.ExecCtx(ctx, query, id) }, oaUserEmailKey, oaUserIdKey, oaUserPhoneKey, oaUserUsernameKey) return err } func (m *defaultUserModel) FindOne(ctx context.Context, id string) (*User, error) { oaUserIdKey := fmt.Sprintf("%s%v", cacheOaUserIdPrefix, id) var resp User err := m.QueryRowCtx(ctx, &resp, oaUserIdKey, func(ctx context.Context, conn sqlx.SqlConn, v any) error { query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", userRows, m.table) return conn.QueryRowCtx(ctx, v, query, id) }) switch err { case nil: return &resp, nil case sqlc.ErrNotFound: return nil, ErrNotFound default: return nil, err } } func (m *defaultUserModel) FindOneByEmail(ctx context.Context, email sql.NullString) (*User, error) { oaUserEmailKey := fmt.Sprintf("%s%v", cacheOaUserEmailPrefix, email) var resp User err := m.QueryRowIndexCtx(ctx, &resp, oaUserEmailKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) { query := fmt.Sprintf("select %s from %s where `email` = ? limit 1", userRows, m.table) if err := conn.QueryRowCtx(ctx, &resp, query, email); err != nil { return nil, err } return resp.Id, nil }, m.queryPrimary) switch err { case nil: return &resp, nil case sqlc.ErrNotFound: return nil, ErrNotFound default: return nil, err } } func (m *defaultUserModel) FindOneByPhone(ctx context.Context, phone sql.NullString) (*User, error) { oaUserPhoneKey := fmt.Sprintf("%s%v", cacheOaUserPhonePrefix, phone) var resp User err := m.QueryRowIndexCtx(ctx, &resp, oaUserPhoneKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) { query := fmt.Sprintf("select %s from %s where `phone` = ? limit 1", userRows, m.table) if err := conn.QueryRowCtx(ctx, &resp, query, phone); err != nil { return nil, err } return resp.Id, nil }, m.queryPrimary) switch err { case nil: return &resp, nil case sqlc.ErrNotFound: return nil, ErrNotFound default: return nil, err } } func (m *defaultUserModel) FindOneByUsername(ctx context.Context, username string) (*User, error) { oaUserUsernameKey := fmt.Sprintf("%s%v", cacheOaUserUsernamePrefix, username) var resp User err := m.QueryRowIndexCtx(ctx, &resp, oaUserUsernameKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) { query := fmt.Sprintf("select %s from %s where `username` = ? limit 1", userRows, m.table) if err := conn.QueryRowCtx(ctx, &resp, query, username); err != nil { return nil, err } return resp.Id, nil }, m.queryPrimary) switch err { case nil: return &resp, nil case sqlc.ErrNotFound: return nil, ErrNotFound default: return nil, err } } func (m *defaultUserModel) Insert(ctx context.Context, data *User) (sql.Result, error) { oaUserEmailKey := fmt.Sprintf("%s%v", cacheOaUserEmailPrefix, data.Email) oaUserIdKey := fmt.Sprintf("%s%v", cacheOaUserIdPrefix, data.Id) oaUserPhoneKey := fmt.Sprintf("%s%v", cacheOaUserPhonePrefix, data.Phone) oaUserUsernameKey := fmt.Sprintf("%s%v", cacheOaUserUsernamePrefix, data.Username) ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, userRowsExpectAutoSet) return conn.ExecCtx(ctx, query, data.Id, data.Created, data.Updated, data.Username, data.Nickname, data.Email, data.Phone, data.Icon, data.RealCode, data.CheckCode, data.Status, data.Used, data.Space) }, oaUserEmailKey, oaUserIdKey, oaUserPhoneKey, oaUserUsernameKey) return ret, err } func (m *defaultUserModel) Update(ctx context.Context, newData *User) error { data, err := m.FindOne(ctx, newData.Id) if err != nil { return err } oaUserEmailKey := fmt.Sprintf("%s%v", cacheOaUserEmailPrefix, data.Email) oaUserIdKey := fmt.Sprintf("%s%v", cacheOaUserIdPrefix, data.Id) oaUserPhoneKey := fmt.Sprintf("%s%v", cacheOaUserPhonePrefix, data.Phone) oaUserUsernameKey := fmt.Sprintf("%s%v", cacheOaUserUsernamePrefix, data.Username) _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, userRowsWithPlaceHolder) return conn.ExecCtx(ctx, query, newData.Created, newData.Updated, newData.Username, newData.Nickname, newData.Email, newData.Phone, newData.Icon, newData.RealCode, newData.CheckCode, newData.Status, newData.Used, newData.Space, newData.Id) }, oaUserEmailKey, oaUserIdKey, oaUserPhoneKey, oaUserUsernameKey) return err } func (m *defaultUserModel) formatPrimary(primary any) string { return fmt.Sprintf("%s%v", cacheOaUserIdPrefix, primary) } func (m *defaultUserModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary any) error { query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", userRows, m.table) return conn.QueryRowCtx(ctx, v, query, primary) } func (m *defaultUserModel) tableName() string { return m.table }