Quellcode durchsuchen

feat: service layer for scanner

Fela Maslen vor 5 Jahren
Ursprung
Commit
9abea2f5ea
2 geänderte Dateien mit 75 neuen und 0 gelöschten Zeilen
  1. 24 0
      music-player/pkg/services/scanner.go
  2. 51 0
      music-player/pkg/services/scanner_test.go

+ 24 - 0
music-player/pkg/services/scanner.go

@@ -0,0 +1,24 @@
+package services
+
+import (
+	"github.com/felamaslen/go-music-player/pkg/config"
+	"github.com/felamaslen/go-music-player/pkg/logger"
+	"github.com/felamaslen/go-music-player/pkg/read"
+	"github.com/felamaslen/go-music-player/pkg/repository"
+)
+
+func ScanAndInsert(musicDirectory string) {
+  var l = logger.CreateLogger(config.GetConfig().LogLevel)
+
+  l.Info("Scanning directory for files...\n")
+  files := read.ScanDirectory(musicDirectory)
+
+  l.Info("Reading files...\n")
+  songs := read.ReadMultipleFiles(musicDirectory, files)
+
+  l.Info("Inserting data...\n")
+  repository.InsertMusicIntoDatabase(songs)
+
+  l.Info("Finished scan and insert :)\n")
+}
+

+ 51 - 0
music-player/pkg/services/scanner_test.go

@@ -0,0 +1,51 @@
+package services
+
+import (
+	"context"
+	"testing"
+
+	"github.com/felamaslen/go-music-player/pkg/db"
+	"github.com/felamaslen/go-music-player/pkg/read"
+	setup "github.com/felamaslen/go-music-player/pkg/testing"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestIntegrationScanAndInsert(t *testing.T) {
+  setup.PrepareDatabaseForTesting()
+
+  ScanAndInsert(read.TestDirectory)
+
+  conn := db.GetConnection()
+
+  rows, err := conn.Query(
+    context.Background(),
+    `
+    select
+      title as "Title"
+      ,artist as "Artist"
+      ,album as "Album"
+      ,coalesce(duration, 0) as "Duration"
+      ,duration is not null as "DurationOk"
+      ,base_path as "BasePath"
+      ,relative_path as "RelativePath"
+    from songs
+    `,
+  )
+
+  assert.Nil(t, err)
+
+  var song read.Song
+
+  rows.Next()
+  rows.Scan(&song.Title, &song.Artist, &song.Album, &song.Duration, &song.DurationOk, &song.BasePath, &song.RelativePath)
+
+  assert.Equal(t, read.Song{
+    Title: read.TestSong.Title,
+    Artist: read.TestSong.Artist,
+    Album: read.TestSong.Album,
+    Duration: read.TestSong.Duration,
+    DurationOk: true,
+    BasePath: read.TestSong.BasePath,
+    RelativePath: read.TestSong.RelativePath,
+  }, song)
+}