package model import ( "context" "database/sql" "fmt" "github.com/zeromicro/go-zero/core/stores/cache" "github.com/zeromicro/go-zero/core/stores/sqlx" ) var _ EnterpriseAuthModel = (*customEnterpriseAuthModel)(nil) type ( // EnterpriseAuthModel is an interface to be customized, add more methods here, // and implement the added methods in customEnterpriseAuthModel. EnterpriseAuthModel interface { enterpriseAuthModel FindLatestByUserId(ctx context.Context, userId int64) (*EnterpriseAuth, error) TransCtx(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error InsertEnterpriseAuthTrans(ctx context.Context, auth *EnterpriseAuth, session sqlx.Session) (sql.Result, error) UpdateEnterpriseAuthTrans(ctx context.Context, auth *EnterpriseAuth, session sqlx.Session) (sql.Result, error) FindPendingList(ctx context.Context, page, pageSize int64) ([]EnterpriseAuth, int64, error) } customEnterpriseAuthModel struct { *defaultEnterpriseAuthModel } ) // NewEnterpriseAuthModel returns a model for the database table. func NewEnterpriseAuthModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) EnterpriseAuthModel { return &customEnterpriseAuthModel{ defaultEnterpriseAuthModel: newEnterpriseAuthModel(conn, c, opts...), } } func (m *defaultEnterpriseAuthModel) FindLatestByUserId(ctx context.Context, userId int64) (*EnterpriseAuth, error) { query := fmt.Sprintf("SELECT * FROM %s WHERE user_id = ? ORDER BY created_at DESC LIMIT 1", m.table) var resp EnterpriseAuth err := m.QueryRowsNoCacheCtx(ctx, &resp, query, userId) switch err { case nil: return &resp, nil case sql.ErrNoRows: return nil, sql.ErrNoRows default: return nil, err } } func (m *defaultEnterpriseAuthModel) TransCtx(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error { // 使用带 ctx 的事务处理 err := m.TransactCtx(ctx, func(ctx context.Context, session sqlx.Session) error { return fn(ctx, session) }) return err } func (m *defaultEnterpriseAuthModel) InsertEnterpriseAuthTrans(ctx context.Context, auth *EnterpriseAuth, session sqlx.Session) (sql.Result, error) { enterpriseAuthIdKey := fmt.Sprintf("%s%v", cacheEnterpriseAuthIdPrefix, auth.Id) query := fmt.Sprintf("INSERT INTO %s (user_id, enterprise_name, credit_code, legal_person, business_license, enterprise_contact, auth_status) VALUES (?, ?, ?, ?, ?, ?, ?)", m.table) ret, err := session.ExecCtx(ctx, query, auth.UserId, auth.EnterpriseName, auth.CreditCode, auth.LegalPerson, auth.BusinessLicense, auth.EnterpriseContact, auth.AuthStatus) if err == nil { err = m.DelCacheCtx(ctx, enterpriseAuthIdKey) if err != nil { return nil, err } } return ret, err } func (m *defaultEnterpriseAuthModel) UpdateEnterpriseAuthTrans(ctx context.Context, auth *EnterpriseAuth, session sqlx.Session) (sql.Result, error) { enterpriseAuthIdKey := fmt.Sprintf("%s%v", cacheEnterpriseAuthIdPrefix, auth.Id) query := fmt.Sprintf("UPDATE %s SET %s WHERE `id` = ?", m.table, enterpriseAuthRowsWithPlaceHolder) ret, err := session.ExecCtx(ctx, query, auth.UserId, auth.EnterpriseName, auth.CreditCode, auth.LegalPerson, auth.BusinessLicense, auth.EnterpriseContact, auth.AuthStatus, auth.Id) if err == nil { err = m.DelCacheCtx(ctx, enterpriseAuthIdKey) if err != nil { return nil, err } } return ret, err } func (m *defaultEnterpriseAuthModel) FindPendingList(ctx context.Context, page, pageSize int64) ([]EnterpriseAuth, int64, error) { offset := (page - 1) * pageSize var enterprises []EnterpriseAuth query := fmt.Sprintf("SELECT * FROM %s WHERE auth_status = 'pending' ORDER BY created_at DESC LIMIT ?,?", m.table) err := m.QueryRowsNoCacheCtx(ctx, &enterprises, query, offset, pageSize) if err != nil { return nil, 0, err } // 查询总数量 var total int64 countQuery := fmt.Sprintf("SELECT COUNT(*) FROM %s WHERE auth_status = 'pending'", m.table) err = m.QueryRowNoCacheCtx(ctx, &total, countQuery) if err != nil { return nil, 0, err } return enterprises, total, nil }