Add member identifiers table for ID documents (DL, passport, school ID)
member_identifier table with type, value, issuing authority, expiry, front/back image storage (base64 in Postgres), primary flag. CRUD endpoints under /members/:memberId/identifiers. Zod schemas with constrained type enum.
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
-- Member identity documents (driver's license, passport, school ID, etc.)
|
||||
CREATE TABLE IF NOT EXISTS "member_identifier" (
|
||||
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
"member_id" uuid NOT NULL REFERENCES "member"("id"),
|
||||
"company_id" uuid NOT NULL REFERENCES "company"("id"),
|
||||
"type" varchar(50) NOT NULL,
|
||||
"label" varchar(100),
|
||||
"value" varchar(255) NOT NULL,
|
||||
"issuing_authority" varchar(255),
|
||||
"issued_date" date,
|
||||
"expires_at" date,
|
||||
"image_front" text,
|
||||
"image_back" text,
|
||||
"notes" text,
|
||||
"is_primary" boolean NOT NULL DEFAULT false,
|
||||
"created_at" timestamp with time zone NOT NULL DEFAULT now(),
|
||||
"updated_at" timestamp with time zone NOT NULL DEFAULT now()
|
||||
);
|
||||
@@ -71,6 +71,13 @@
|
||||
"when": 1774703400000,
|
||||
"tag": "0009_member_number",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"version": "7",
|
||||
"when": 1774704000000,
|
||||
"tag": "0010_member_identifiers",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -62,6 +62,31 @@ export const members = pgTable('member', {
|
||||
updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
|
||||
})
|
||||
|
||||
export const memberIdentifiers = pgTable('member_identifier', {
|
||||
id: uuid('id').primaryKey().defaultRandom(),
|
||||
memberId: uuid('member_id')
|
||||
.notNull()
|
||||
.references(() => members.id),
|
||||
companyId: uuid('company_id')
|
||||
.notNull()
|
||||
.references(() => companies.id),
|
||||
type: varchar('type', { length: 50 }).notNull(),
|
||||
label: varchar('label', { length: 100 }),
|
||||
value: varchar('value', { length: 255 }).notNull(),
|
||||
issuingAuthority: varchar('issuing_authority', { length: 255 }),
|
||||
issuedDate: date('issued_date'),
|
||||
expiresAt: date('expires_at'),
|
||||
imageFront: text('image_front'),
|
||||
imageBack: text('image_back'),
|
||||
notes: text('notes'),
|
||||
isPrimary: boolean('is_primary').notNull().default(false),
|
||||
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
|
||||
updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
|
||||
})
|
||||
|
||||
export type MemberIdentifier = typeof memberIdentifiers.$inferSelect
|
||||
export type MemberIdentifierInsert = typeof memberIdentifiers.$inferInsert
|
||||
|
||||
export const processorEnum = pgEnum('payment_processor', ['stripe', 'global_payments'])
|
||||
|
||||
export const accountProcessorLinks = pgTable('account_processor_link', {
|
||||
|
||||
Reference in New Issue
Block a user