feat(api): add MS21 user fields for admin, local auth, and invitations (#553)
All checks were successful
ci/woodpecker/push/orchestrator Pipeline was successful
ci/woodpecker/push/web Pipeline was successful
ci/woodpecker/push/api Pipeline was successful

Co-authored-by: Jason Woltje <jason@diversecanvas.com>
Co-committed-by: Jason Woltje <jason@diversecanvas.com>
This commit was merged in pull request #553.
This commit is contained in:
2026-02-28 17:47:03 +00:00
committed by jason.woltje
parent 8098504fb8
commit ffc10c9a45
6 changed files with 68 additions and 0 deletions

View File

@@ -227,6 +227,14 @@ model User {
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz
// MS21: Admin, local auth, and invitation fields
deactivatedAt DateTime? @map("deactivated_at") @db.Timestamptz
isLocalAuth Boolean @default(false) @map("is_local_auth")
passwordHash String? @map("password_hash")
invitedBy String? @map("invited_by") @db.Uuid
invitationToken String? @unique @map("invitation_token")
invitedAt DateTime? @map("invited_at") @db.Timestamptz
// Relations
ownedWorkspaces Workspace[] @relation("WorkspaceOwner")
workspaceMemberships WorkspaceMember[]

View File

@@ -39,6 +39,12 @@ const mockMembers: WorkspaceMemberWithUser[] = [
image: null,
authProviderId: null,
preferences: {},
deactivatedAt: null,
isLocalAuth: false,
passwordHash: null,
invitedBy: null,
invitationToken: null,
invitedAt: null,
createdAt: new Date("2024-01-15"),
updatedAt: new Date("2024-01-15"),
},
@@ -56,6 +62,12 @@ const mockMembers: WorkspaceMemberWithUser[] = [
image: null,
authProviderId: null,
preferences: {},
deactivatedAt: null,
isLocalAuth: false,
passwordHash: null,
invitedBy: null,
invitationToken: null,
invitedAt: null,
createdAt: new Date("2024-01-16"),
updatedAt: new Date("2024-01-16"),
},
@@ -73,6 +85,12 @@ const mockMembers: WorkspaceMemberWithUser[] = [
image: null,
authProviderId: null,
preferences: {},
deactivatedAt: null,
isLocalAuth: false,
passwordHash: null,
invitedBy: null,
invitationToken: null,
invitedAt: null,
createdAt: new Date("2024-01-17"),
updatedAt: new Date("2024-01-17"),
},

View File

@@ -21,6 +21,12 @@ const mockAvailableUsers: User[] = [
image: null,
authProviderId: null,
preferences: {},
deactivatedAt: null,
isLocalAuth: false,
passwordHash: null,
invitedBy: null,
invitationToken: null,
invitedAt: null,
createdAt: new Date("2026-01-17"),
updatedAt: new Date("2026-01-17"),
},
@@ -32,6 +38,12 @@ const mockAvailableUsers: User[] = [
image: null,
authProviderId: null,
preferences: {},
deactivatedAt: null,
isLocalAuth: false,
passwordHash: null,
invitedBy: null,
invitationToken: null,
invitedAt: null,
createdAt: new Date("2026-01-18"),
updatedAt: new Date("2026-01-18"),
},

View File

@@ -20,6 +20,12 @@ const makeMember = (
image: null,
authProviderId: `auth-${overrides.userId}`,
preferences: {},
deactivatedAt: null,
isLocalAuth: false,
passwordHash: null,
invitedBy: null,
invitationToken: null,
invitedAt: null,
createdAt: new Date("2025-01-01"),
updatedAt: new Date("2025-01-01"),
},
@@ -62,6 +68,12 @@ describe("MemberList", (): void => {
image: null,
authProviderId: "auth-2",
preferences: {},
deactivatedAt: null,
isLocalAuth: false,
passwordHash: null,
invitedBy: null,
invitationToken: null,
invitedAt: null,
createdAt: new Date("2025-01-01"),
updatedAt: new Date("2025-01-01"),
},

View File

@@ -178,6 +178,12 @@ export const mockTeamWithMembers: TeamWithMembers = {
image: null,
authProviderId: null,
preferences: {},
deactivatedAt: null,
isLocalAuth: false,
passwordHash: null,
invitedBy: null,
invitationToken: null,
invitedAt: null,
createdAt: new Date("2026-01-15"),
updatedAt: new Date("2026-01-15"),
},
@@ -195,6 +201,12 @@ export const mockTeamWithMembers: TeamWithMembers = {
image: null,
authProviderId: null,
preferences: {},
deactivatedAt: null,
isLocalAuth: false,
passwordHash: null,
invitedBy: null,
invitationToken: null,
invitedAt: null,
createdAt: new Date("2026-01-16"),
updatedAt: new Date("2026-01-16"),
},

View File

@@ -27,6 +27,12 @@ export interface User extends BaseEntity {
image: string | null;
authProviderId: string | null;
preferences: Record<string, unknown>;
deactivatedAt: Date | null;
isLocalAuth: boolean;
passwordHash: string | null;
invitedBy: string | null;
invitationToken: string | null;
invitedAt: Date | null;
}
/**