@@ -2,18 +2,16 @@ package database
22
33import (
44 "context"
5- "fmt"
6- "musicboxapi/logging"
75 "musicboxapi/models"
8- "time"
96)
107
118type ITasklogTable interface {
12- InsertTaskLog () (lastInsertedId int , err error )
13- UpdateTaskLogStatus (taskId int , nStatus int ) (err error )
14- EndTaskLog (taskId int , nStatus int , data []byte ) (err error )
15- UpdateTaskLogError (params ... any ) (err error )
16- GetTaskLogs (ctx context.Context ) ([]models.TaskLog , error )
9+ GetParentChildLogs (ctx context.Context ) ([]models.ParentTaskLog , error )
10+ CreateParentTaskLog (url string ) (models.ParentTaskLog , error )
11+ CreateChildTaskLog (parent models.ParentTaskLog ) (models.ChildTaskLog , error )
12+ UpdateChildTaskLogStatus (child models.ChildTaskLog ) error
13+ ChildTaskLogDone (child models.ChildTaskLog ) error
14+ ChildTaskLogError (child models.ChildTaskLog ) error
1715}
1816
1917type TasklogTable struct {
@@ -25,59 +23,57 @@ func NewTasklogTableInstance() *TasklogTable {
2523 BaseTable : NewBaseTableInstance (),
2624 }
2725}
28-
29- func (table * TasklogTable ) InsertTaskLog () (lastInsertedId int , error error ) {
30- query := `INSERT INTO TaskLog (Status) VALUES($1) RETURNING Id`
31-
32- lastInsertedId , err := table .InsertWithReturningId (query , int (models .Pending ))
33-
34- return lastInsertedId , err
26+ func (table * TasklogTable ) GetParentChildLogs (ctx context.Context ) ([]models.ParentTaskLog , error ) {
27+ return make ([]models.ParentTaskLog , 0 ), nil
3528}
29+ func (table * TasklogTable ) CreateParentTaskLog (url string ) (models.ParentTaskLog , error ) {
30+ query := "INSERT INTO ParentTaskLog (Url) Values($1) RETURNING Id"
3631
37- func (table * TasklogTable ) UpdateTaskLogStatus (taskId int , nStatus int ) (error error ) {
38- query := `UPDATE TaskLog SET Status = $1 WHERE Id = $2`
39-
40- return table .NonScalarQuery (query , nStatus , taskId )
41- }
32+ id , err := table .InsertWithReturningId (query , url )
4233
43- func (table * TasklogTable ) EndTaskLog (taskId int , nStatus int , data []byte ) error {
44- query := `UPDATE TaskLog SET Status = $1, OutputLog = $2, EndTime = $3 WHERE Id = $4`
45-
46- return table .NonScalarQuery (query , nStatus , data , time .Now (), taskId )
47- }
34+ if err != nil {
35+ return models.ParentTaskLog {}, err
36+ }
4837
49- func (table * TasklogTable ) UpdateTaskLogError (params ... any ) error {
50- query := `UPDATE TaskLog
51- SET Status = $1, OutputLog = $2, EndTime = $3
52- WHERE Id = $4`
53- return table .NonScalarQuery (query , params ... )
38+ return models.ParentTaskLog {
39+ Id : id ,
40+ Url : url ,
41+ }, nil
5442}
43+ func (table * TasklogTable ) CreateChildTaskLog (parent models.ParentTaskLog ) (models.ChildTaskLog , error ) {
44+ query := "INSERT INTO ChildTaskLog (ParentId, Status) VALUES($1,$2) RETURNING Id"
5545
56- func (table * TasklogTable ) GetTaskLogs (ctx context.Context ) ([]models.TaskLog , error ) {
57- query := `SELECT Id, StartTime, EndTime, Status, OutputLog FROM TaskLog ORDER BY Id desc` // get the latest first
46+ defaultStatus := int (models .Pending )
5847
59- rows , err := table .QueryRowsContex ( ctx , query )
48+ id , err := table .InsertWithReturningId ( query , parent . Id , defaultStatus )
6049
6150 if err != nil {
62- logging .Error (fmt .Sprintf ("QueryRow error: %s" , err .Error ()))
63- return nil , err
51+ return models.ChildTaskLog {}, err
6452 }
65- defer rows .Close ()
6653
67- var tasklog models.TaskLog
68-
69- tasks := make ([]models.TaskLog , 0 )
70-
71- for rows .Next () {
72- scanError := rows .Scan (& tasklog .Id , & tasklog .StartTime , & tasklog .EndTime , & tasklog .Status , & tasklog .OutputLog )
73-
74- if scanError != nil {
75- logging .Error (fmt .Sprintf ("Scan error: %s" , scanError .Error ()))
76- continue
77- }
78-
79- tasks = append (tasks , tasklog )
54+ return models.ChildTaskLog {
55+ Id : id ,
56+ ParentId : parent .Id ,
57+ Status : defaultStatus ,
58+ }, nil
59+ }
60+ func (table * TasklogTable ) UpdateChildTaskLogStatus (child models.ChildTaskLog ) error {
61+
62+ if child .Status == int (models .Downloading ) {
63+ // set the start time to now
64+ query := "UPDATE ChildTaskLog SET StartTime = CURRENT_TIMESTAMP, Status = $1 WHERE Id = $2"
65+ return table .NonScalarQuery (query , child .Status , child .Id )
66+ } else {
67+ // just update
68+ query := "UPDATE ChildTaskLog SET Status = $1 WHERE Id = $2"
69+ return table .NonScalarQuery (query , child .Status , child .Id )
8070 }
81-
82- return tasks , nil
71+ }
72+ func (table * TasklogTable ) ChildTaskLogDone (child models.ChildTaskLog ) error {
73+ query := "UPDATE ChildTaskLog SET Status = $1, OutputLog = $2, EndTime = CURRENT_TIMESTAMP WHERE Id = $3"
74+ return table .NonScalarQuery (query , int (models .Done ), child .OutputLog , child .Id )
75+ }
76+ func (table * TasklogTable ) ChildTaskLogError (child models.ChildTaskLog ) error {
77+ query := "UPDATE ChildTaskLog SET Status = $1, OutputLog = $2, EndTime = CURRENT_TIMESTAMP WHERE Id = $3"
78+ return table .NonScalarQuery (query , int (models .Error ), child .OutputLog , child .Id )
8379}
0 commit comments