From f45d7ddec32952f73493de555c802f083ee3ddb7 Mon Sep 17 00:00:00 2001 From: Jonas Lindberg Date: Thu, 29 Feb 2024 15:04:39 +0000 Subject: [PATCH] wip typing overhaul --- apps/aitino/src/lib/models.ts | 9 - apps/aitino/src/lib/server/db.ts | 34 +++- apps/aitino/src/lib/supabase.ts | 2 +- apps/aitino/src/lib/supabase.types.ts | 169 ------------------ apps/aitino/src/lib/types.ts | 4 +- apps/aitino/src/lib/{ => types}/loads.ts | 6 +- apps/aitino/src/lib/types/models.ts | 29 +++ apps/aitino/src/lib/types/supabase.ts | 0 .../routes/app/editors/maeve/+page.server.ts | 41 ++--- .../src/routes/app/sessions/+page.server.ts | 15 +- .../src/routes/app/sessions/Message.svelte | 2 +- apps/aitino/update-supabase-types.sh | 1 + 12 files changed, 95 insertions(+), 217 deletions(-) delete mode 100644 apps/aitino/src/lib/models.ts delete mode 100644 apps/aitino/src/lib/supabase.types.ts rename apps/aitino/src/lib/{ => types}/loads.ts (66%) create mode 100644 apps/aitino/src/lib/types/models.ts create mode 100644 apps/aitino/src/lib/types/supabase.ts create mode 100755 apps/aitino/update-supabase-types.sh diff --git a/apps/aitino/src/lib/models.ts b/apps/aitino/src/lib/models.ts deleted file mode 100644 index 6cb4237ae..000000000 --- a/apps/aitino/src/lib/models.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type Message = { - id: string; - session_id: string; - recipient: string; - content: string; - role: string; - name: string; - created_at: string; -}; diff --git a/apps/aitino/src/lib/server/db.ts b/apps/aitino/src/lib/server/db.ts index e0850737e..b7410cf1c 100644 --- a/apps/aitino/src/lib/server/db.ts +++ b/apps/aitino/src/lib/server/db.ts @@ -1,6 +1,8 @@ import { supabase } from "$lib/supabase"; -import type { TablesInsert } from "$lib/supabase.types"; +import type { TablesInsert } from "$lib/types/supabase"; import { error } from "@sveltejs/kit"; +import type { Maeve } from "$lib/types/models"; +import { getNodesCount } from "$lib/utils.js"; export async function getMessages(session_id: string | null) { if (!session_id) { @@ -21,11 +23,33 @@ export async function getMessages(session_id: string | null) { return data; } -export async function postMaeve(data: TablesInsert<"maeve_nodes">) { +export async function postMaeve(data: TablesInsert<"maeves">) { localStorage.setItem("currentMeaveId", data.id); - return supabase.from("maeve_nodes").upsert(data); + return supabase.from("maeves").upsert(data); } -export async function getMaeve(userId: string) { - return await supabase.from("maeve_nodes").select("*").eq("user_id", userId); +export async function getMaeves(userId: string) { + const { data: data, error: err } = await supabase + .from("maeves") + .select("*") + .eq("user_id", userId); + + let maeves: Maeve[] = []; + + if (err) { + return maeves; + } + + if (data.length === 0) { + return maeves; + } + + for (let i = 0; i < data.length; i++) { + const maeve = data[i] as Maeve; + maeve.count = getNodesCount(maeve.nodes); + + maeves = [...maeves, maeve]; + } + + return maeves; } diff --git a/apps/aitino/src/lib/supabase.ts b/apps/aitino/src/lib/supabase.ts index 8c1819c87..eb9bac97a 100644 --- a/apps/aitino/src/lib/supabase.ts +++ b/apps/aitino/src/lib/supabase.ts @@ -1,6 +1,6 @@ import { createClient } from "@supabase/supabase-js"; import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from "$env/static/public"; -import type { Database } from "$lib/supabase.types"; +import type { Database } from "$lib/types/supabase"; export const supabase = createClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY); diff --git a/apps/aitino/src/lib/supabase.types.ts b/apps/aitino/src/lib/supabase.types.ts deleted file mode 100644 index 0247f0b06..000000000 --- a/apps/aitino/src/lib/supabase.types.ts +++ /dev/null @@ -1,169 +0,0 @@ -export type Json = string | number | boolean | null | { [key: string]: Json | undefined } | Json[]; - -export type Database = { - public: { - Tables: { - contact_form: { - Row: { - description: string | null; - email: string | null; - id: string; - name: string | null; - }; - Insert: { - description?: string | null; - email?: string | null; - id?: string; - name?: string | null; - }; - Update: { - description?: string | null; - email?: string | null; - id?: string; - name?: string | null; - }; - Relationships: []; - }; - maeve_nodes: { - Row: { - created_at: string; - description: string; - edges: Json; - id: string; - nodes: Json; - receiver_id: string | null; - title: string; - user_id: string | null; - }; - Insert: { - created_at?: string; - description?: string; - edges: Json; - id?: string; - nodes: Json; - receiver_id?: string | null; - title?: string; - user_id?: string | null; - }; - Update: { - created_at?: string; - description?: string; - edges?: Json; - id?: string; - nodes?: Json; - receiver_id?: string | null; - title?: string; - user_id?: string | null; - }; - Relationships: []; - }; - waitlist_users: { - Row: { - created_at: string; - email: string; - id: string; - sent_first_email: boolean | null; - }; - Insert: { - created_at?: string; - email: string; - id?: string; - sent_first_email?: boolean | null; - }; - Update: { - created_at?: string; - email?: string; - id?: string; - sent_first_email?: boolean | null; - }; - Relationships: []; - }; - }; - Views: { - [_ in never]: never; - }; - Functions: { - [_ in never]: never; - }; - Enums: { - [_ in never]: never; - }; - CompositeTypes: { - [_ in never]: never; - }; - }; -}; - -export type Tables< - PublicTableNameOrOptions extends - | keyof (Database["public"]["Tables"] & Database["public"]["Views"]) - | { schema: keyof Database }, - TableName extends PublicTableNameOrOptions extends { schema: keyof Database } - ? keyof (Database[PublicTableNameOrOptions["schema"]]["Tables"] & - Database[PublicTableNameOrOptions["schema"]]["Views"]) - : never = never -> = PublicTableNameOrOptions extends { schema: keyof Database } - ? (Database[PublicTableNameOrOptions["schema"]]["Tables"] & - Database[PublicTableNameOrOptions["schema"]]["Views"])[TableName] extends { - Row: infer R; - } - ? R - : never - : PublicTableNameOrOptions extends keyof (Database["public"]["Tables"] & - Database["public"]["Views"]) - ? (Database["public"]["Tables"] & - Database["public"]["Views"])[PublicTableNameOrOptions] extends { - Row: infer R; - } - ? R - : never - : never; - -export type TablesInsert< - PublicTableNameOrOptions extends keyof Database["public"]["Tables"] | { schema: keyof Database }, - TableName extends PublicTableNameOrOptions extends { schema: keyof Database } - ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"] - : never = never -> = PublicTableNameOrOptions extends { schema: keyof Database } - ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends { - Insert: infer I; - } - ? I - : never - : PublicTableNameOrOptions extends keyof Database["public"]["Tables"] - ? Database["public"]["Tables"][PublicTableNameOrOptions] extends { - Insert: infer I; - } - ? I - : never - : never; - -export type TablesUpdate< - PublicTableNameOrOptions extends keyof Database["public"]["Tables"] | { schema: keyof Database }, - TableName extends PublicTableNameOrOptions extends { schema: keyof Database } - ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"] - : never = never -> = PublicTableNameOrOptions extends { schema: keyof Database } - ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends { - Update: infer U; - } - ? U - : never - : PublicTableNameOrOptions extends keyof Database["public"]["Tables"] - ? Database["public"]["Tables"][PublicTableNameOrOptions] extends { - Update: infer U; - } - ? U - : never - : never; - -export type Enums< - PublicEnumNameOrOptions extends keyof Database["public"]["Enums"] | { schema: keyof Database }, - EnumName extends PublicEnumNameOrOptions extends { schema: keyof Database } - ? keyof Database[PublicEnumNameOrOptions["schema"]]["Enums"] - : never = never -> = PublicEnumNameOrOptions extends { schema: keyof Database } - ? Database[PublicEnumNameOrOptions["schema"]]["Enums"][EnumName] - : PublicEnumNameOrOptions extends keyof Database["public"]["Enums"] - ? Database["public"]["Enums"][PublicEnumNameOrOptions] - : never; diff --git a/apps/aitino/src/lib/types.ts b/apps/aitino/src/lib/types.ts index 5784e3015..29f584190 100644 --- a/apps/aitino/src/lib/types.ts +++ b/apps/aitino/src/lib/types.ts @@ -2,9 +2,9 @@ import type { Node } from "@xyflow/svelte"; import type { Writable } from "svelte/store"; import type { Variant } from "$lib/components/ui/button"; -import type { Tables } from "$lib/supabase.types"; +import type { Tables } from "$lib/types/supabase"; -export type Maeve = Tables<"maeve_nodes">; +export type Maeve = Tables<"maeves">; export type SvelteEvent = E & { currentTarget: EventTarget & T; diff --git a/apps/aitino/src/lib/loads.ts b/apps/aitino/src/lib/types/loads.ts similarity index 66% rename from apps/aitino/src/lib/loads.ts rename to apps/aitino/src/lib/types/loads.ts index 1a0f2b9a8..ea29b79f9 100644 --- a/apps/aitino/src/lib/loads.ts +++ b/apps/aitino/src/lib/types/loads.ts @@ -1,6 +1,6 @@ // Contains types for +page.server.ts files data properties -import * as models from "./models"; +import * as models from "$lib/types/models"; export type SessionLoad = { maeveId: string | null; @@ -8,3 +8,7 @@ export type SessionLoad = { messages: models.Message[]; reply: string; }; + +export type MaeveLoad = { + maeve: models.Maeve; +}; diff --git a/apps/aitino/src/lib/types/models.ts b/apps/aitino/src/lib/types/models.ts new file mode 100644 index 000000000..413429cd3 --- /dev/null +++ b/apps/aitino/src/lib/types/models.ts @@ -0,0 +1,29 @@ +import type { Edge, Node } from "@xyflow/svelte"; + +export type Message = { + id: string; + session_id: string; + recipient: string; + content: string; + role: string; + name: string; + created_at: string; +}; + +export type Maeve = { + id: string; + profile_id: string; + reciever_id: string; + title: string; + description: string; + nodes: Node[]; + edges: Edge[]; + created_at: string; +}; + +export type Session = { + id: string; + maeve_id: string; + user_id: string; + created_at: string; +}; diff --git a/apps/aitino/src/lib/types/supabase.ts b/apps/aitino/src/lib/types/supabase.ts new file mode 100644 index 000000000..e69de29bb diff --git a/apps/aitino/src/routes/app/editors/maeve/+page.server.ts b/apps/aitino/src/routes/app/editors/maeve/+page.server.ts index 40ff07637..b18d726fe 100644 --- a/apps/aitino/src/routes/app/editors/maeve/+page.server.ts +++ b/apps/aitino/src/routes/app/editors/maeve/+page.server.ts @@ -1,35 +1,28 @@ import type { Edge, Node } from "@xyflow/svelte"; import * as db from "$lib/server/db"; -import { getNodesCount } from "$lib/utils.js"; +import type { MaeveLoad } from "$lib/types/loads"; import { error } from "@sveltejs/kit"; export const load = async ({ locals: { userId } }) => { - const { data, error: err } = await db.getMaeve(userId); - if (err) { - throw error(500, "Failed attempt at retrieving maeve. Please reload the page."); - } - - if (data.length === 0) { - return { - user_id: userId, - title: "Untitled maeve", - description: "No description", + const data: MaeveLoad = { + maeve: { + id: "", + profile_id: userId, + reciever_id: "", + title: "", + description: "", nodes: [], edges: [], - count: { - agents: 0, - prompts: 0 - } - }; - } + created_at: "" + } + }; - const nodes = data[0].nodes as Node[]; + const maeves = await db.getMaeves(userId); - return { - ...data[0], - nodes, - edges: data[0].edges as Edge[], - count: getNodesCount(nodes) - }; + if (maeves.length !== 0) { + data.maeve = maeves[0]; + } + + return data; }; diff --git a/apps/aitino/src/routes/app/sessions/+page.server.ts b/apps/aitino/src/routes/app/sessions/+page.server.ts index e9d8f3f28..b19a68592 100644 --- a/apps/aitino/src/routes/app/sessions/+page.server.ts +++ b/apps/aitino/src/routes/app/sessions/+page.server.ts @@ -1,13 +1,18 @@ import * as db from "$lib/server/db"; -import type { SessionLoad } from "$lib/loads"; +import type { SessionLoad } from "$lib/types/loads"; -export const load = async () => { +export const load = async ({ locals: { userId } }) => { const data: SessionLoad = { - maeveId: localStorage.getItem("maeveId"), - sessionId: localStorage.getItem("sessionId"), + maeveId: null, + sessionId: null, messages: [], - reply: localStorage.getItem("currentReply") || "" + reply: "" }; + const maeves = await db.getMaeves(userId); + if (maeves.length === 0) { + return data; + } + data.maeveId = maeves[0].id; data.messages = await db.getMessages(data.sessionId); }; diff --git a/apps/aitino/src/routes/app/sessions/Message.svelte b/apps/aitino/src/routes/app/sessions/Message.svelte index f1d92af52..4000ba6d5 100644 --- a/apps/aitino/src/routes/app/sessions/Message.svelte +++ b/apps/aitino/src/routes/app/sessions/Message.svelte @@ -1,7 +1,7 @@