This commit is contained in:
2021-12-22 20:21:24 +01:00
parent a24d39d657
commit a8bd48e09f
17 changed files with 344 additions and 31 deletions

View File

@@ -29,13 +29,14 @@ func (dr *requestDownloadRequest) Bind(r *http.Request) error {
}
func (a *api) requestDownload(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
data := &requestDownloadRequest{}
if err := render.Bind(r, data); err != nil {
_ = render.Render(w, r, responses.ErrInvalidRequest(err))
return
}
download, err := a.drService.Schedule(data.Link)
download, err := a.drService.Schedule(ctx, data.Link)
if err != nil {
_ = render.Render(w, r, responses.ErrInvalidRequest(err))
return
@@ -46,8 +47,9 @@ func (a *api) requestDownload(w http.ResponseWriter, r *http.Request) {
}
func (a *api) getDownloads(writer http.ResponseWriter, request *http.Request) {
ctx := request.Context()
active := request.URL.Query().Get("active") == "true"
downloads, err := a.drService.GetAll(active)
downloads, err := a.drService.GetAll(ctx, active)
if err != nil {
_ = render.Render(writer, request, responses.ErrInvalidRequest(err))
return
@@ -61,9 +63,10 @@ func (a *api) getDownloads(writer http.ResponseWriter, request *http.Request) {
}
func (a *api) getDownloadById(w http.ResponseWriter, r *http.Request) {
downloadId := r.Context().Value("downloadId").(string)
ctx := r.Context()
downloadId := ctx.Value("downloadId").(string)
download, err := a.drService.Get(downloadId)
download, err := a.drService.Get(ctx, downloadId)
if err != nil {
_ = render.Render(w, r, responses.ErrNotFound())
return
@@ -80,9 +83,14 @@ func newRequestDownloadResponse(download *entities.Download) *requestDownloadRes
}
func newDownloadsResponse(downloads []*entities.Download) []render.Renderer {
list := []render.Renderer{}
var list []render.Renderer
for _, download := range downloads {
list = append(list, newRequestDownloadResponse(download))
}
if len(list) == 0 {
return []render.Renderer{}
}
return list
}

View File

@@ -0,0 +1,29 @@
package persistence
import (
"context"
"database/sql"
"downloader/internal/app/persistence/migrations"
"github.com/uptrace/bun"
"github.com/uptrace/bun/dialect/pgdialect"
"github.com/uptrace/bun/driver/pgdriver"
"github.com/uptrace/bun/extra/bundebug"
"github.com/uptrace/bun/migrate"
)
func NewPostgresDB() *bun.DB {
dsn := "postgres://downloader:downloadersecret@localhost:5432/downloader?sslmode=disable"
sqldb := sql.OpenDB(pgdriver.NewConnector(pgdriver.WithDSN(dsn)))
db := bun.NewDB(sqldb, pgdialect.New())
db.AddQueryHook(bundebug.NewQueryHook(
bundebug.WithVerbose(true),
bundebug.FromEnv("BUNDEBUG")))
migrator := migrate.NewMigrator(db, migrations.Migrations)
bgCtx := context.Background()
migrator.Init(bgCtx)
migrator.Migrate(bgCtx)
return db
}

View File

@@ -0,0 +1,27 @@
package migrations
import (
"context"
"downloader/internal/core/ports/download_request/sql"
"github.com/uptrace/bun"
)
func init() {
Migrations.MustRegister(func(ctx context.Context, db *bun.DB) error {
_, err := db.Exec(`CREATE EXTENSION IF NOT EXISTS "uuid-ossp";`)
if err != nil {
return err
}
db.RegisterModel((*sql.Download)(nil))
_, err = db.NewCreateTable().
Model((*sql.Download)(nil)).
Exec(ctx)
return err
}, func(ctx context.Context, db *bun.DB) error {
_, err := db.NewDropTable().
Model((*sql.Download)(nil)).
Exec(ctx)
return err
})
}

View File

@@ -0,0 +1,17 @@
package migrations
import (
"embed"
"github.com/uptrace/bun/migrate"
)
var Migrations = migrate.NewMigrations()
// go:embed *.sql
var sqlMigrations embed.FS
func init() {
if err := Migrations.Discover(sqlMigrations); err != nil {
panic(err)
}
}

View File

@@ -3,7 +3,8 @@ package router
import (
"downloader/internal/app/api/download"
"downloader/internal/app/infrastructure/logger"
"downloader/internal/core/ports/download_request/in_memory"
"downloader/internal/app/persistence"
"downloader/internal/core/ports/download_request/sql"
"downloader/internal/core/ports/downloadhandler"
"downloader/internal/core/ports/filehandler/mover/local"
"downloader/internal/core/ports/fileorchestrator"
@@ -64,7 +65,9 @@ func setupDownloadRoute(router *router) {
destinationHandler := destinationhandler.New(mover)
fileOrchestrator := fileorchestrator.New(newLogger, sourceHandler, destinationHandler)
drRepository := in_memory.NewInMemoryRepository(newLogger)
db := persistence.NewPostgresDB()
drRepository := sql.NewDownloadRequestSqlRepository(db, newLogger)
//drRepository := in_memory.NewInMemoryRepository(newLogger)
//dlHandler := downloadhandler.NewYoutubeDlDownloader(newLogger)
dlHandler := downloadhandler.NewYtDlpDownloader(newLogger)
ondlHandler := handlers.New(drRepository, newLogger)