Add meetings, sprints, and approval decision notes
Migration 042 creates meetings and sprints tables, adds decision_notes to approvals. Full-stack: MeetingService, SprintService, IPC channels, preload bridge, domain types. UI: MeetingsPage with scheduling and type filtering, SprintsPage with progress tracking, ApprovalDetailDialog with decision notes textarea.
This commit is contained in:
1 parent
75e5d17a86
commit
ed9b3a3dd1
18 files changed
+430
-12
No files matched your search
@@ -143,6 +143,7 @@ export interface DecideApprovalInput {
|
||||
approvalId: string;
|
||||
state: Extract<ApprovalState, "approved" | "declined">;
|
||||
decidedByEmployeeId: string;
|
||||
notes?: string;
|
||||
}
|
||||
|
||||
export interface SyncEmployeeIdentityInput {
|
||||
@@ -554,6 +555,33 @@ export interface DeleteAutomationRuleInput {
|
||||
ruleId: string;
|
||||
}
|
||||
|
||||
export interface CreateMeetingInput {
|
||||
orgId: string;
|
||||
title: string;
|
||||
meetingType: string;
|
||||
scheduledAt: string | null;
|
||||
durationMinutes: number;
|
||||
agenda: string;
|
||||
}
|
||||
|
||||
export interface DeleteMeetingInput {
|
||||
orgId: string;
|
||||
meetingId: string;
|
||||
}
|
||||
|
||||
export interface CreateSprintInput {
|
||||
orgId: string;
|
||||
name: string;
|
||||
goal: string;
|
||||
startDate: string;
|
||||
endDate: string;
|
||||
}
|
||||
|
||||
export interface DeleteSprintInput {
|
||||
orgId: string;
|
||||
sprintId: string;
|
||||
}
|
||||
|
||||
export interface NativeDialogResult {
|
||||
canceled: boolean;
|
||||
filePaths: string[];
|
||||
|
||||
@@ -12,6 +12,10 @@ import type {
|
||||
CreateAutomationRuleInput,
|
||||
CreateDocumentInput,
|
||||
CreateGoalInput,
|
||||
CreateMeetingInput,
|
||||
CreateSprintInput,
|
||||
DeleteMeetingInput,
|
||||
DeleteSprintInput,
|
||||
CreateKnowledgeEntryInput,
|
||||
CreateProjectInput,
|
||||
CreateWorkspaceInput,
|
||||
@@ -116,6 +120,10 @@ export interface DesktopApi {
|
||||
createAutomationRule(input: CreateAutomationRuleInput): Promise<DesktopResult<AppSnapshot>>;
|
||||
updateAutomationRule(input: UpdateAutomationRuleInput): Promise<DesktopResult<AppSnapshot>>;
|
||||
deleteAutomationRule(input: DeleteAutomationRuleInput): Promise<DesktopResult<AppSnapshot>>;
|
||||
createMeeting(input: CreateMeetingInput): Promise<DesktopResult<AppSnapshot>>;
|
||||
deleteMeeting(input: DeleteMeetingInput): Promise<DesktopResult<AppSnapshot>>;
|
||||
createSprint(input: CreateSprintInput): Promise<DesktopResult<AppSnapshot>>;
|
||||
deleteSprint(input: DeleteSprintInput): Promise<DesktopResult<AppSnapshot>>;
|
||||
createApproval(input: CreateApprovalInput): Promise<DesktopResult<AppSnapshot>>;
|
||||
decideApproval(input: DecideApprovalInput): Promise<DesktopResult<AppSnapshot>>;
|
||||
syncEmployeeIdentity(input: SyncEmployeeIdentityInput): Promise<DesktopResult<AppSnapshot>>;
|
||||
|
||||
@@ -178,11 +178,42 @@ export interface ApprovalRecord {
|
||||
sourceEntityType: string | null;
|
||||
sourceEntityId: string | null;
|
||||
state: ApprovalState;
|
||||
decisionNotes: string | null;
|
||||
decidedByEmployeeId: string | null;
|
||||
createdAt: string;
|
||||
decidedAt: string | null;
|
||||
}
|
||||
|
||||
export interface MeetingRecord {
|
||||
id: string;
|
||||
orgId: string;
|
||||
title: string;
|
||||
meetingType: string;
|
||||
status: string;
|
||||
scheduledAt: string | null;
|
||||
durationMinutes: number;
|
||||
agenda: string;
|
||||
notes: string;
|
||||
decisions: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface SprintRecord {
|
||||
id: string;
|
||||
orgId: string;
|
||||
name: string;
|
||||
goal: string;
|
||||
status: string;
|
||||
startDate: string;
|
||||
endDate: string;
|
||||
velocityPoints: number;
|
||||
completedPoints: number;
|
||||
retrospective: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export type {
|
||||
ChatSpaceRecord,
|
||||
ChatMessageRecord,
|
||||
@@ -488,4 +519,6 @@ export interface AppSnapshot {
|
||||
documents: DocumentRecord[];
|
||||
knowledgeEntries: KnowledgeEntryRecord[];
|
||||
automationRules: AutomationRuleRecord[];
|
||||
meetings: MeetingRecord[];
|
||||
sprints: SprintRecord[];
|
||||
}
|
||||
@@ -70,6 +70,10 @@ export const IPC_CHANNELS = {
|
||||
createAutomationRule: "agentcompany:create-automation-rule",
|
||||
updateAutomationRule: "agentcompany:update-automation-rule",
|
||||
deleteAutomationRule: "agentcompany:delete-automation-rule",
|
||||
createMeeting: "agentcompany:create-meeting",
|
||||
deleteMeeting: "agentcompany:delete-meeting",
|
||||
createSprint: "agentcompany:create-sprint",
|
||||
deleteSprint: "agentcompany:delete-sprint",
|
||||
search: "agentcompany:search",
|
||||
rendererEvent: "agentcompany:renderer-event",
|
||||
windowMinimize: "agentcompany:window-minimize",
|
||||
|
||||
Reference in new issue
Block a user