// Code generated by goctl. DO NOT EDIT. // versions: // goctl version: 1.7.2 package model 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 ( usersFieldNames = builder.RawFieldNames(&Users{}) usersRows = strings.Join(usersFieldNames, ",") usersRowsExpectAutoSet = strings.Join(stringx.Remove(usersFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",") usersRowsWithPlaceHolder = strings.Join(stringx.Remove(usersFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?" cacheUsersIdPrefix = "cache:users:id:" cacheUsersPhonePrefix = "cache:users:phone:" cacheUsersUsernamePrefix = "cache:users:username:" ) type ( usersModel interface { Insert(ctx context.Context, data *Users) (sql.Result, error) FindOne(ctx context.Context, id int64) (*Users, error) FindOneByPhone(ctx context.Context, phone string) (*Users, error) FindOneByUsername(ctx context.Context, username string) (*Users, error) Update(ctx context.Context, data *Users) error Delete(ctx context.Context, id int64) error } defaultUsersModel struct { sqlc.CachedConn table string } Users struct { Id int64 `db:"id"` // 用户ID Username string `db:"username"` // 用户名 Password string `db:"password"` // 用户密码 Phone string `db:"phone"` // 用户手机号 AuthStatus string `db:"auth_status"` // 认证状态:unverified=未提交,pending=待审核,approved=审核通过,rejected=审核拒绝 CreatedAt time.Time `db:"created_at"` // 用户创建时间 UpdatedAt time.Time `db:"updated_at"` // 用户更新时间 } ) func newUsersModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) *defaultUsersModel { return &defaultUsersModel{ CachedConn: sqlc.NewConn(conn, c, opts...), table: "`users`", } } func (m *defaultUsersModel) Delete(ctx context.Context, id int64) error { data, err := m.FindOne(ctx, id) if err != nil { return err } usersIdKey := fmt.Sprintf("%s%v", cacheUsersIdPrefix, id) usersPhoneKey := fmt.Sprintf("%s%v", cacheUsersPhonePrefix, data.Phone) usersUsernameKey := fmt.Sprintf("%s%v", cacheUsersUsernamePrefix, 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) }, usersIdKey, usersPhoneKey, usersUsernameKey) return err } func (m *defaultUsersModel) FindOne(ctx context.Context, id int64) (*Users, error) { usersIdKey := fmt.Sprintf("%s%v", cacheUsersIdPrefix, id) var resp Users err := m.QueryRowCtx(ctx, &resp, usersIdKey, func(ctx context.Context, conn sqlx.SqlConn, v any) error { query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", usersRows, 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 *defaultUsersModel) FindOneByPhone(ctx context.Context, phone string) (*Users, error) { usersPhoneKey := fmt.Sprintf("%s%v", cacheUsersPhonePrefix, phone) var resp Users err := m.QueryRowIndexCtx(ctx, &resp, usersPhoneKey, 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", usersRows, 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 *defaultUsersModel) FindOneByUsername(ctx context.Context, username string) (*Users, error) { usersUsernameKey := fmt.Sprintf("%s%v", cacheUsersUsernamePrefix, username) var resp Users err := m.QueryRowIndexCtx(ctx, &resp, usersUsernameKey, 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", usersRows, 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 *defaultUsersModel) Insert(ctx context.Context, data *Users) (sql.Result, error) { usersIdKey := fmt.Sprintf("%s%v", cacheUsersIdPrefix, data.Id) usersPhoneKey := fmt.Sprintf("%s%v", cacheUsersPhonePrefix, data.Phone) usersUsernameKey := fmt.Sprintf("%s%v", cacheUsersUsernamePrefix, 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, usersRowsExpectAutoSet) return conn.ExecCtx(ctx, query, data.Username, data.Password, data.Phone, data.AuthStatus) }, usersIdKey, usersPhoneKey, usersUsernameKey) return ret, err } func (m *defaultUsersModel) Update(ctx context.Context, newData *Users) error { data, err := m.FindOne(ctx, newData.Id) if err != nil { return err } usersIdKey := fmt.Sprintf("%s%v", cacheUsersIdPrefix, data.Id) usersPhoneKey := fmt.Sprintf("%s%v", cacheUsersPhonePrefix, data.Phone) usersUsernameKey := fmt.Sprintf("%s%v", cacheUsersUsernamePrefix, 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, usersRowsWithPlaceHolder) return conn.ExecCtx(ctx, query, newData.Username, newData.Password, newData.Phone, newData.AuthStatus, newData.Id) }, usersIdKey, usersPhoneKey, usersUsernameKey) return err } func (m *defaultUsersModel) formatPrimary(primary any) string { return fmt.Sprintf("%s%v", cacheUsersIdPrefix, primary) } func (m *defaultUsersModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary any) error { query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", usersRows, m.table) return conn.QueryRowCtx(ctx, v, query, primary) } func (m *defaultUsersModel) tableName() string { return m.table }