repositories.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package repositories
  2. import (
  3. "context"
  4. "github.com/redis/go-redis/v9"
  5. "github.com/rotisserie/eris"
  6. "gorm.io/gorm"
  7. "sikey.com/websocket/models"
  8. )
  9. type TransactionFun func(ctx context.Context, repos *Repositories) error
  10. type Repositories struct {
  11. source *gorm.DB
  12. rdb *redis.Client
  13. //SessionRepository SessionRepository
  14. OnlineRepository OnlineRepository
  15. FirebaseMessageRepository FirebaseMessageRepository
  16. MessageRepository MessageRepository
  17. NotifyRepository NotifyRepository
  18. SessionGroupRepository SessionGroupRepository
  19. SessionSingleRepository SessionSingleRepository
  20. FirebaseMessageQueueRepository FirebaseMessageQueueRepository
  21. }
  22. func NewRepositories(source *gorm.DB, rdb *redis.Client) *Repositories {
  23. return &Repositories{
  24. source: source,
  25. rdb: rdb,
  26. //SessionRepository: NewSessionRepository(source),
  27. OnlineRepository: NewOnlineRepository(rdb),
  28. FirebaseMessageRepository: NewFirebaseMessageRepository(source),
  29. MessageRepository: NewMessageRepository(source),
  30. NotifyRepository: NewNotifyRepository(source),
  31. SessionGroupRepository: NewSessionGroupRepository(source),
  32. SessionSingleRepository: NewSessionSingleRepository(source),
  33. FirebaseMessageQueueRepository: NewFirebaseMessageQueueRepository(source),
  34. }
  35. }
  36. func (repos *Repositories) Transaction(ctx context.Context, fn TransactionFun) error {
  37. return repos.source.Transaction(func(tx *gorm.DB) error {
  38. return fn(ctx, repos)
  39. })
  40. }
  41. func resultSlice[T any](mods []T, err error) ([]T, error) {
  42. switch {
  43. case err == nil:
  44. return mods, nil
  45. case eris.Is(err, models.ErrRecordNotFound):
  46. return make([]T, 0), nil
  47. default:
  48. return nil, err
  49. }
  50. }
  51. func result[T any](mod T, err error) (*T, error) {
  52. switch {
  53. case err == nil:
  54. return &mod, nil
  55. case eris.Is(err, models.ErrRecordNotFound):
  56. return nil, nil
  57. default:
  58. return nil, err
  59. }
  60. }