mirror of
https://github.com/warmbly/warmbly.git
synced 2026-08-20 00:01:21 +00:00
56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package mailmanager
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/warmbly/warmbly/internal/app/cipher"
|
|
"github.com/warmbly/warmbly/internal/app/worker/wmail"
|
|
"github.com/warmbly/warmbly/internal/infrastructure/cache"
|
|
"github.com/warmbly/warmbly/internal/infrastructure/storage"
|
|
"github.com/warmbly/warmbly/internal/models"
|
|
"github.com/warmbly/warmbly/internal/repository"
|
|
)
|
|
|
|
type MailManager struct {
|
|
sync.RWMutex
|
|
Emails map[uuid.UUID]*wmail.WMail
|
|
OnEvent func(eventType models.JobEventType, key string, body any) error
|
|
cache *cache.Cache
|
|
storage *storage.Client
|
|
emailMessageMapRepository repository.EmailMessageMapRepository
|
|
cipherService cipher.CipherService
|
|
}
|
|
|
|
func NewMailManager(
|
|
onEvent func(eventType models.JobEventType, key string, body any) error,
|
|
cache *cache.Cache,
|
|
storage *storage.Client,
|
|
emailMessageMapRepository repository.EmailMessageMapRepository,
|
|
cipherService cipher.CipherService,
|
|
) *MailManager {
|
|
return &MailManager{
|
|
Emails: make(map[uuid.UUID]*wmail.WMail),
|
|
OnEvent: onEvent,
|
|
cache: cache,
|
|
storage: storage,
|
|
emailMessageMapRepository: emailMessageMapRepository,
|
|
cipherService: cipherService,
|
|
}
|
|
}
|
|
|
|
// Get returns a WMail by ID, or nil if not present
|
|
func (m *MailManager) Get(id uuid.UUID) *wmail.WMail {
|
|
m.RLock()
|
|
defer m.RUnlock()
|
|
return m.Emails[id]
|
|
}
|
|
|
|
// Has returns true if the manager already has this email account
|
|
func (m *MailManager) Has(id uuid.UUID) bool {
|
|
m.RLock()
|
|
defer m.RUnlock()
|
|
_, ok := m.Emails[id]
|
|
return ok
|
|
}
|