120 lines
2.4 KiB
Go
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
|
|
}
|
|
}
|