Skip to content

Commit 667b472

Browse files
authored
feat(frontend): private models migration (#5465)
* feat(frontend): migration for private model related tables * more wip * rename * more wip * more wip * fix: simplify revision tracking * rename * fix: migration runs * remove model graph * small migration updates * update generate supabase types
1 parent da4f126 commit 667b472

File tree

4 files changed

+809
-3
lines changed

4 files changed

+809
-3
lines changed

apps/frontend/lib/types/schema-types.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66

77
import { z } from "zod";
88
import * as generated from "@/lib/types/schema";
9+
export type PublicModelKind = z.infer<typeof generated.publicModelKindSchema>;
10+
export type PublicModelRunStatus = z.infer<
11+
typeof generated.publicModelRunStatusSchema
12+
>;
913
export type Json = z.infer<typeof generated.jsonSchema>;
1014
export type AdminUsersRow = z.infer<typeof generated.adminUsersRowSchema>;
1115
export type AdminUsersInsert = z.infer<typeof generated.adminUsersInsertSchema>;
@@ -117,6 +121,46 @@ export type InvitationsUpdate = z.infer<
117121
export type InvitationsRelationships = z.infer<
118122
typeof generated.invitationsRelationshipsSchema
119123
>;
124+
export type ModelRow = z.infer<typeof generated.modelRowSchema>;
125+
export type ModelInsert = z.infer<typeof generated.modelInsertSchema>;
126+
export type ModelUpdate = z.infer<typeof generated.modelUpdateSchema>;
127+
export type ModelRelationships = z.infer<
128+
typeof generated.modelRelationshipsSchema
129+
>;
130+
export type ModelReleaseRow = z.infer<typeof generated.modelReleaseRowSchema>;
131+
export type ModelReleaseInsert = z.infer<
132+
typeof generated.modelReleaseInsertSchema
133+
>;
134+
export type ModelReleaseUpdate = z.infer<
135+
typeof generated.modelReleaseUpdateSchema
136+
>;
137+
export type ModelReleaseRelationships = z.infer<
138+
typeof generated.modelReleaseRelationshipsSchema
139+
>;
140+
export type PublicModelDependencyType = z.infer<
141+
typeof generated.publicModelDependencyTypeSchema
142+
>;
143+
export type PublicModelKindOptions = z.infer<
144+
typeof generated.publicModelKindOptionsSchema
145+
>;
146+
export type PublicModelColumnType = z.infer<
147+
typeof generated.publicModelColumnTypeSchema
148+
>;
149+
export type ModelRevisionInsert = z.infer<
150+
typeof generated.modelRevisionInsertSchema
151+
>;
152+
export type ModelRevisionUpdate = z.infer<
153+
typeof generated.modelRevisionUpdateSchema
154+
>;
155+
export type ModelRevisionRelationships = z.infer<
156+
typeof generated.modelRevisionRelationshipsSchema
157+
>;
158+
export type ModelRunRow = z.infer<typeof generated.modelRunRowSchema>;
159+
export type ModelRunInsert = z.infer<typeof generated.modelRunInsertSchema>;
160+
export type ModelRunUpdate = z.infer<typeof generated.modelRunUpdateSchema>;
161+
export type ModelRunRelationships = z.infer<
162+
typeof generated.modelRunRelationshipsSchema
163+
>;
120164
export type NotebooksRow = z.infer<typeof generated.notebooksRowSchema>;
121165
export type NotebooksInsert = z.infer<typeof generated.notebooksInsertSchema>;
122166
export type NotebooksUpdate = z.infer<typeof generated.notebooksUpdateSchema>;
@@ -325,3 +369,4 @@ export type ValidateOwnershipLimitsArgs = z.infer<
325369
export type ValidateOwnershipLimitsReturns = z.infer<
326370
typeof generated.validateOwnershipLimitsReturnsSchema
327371
>;
372+
export type ModelRevisionRow = z.infer<typeof generated.modelRevisionRowSchema>;

apps/frontend/lib/types/schema.ts

Lines changed: 292 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,23 @@
77
import { z } from "zod";
88
import { type Json } from "@/lib/types/supabase";
99

10+
export const publicModelKindSchema = z.union([
11+
z.literal("INCREMENTAL_BY_TIME_RANGE"),
12+
z.literal("INCREMENTAL_BY_UNIQUE_KEY"),
13+
z.literal("INCREMENTAL_BY_PARTITION"),
14+
z.literal("SCD_TYPE_2_BY_TIME"),
15+
z.literal("SCD_TYPE_2_BY_COLUMN"),
16+
z.literal("FULL"),
17+
z.literal("VIEW"),
18+
]);
19+
20+
export const publicModelRunStatusSchema = z.union([
21+
z.literal("running"),
22+
z.literal("completed"),
23+
z.literal("failed"),
24+
z.literal("canceled"),
25+
]);
26+
1027
export const jsonSchema: z.ZodSchema<Json> = z.lazy(() =>
1128
z
1229
.union([
@@ -568,6 +585,258 @@ export const invitationsRelationshipsSchema = z.tuple([
568585
}),
569586
]);
570587

588+
export const modelRowSchema = z.object({
589+
created_at: z.string(),
590+
dataset_id: z.string(),
591+
deleted_at: z.string().nullable(),
592+
id: z.string(),
593+
is_enabled: z.boolean(),
594+
name: z.string(),
595+
org_id: z.string(),
596+
updated_at: z.string(),
597+
});
598+
599+
export const modelInsertSchema = z.object({
600+
created_at: z.string().optional(),
601+
dataset_id: z.string(),
602+
deleted_at: z.string().optional().nullable(),
603+
id: z.string().optional(),
604+
is_enabled: z.boolean().optional(),
605+
name: z.string(),
606+
org_id: z.string(),
607+
updated_at: z.string().optional(),
608+
});
609+
610+
export const modelUpdateSchema = z.object({
611+
created_at: z.string().optional(),
612+
dataset_id: z.string().optional(),
613+
deleted_at: z.string().optional().nullable(),
614+
id: z.string().optional(),
615+
is_enabled: z.boolean().optional(),
616+
name: z.string().optional(),
617+
org_id: z.string().optional(),
618+
updated_at: z.string().optional(),
619+
});
620+
621+
export const modelRelationshipsSchema = z.tuple([
622+
z.object({
623+
foreignKeyName: z.literal("model_dataset_id_fkey"),
624+
columns: z.tuple([z.literal("dataset_id")]),
625+
isOneToOne: z.literal(false),
626+
referencedRelation: z.literal("datasets"),
627+
referencedColumns: z.tuple([z.literal("id")]),
628+
}),
629+
z.object({
630+
foreignKeyName: z.literal("model_org_id_fkey"),
631+
columns: z.tuple([z.literal("org_id")]),
632+
isOneToOne: z.literal(false),
633+
referencedRelation: z.literal("organizations"),
634+
referencedColumns: z.tuple([z.literal("id")]),
635+
}),
636+
]);
637+
638+
export const modelReleaseRowSchema = z.object({
639+
created_at: z.string(),
640+
description: z.string().nullable(),
641+
id: z.string(),
642+
model_id: z.string(),
643+
model_revision_id: z.string(),
644+
org_id: z.string(),
645+
updated_at: z.string(),
646+
});
647+
648+
export const modelReleaseInsertSchema = z.object({
649+
created_at: z.string().optional(),
650+
description: z.string().optional().nullable(),
651+
id: z.string().optional(),
652+
model_id: z.string(),
653+
model_revision_id: z.string(),
654+
org_id: z.string(),
655+
updated_at: z.string().optional(),
656+
});
657+
658+
export const modelReleaseUpdateSchema = z.object({
659+
created_at: z.string().optional(),
660+
description: z.string().optional().nullable(),
661+
id: z.string().optional(),
662+
model_id: z.string().optional(),
663+
model_revision_id: z.string().optional(),
664+
org_id: z.string().optional(),
665+
updated_at: z.string().optional(),
666+
});
667+
668+
export const modelReleaseRelationshipsSchema = z.tuple([
669+
z.object({
670+
foreignKeyName: z.literal("model_release_model_id_fkey"),
671+
columns: z.tuple([z.literal("model_id")]),
672+
isOneToOne: z.literal(false),
673+
referencedRelation: z.literal("model"),
674+
referencedColumns: z.tuple([z.literal("id")]),
675+
}),
676+
z.object({
677+
foreignKeyName: z.literal("model_release_model_revision_id_fkey"),
678+
columns: z.tuple([z.literal("model_revision_id")]),
679+
isOneToOne: z.literal(false),
680+
referencedRelation: z.literal("model_revision"),
681+
referencedColumns: z.tuple([z.literal("id")]),
682+
}),
683+
z.object({
684+
foreignKeyName: z.literal("model_release_org_id_fkey"),
685+
columns: z.tuple([z.literal("org_id")]),
686+
isOneToOne: z.literal(false),
687+
referencedRelation: z.literal("organizations"),
688+
referencedColumns: z.tuple([z.literal("id")]),
689+
}),
690+
]);
691+
692+
export const publicModelDependencyTypeSchema = z.object({
693+
model_id: z.string().nullable(),
694+
alias: z.string().nullable(),
695+
});
696+
697+
export const publicModelKindOptionsSchema = z.object({
698+
time_column: z.string().nullable(),
699+
time_column_format: z.string().nullable(),
700+
batch_size: z.number().nullable(),
701+
lookback: z.number().nullable(),
702+
unique_key_columns: z.array(z.string()).nullable(),
703+
when_matched_sql: z.string().nullable(),
704+
merge_filter: z.string().nullable(),
705+
valid_from_name: z.string().nullable(),
706+
valid_to_name: z.string().nullable(),
707+
invalidate_hard_deletes: z.boolean().nullable(),
708+
updated_at_column: z.string().nullable(),
709+
updated_at_as_valid_from: z.boolean().nullable(),
710+
scd_columns: z.array(z.string()).nullable(),
711+
execution_time_as_valid_from: z.boolean().nullable(),
712+
});
713+
714+
export const publicModelColumnTypeSchema = z.object({
715+
name: z.string().nullable(),
716+
type: z.string().nullable(),
717+
description: z.string().nullable(),
718+
});
719+
720+
export const modelRevisionInsertSchema = z.object({
721+
clustered_by: z.array(z.string()).optional().nullable(),
722+
code: z.string(),
723+
created_at: z.string().optional(),
724+
cron: z.string(),
725+
depends_on: z.array(publicModelDependencyTypeSchema).optional().nullable(),
726+
description: z.string().optional().nullable(),
727+
display_name: z.string(),
728+
end: z.string().optional().nullable(),
729+
hash: z.string(),
730+
id: z.string().optional(),
731+
kind: publicModelKindSchema,
732+
kind_options: publicModelKindOptionsSchema.optional().nullable(),
733+
language: z.string(),
734+
model_id: z.string(),
735+
name: z.string(),
736+
org_id: z.string(),
737+
partitioned_by: z.array(z.string()).optional().nullable(),
738+
revision_number: z.number(),
739+
schema: z.array(publicModelColumnTypeSchema),
740+
start: z.string().optional().nullable(),
741+
});
742+
743+
export const modelRevisionUpdateSchema = z.object({
744+
clustered_by: z.array(z.string()).optional().nullable(),
745+
code: z.string().optional(),
746+
created_at: z.string().optional(),
747+
cron: z.string().optional(),
748+
depends_on: z.array(publicModelDependencyTypeSchema).optional().nullable(),
749+
description: z.string().optional().nullable(),
750+
display_name: z.string().optional(),
751+
end: z.string().optional().nullable(),
752+
hash: z.string().optional(),
753+
id: z.string().optional(),
754+
kind: publicModelKindSchema.optional(),
755+
kind_options: publicModelKindOptionsSchema.optional().nullable(),
756+
language: z.string().optional(),
757+
model_id: z.string().optional(),
758+
name: z.string().optional(),
759+
org_id: z.string().optional(),
760+
partitioned_by: z.array(z.string()).optional().nullable(),
761+
revision_number: z.number().optional(),
762+
schema: z.array(publicModelColumnTypeSchema).optional(),
763+
start: z.string().optional().nullable(),
764+
});
765+
766+
export const modelRevisionRelationshipsSchema = z.tuple([
767+
z.object({
768+
foreignKeyName: z.literal("model_revision_model_id_fkey"),
769+
columns: z.tuple([z.literal("model_id")]),
770+
isOneToOne: z.literal(false),
771+
referencedRelation: z.literal("model"),
772+
referencedColumns: z.tuple([z.literal("id")]),
773+
}),
774+
z.object({
775+
foreignKeyName: z.literal("model_revision_org_id_fkey"),
776+
columns: z.tuple([z.literal("org_id")]),
777+
isOneToOne: z.literal(false),
778+
referencedRelation: z.literal("organizations"),
779+
referencedColumns: z.tuple([z.literal("id")]),
780+
}),
781+
]);
782+
783+
export const modelRunRowSchema = z.object({
784+
completed_at: z.string().nullable(),
785+
id: z.string(),
786+
logs_url: z.string().nullable(),
787+
model_id: z.string(),
788+
model_release_id: z.string(),
789+
org_id: z.string(),
790+
started_at: z.string(),
791+
status: publicModelRunStatusSchema,
792+
});
793+
794+
export const modelRunInsertSchema = z.object({
795+
completed_at: z.string().optional().nullable(),
796+
id: z.string().optional(),
797+
logs_url: z.string().optional().nullable(),
798+
model_id: z.string(),
799+
model_release_id: z.string(),
800+
org_id: z.string(),
801+
started_at: z.string().optional(),
802+
status: publicModelRunStatusSchema.optional(),
803+
});
804+
805+
export const modelRunUpdateSchema = z.object({
806+
completed_at: z.string().optional().nullable(),
807+
id: z.string().optional(),
808+
logs_url: z.string().optional().nullable(),
809+
model_id: z.string().optional(),
810+
model_release_id: z.string().optional(),
811+
org_id: z.string().optional(),
812+
started_at: z.string().optional(),
813+
status: publicModelRunStatusSchema.optional(),
814+
});
815+
816+
export const modelRunRelationshipsSchema = z.tuple([
817+
z.object({
818+
foreignKeyName: z.literal("model_run_model_id_fkey"),
819+
columns: z.tuple([z.literal("model_id")]),
820+
isOneToOne: z.literal(false),
821+
referencedRelation: z.literal("model"),
822+
referencedColumns: z.tuple([z.literal("id")]),
823+
}),
824+
z.object({
825+
foreignKeyName: z.literal("model_run_model_release_id_fkey"),
826+
columns: z.tuple([z.literal("model_release_id")]),
827+
isOneToOne: z.literal(false),
828+
referencedRelation: z.literal("model_release"),
829+
referencedColumns: z.tuple([z.literal("id")]),
830+
}),
831+
z.object({
832+
foreignKeyName: z.literal("model_run_org_id_fkey"),
833+
columns: z.tuple([z.literal("org_id")]),
834+
isOneToOne: z.literal(false),
835+
referencedRelation: z.literal("organizations"),
836+
referencedColumns: z.tuple([z.literal("id")]),
837+
}),
838+
]);
839+
571840
export const notebooksRowSchema = z.object({
572841
created_at: z.string(),
573842
created_by: z.string(),
@@ -1173,3 +1442,26 @@ export const validateOwnershipLimitsArgsSchema = z.object({
11731442
});
11741443

11751444
export const validateOwnershipLimitsReturnsSchema = z.boolean();
1445+
1446+
export const modelRevisionRowSchema = z.object({
1447+
clustered_by: z.array(z.string()).nullable(),
1448+
code: z.string(),
1449+
created_at: z.string(),
1450+
cron: z.string(),
1451+
depends_on: z.array(publicModelDependencyTypeSchema).nullable(),
1452+
description: z.string().nullable(),
1453+
display_name: z.string(),
1454+
end: z.string().nullable(),
1455+
hash: z.string(),
1456+
id: z.string(),
1457+
kind: publicModelKindSchema,
1458+
kind_options: publicModelKindOptionsSchema.nullable(),
1459+
language: z.string(),
1460+
model_id: z.string(),
1461+
name: z.string(),
1462+
org_id: z.string(),
1463+
partitioned_by: z.array(z.string()).nullable(),
1464+
revision_number: z.number(),
1465+
schema: z.array(publicModelColumnTypeSchema),
1466+
start: z.string().nullable(),
1467+
});

0 commit comments

Comments
 (0)