Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
203 lines
8.4 KiB
TypeScript
203 lines
8.4 KiB
TypeScript
import { z } from 'zod';
|
|
import { BaseDomainEventPayloadSchema, changesSchema, updatedFieldsSchema, uuidSchema } from './commonEventPayloadSchemas';
|
|
|
|
const projectIdSchema = uuidSchema('Project ID');
|
|
const taskIdSchema = uuidSchema('Task ID');
|
|
const userIdSchema = uuidSchema('User ID');
|
|
const taskCommentIdSchema = uuidSchema('Task Comment ID');
|
|
|
|
const assignedToTypeSchema = z.enum(['user', 'team']).describe('Assignee type');
|
|
|
|
export const projectCreatedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
projectId: projectIdSchema,
|
|
createdByUserId: userIdSchema.optional(),
|
|
createdAt: z.string().datetime().optional(),
|
|
}).describe('Payload for PROJECT_CREATED');
|
|
|
|
export type ProjectCreatedEventPayload = z.infer<typeof projectCreatedEventPayloadSchema>;
|
|
|
|
export const projectUpdatedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
projectId: projectIdSchema,
|
|
updatedAt: z.string().datetime().optional(),
|
|
updatedFields: updatedFieldsSchema,
|
|
changes: changesSchema,
|
|
}).describe('Payload for PROJECT_UPDATED');
|
|
|
|
export type ProjectUpdatedEventPayload = z.infer<typeof projectUpdatedEventPayloadSchema>;
|
|
|
|
export const projectStatusChangedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
projectId: projectIdSchema,
|
|
previousStatus: z.string().min(1),
|
|
newStatus: z.string().min(1),
|
|
changedAt: z.string().datetime().optional(),
|
|
}).describe('Payload for PROJECT_STATUS_CHANGED');
|
|
|
|
export type ProjectStatusChangedEventPayload = z.infer<typeof projectStatusChangedEventPayloadSchema>;
|
|
|
|
export const projectTaskCreatedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
taskId: taskIdSchema,
|
|
projectId: projectIdSchema,
|
|
createdByUserId: userIdSchema.optional(),
|
|
createdAt: z.string().datetime().optional(),
|
|
title: z.string().min(1),
|
|
dueDate: z.string().optional(),
|
|
status: z.string().min(1),
|
|
}).describe('Payload for PROJECT_TASK_CREATED');
|
|
|
|
export type ProjectTaskCreatedEventPayload = z.infer<typeof projectTaskCreatedEventPayloadSchema>;
|
|
|
|
export const projectTaskUpdatedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
taskId: taskIdSchema,
|
|
projectId: projectIdSchema,
|
|
updatedAt: z.string().datetime().optional(),
|
|
updatedFields: updatedFieldsSchema,
|
|
changes: changesSchema,
|
|
}).describe('Payload for PROJECT_TASK_UPDATED');
|
|
|
|
export type ProjectTaskUpdatedEventPayload = z.infer<typeof projectTaskUpdatedEventPayloadSchema>;
|
|
|
|
export const projectTaskAssignedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
taskId: taskIdSchema,
|
|
projectId: projectIdSchema,
|
|
assignedToId: z.string().uuid(),
|
|
assignedToType: assignedToTypeSchema,
|
|
assignedByUserId: userIdSchema.optional(),
|
|
assignedByName: z.string().optional().describe('Display name of the user who assigned the task'),
|
|
assignedAt: z.string().datetime().optional(),
|
|
}).describe('Payload for PROJECT_TASK_ASSIGNED');
|
|
|
|
export type ProjectTaskAssignedEventPayload = z.infer<typeof projectTaskAssignedEventPayloadSchema>;
|
|
|
|
export const projectTaskStatusChangedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
taskId: taskIdSchema,
|
|
projectId: projectIdSchema,
|
|
previousStatus: z.string().min(1),
|
|
newStatus: z.string().min(1),
|
|
changedAt: z.string().datetime().optional(),
|
|
}).describe('Payload for PROJECT_TASK_STATUS_CHANGED');
|
|
|
|
export type ProjectTaskStatusChangedEventPayload = z.infer<typeof projectTaskStatusChangedEventPayloadSchema>;
|
|
|
|
export const projectTaskCompletedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
taskId: taskIdSchema,
|
|
projectId: projectIdSchema,
|
|
completedByUserId: userIdSchema.optional(),
|
|
completedAt: z.string().datetime().optional(),
|
|
}).describe('Payload for PROJECT_TASK_COMPLETED');
|
|
|
|
export type ProjectTaskCompletedEventPayload = z.infer<typeof projectTaskCompletedEventPayloadSchema>;
|
|
|
|
export const projectTaskDependencyBlockedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
taskId: taskIdSchema,
|
|
projectId: projectIdSchema,
|
|
blockedByTaskId: taskIdSchema,
|
|
blockedAt: z.string().datetime().optional(),
|
|
}).describe('Payload for PROJECT_TASK_DEPENDENCY_BLOCKED');
|
|
|
|
export type ProjectTaskDependencyBlockedEventPayload = z.infer<
|
|
typeof projectTaskDependencyBlockedEventPayloadSchema
|
|
>;
|
|
|
|
export const projectTaskDependencyUnblockedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
taskId: taskIdSchema,
|
|
projectId: projectIdSchema,
|
|
unblockedByTaskId: taskIdSchema,
|
|
unblockedAt: z.string().datetime().optional(),
|
|
}).describe('Payload for PROJECT_TASK_DEPENDENCY_UNBLOCKED');
|
|
|
|
export type ProjectTaskDependencyUnblockedEventPayload = z.infer<
|
|
typeof projectTaskDependencyUnblockedEventPayloadSchema
|
|
>;
|
|
|
|
export const projectApprovalRequestedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
approvalId: z.string().uuid(),
|
|
projectId: projectIdSchema,
|
|
approvalType: z.string().min(1),
|
|
requestedByUserId: userIdSchema.optional(),
|
|
requestedAt: z.string().datetime().optional(),
|
|
notes: z.string().optional(),
|
|
}).describe('Payload for PROJECT_APPROVAL_REQUESTED');
|
|
|
|
export type ProjectApprovalRequestedEventPayload = z.infer<typeof projectApprovalRequestedEventPayloadSchema>;
|
|
|
|
export const projectApprovalGrantedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
approvalId: z.string().uuid(),
|
|
projectId: projectIdSchema,
|
|
approvalType: z.string().min(1),
|
|
approvedByUserId: userIdSchema.optional(),
|
|
approvedAt: z.string().datetime().optional(),
|
|
notes: z.string().optional(),
|
|
}).describe('Payload for PROJECT_APPROVAL_GRANTED');
|
|
|
|
export type ProjectApprovalGrantedEventPayload = z.infer<typeof projectApprovalGrantedEventPayloadSchema>;
|
|
|
|
export const projectApprovalRejectedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
approvalId: z.string().uuid(),
|
|
projectId: projectIdSchema,
|
|
approvalType: z.string().min(1),
|
|
rejectedByUserId: userIdSchema.optional(),
|
|
rejectedAt: z.string().datetime().optional(),
|
|
reason: z.string().optional(),
|
|
}).describe('Payload for PROJECT_APPROVAL_REJECTED');
|
|
|
|
export type ProjectApprovalRejectedEventPayload = z.infer<typeof projectApprovalRejectedEventPayloadSchema>;
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Legacy project events (still used in harness fixtures)
|
|
// ---------------------------------------------------------------------------
|
|
|
|
export const projectAssignedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
projectId: projectIdSchema,
|
|
assignedToId: z.string().uuid().optional(),
|
|
assignedToType: assignedToTypeSchema.optional(),
|
|
assignedByUserId: userIdSchema.optional(),
|
|
assignedAt: z.string().datetime().optional(),
|
|
}).describe('Payload for PROJECT_ASSIGNED');
|
|
|
|
export type ProjectAssignedEventPayload = z.infer<typeof projectAssignedEventPayloadSchema>;
|
|
|
|
export const projectClosedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
projectId: projectIdSchema,
|
|
closedByUserId: userIdSchema.optional(),
|
|
closedAt: z.string().datetime().optional(),
|
|
reason: z.string().optional(),
|
|
}).describe('Payload for PROJECT_CLOSED');
|
|
|
|
export type ProjectClosedEventPayload = z.infer<typeof projectClosedEventPayloadSchema>;
|
|
|
|
export const projectTaskAdditionalAgentAssignedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
taskId: taskIdSchema,
|
|
projectId: projectIdSchema,
|
|
primaryAgentId: userIdSchema,
|
|
additionalAgentId: userIdSchema,
|
|
assignedByUserId: userIdSchema.optional(),
|
|
assignedAt: z.string().datetime().optional(),
|
|
}).describe('Payload for PROJECT_TASK_ADDITIONAL_AGENT_ASSIGNED');
|
|
|
|
export type ProjectTaskAdditionalAgentAssignedEventPayload = z.infer<
|
|
typeof projectTaskAdditionalAgentAssignedEventPayloadSchema
|
|
>;
|
|
|
|
export const taskCommentAddedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
taskId: taskIdSchema,
|
|
projectId: projectIdSchema,
|
|
taskCommentId: taskCommentIdSchema,
|
|
commentContent: z.string().min(1),
|
|
createdByUserId: userIdSchema.optional(),
|
|
taskName: z.string().optional(),
|
|
}).describe('Payload for TASK_COMMENT_ADDED');
|
|
|
|
export type TaskCommentAddedEventPayload = z.infer<typeof taskCommentAddedEventPayloadSchema>;
|
|
|
|
export const taskCommentUpdatedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
|
|
taskId: taskIdSchema,
|
|
projectId: projectIdSchema,
|
|
taskCommentId: taskCommentIdSchema,
|
|
oldCommentContent: z.string().min(1).optional(),
|
|
newCommentContent: z.string().min(1),
|
|
updatedByUserId: userIdSchema.optional(),
|
|
taskName: z.string().optional(),
|
|
}).describe('Payload for TASK_COMMENT_UPDATED');
|
|
|
|
export type TaskCommentUpdatedEventPayload = z.infer<typeof taskCommentUpdatedEventPayloadSchema>;
|