SSE 推送替代轮训

This commit is contained in:
yml2213
2026-05-27 06:18:55 +08:00
parent 1458fc279c
commit a002987784
9 changed files with 493 additions and 42 deletions
+19 -3
View File
@@ -20,7 +20,8 @@ import (
)
type Repository struct {
db *gorm.DB
db *gorm.DB
chatRepo *chat.Repository
}
const defaultPendingPaymentTimeoutMinutes = 15
@@ -29,6 +30,10 @@ func NewRepository(db *gorm.DB) *Repository {
return &Repository{db: db}
}
func (r *Repository) SetChatRepo(cr *chat.Repository) {
r.chatRepo = cr
}
type orderPricing struct {
RentAmount float64
OwnerRentAmount float64
@@ -178,7 +183,8 @@ func (r *Repository) Create(renterID uint64, req CreateRequest) (*OrderDTO, erro
}
func (r *Repository) Pay(userID uint64, orderID uint64) error {
return r.db.Transaction(func(tx *gorm.DB) error {
var newConvID uint64
err := r.db.Transaction(func(tx *gorm.DB) error {
var order model.RentalOrder
if err := tx.Clauses(clause.Locking{Strength: "UPDATE"}).
Where("id = ? AND renter_id = ?", orderID, userID).
@@ -238,9 +244,11 @@ func (r *Repository) Pay(userID uint64, orderID uint64) error {
order.HandoffStatus = "pending_owner"
listing.Status = "rented"
account.Status = "rented"
if _, err := chat.EnsureOrderConversation(tx, order); err != nil {
conv, err := chat.EnsureOrderConversation(tx, order)
if err != nil {
return err
}
newConvID = conv.ID
orderID := order.ID
if err := notification.Append(tx,
notification.Entry{
@@ -270,6 +278,14 @@ func (r *Repository) Pay(userID uint64, orderID uint64) error {
}
return tx.Save(&account).Error
})
if err != nil {
return err
}
// 事务成功后推送群聊创建事件
if newConvID > 0 && r.chatRepo != nil {
r.chatRepo.NotifyNewConversation(newConvID)
}
return nil
}
func (r *Repository) Cancel(userID uint64, orderID uint64) error {