48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { Area } from './Area';
|
|
import { Tag } from './Tag';
|
|
import { PriorityType, Task } from './Task';
|
|
import { Note } from './Note';
|
|
|
|
export type ProjectStatus =
|
|
| 'not_started'
|
|
| 'planned'
|
|
| 'in_progress'
|
|
| 'waiting'
|
|
| 'done'
|
|
| 'cancelled';
|
|
|
|
export interface ProjectTaskStatus {
|
|
total: number;
|
|
done: number;
|
|
in_progress: number;
|
|
not_started: number;
|
|
}
|
|
|
|
export interface Project {
|
|
id?: number;
|
|
uid?: string;
|
|
name: string;
|
|
description?: string;
|
|
pin_to_sidebar?: boolean;
|
|
area?: Area;
|
|
area_id?: number | null;
|
|
area_uid?: string | null;
|
|
tags?: Tag[];
|
|
priority?: PriorityType;
|
|
tasks?: Task[];
|
|
Tasks?: Task[]; // Sequelize association naming (capitalized)
|
|
notes?: Note[];
|
|
Notes?: Note[]; // Sequelize association naming (capitalized)
|
|
due_date_at?: string | null;
|
|
image_url?: string;
|
|
task_show_completed?: boolean;
|
|
task_sort_order?: string;
|
|
status?: ProjectStatus;
|
|
created_at?: string;
|
|
updated_at?: string;
|
|
share_count?: number;
|
|
is_shared?: boolean;
|
|
task_status?: ProjectTaskStatus;
|
|
completion_percentage?: number;
|
|
is_stalled?: boolean;
|
|
}
|