Refactored downloader
This commit is contained in:
54
api/internal/core/services/downloader/downloader.go
Normal file
54
api/internal/core/services/downloader/downloader.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package downloader
|
||||
|
||||
import (
|
||||
"downloader/internal/core/ports/downloadhandler"
|
||||
"downloader/internal/core/ports/fileorchestrator"
|
||||
"errors"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type Downloader interface {
|
||||
Download(link string, downloadId string) error
|
||||
}
|
||||
|
||||
type downloader struct {
|
||||
logger *zap.SugaredLogger
|
||||
downloadHandler downloadhandler.DownloadHandler
|
||||
fileOrchestrator *fileorchestrator.FileOrchestrator
|
||||
ondownloadhandler downloadhandler.OnDownloadEventHandler
|
||||
}
|
||||
|
||||
func New(
|
||||
logger *zap.SugaredLogger,
|
||||
orchestrator *fileorchestrator.FileOrchestrator,
|
||||
downloadHandler downloadhandler.DownloadHandler,
|
||||
downloadEventHandler downloadhandler.OnDownloadEventHandler,
|
||||
) Downloader {
|
||||
return &downloader{
|
||||
logger: logger,
|
||||
downloadHandler: downloadHandler,
|
||||
fileOrchestrator: orchestrator,
|
||||
ondownloadhandler: downloadEventHandler,
|
||||
}
|
||||
}
|
||||
|
||||
func (y *downloader) Download(link string, downloadId string) error {
|
||||
basePath, err := y.fileOrchestrator.Begin(link)
|
||||
if err != nil {
|
||||
return errors.New("could not prepare for this link")
|
||||
}
|
||||
defer y.fileOrchestrator.CleanUp(basePath)
|
||||
|
||||
y.downloadHandler.OnProgress(y.ondownloadhandler)
|
||||
err = y.downloadHandler.Download(link, basePath, downloadId)
|
||||
if err != nil {
|
||||
return errors.New("could not download file")
|
||||
}
|
||||
|
||||
err = y.fileOrchestrator.Move(basePath)
|
||||
if err != nil {
|
||||
return errors.New("could not move to final destination")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user