firebase_messaging_queue_repository.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package repositories
  2. import (
  3. "context"
  4. "time"
  5. "gorm.io/gorm"
  6. "sikey.com/websocket/models"
  7. )
  8. type FirebaseMessageQueueRepository interface {
  9. Create(ctx context.Context, queue *models.FirebaseMessagingQueue) error
  10. FindRetrieableQueue(ctx context.Context) (queues []models.FirebaseMessagingQueue, err error)
  11. Save(ctx context.Context, queue *models.FirebaseMessagingQueue) error
  12. UpdateRetries(ctx context.Context, queue *models.FirebaseMessagingQueue) error
  13. Delete(ctx context.Context, id int) error
  14. }
  15. var _ FirebaseMessageQueueRepository = (*firebaseMessageQueueRepository)(nil)
  16. type firebaseMessageQueueRepository struct {
  17. source *gorm.DB
  18. }
  19. // UpdateRetries implements FirebaseMessageQueueRepository.
  20. func (repo *firebaseMessageQueueRepository) UpdateRetries(ctx context.Context, queue *models.FirebaseMessagingQueue) error {
  21. return repo.source.WithContext(ctx).Model(&models.FirebaseMessagingQueue{}).Where("id", queue.ID).Updates(map[string]interface{}{
  22. "remaining_retries": queue.RemainingRetries,
  23. "last_retry_time": queue.LastRetryTime.Format(time.DateTime),
  24. }).Error
  25. }
  26. // Delete implements FirebaseMessageQueueRepository.
  27. func (repo *firebaseMessageQueueRepository) Delete(ctx context.Context, id int) error {
  28. return repo.source.WithContext(ctx).
  29. Where("id = ?", id).
  30. Delete(&models.FirebaseMessagingQueue{}).
  31. Error
  32. }
  33. // Save implements FirebaseMessageQueueRepository.
  34. func (repo *firebaseMessageQueueRepository) Save(ctx context.Context, queue *models.FirebaseMessagingQueue) error {
  35. return repo.source.WithContext(ctx).Save(queue).Error
  36. }
  37. // FindRetrieableQueue implements FirebaseMessageQueueRepository.
  38. func (repo *firebaseMessageQueueRepository) FindRetrieableQueue(ctx context.Context) (queues []models.FirebaseMessagingQueue, err error) {
  39. err = repo.source.WithContext(ctx).
  40. Where("remaining_retries > 0").
  41. Model(&models.FirebaseMessagingQueue{}).
  42. Find(&queues).
  43. Error
  44. return resultSlice(queues, err)
  45. }
  46. // Create implements FirebaseMessageQueueRepository.
  47. func (repo *firebaseMessageQueueRepository) Create(ctx context.Context, queue *models.FirebaseMessagingQueue) error {
  48. return repo.source.WithContext(ctx).Create(queue).Error
  49. }
  50. func NewFirebaseMessageQueueRepository(source *gorm.DB) FirebaseMessageQueueRepository {
  51. return &firebaseMessageQueueRepository{source: source}
  52. }