Files
receipt-wrangler-api/internal/models/system_task.go
2025-02-17 13:36:05 +00:00

109 lines
3.8 KiB
Go

package models
import (
"database/sql/driver"
"errors"
"time"
)
type SystemTask struct {
BaseModel
Type SystemTaskType `json:"type"`
Status SystemTaskStatus `json:"status"`
AssociatedEntityType AssociatedEntityType `json:"associatedEntityType"`
AssociatedEntityId uint `json:"associatedEntityId"`
StartedAt time.Time `json:"startedAt"`
EndedAt *time.Time `json:"endedAt"`
ResultDescription string `json:"resultDescription"`
RanByUserId *uint `json:"ranByUserId"`
ReceiptId *uint `json:"receiptId"`
GroupId *uint `json:"groupId"`
AssociatedSystemTask *SystemTask `json:"associatedSystemTask"`
AssociatedSystemTaskId *uint `json:"associatedSystemTaskId"`
ChildSystemTasks []*SystemTask `gorm:"foreignKey:AssociatedSystemTaskId" json:"childSystemTasks"`
AsynqTaskId string `json:"asynqTaskId"`
}
type SystemTaskStatus string
const (
SYSTEM_TASK_SUCCEEDED SystemTaskStatus = "SUCCEEDED"
SYSTEM_TASK_FAILED SystemTaskStatus = "FAILED"
)
func (self *SystemTaskStatus) Scan(value string) error {
*self = SystemTaskStatus(value)
return nil
}
func (self SystemTaskStatus) Value() (driver.Value, error) {
if self != SYSTEM_TASK_SUCCEEDED && self != SYSTEM_TASK_FAILED {
return nil, errors.New("invalid SystemTaskStatus")
}
return string(self), nil
}
type SystemTaskType string
const (
RECEIPT_UPLOADED SystemTaskType = "RECEIPT_UPLOADED"
OCR_PROCESSING SystemTaskType = "OCR_PROCESSING"
CHAT_COMPLETION SystemTaskType = "CHAT_COMPLETION"
MAGIC_FILL SystemTaskType = "MAGIC_FILL"
QUICK_SCAN SystemTaskType = "QUICK_SCAN"
EMAIL_UPLOAD SystemTaskType = "EMAIL_UPLOAD"
EMAIL_READ SystemTaskType = "EMAIL_READ"
SYSTEM_EMAIL_CONNECTIVITY_CHECK SystemTaskType = "SYSTEM_EMAIL_CONNECTIVITY_CHECK"
RECEIPT_PROCESSING_SETTINGS_CONNECTIVITY_CHECK SystemTaskType = "RECEIPT_PROCESSING_SETTINGS_CONNECTIVITY_CHECK"
PROMPT_GENERATED SystemTaskType = "PROMPT_GENERATED"
RECEIPT_UPDATED SystemTaskType = "RECEIPT_UPDATED"
)
func (self *SystemTaskType) Scan(value string) error {
*self = SystemTaskType(value)
return nil
}
func (self SystemTaskType) Value() (driver.Value, error) {
if self != SYSTEM_EMAIL_CONNECTIVITY_CHECK &&
self != RECEIPT_PROCESSING_SETTINGS_CONNECTIVITY_CHECK &&
self != QUICK_SCAN &&
self != MAGIC_FILL &&
self != EMAIL_UPLOAD &&
self != EMAIL_READ &&
self != CHAT_COMPLETION &&
self != OCR_PROCESSING &&
self != RECEIPT_UPLOADED &&
self != PROMPT_GENERATED &&
self != RECEIPT_UPDATED {
return nil, errors.New("invalid SystemTaskType")
}
return string(self), nil
}
type AssociatedEntityType string
const (
RECEIPT AssociatedEntityType = "RECEIPT"
SYSTEM_EMAIL AssociatedEntityType = "SYSTEM_EMAIL"
PROMPT AssociatedEntityType = "PROMPT"
RECEIPT_PROCESSING_SETTINGS AssociatedEntityType = "RECEIPT_PROCESSING_SETTINGS"
NOOP_ENTITY_TYPE AssociatedEntityType = "NOOP_ENTITY_TYPE"
)
func (self *AssociatedEntityType) Scan(value string) error {
*self = AssociatedEntityType(value)
return nil
}
func (self AssociatedEntityType) Value() (driver.Value, error) {
if self != SYSTEM_EMAIL &&
self != NOOP_ENTITY_TYPE &&
self != RECEIPT_PROCESSING_SETTINGS &&
self != RECEIPT &&
self != PROMPT {
return nil, errors.New("invalid AssociatedEntityType")
}
return string(self), nil
}