fix: auto-migrate after DB restore and force re-login
- After importing a backup, run prisma migrate deploy so any schema migrations the backup is missing are applied automatically. This prevents pages from failing due to missing tables/columns when the backup was taken on an older version of the app. - Force logout and redirect to login after a successful restore so the JWT is refreshed against the restored database (prevents userId mismatch causing user-scoped queries to return empty results). - Fix getTotalPatientCount() in /status route to pass userId so it counts only the current user's patients instead of all patients. - Add prisma.$connect() after $disconnect() to ensure a clean reconnect. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,7 +11,6 @@ export const UserAggregateResultSchema = z.object({ _count: z.object({
|
||||
npiProviders: z.number(),
|
||||
claims: z.number(),
|
||||
insuranceCredentials: z.number(),
|
||||
shoppingVendors: z.number(),
|
||||
updatedPayments: z.number(),
|
||||
backups: z.number(),
|
||||
backupDestinations: z.number(),
|
||||
@@ -23,9 +22,7 @@ export const UserAggregateResultSchema = z.object({ _count: z.object({
|
||||
aiSettings: z.number(),
|
||||
officeHours: z.number(),
|
||||
officeContact: z.number(),
|
||||
procedureTimeslot: z.number(),
|
||||
insuranceContacts: z.number(),
|
||||
patientConversations: z.number()
|
||||
procedureTimeslot: z.number()
|
||||
}).optional(),
|
||||
_sum: z.object({
|
||||
id: z.number().nullable()
|
||||
|
||||
@@ -11,7 +11,6 @@ export const UserCreateResultSchema = z.object({
|
||||
npiProviders: z.array(z.unknown()),
|
||||
claims: z.array(z.unknown()),
|
||||
insuranceCredentials: z.array(z.unknown()),
|
||||
shoppingVendors: z.array(z.unknown()),
|
||||
updatedPayments: z.array(z.unknown()),
|
||||
backups: z.array(z.unknown()),
|
||||
backupDestinations: z.array(z.unknown()),
|
||||
@@ -23,7 +22,5 @@ export const UserCreateResultSchema = z.object({
|
||||
aiSettings: z.unknown().optional(),
|
||||
officeHours: z.unknown().optional(),
|
||||
officeContact: z.unknown().optional(),
|
||||
procedureTimeslot: z.unknown().optional(),
|
||||
insuranceContacts: z.array(z.unknown()),
|
||||
patientConversations: z.array(z.unknown())
|
||||
procedureTimeslot: z.unknown().optional()
|
||||
});
|
||||
@@ -11,7 +11,6 @@ export const UserDeleteResultSchema = z.nullable(z.object({
|
||||
npiProviders: z.array(z.unknown()),
|
||||
claims: z.array(z.unknown()),
|
||||
insuranceCredentials: z.array(z.unknown()),
|
||||
shoppingVendors: z.array(z.unknown()),
|
||||
updatedPayments: z.array(z.unknown()),
|
||||
backups: z.array(z.unknown()),
|
||||
backupDestinations: z.array(z.unknown()),
|
||||
@@ -23,7 +22,5 @@ export const UserDeleteResultSchema = z.nullable(z.object({
|
||||
aiSettings: z.unknown().optional(),
|
||||
officeHours: z.unknown().optional(),
|
||||
officeContact: z.unknown().optional(),
|
||||
procedureTimeslot: z.unknown().optional(),
|
||||
insuranceContacts: z.array(z.unknown()),
|
||||
patientConversations: z.array(z.unknown())
|
||||
procedureTimeslot: z.unknown().optional()
|
||||
}));
|
||||
@@ -11,7 +11,6 @@ export const UserFindFirstResultSchema = z.nullable(z.object({
|
||||
npiProviders: z.array(z.unknown()),
|
||||
claims: z.array(z.unknown()),
|
||||
insuranceCredentials: z.array(z.unknown()),
|
||||
shoppingVendors: z.array(z.unknown()),
|
||||
updatedPayments: z.array(z.unknown()),
|
||||
backups: z.array(z.unknown()),
|
||||
backupDestinations: z.array(z.unknown()),
|
||||
@@ -23,7 +22,5 @@ export const UserFindFirstResultSchema = z.nullable(z.object({
|
||||
aiSettings: z.unknown().optional(),
|
||||
officeHours: z.unknown().optional(),
|
||||
officeContact: z.unknown().optional(),
|
||||
procedureTimeslot: z.unknown().optional(),
|
||||
insuranceContacts: z.array(z.unknown()),
|
||||
patientConversations: z.array(z.unknown())
|
||||
procedureTimeslot: z.unknown().optional()
|
||||
}));
|
||||
@@ -12,7 +12,6 @@ export const UserFindManyResultSchema = z.object({
|
||||
npiProviders: z.array(z.unknown()),
|
||||
claims: z.array(z.unknown()),
|
||||
insuranceCredentials: z.array(z.unknown()),
|
||||
shoppingVendors: z.array(z.unknown()),
|
||||
updatedPayments: z.array(z.unknown()),
|
||||
backups: z.array(z.unknown()),
|
||||
backupDestinations: z.array(z.unknown()),
|
||||
@@ -24,9 +23,7 @@ export const UserFindManyResultSchema = z.object({
|
||||
aiSettings: z.unknown().optional(),
|
||||
officeHours: z.unknown().optional(),
|
||||
officeContact: z.unknown().optional(),
|
||||
procedureTimeslot: z.unknown().optional(),
|
||||
insuranceContacts: z.array(z.unknown()),
|
||||
patientConversations: z.array(z.unknown())
|
||||
procedureTimeslot: z.unknown().optional()
|
||||
})),
|
||||
pagination: z.object({
|
||||
page: z.number().int().min(1),
|
||||
|
||||
@@ -11,7 +11,6 @@ export const UserFindUniqueResultSchema = z.nullable(z.object({
|
||||
npiProviders: z.array(z.unknown()),
|
||||
claims: z.array(z.unknown()),
|
||||
insuranceCredentials: z.array(z.unknown()),
|
||||
shoppingVendors: z.array(z.unknown()),
|
||||
updatedPayments: z.array(z.unknown()),
|
||||
backups: z.array(z.unknown()),
|
||||
backupDestinations: z.array(z.unknown()),
|
||||
@@ -23,7 +22,5 @@ export const UserFindUniqueResultSchema = z.nullable(z.object({
|
||||
aiSettings: z.unknown().optional(),
|
||||
officeHours: z.unknown().optional(),
|
||||
officeContact: z.unknown().optional(),
|
||||
procedureTimeslot: z.unknown().optional(),
|
||||
insuranceContacts: z.array(z.unknown()),
|
||||
patientConversations: z.array(z.unknown())
|
||||
procedureTimeslot: z.unknown().optional()
|
||||
}));
|
||||
@@ -17,7 +17,6 @@ export const UserGroupByResultSchema = z.array(z.object({
|
||||
npiProviders: z.number(),
|
||||
claims: z.number(),
|
||||
insuranceCredentials: z.number(),
|
||||
shoppingVendors: z.number(),
|
||||
updatedPayments: z.number(),
|
||||
backups: z.number(),
|
||||
backupDestinations: z.number(),
|
||||
@@ -29,9 +28,7 @@ export const UserGroupByResultSchema = z.array(z.object({
|
||||
aiSettings: z.number(),
|
||||
officeHours: z.number(),
|
||||
officeContact: z.number(),
|
||||
procedureTimeslot: z.number(),
|
||||
insuranceContacts: z.number(),
|
||||
patientConversations: z.number()
|
||||
procedureTimeslot: z.number()
|
||||
}).optional(),
|
||||
_sum: z.object({
|
||||
id: z.number().nullable()
|
||||
|
||||
@@ -11,7 +11,6 @@ export const UserUpdateResultSchema = z.nullable(z.object({
|
||||
npiProviders: z.array(z.unknown()),
|
||||
claims: z.array(z.unknown()),
|
||||
insuranceCredentials: z.array(z.unknown()),
|
||||
shoppingVendors: z.array(z.unknown()),
|
||||
updatedPayments: z.array(z.unknown()),
|
||||
backups: z.array(z.unknown()),
|
||||
backupDestinations: z.array(z.unknown()),
|
||||
@@ -23,7 +22,5 @@ export const UserUpdateResultSchema = z.nullable(z.object({
|
||||
aiSettings: z.unknown().optional(),
|
||||
officeHours: z.unknown().optional(),
|
||||
officeContact: z.unknown().optional(),
|
||||
procedureTimeslot: z.unknown().optional(),
|
||||
insuranceContacts: z.array(z.unknown()),
|
||||
patientConversations: z.array(z.unknown())
|
||||
procedureTimeslot: z.unknown().optional()
|
||||
}));
|
||||
@@ -11,7 +11,6 @@ export const UserUpsertResultSchema = z.object({
|
||||
npiProviders: z.array(z.unknown()),
|
||||
claims: z.array(z.unknown()),
|
||||
insuranceCredentials: z.array(z.unknown()),
|
||||
shoppingVendors: z.array(z.unknown()),
|
||||
updatedPayments: z.array(z.unknown()),
|
||||
backups: z.array(z.unknown()),
|
||||
backupDestinations: z.array(z.unknown()),
|
||||
@@ -23,7 +22,5 @@ export const UserUpsertResultSchema = z.object({
|
||||
aiSettings: z.unknown().optional(),
|
||||
officeHours: z.unknown().optional(),
|
||||
officeContact: z.unknown().optional(),
|
||||
procedureTimeslot: z.unknown().optional(),
|
||||
insuranceContacts: z.array(z.unknown()),
|
||||
patientConversations: z.array(z.unknown())
|
||||
procedureTimeslot: z.unknown().optional()
|
||||
});
|
||||
@@ -141,19 +141,6 @@ export { InsuranceCredentialDeleteManyResultSchema } from './InsuranceCredential
|
||||
export { InsuranceCredentialAggregateResultSchema } from './InsuranceCredentialAggregateResult.schema';
|
||||
export { InsuranceCredentialGroupByResultSchema } from './InsuranceCredentialGroupByResult.schema';
|
||||
export { InsuranceCredentialCountResultSchema } from './InsuranceCredentialCountResult.schema';
|
||||
export { ShoppingVendorFindUniqueResultSchema } from './ShoppingVendorFindUniqueResult.schema';
|
||||
export { ShoppingVendorFindFirstResultSchema } from './ShoppingVendorFindFirstResult.schema';
|
||||
export { ShoppingVendorFindManyResultSchema } from './ShoppingVendorFindManyResult.schema';
|
||||
export { ShoppingVendorCreateResultSchema } from './ShoppingVendorCreateResult.schema';
|
||||
export { ShoppingVendorCreateManyResultSchema } from './ShoppingVendorCreateManyResult.schema';
|
||||
export { ShoppingVendorUpdateResultSchema } from './ShoppingVendorUpdateResult.schema';
|
||||
export { ShoppingVendorUpdateManyResultSchema } from './ShoppingVendorUpdateManyResult.schema';
|
||||
export { ShoppingVendorUpsertResultSchema } from './ShoppingVendorUpsertResult.schema';
|
||||
export { ShoppingVendorDeleteResultSchema } from './ShoppingVendorDeleteResult.schema';
|
||||
export { ShoppingVendorDeleteManyResultSchema } from './ShoppingVendorDeleteManyResult.schema';
|
||||
export { ShoppingVendorAggregateResultSchema } from './ShoppingVendorAggregateResult.schema';
|
||||
export { ShoppingVendorGroupByResultSchema } from './ShoppingVendorGroupByResult.schema';
|
||||
export { ShoppingVendorCountResultSchema } from './ShoppingVendorCountResult.schema';
|
||||
export { PdfGroupFindUniqueResultSchema } from './PdfGroupFindUniqueResult.schema';
|
||||
export { PdfGroupFindFirstResultSchema } from './PdfGroupFindFirstResult.schema';
|
||||
export { PdfGroupFindManyResultSchema } from './PdfGroupFindManyResult.schema';
|
||||
@@ -375,19 +362,6 @@ export { OfficeContactDeleteManyResultSchema } from './OfficeContactDeleteManyRe
|
||||
export { OfficeContactAggregateResultSchema } from './OfficeContactAggregateResult.schema';
|
||||
export { OfficeContactGroupByResultSchema } from './OfficeContactGroupByResult.schema';
|
||||
export { OfficeContactCountResultSchema } from './OfficeContactCountResult.schema';
|
||||
export { InsuranceContactFindUniqueResultSchema } from './InsuranceContactFindUniqueResult.schema';
|
||||
export { InsuranceContactFindFirstResultSchema } from './InsuranceContactFindFirstResult.schema';
|
||||
export { InsuranceContactFindManyResultSchema } from './InsuranceContactFindManyResult.schema';
|
||||
export { InsuranceContactCreateResultSchema } from './InsuranceContactCreateResult.schema';
|
||||
export { InsuranceContactCreateManyResultSchema } from './InsuranceContactCreateManyResult.schema';
|
||||
export { InsuranceContactUpdateResultSchema } from './InsuranceContactUpdateResult.schema';
|
||||
export { InsuranceContactUpdateManyResultSchema } from './InsuranceContactUpdateManyResult.schema';
|
||||
export { InsuranceContactUpsertResultSchema } from './InsuranceContactUpsertResult.schema';
|
||||
export { InsuranceContactDeleteResultSchema } from './InsuranceContactDeleteResult.schema';
|
||||
export { InsuranceContactDeleteManyResultSchema } from './InsuranceContactDeleteManyResult.schema';
|
||||
export { InsuranceContactAggregateResultSchema } from './InsuranceContactAggregateResult.schema';
|
||||
export { InsuranceContactGroupByResultSchema } from './InsuranceContactGroupByResult.schema';
|
||||
export { InsuranceContactCountResultSchema } from './InsuranceContactCountResult.schema';
|
||||
export { ProcedureTimeslotFindUniqueResultSchema } from './ProcedureTimeslotFindUniqueResult.schema';
|
||||
export { ProcedureTimeslotFindFirstResultSchema } from './ProcedureTimeslotFindFirstResult.schema';
|
||||
export { ProcedureTimeslotFindManyResultSchema } from './ProcedureTimeslotFindManyResult.schema';
|
||||
@@ -401,42 +375,3 @@ export { ProcedureTimeslotDeleteManyResultSchema } from './ProcedureTimeslotDele
|
||||
export { ProcedureTimeslotAggregateResultSchema } from './ProcedureTimeslotAggregateResult.schema';
|
||||
export { ProcedureTimeslotGroupByResultSchema } from './ProcedureTimeslotGroupByResult.schema';
|
||||
export { ProcedureTimeslotCountResultSchema } from './ProcedureTimeslotCountResult.schema';
|
||||
export { PatientConversationFindUniqueResultSchema } from './PatientConversationFindUniqueResult.schema';
|
||||
export { PatientConversationFindFirstResultSchema } from './PatientConversationFindFirstResult.schema';
|
||||
export { PatientConversationFindManyResultSchema } from './PatientConversationFindManyResult.schema';
|
||||
export { PatientConversationCreateResultSchema } from './PatientConversationCreateResult.schema';
|
||||
export { PatientConversationCreateManyResultSchema } from './PatientConversationCreateManyResult.schema';
|
||||
export { PatientConversationUpdateResultSchema } from './PatientConversationUpdateResult.schema';
|
||||
export { PatientConversationUpdateManyResultSchema } from './PatientConversationUpdateManyResult.schema';
|
||||
export { PatientConversationUpsertResultSchema } from './PatientConversationUpsertResult.schema';
|
||||
export { PatientConversationDeleteResultSchema } from './PatientConversationDeleteResult.schema';
|
||||
export { PatientConversationDeleteManyResultSchema } from './PatientConversationDeleteManyResult.schema';
|
||||
export { PatientConversationAggregateResultSchema } from './PatientConversationAggregateResult.schema';
|
||||
export { PatientConversationGroupByResultSchema } from './PatientConversationGroupByResult.schema';
|
||||
export { PatientConversationCountResultSchema } from './PatientConversationCountResult.schema';
|
||||
export { CommissionBatchFindUniqueResultSchema } from './CommissionBatchFindUniqueResult.schema';
|
||||
export { CommissionBatchFindFirstResultSchema } from './CommissionBatchFindFirstResult.schema';
|
||||
export { CommissionBatchFindManyResultSchema } from './CommissionBatchFindManyResult.schema';
|
||||
export { CommissionBatchCreateResultSchema } from './CommissionBatchCreateResult.schema';
|
||||
export { CommissionBatchCreateManyResultSchema } from './CommissionBatchCreateManyResult.schema';
|
||||
export { CommissionBatchUpdateResultSchema } from './CommissionBatchUpdateResult.schema';
|
||||
export { CommissionBatchUpdateManyResultSchema } from './CommissionBatchUpdateManyResult.schema';
|
||||
export { CommissionBatchUpsertResultSchema } from './CommissionBatchUpsertResult.schema';
|
||||
export { CommissionBatchDeleteResultSchema } from './CommissionBatchDeleteResult.schema';
|
||||
export { CommissionBatchDeleteManyResultSchema } from './CommissionBatchDeleteManyResult.schema';
|
||||
export { CommissionBatchAggregateResultSchema } from './CommissionBatchAggregateResult.schema';
|
||||
export { CommissionBatchGroupByResultSchema } from './CommissionBatchGroupByResult.schema';
|
||||
export { CommissionBatchCountResultSchema } from './CommissionBatchCountResult.schema';
|
||||
export { CommissionBatchItemFindUniqueResultSchema } from './CommissionBatchItemFindUniqueResult.schema';
|
||||
export { CommissionBatchItemFindFirstResultSchema } from './CommissionBatchItemFindFirstResult.schema';
|
||||
export { CommissionBatchItemFindManyResultSchema } from './CommissionBatchItemFindManyResult.schema';
|
||||
export { CommissionBatchItemCreateResultSchema } from './CommissionBatchItemCreateResult.schema';
|
||||
export { CommissionBatchItemCreateManyResultSchema } from './CommissionBatchItemCreateManyResult.schema';
|
||||
export { CommissionBatchItemUpdateResultSchema } from './CommissionBatchItemUpdateResult.schema';
|
||||
export { CommissionBatchItemUpdateManyResultSchema } from './CommissionBatchItemUpdateManyResult.schema';
|
||||
export { CommissionBatchItemUpsertResultSchema } from './CommissionBatchItemUpsertResult.schema';
|
||||
export { CommissionBatchItemDeleteResultSchema } from './CommissionBatchItemDeleteResult.schema';
|
||||
export { CommissionBatchItemDeleteManyResultSchema } from './CommissionBatchItemDeleteManyResult.schema';
|
||||
export { CommissionBatchItemAggregateResultSchema } from './CommissionBatchItemAggregateResult.schema';
|
||||
export { CommissionBatchItemGroupByResultSchema } from './CommissionBatchItemGroupByResult.schema';
|
||||
export { CommissionBatchItemCountResultSchema } from './CommissionBatchItemCountResult.schema';
|
||||
|
||||
Reference in New Issue
Block a user