// Code generated by sqlc. DO NOT EDIT.
// versions:
//   sqlc v1.14.0

package db

import (
	"database/sql"
	"time"

	"github.com/google/uuid"
)

type Task struct {
	WorkflowID       uuid.UUID
	Name             string
	Finished         bool
	Result           sql.NullString
	Error            sql.NullString
	CreatedAt        time.Time
	UpdatedAt        time.Time
	ApprovedAt       sql.NullTime
	ReadyForApproval bool
	Started          bool
	RetryCount       int32
}

type TaskLog struct {
	ID         int32
	WorkflowID uuid.UUID
	TaskName   string
	Body       string
	CreatedAt  time.Time
	UpdatedAt  time.Time
}

type Workflow struct {
	ID        uuid.UUID
	Params    sql.NullString
	Name      sql.NullString
	CreatedAt time.Time
	UpdatedAt time.Time
	Finished  bool
	Output    string
	Error     string
}
