package worker import ( "context" "git.sr.ht/~gabrielgio/img/pkg/coroutine" "git.sr.ht/~gabrielgio/img/pkg/database/repository" "git.sr.ht/~gabrielgio/img/pkg/fileop" ) type ( EXIFScanner struct { repository repository.MediaRepository } ) var _ BatchProcessor[*repository.Media] = &EXIFScanner{} func NewEXIFScanner(repository repository.MediaRepository) *EXIFScanner { return &EXIFScanner{ repository: repository, } } func (e *EXIFScanner) Query(ctx context.Context) ([]*repository.Media, error) { medias, err := e.repository.GetEmptyEXIF(ctx, &repository.Pagination{ Page: 0, Size: 100, }) if err != nil { return nil, err } return medias, nil } func (e *EXIFScanner) Process(ctx context.Context, m *repository.Media) error { exif, err := coroutine.WrapProcess(ctx, func() (*repository.MediaEXIF, error) { return fileop.ReadExif(m.Path) }) if err != nil { return err } return e.repository.CreateEXIF(ctx, m.ID, exif) }