ФУНКЦИИ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: открытый контур и self-service инвайты

This commit is contained in:
DCCONSTRUCTIONS
2026-05-09 22:56:43 +03:00
parent 01e0988031
commit a579e71b9b
19 changed files with 3406 additions and 99 deletions
+31
View File
@@ -0,0 +1,31 @@
import type { ClientMembershipRole } from "../user/types";
export type AccessRequestStatus = "new" | "approved" | "rejected";
export interface AccessRequest {
id: string;
email: string;
firstName: string;
lastName: string;
middleName: string;
phone: string;
company: string;
status: AccessRequestStatus;
targetClientId: string;
role: ClientMembershipRole;
approvedInviteId?: string | null;
reviewedByUserId?: string | null;
reviewedAt?: string | null;
comment?: string | null;
createdAt: string;
updatedAt: string;
}
export interface CreateAccessRequestCommand {
email: string;
firstName: string;
lastName: string;
middleName: string;
phone: string;
company: string;
}
+5
View File
@@ -8,6 +8,11 @@ export interface Invite {
email: string;
role: ClientMembershipRole;
invitedByUserId: string;
source?: "launcher" | "access_request" | "tasker_workspace_invite";
sourceTaskerInviteRequestId?: string | null;
sourceTaskerInviteId?: string | null;
sourceWorkspaceSlug?: string | null;
sourceWorkspaceName?: string | null;
token: string;
expiresAt: string;
status: InviteStatus;
+27
View File
@@ -0,0 +1,27 @@
import type { Client } from "../client/types";
export const PUBLIC_POOL_CLIENT_ID = "client_public_pool";
export const PUBLIC_POOL_CONTEXT_LABEL = "Открытый контур";
export const PUBLIC_POOL_CONTEXT_DESCRIPTION = "Public access pool";
export const PUBLIC_POOL_CLIENT: Client = {
id: PUBLIC_POOL_CLIENT_ID,
type: "person",
name: PUBLIC_POOL_CONTEXT_LABEL,
legalName: PUBLIC_POOL_CONTEXT_DESCRIPTION,
status: "active",
contractStartsAt: null,
contractEndsAt: null,
paidUntil: null,
demoEndsAt: null,
contactName: "NODE.DC",
contactEmail: null,
avatarUrl: null,
notes: "Системный контур для публичных заявок, публичных инвайтов и self-service пользователей.",
createdAt: "2026-05-09T00:00:00.000Z",
updatedAt: "2026-05-09T00:00:00.000Z",
};
export function isPublicPoolClientId(clientId: string | null | undefined): boolean {
return clientId === PUBLIC_POOL_CLIENT_ID;
}
@@ -0,0 +1,25 @@
export type TaskerInviteRequestStatus = "new" | "approved" | "rejected" | "cancelled";
export type TaskerInviteRequestRole = "guest" | "member" | "admin";
export interface TaskerInviteRequest {
id: string;
taskerInviteId: string;
workspaceId?: string | null;
workspaceSlug: string;
workspaceName: string;
inviteeEmail: string;
role: TaskerInviteRequestRole;
inviterUserId?: string | null;
inviterPlaneUserId?: string | null;
inviterEmail: string;
inviterName: string;
status: TaskerInviteRequestStatus;
taskerInviteLink?: string | null;
platformInviteId?: string | null;
platformInviteToken?: string | null;
reviewedByUserId?: string | null;
reviewedAt?: string | null;
comment?: string | null;
createdAt: string;
updatedAt: string;
}
+4
View File
@@ -30,6 +30,10 @@ export interface ClientMembership {
userId: string;
role: ClientMembershipRole;
status: ClientMembershipStatus;
invitedByUserId?: string | null;
inviteId?: string | null;
source?: "launcher" | "access_request" | "tasker_workspace_invite" | null;
sourceTaskerInviteRequestId?: string | null;
createdAt: string;
updatedAt: string;
}