basic user-tailored UI

master
Avraham Sakal 4 weeks ago
parent 83e3f867dd
commit 61540f9338

@ -34,7 +34,7 @@ export interface Entity<T> {
construct: (data: T) => T;
create: (data: Omit<T, "id">) => Promise<T>;
createMany: (data: Omit<T, "id">[]) => Promise<T[]>;
findAll: () => Promise<T[]>;
findAll: (user?: { userId: string }) => Promise<T[]>;
findById: (id: string) => Promise<T | undefined>;
update: (id: string, data: Partial<T>) => Promise<void>;
delete: (id: string) => Promise<void>;

@ -58,11 +58,13 @@ export function getDb(POSTGRES_CONNECTION_STRING: string) {
.execute();
return insertedRows;
},
findAll: async () => {
const rows = await dbClient
.selectFrom("conversations")
.selectAll()
.execute();
findAll: async (user) => {
const userId = user?.userId;
let query = await dbClient.selectFrom("conversations");
if (userId) {
query = query.where("userId", "=", userId);
}
const rows = query.selectAll().execute();
return rows;
},
findById: async (id) => {

@ -16,6 +16,7 @@ export const data = async (pageContext: PageContextServer) => {
openrouter: getOpenrouter(
(pageContext.env?.OPENROUTER_API_KEY || env.OPENROUTER_API_KEY) as string
),
// jwt: pageContext.,
});
const [

@ -5,18 +5,19 @@ import {
} from "../../trpc/server";
export const conversations = router({
fetchAll: publicProcedure.query(async ({ ctx: { db } }) => {
return await db.conversations.findAll();
fetchAll: publicProcedure.query(async ({ ctx: { db, jwt } }) => {
console.log("jwt", jwt);
return await db.conversations.findAll({ userId: jwt?.id as string });
}),
fetchOne: publicProcedure
.input((x) => x as { id: string })
.query(async ({ input: { id }, ctx: { db } }) => {
return await db.conversations.findById(id);
}),
start: publicProcedure.mutation(async ({ ctx: { db } }) => {
start: publicProcedure.mutation(async ({ ctx: { db, jwt } }) => {
const row = {
title: "New Conversation",
userId: "019900bb-61b3-7333-b760-b27784dfe33b",
userId: jwt?.id as string,
};
return await db.conversations.create(row);
}),

@ -73,7 +73,7 @@ export const chat = router({
input: { conversationId, messages, systemPrompt, parameters },
ctx,
}) {
const { db, openrouter } = ctx;
const { db, openrouter, jwt } = ctx;
const factsCaller = createCallerFacts(ctx);
const messagesCaller = createCallerMessages(ctx);
const factTriggerCaller = createCallerFactTriggers(ctx);
@ -173,7 +173,7 @@ export const chat = router({
});
const insertedFactsFromUserMessage = await db.facts.createMany(
factsFromUserMessageResponse.object.facts.map((fact) => ({
userId: "019900bb-61b3-7333-b760-b27784dfe33b",
userId: jwt?.id as string,
sourceMessageId: insertedUserMessage.id,
content: fact,
}))
@ -228,7 +228,7 @@ export const chat = router({
const insertedFactsFromAssistantMessage = await db.facts.createMany(
factsFromAssistantMessageResponse.object.facts.map((factContent) => ({
userId: "019900bb-61b3-7333-b760-b27784dfe33b",
userId: jwt?.id as string,
sourceMessageId: insertedAssistantMessage.id,
content: factContent,
createdAt: new Date().toISOString(),

@ -4,7 +4,7 @@ import {
createActionURL,
setEnvDefaults,
} from "@auth/core";
import CredentialsProvider from "@auth/core/providers/credentials";
// import CredentialsProvider from "@auth/core/providers/credentials";
import GoogleProvider from "@auth/core/providers/google";
import type { Session } from "@auth/core/types";
// TODO: stop using universal-middleware and directly integrate server middlewares instead and/or use vike-server https://vike.dev/server. (Bati generates boilerplates that use universal-middleware https://github.com/magne4000/universal-middleware to make Bati's internal logic easier. This is temporary and will be removed soon.)
@ -41,26 +41,26 @@ const authjsConfig = {
secret: "buginoo",
providers: [
// TODO: Choose and implement providers
CredentialsProvider({
name: "Credentials",
credentials: {
username: { label: "Username", type: "text", placeholder: "jsmith" },
password: { label: "Password", type: "password" },
},
async authorize() {
// Add logic here to look up the user from the credentials supplied
const user = {
id: "019900bb-61b3-7333-b760-b27784dfe33b",
name: "J Smith",
email: "jsmith@example.com",
};
// CredentialsProvider({
// name: "Credentials",
// credentials: {
// username: { label: "Username", type: "text", placeholder: "jsmith" },
// password: { label: "Password", type: "password" },
// },
// async authorize() {
// // Add logic here to look up the user from the credentials supplied
// const user = {
// id: "019900bb-61b3-7333-b760-b27784dfe33b",
// name: "J Smith",
// email: "jsmith@example.com",
// };
// Any object returned will be saved in `user` property of the JWT
// If you return null then an error will be displayed advising the user to check their details.
// You can also Reject this callback with an Error thus the user will be sent to the error page with the error message as a query parameter
return user ?? null;
},
}),
// // Any object returned will be saved in `user` property of the JWT
// // If you return null then an error will be displayed advising the user to check their details.
// // You can also Reject this callback with an Error thus the user will be sent to the error page with the error message as a query parameter
// return user ?? null;
// },
// }),
GoogleProvider({
clientId:
"697711350664-t6237s5n3ttjd1npp1qif1aupptkr0va.apps.googleusercontent.com",

@ -9,13 +9,14 @@ import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
import { getDb, getDbClient } from "../database/postgres";
import { getOpenrouter } from "../pages/chat/provider";
import { env as processEnv } from "./env.js";
import { getToken } from "@auth/core/jwt";
export const trpcHandler = ((endpoint) => (request, context, runtime) => {
return fetchRequestHandler({
endpoint,
req: request,
router: appRouter,
createContext({ req, resHeaders }) {
async createContext({ req, resHeaders }) {
const env = getEnv(runtime);
const dbClient = getDbClient(
(env.POSTGRES_CONNECTION_STRING ||
@ -28,6 +29,7 @@ export const trpcHandler = ((endpoint) => (request, context, runtime) => {
const openrouter = getOpenrouter(
(env.OPENROUTER_API_KEY || processEnv.OPENROUTER_API_KEY) as string
);
const jwt = await getToken({ req: request, secret: "buginoo" });
return {
...context,
...runtime,
@ -36,6 +38,7 @@ export const trpcHandler = ((endpoint) => (request, context, runtime) => {
dbClient,
db,
openrouter,
jwt,
};
},
allowMethodOverride: true,

@ -3,6 +3,7 @@ import { TypeCompiler } from "@sinclair/typebox/compiler";
import { initTRPC, TRPCError } from "@trpc/server";
import type { getDb } from "../database/postgres";
import type { getOpenrouter } from "../pages/chat/provider";
import type { JWT } from "@auth/core/jwt";
/**
* Initialization of tRPC backend
@ -13,6 +14,7 @@ const t = initTRPC
object & {
db: ReturnType<typeof getDb>;
openrouter: ReturnType<typeof getOpenrouter>;
jwt?: JWT | null;
}
>()
.create(/*{

Loading…
Cancel
Save