xtablo-source/deprecated/internal/tasks/model.go
Arthur Belleville 5d0c201e86
Some checks failed
backend-ci / Backend tests (pull_request) Failing after 53s
backend-ci / Backend tests (push) Failing after 1s
Some work
2026-05-23 17:26:01 +02:00

120 lines
2.4 KiB
Go

package tasks
import (
"errors"
"strings"
"time"
"github.com/google/uuid"
)
var ErrNotFound = errors.New("task not found")
var ErrInvalidParent = errors.New("invalid parent task")
var ErrInvalidAssignee = errors.New("invalid assignee")
var ErrInvalidStatus = errors.New("invalid task status")
type Status string
const (
StatusTodo Status = "todo"
StatusInProgress Status = "in_progress"
StatusInReview Status = "in_review"
StatusDone Status = "done"
)
type Record struct {
ID uuid.UUID
OwnerID uuid.UUID
TabloID uuid.UUID
Title string
Description string
Status Status
AssigneeID *uuid.UUID
IsEtape bool
ParentTaskID *uuid.UUID
DueDate *time.Time
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
}
type CreateInput struct {
OwnerID uuid.UUID
TabloID uuid.UUID
Title string
Description string
Status Status
AssigneeID *uuid.UUID
IsEtape bool
ParentTaskID *uuid.UUID
DueDate *time.Time
}
type UpdateInput struct {
ID uuid.UUID
OwnerID uuid.UUID
TabloID uuid.UUID
Title string
Description string
Status Status
AssigneeID *uuid.UUID
ParentTaskID *uuid.UUID
DueDate *time.Time
}
type ListByTabloInput struct {
OwnerID uuid.UUID
TabloID uuid.UUID
}
type TaskView string
const (
TaskViewKanban TaskView = "kanban"
TaskViewList TaskView = "list"
TaskViewRoadmap TaskView = "roadmap"
)
type TaskRoadmapMode string
const (
TaskRoadmapModeWeek TaskRoadmapMode = "week"
TaskRoadmapModeMonth TaskRoadmapMode = "month"
)
type TaskPageState struct {
View TaskView
RoadmapMode TaskRoadmapMode
TabloIDs []uuid.UUID
AssigneeIDs []uuid.UUID
Statuses []Status
}
func ParseStatus(raw string) (Status, error) {
switch Status(strings.TrimSpace(raw)) {
case StatusTodo, StatusInProgress, StatusInReview, StatusDone:
return Status(strings.TrimSpace(raw)), nil
default:
return "", ErrInvalidStatus
}
}
func NormalizeTaskView(raw string) TaskView {
switch TaskView(strings.TrimSpace(raw)) {
case TaskViewList:
return TaskViewList
case TaskViewRoadmap:
return TaskViewRoadmap
default:
return TaskViewKanban
}
}
func NormalizeTaskRoadmapMode(raw string) TaskRoadmapMode {
switch TaskRoadmapMode(strings.TrimSpace(raw)) {
case TaskRoadmapModeMonth:
return TaskRoadmapModeMonth
default:
return TaskRoadmapModeWeek
}
}