- Add migrations 109-112: read_receipts, delivered_status, message_reactions, messages extra columns - Create ReadReceipt, DeliveredStatus, MessageReaction GORM models - Update Message model with EditedAt, Status, IsPinned, Metadata fields - Enrich ChatMessageRepository with cursor pagination, search, soft delete - Create ReadReceiptRepository, DeliveredStatusRepository, ReactionRepository - Create ChatPubSubService with Redis PubSub and in-memory fallback
30 lines
819 B
Go
30 lines
819 B
Go
package repositories
|
|
|
|
import (
|
|
"context"
|
|
"veza-backend-api/internal/models"
|
|
|
|
"github.com/google/uuid"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/clause"
|
|
)
|
|
|
|
type DeliveredStatusRepository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewDeliveredStatusRepository(db *gorm.DB) *DeliveredStatusRepository {
|
|
return &DeliveredStatusRepository{db: db}
|
|
}
|
|
|
|
func (r *DeliveredStatusRepository) MarkDelivered(ctx context.Context, status *models.DeliveredStatus) error {
|
|
return r.db.WithContext(ctx).
|
|
Clauses(clause.OnConflict{DoNothing: true}).
|
|
Create(status).Error
|
|
}
|
|
|
|
func (r *DeliveredStatusRepository) GetByMessageID(ctx context.Context, messageID uuid.UUID) ([]models.DeliveredStatus, error) {
|
|
var statuses []models.DeliveredStatus
|
|
err := r.db.WithContext(ctx).Where("message_id = ?", messageID).Find(&statuses).Error
|
|
return statuses, err
|
|
}
|