Sync from /srv/compose/unified-media-manager
This commit is contained in:
78
internal/service/root_folder.go
Normal file
78
internal/service/root_folder.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/TopherMayor/unified-media-manager/internal/db"
|
||||
)
|
||||
|
||||
type RootFolder struct {
|
||||
ID int64 `json:"id"`
|
||||
Path string `json:"path"`
|
||||
MediaType string `json:"media_type"`
|
||||
FreeSpace *int64 `json:"free_space,omitempty"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
type CreateRootFolderRequest struct {
|
||||
Path string `json:"path"`
|
||||
MediaType string `json:"media_type"`
|
||||
}
|
||||
|
||||
type RootFolderService struct {
|
||||
db *db.DB
|
||||
}
|
||||
|
||||
func NewRootFolderService(database *db.DB) *RootFolderService {
|
||||
return &RootFolderService{db: database}
|
||||
}
|
||||
|
||||
func (s *RootFolderService) List(ctx context.Context) ([]RootFolder, error) {
|
||||
rows, err := s.db.Pool.Query(ctx,
|
||||
"SELECT id, path, media_type, free_space, created_at FROM root_folders ORDER BY path")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("list root folders: %w", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var folders []RootFolder
|
||||
for rows.Next() {
|
||||
var f RootFolder
|
||||
if err := rows.Scan(&f.ID, &f.Path, &f.MediaType, &f.FreeSpace, &f.CreatedAt); err != nil {
|
||||
return nil, fmt.Errorf("scan root folder: %w", err)
|
||||
}
|
||||
folders = append(folders, f)
|
||||
}
|
||||
return folders, nil
|
||||
}
|
||||
|
||||
func (s *RootFolderService) Create(ctx context.Context, req CreateRootFolderRequest) (int64, error) {
|
||||
if req.Path == "" {
|
||||
return 0, fmt.Errorf("path is required")
|
||||
}
|
||||
if req.MediaType == "" {
|
||||
return 0, fmt.Errorf("media_type is required")
|
||||
}
|
||||
|
||||
var id int64
|
||||
err := s.db.Pool.QueryRow(ctx,
|
||||
"INSERT INTO root_folders (path, media_type, created_at) VALUES ($1, $2, NOW()) RETURNING id",
|
||||
req.Path, req.MediaType).Scan(&id)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("create root folder: %w", err)
|
||||
}
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func (s *RootFolderService) Delete(ctx context.Context, id int64) error {
|
||||
tag, err := s.db.Pool.Exec(ctx, "DELETE FROM root_folders WHERE id = $1", id)
|
||||
if err != nil {
|
||||
return fmt.Errorf("delete root folder: %w", err)
|
||||
}
|
||||
if tag.RowsAffected() == 0 {
|
||||
return fmt.Errorf("root folder not found")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user