draft
This commit is contained in:
115
backend/internal/repository/merchant.go
Normal file
115
backend/internal/repository/merchant.go
Normal file
@@ -0,0 +1,115 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"pay-bridge/internal/model"
|
||||
)
|
||||
|
||||
// MerchantRepository 商户数据访问
|
||||
type MerchantRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewMerchantRepository(db *gorm.DB) *MerchantRepository {
|
||||
return &MerchantRepository{db: db}
|
||||
}
|
||||
|
||||
func (r *MerchantRepository) Create(ctx context.Context, m *model.Merchant) error {
|
||||
return r.db.WithContext(ctx).Create(m).Error
|
||||
}
|
||||
|
||||
func (r *MerchantRepository) GetByMerchantID(ctx context.Context, merchantID string) (*model.Merchant, error) {
|
||||
var m model.Merchant
|
||||
err := r.db.WithContext(ctx).Where("merchant_id = ?", merchantID).First(&m).Error
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, nil
|
||||
}
|
||||
return &m, err
|
||||
}
|
||||
|
||||
func (r *MerchantRepository) UpdateStatus(ctx context.Context, merchantID string, status model.MerchantStatus, updates map[string]any) error {
|
||||
if updates == nil {
|
||||
updates = make(map[string]any)
|
||||
}
|
||||
updates["status"] = status
|
||||
return r.db.WithContext(ctx).Model(&model.Merchant{}).Where("merchant_id = ?", merchantID).Updates(updates).Error
|
||||
}
|
||||
|
||||
func (r *MerchantRepository) List(ctx context.Context, status model.MerchantStatus, limit, offset int) ([]*model.Merchant, error) {
|
||||
var merchants []*model.Merchant
|
||||
q := r.db.WithContext(ctx)
|
||||
if status != "" {
|
||||
q = q.Where("status = ?", status)
|
||||
}
|
||||
err := q.Order("created_at DESC").Limit(limit).Offset(offset).Find(&merchants).Error
|
||||
return merchants, err
|
||||
}
|
||||
|
||||
// ListAnomalous 查询状态异常的商户(Frozen/Rejected)
|
||||
func (r *MerchantRepository) ListAnomalous(ctx context.Context) ([]*model.Merchant, error) {
|
||||
var merchants []*model.Merchant
|
||||
err := r.db.WithContext(ctx).
|
||||
Where("status IN ?", []model.MerchantStatus{
|
||||
model.MerchantStatusFrozen,
|
||||
model.MerchantStatusRejected,
|
||||
}).Find(&merchants).Error
|
||||
return merchants, err
|
||||
}
|
||||
|
||||
// GetByMerchantIDAndAppID 带 appID 隔离查询(业务侧用)
|
||||
func (r *MerchantRepository) GetByMerchantIDAndAppID(ctx context.Context, merchantID, appID string) (*model.Merchant, error) {
|
||||
var m model.Merchant
|
||||
err := r.db.WithContext(ctx).Where("merchant_id = ? AND app_id = ?", merchantID, appID).First(&m).Error
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, nil
|
||||
}
|
||||
return &m, err
|
||||
}
|
||||
|
||||
// ListByAppID 按 appID 分页查询(业务侧用)
|
||||
func (r *MerchantRepository) ListByAppID(ctx context.Context, appID string, status model.MerchantStatus, limit, offset int) ([]*model.Merchant, error) {
|
||||
var merchants []*model.Merchant
|
||||
q := r.db.WithContext(ctx).Where("app_id = ?", appID)
|
||||
if status != "" {
|
||||
q = q.Where("status = ?", status)
|
||||
}
|
||||
err := q.Limit(limit).Offset(offset).Order("id DESC").Find(&merchants).Error
|
||||
return merchants, err
|
||||
}
|
||||
|
||||
// CreateApplication 创建进件申请
|
||||
func (r *MerchantRepository) CreateApplication(ctx context.Context, app *model.MerchantApplication) error {
|
||||
return r.db.WithContext(ctx).Create(app).Error
|
||||
}
|
||||
|
||||
// GetLatestApplication 获取商户最新进件申请
|
||||
func (r *MerchantRepository) GetLatestApplication(ctx context.Context, merchantID string) (*model.MerchantApplication, error) {
|
||||
var app model.MerchantApplication
|
||||
err := r.db.WithContext(ctx).Where("merchant_id = ?", merchantID).
|
||||
Order("created_at DESC").First(&app).Error
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, nil
|
||||
}
|
||||
return &app, err
|
||||
}
|
||||
|
||||
// GetApprovedApplicationByChannel 查询指定商户在指定渠道已审核通过的进件记录
|
||||
func (r *MerchantRepository) GetApprovedApplicationByChannel(ctx context.Context, merchantID, channelCode string) (*model.MerchantApplication, error) {
|
||||
var app model.MerchantApplication
|
||||
err := r.db.WithContext(ctx).
|
||||
Where("merchant_id = ? AND channel_code = ? AND audit_status = ?", merchantID, channelCode, model.AuditStatusApproved).
|
||||
First(&app).Error
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, nil
|
||||
}
|
||||
return &app, err
|
||||
}
|
||||
|
||||
// UpdateApplication 更新进件申请状态
|
||||
func (r *MerchantRepository) UpdateApplication(ctx context.Context, applicationID string, updates map[string]any) error {
|
||||
return r.db.WithContext(ctx).Model(&model.MerchantApplication{}).
|
||||
Where("application_id = ?", applicationID).Updates(updates).Error
|
||||
}
|
||||
Reference in New Issue
Block a user