aboutsummaryrefslogtreecommitdiff
path: root/repositories/tasks.go
blob: 4df5aadd0b262a449fdb8d1930ad562d3b92c6b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package repositories

import (
	"errors"
	"metachan/entities"
	"metachan/utils/logger"

	"gorm.io/gorm/clause"
)

func GetTaskStatus(taskName string) (entities.TaskStatus, error) {
	var taskStatus entities.TaskStatus

	result := DB.Where("task_name = ?", taskName).First(&taskStatus)

	if result.Error != nil {
		return entities.TaskStatus{}, errors.New("task status not found")
	}

	return taskStatus, nil
}

func SetTaskStatus(task *entities.TaskStatus) error {
	result := DB.Clauses(clause.OnConflict{
		Columns:   []clause.Column{{Name: "task_name"}},
		DoUpdates: clause.AssignmentColumns([]string{"is_completed", "last_run_at", "updated_at"}),
	}).Create(task)

	if result.Error != nil {
		logger.Errorf("Task", "Failed to set task status for %s: %v", task.TaskName, result.Error)

		return errors.New("failed to set task status")
	}

	return nil
}

func GetLatestTaskLog(taskName string) (*entities.TaskLog, error) {
	var taskLog entities.TaskLog

	result := DB.Where("task_name = ?", taskName).Order("executed_at desc").First(&taskLog)
	if result.Error != nil {
		return nil, result.Error
	}

	return &taskLog, nil
}

func CreateTaskLog(taskLog *entities.TaskLog) error {
	result := DB.Create(taskLog)
	if result.Error != nil {
		logger.Errorf("Task", "Failed to create task log: %v", result.Error)
		return errors.New("failed to create task log")
	}

	return nil
}

// -- Moved to database/tasks.go --
// import (
// 	"metachan/entities"
// 	"time"
// )

// // MarkTaskComplete marks a task as completed and updates its last run time
// func MarkTaskComplete(taskName string) error {
// 	var taskStatus entities.TaskStatus

// 	result := DB.Where("task_name = ?", taskName).First(&taskStatus)
// 	if result.Error != nil {
// 		// Create new task status if it doesn't exist
// 		taskStatus = entities.TaskStatus{
// 			TaskName:    taskName,
// 			IsCompleted: true,
// 			LastRunAt:   time.Now(),
// 		}
// 		return DB.Create(&taskStatus).Error
// 	}

// 	// Update existing task status
// 	taskStatus.IsCompleted = true
// 	taskStatus.LastRunAt = time.Now()
// 	return DB.Save(&taskStatus).Error
// }

// // IsTaskComplete checks if a task has been completed
// func IsTaskComplete(taskName string) bool {
// 	var taskStatus entities.TaskStatus
// 	result := DB.Where("task_name = ? AND is_completed = ?", taskName, true).First(&taskStatus)
// 	return result.Error == nil
// }

// // GetTaskLastRun returns the last run time for a task
// func GetTaskLastRun(taskName string) *time.Time {
// 	var taskStatus entities.TaskStatus
// 	result := DB.Where("task_name = ?", taskName).First(&taskStatus)
// 	if result.Error != nil {
// 		return nil
// 	}
// 	return &taskStatus.LastRunAt
// }

// // ResetTaskStatus resets a task's completion status (useful for periodic tasks)
// func ResetTaskStatus(taskName string) error {
// 	return DB.Model(&entities.TaskStatus{}).
// 		Where("task_name = ?", taskName).
// 		Update("is_completed", false).Error
// }