mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-08-28 05:25:33 +00:00
Merge branch 'main' of https://github.com/Dhravya/supermemory
This commit is contained in:
commit
dcf166fdee
3 changed files with 88 additions and 30 deletions
|
|
@ -1,9 +1,13 @@
|
|||
import { type Config } from "drizzle-kit";
|
||||
|
||||
const localDb = {
|
||||
url: process.env.LOCAL_DB_URL!
|
||||
}
|
||||
|
||||
export default {
|
||||
schema: "./src/server/db/schema.ts",
|
||||
driver: "d1",
|
||||
dbCredentials: {
|
||||
driver: process.env.LOCAL_DB_URL ? "better-sqlite" : "d1",
|
||||
dbCredentials: process.env.LOCAL_DB_URL ? localDb : {
|
||||
wranglerConfigPath: "./wrangler.toml",
|
||||
dbName: "dev-d1-anycontext",
|
||||
},
|
||||
|
|
|
|||
70
apps/web/src/app/api/spaces/route.ts
Normal file
70
apps/web/src/app/api/spaces/route.ts
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
import { db } from "@/server/db";
|
||||
import { sessions, space, users } from "@/server/db/schema";
|
||||
import { eq } from "drizzle-orm";
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
|
||||
export async function GET(req: NextRequest) {
|
||||
|
||||
const token =
|
||||
req.cookies.get("next-auth.session-token")?.value ??
|
||||
req.cookies.get("__Secure-authjs.session-token")?.value ??
|
||||
req.cookies.get("authjs.session-token")?.value ??
|
||||
req.headers.get("Authorization")?.replace("Bearer ", "");
|
||||
|
||||
if (!token) {
|
||||
return new Response(
|
||||
JSON.stringify({ message: "Invalid Key, session not found." }),
|
||||
{ status: 404 },
|
||||
);
|
||||
}
|
||||
|
||||
if (process.env.RATELIMITER) {
|
||||
const { success } = await process.env.RATELIMITER.limit({ key: token });
|
||||
|
||||
if (!success) {
|
||||
return new Response(JSON.stringify({ message: "Rate limit exceeded" }), {
|
||||
status: 429,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const sessionData = await db
|
||||
.select()
|
||||
.from(sessions)
|
||||
.where(eq(sessions.sessionToken, token!));
|
||||
|
||||
if (!sessionData || sessionData.length === 0) {
|
||||
return new Response(
|
||||
JSON.stringify({ message: "Invalid Key, session not found." }),
|
||||
{ status: 404 },
|
||||
);
|
||||
}
|
||||
|
||||
const userData = await db
|
||||
.select()
|
||||
.from(users)
|
||||
.where(eq(users.id, sessionData[0].userId))
|
||||
.limit(1);
|
||||
|
||||
if (!userData || userData.length === 0) {
|
||||
return NextResponse.json(
|
||||
{ message: "Invalid Key, session not found." },
|
||||
{ status: 404 },
|
||||
);
|
||||
}
|
||||
|
||||
const user = userData[0]
|
||||
|
||||
|
||||
const spaces = await db
|
||||
.select()
|
||||
.from(space)
|
||||
.where(eq(space.user, user.id))
|
||||
.all()
|
||||
|
||||
return NextResponse.json({
|
||||
message: "OK",
|
||||
data: spaces
|
||||
}, { status: 200 })
|
||||
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
import { db } from "@/server/db";
|
||||
import { and, eq, sql } from "drizzle-orm";
|
||||
import { and, eq, sql, inArray } from "drizzle-orm";
|
||||
import {
|
||||
contentToSpace,
|
||||
sessions,
|
||||
|
|
@ -67,17 +67,15 @@ export async function POST(req: NextRequest) {
|
|||
const data = (await req.json()) as {
|
||||
pageContent: string;
|
||||
url: string;
|
||||
space?: string;
|
||||
spaces?: string[];
|
||||
};
|
||||
|
||||
const metadata = await getMetaData(data.url);
|
||||
|
||||
let id: number | undefined = undefined;
|
||||
let storeToSpaces = data.spaces;
|
||||
|
||||
let storeToSpace = data.space;
|
||||
|
||||
if (!storeToSpace) {
|
||||
storeToSpace = "none";
|
||||
if (!storeToSpaces) {
|
||||
storeToSpaces = [];
|
||||
}
|
||||
|
||||
const count = await db
|
||||
|
|
@ -89,7 +87,7 @@ export async function POST(req: NextRequest) {
|
|||
|
||||
console.log("count", count[0].count);
|
||||
|
||||
const storedContentId = await db.insert(storedContent).values({
|
||||
const { id } = (await db.insert(storedContent).values({
|
||||
content: data.pageContent,
|
||||
title: metadata.title,
|
||||
description: metadata.description,
|
||||
|
|
@ -98,9 +96,7 @@ export async function POST(req: NextRequest) {
|
|||
image: metadata.image,
|
||||
savedAt: new Date(),
|
||||
user: session.user.id,
|
||||
});
|
||||
|
||||
id = storedContentId.meta.last_row_id;
|
||||
}).returning({ id: storedContent.id }))[0];
|
||||
|
||||
if (!id) {
|
||||
return NextResponse.json(
|
||||
|
|
@ -109,27 +105,15 @@ export async function POST(req: NextRequest) {
|
|||
);
|
||||
}
|
||||
|
||||
let spaceID = 0;
|
||||
|
||||
const spaceData = await db
|
||||
.select()
|
||||
.from(space)
|
||||
.where(and(eq(space.name, storeToSpace), eq(space.user, session.user.id)))
|
||||
.limit(1);
|
||||
spaceID = spaceData[0]?.id;
|
||||
.where(and(inArray(space.name, storeToSpaces), eq(space.user, session.user.id)))
|
||||
.all()
|
||||
|
||||
if (!spaceData || spaceData.length === 0) {
|
||||
const spaceId = await db.insert(space).values({
|
||||
name: storeToSpace,
|
||||
user: session.user.id,
|
||||
});
|
||||
spaceID = spaceId.meta.last_row_id;
|
||||
}
|
||||
|
||||
await db.insert(contentToSpace).values({
|
||||
contentId: id as number,
|
||||
spaceId: spaceID,
|
||||
});
|
||||
await Promise.all([spaceData.forEach(async space => {
|
||||
await db.insert(contentToSpace).values({ contentId: id, spaceId: space.id })
|
||||
})])
|
||||
|
||||
const res = (await Promise.race([
|
||||
fetch("https://cf-ai-backend.dhravya.workers.dev/add", {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue