@@ -2,18 +2,18 @@ package database
22
33import (
44 "context"
5- "fmt"
65 "musicboxapi/logging"
76 "musicboxapi/models"
8- "time"
97)
108
119type 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 )
10+ GetParentLogs (ctx context.Context ) ([]models.ParentTaskLog , error )
11+ GetChildLogs (ctx context.Context , parentId int ) ([]models.ChildTaskLog , error )
12+ CreateParentTaskLog (url string ) (models.ParentTaskLog , error )
13+ CreateChildTaskLog (parent models.ParentTaskLog ) (models.ChildTaskLog , error )
14+ UpdateChildTaskLogStatus (child models.ChildTaskLog ) error
15+ ChildTaskLogDone (child models.ChildTaskLog ) error
16+ ChildTaskLogError (child models.ChildTaskLog ) error
1717}
1818
1919type TasklogTable struct {
@@ -25,59 +25,108 @@ func NewTasklogTableInstance() *TasklogTable {
2525 BaseTable : NewBaseTableInstance (),
2626 }
2727}
28+ func (table * TasklogTable ) GetParentLogs (ctx context.Context ) ([]models.ParentTaskLog , error ) {
29+ query := "SELECT * FROM ParentTaskLog ORDER BY AddTime desc"
2830
29- func (table * TasklogTable ) InsertTaskLog () (lastInsertedId int , error error ) {
30- query := `INSERT INTO TaskLog (Status) VALUES($1) RETURNING Id`
31+ rows , err := table .QueryRowsContex (ctx , query )
3132
32- lastInsertedId , err := table .InsertWithReturningId (query , int (models .Pending ))
33+ if err != nil {
34+ return make ([]models.ParentTaskLog , 0 ), nil
35+ }
3336
34- return lastInsertedId , err
35- }
37+ defer rows .Close ()
3638
37- func ( table * TasklogTable ) UpdateTaskLogStatus ( taskId int , nStatus int ) ( error error ) {
38- query := `UPDATE TaskLog SET Status = $1 WHERE Id = $2`
39+ var parentLog models. ParentTaskLog
40+ logs := make ([]models. ParentTaskLog , 0 )
3941
40- return table . NonScalarQuery ( query , nStatus , taskId )
41- }
42+ for rows . Next () {
43+ err := rows . Scan ( & parentLog . Id , & parentLog . Url , & parentLog . AddTime )
4244
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+ if err != nil {
46+ logging .ErrorStackTrace (err )
47+ continue
48+ }
4549
46- return table . NonScalarQuery ( query , nStatus , data , time . Now (), taskId )
47- }
50+ logs = append ( logs , parentLog )
51+ }
4852
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 ... )
53+ return logs , nil
5454}
55+ func (table * TasklogTable ) GetChildLogs (ctx context.Context , parentId int ) ([]models.ChildTaskLog , error ) {
56+ query := "SELECT * FROM ChildTaskLog WHERE ParentId = $1 ORDER BY StartTime desc"
5557
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
58-
59- rows , err := table .QueryRowsContex (ctx , query )
58+ rows , err := table .QueryRowsContex (ctx , query , parentId )
6059
6160 if err != nil {
62- logging .Error (fmt .Sprintf ("QueryRow error: %s" , err .Error ()))
63- return nil , err
61+ return make ([]models.ChildTaskLog , 0 ), nil
6462 }
65- defer rows .Close ()
6663
67- var tasklog models. TaskLog
64+ defer rows . Close ()
6865
69- tasks := make ([]models.TaskLog , 0 )
66+ var childLog models.ChildTaskLog
67+ logs := make ([]models.ChildTaskLog , 0 )
7068
7169 for rows .Next () {
72- scanError := rows .Scan (& tasklog .Id , & tasklog . StartTime , & tasklog .EndTime , & tasklog .Status , & tasklog .OutputLog )
70+ err := rows .Scan (& childLog .Id , & childLog . ParentId , & childLog . StartTime , & childLog .EndTime , & childLog .Status , & childLog .OutputLog )
7371
74- if scanError != nil {
75- logging .Error ( fmt . Sprintf ( "Scan error: %s" , scanError . Error ()) )
72+ if err != nil {
73+ logging .ErrorStackTrace ( err )
7674 continue
7775 }
7876
79- tasks = append (tasks , tasklog )
77+ logs = append (logs , childLog )
78+ }
79+
80+ return logs , nil
81+ }
82+ func (table * TasklogTable ) CreateParentTaskLog (url string ) (models.ParentTaskLog , error ) {
83+ query := "INSERT INTO ParentTaskLog (Url) Values($1) RETURNING Id"
84+
85+ id , err := table .InsertWithReturningId (query , url )
86+
87+ if err != nil {
88+ return models.ParentTaskLog {}, err
89+ }
90+
91+ return models.ParentTaskLog {
92+ Id : id ,
93+ Url : url ,
94+ }, nil
95+ }
96+ func (table * TasklogTable ) CreateChildTaskLog (parent models.ParentTaskLog ) (models.ChildTaskLog , error ) {
97+ query := "INSERT INTO ChildTaskLog (ParentId, Status) VALUES($1,$2) RETURNING Id"
98+
99+ defaultStatus := int (models .Pending )
100+
101+ id , err := table .InsertWithReturningId (query , parent .Id , defaultStatus )
102+
103+ if err != nil {
104+ return models.ChildTaskLog {}, err
80105 }
81106
82- return tasks , nil
107+ return models.ChildTaskLog {
108+ Id : id ,
109+ ParentId : parent .Id ,
110+ Status : defaultStatus ,
111+ }, nil
112+ }
113+ func (table * TasklogTable ) UpdateChildTaskLogStatus (child models.ChildTaskLog ) error {
114+
115+ if child .Status == int (models .Downloading ) {
116+ // set the start time to now
117+ query := "UPDATE ChildTaskLog SET StartTime = CURRENT_TIMESTAMP, Status = $1 WHERE Id = $2"
118+ return table .NonScalarQuery (query , child .Status , child .Id )
119+ } else {
120+ // just update
121+ query := "UPDATE ChildTaskLog SET Status = $1 WHERE Id = $2"
122+ return table .NonScalarQuery (query , child .Status , child .Id )
123+ }
124+ }
125+ func (table * TasklogTable ) ChildTaskLogDone (child models.ChildTaskLog ) error {
126+ query := "UPDATE ChildTaskLog SET Status = $1, OutputLog = $2, EndTime = CURRENT_TIMESTAMP WHERE Id = $3"
127+ return table .NonScalarQuery (query , int (models .Done ), child .OutputLog , child .Id )
128+ }
129+ func (table * TasklogTable ) ChildTaskLogError (child models.ChildTaskLog ) error {
130+ query := "UPDATE ChildTaskLog SET Status = $1, OutputLog = $2, EndTime = CURRENT_TIMESTAMP WHERE Id = $3"
131+ return table .NonScalarQuery (query , int (models .Error ), child .OutputLog , child .Id )
83132}
0 commit comments