save current changes

This commit is contained in:
2026-06-24 23:53:30 +02:00
parent cfcc91a670
commit a9aef7e484
6 changed files with 728 additions and 0 deletions

241
lib/types/index.ts Normal file
View File

@ -0,0 +1,241 @@
/**
* 全Entity型定義・共有型
* functional-design.md のデータモデルに対応。
* タイムスタンプはISO8601文字列(TEXT)。真偽値はINTEGER(0/1)。
*/
// ===== 列挙型 =====
export type UserRole = 'system_admin' | 'project_admin' | 'member' | 'guest';
export type UserStatus = 'active' | 'inactive';
export type ProjectStatus = 'active' | 'on_hold' | 'completed' | 'archived';
export type ProjectMemberRole = 'admin' | 'member' | 'guest';
export type BoardCategory =
| 'notice'
| 'spec'
| 'minutes'
| 'question'
| 'decision'
| 'trouble'
| 'memo';
export type TodoPriority = 'low' | 'normal' | 'high';
export type MilestoneStatus = 'open' | 'closed';
export type CalendarEventType =
| 'meeting'
| 'deadline'
| 'milestone'
| 'todo'
| 'reminder'
| 'custom';
export type MeetingMemberStatus = 'invited' | 'accepted' | 'declined';
export type NotificationType =
| 'mention'
| 'todo_assigned'
| 'todo_due_soon'
| 'meeting_invited'
| 'board_commented'
| 'project_added'
| 'file_shared'
| 'note_updated';
// ===== エンティティ =====
export interface User {
id: number;
name: string;
email: string;
passwordHash: string | null;
avatarUrl: string | null;
role: UserRole;
status: UserStatus;
createdAt: string;
updatedAt: string;
}
export interface Project {
id: number;
name: string;
description: string | null;
status: ProjectStatus;
ownerId: number;
createdAt: string;
updatedAt: string;
}
export interface ProjectMember {
id: number;
projectId: number;
userId: number;
role: ProjectMemberRole;
joinedAt: string;
}
export interface BoardThread {
id: number;
projectId: number;
title: string;
bodyMd: string;
authorId: number;
category: BoardCategory | null;
isPinned: number;
isImportant: number;
createdAt: string;
updatedAt: string;
deletedAt: string | null;
}
export interface BoardComment {
id: number;
threadId: number;
authorId: number;
bodyMd: string;
createdAt: string;
updatedAt: string;
deletedAt: string | null;
}
export interface ChatMessage {
id: number;
projectId: number;
authorId: number;
body: string;
createdAt: string;
updatedAt: string;
deletedAt: string | null;
}
export interface TodoColumn {
id: number;
projectId: number;
name: string;
orderIndex: number;
createdAt: string;
updatedAt: string;
}
export interface TodoItem {
id: number;
projectId: number;
columnId: number;
title: string;
description: string | null;
assigneeId: number | null;
creatorId: number;
priority: TodoPriority;
startDate: string | null;
dueDate: string | null;
completedAt: string | null;
orderIndex: number;
milestoneId: number | null;
createdAt: string;
updatedAt: string;
deletedAt: string | null;
}
export interface FileAsset {
id: number;
projectId: number;
uploaderId: number;
filename: string;
originalName: string;
mimeType: string;
size: number;
path: string;
createdAt: string;
deletedAt: string | null;
}
export interface ProjectNote {
id: number;
projectId: number;
title: string;
bodyMd: string;
tags: string | null;
isPinned: number;
createdById: number;
updatedById: number;
createdAt: string;
updatedAt: string;
deletedAt: string | null;
}
export interface Milestone {
id: number;
projectId: number;
title: string;
description: string | null;
dueDate: string | null;
status: MilestoneStatus;
createdAt: string;
updatedAt: string;
deletedAt: string | null;
}
export interface CalendarEvent {
id: number;
projectId: number;
title: string;
description: string | null;
type: CalendarEventType;
startAt: string;
endAt: string | null;
createdById: number;
relatedTodoId: number | null;
relatedMilestoneId: number | null;
relatedMeetingId: number | null;
createdAt: string;
updatedAt: string;
deletedAt: string | null;
}
export interface Meeting {
id: number;
projectId: number;
title: string;
description: string | null;
location: string | null;
meetingUrl: string | null;
startAt: string;
endAt: string;
agendaMd: string | null;
minutesMd: string | null;
createdById: number;
createdAt: string;
updatedAt: string;
deletedAt: string | null;
}
export interface MeetingMember {
id: number;
meetingId: number;
userId: number;
status: MeetingMemberStatus;
}
export interface Notification {
id: number;
userId: number;
projectId: number | null;
type: NotificationType;
title: string;
body: string | null;
readAt: string | null;
createdAt: string;
}
export interface ActivityLog {
id: number;
projectId: number;
actorId: number;
action: string;
targetType: string;
targetId: number | null;
metadataJson: string | null;
createdAt: string;
}
export interface SchemaMigration {
id: number;
filename: string;
appliedAt: string;
}