Sync from /srv/compose/unified-media-manager
This commit is contained in:
83
internal/api/import.go
Normal file
83
internal/api/import.go
Normal file
@@ -0,0 +1,83 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/TopherMayor/unified-media-manager/internal/db"
|
||||
"github.com/TopherMayor/unified-media-manager/internal/service"
|
||||
"github.com/labstack/echo/v4"
|
||||
)
|
||||
|
||||
type importHistoryItem struct {
|
||||
ID int64 `json:"id"`
|
||||
MediaID int64 `json:"media_id"`
|
||||
MediaType string `json:"media_type"`
|
||||
Action string `json:"action"`
|
||||
ReleaseTitle string `json:"release_title"`
|
||||
Quality string `json:"quality"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
}
|
||||
|
||||
func triggerImport(svc *service.ImportService) echo.HandlerFunc {
|
||||
return func(c echo.Context) error {
|
||||
ctx, cancel := context.WithTimeout(c.Request().Context(), 30*time.Second)
|
||||
defer cancel()
|
||||
|
||||
report, err := svc.ProcessCompleted(ctx)
|
||||
if err != nil {
|
||||
return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()})
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, report)
|
||||
}
|
||||
}
|
||||
|
||||
func listImportHistory(svc *service.ImportService, database *db.DB) echo.HandlerFunc {
|
||||
return func(c echo.Context) error {
|
||||
ctx, cancel := context.WithTimeout(c.Request().Context(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
page, pageSize := service.ParsePagination(c.QueryParam("page"), c.QueryParam("page_size"))
|
||||
|
||||
var total int
|
||||
err := database.Pool.QueryRow(ctx,
|
||||
"SELECT COUNT(*) FROM download_history WHERE action = 'import'").Scan(&total)
|
||||
if err != nil {
|
||||
return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()})
|
||||
}
|
||||
|
||||
offset := (page - 1) * pageSize
|
||||
rows, err := database.Pool.Query(ctx,
|
||||
`SELECT id, media_id, media_type, action, release_title, quality, created_at
|
||||
FROM download_history WHERE action = 'import'
|
||||
ORDER BY created_at DESC LIMIT $1 OFFSET $2`, pageSize, offset)
|
||||
if err != nil {
|
||||
return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()})
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var items []importHistoryItem
|
||||
for rows.Next() {
|
||||
var item importHistoryItem
|
||||
var quality []byte
|
||||
var createdAt time.Time
|
||||
if err := rows.Scan(&item.ID, &item.MediaID, &item.MediaType, &item.Action,
|
||||
&item.ReleaseTitle, &quality, &createdAt); err != nil {
|
||||
continue
|
||||
}
|
||||
item.Quality = string(quality)
|
||||
item.CreatedAt = createdAt.Format(time.RFC3339)
|
||||
items = append(items, item)
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, paginatedResponse{
|
||||
Data: items,
|
||||
Total: total,
|
||||
Page: page,
|
||||
PageSize: pageSize,
|
||||
TotalPages: service.CalcTotalPages(total, pageSize),
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user