diff options
| author | yxshv <[email protected]> | 2024-04-13 23:14:06 +0530 |
|---|---|---|
| committer | yxshv <[email protected]> | 2024-04-13 23:14:06 +0530 |
| commit | a7d72c798d18ae55f9a5de13fa8a94346346779d (patch) | |
| tree | dd21d39bd0f95446c12d25edb7aaea61ac38f529 /apps/web/src | |
| parent | order by savedAt (diff) | |
| download | supermemory-a7d72c798d18ae55f9a5de13fa8a94346346779d.tar.xz supermemory-a7d72c798d18ae55f9a5de13fa8a94346346779d.zip | |
delete spaces and memories
Diffstat (limited to 'apps/web/src')
| -rw-r--r-- | apps/web/src/actions/db.ts | 40 | ||||
| -rw-r--r-- | apps/web/src/components/Sidebar/MemoriesBar.tsx | 4 | ||||
| -rw-r--r-- | apps/web/src/contexts/MemoryContext.tsx | 31 | ||||
| -rw-r--r-- | apps/web/src/server/db/schema.ts | 12 |
4 files changed, 71 insertions, 16 deletions
diff --git a/apps/web/src/actions/db.ts b/apps/web/src/actions/db.ts index 215f2f87..a7b5bd47 100644 --- a/apps/web/src/actions/db.ts +++ b/apps/web/src/actions/db.ts @@ -222,3 +222,43 @@ export async function addMemory(content: typeof storedContent.$inferInsert, spac } } + +export async function deleteSpace(id: number) { + + const user = await getUser() + + if (!user) { + return null + } + + const [deleted] = await db.delete(space) + .where(and(eq(space.user, user.id), eq(space.id, id))) + .returning(); + + await db.delete(contentToSpace) + .where(eq(contentToSpace.spaceId, id)); + + return deleted + +} + + +export async function deleteMemory(id: number) { + + + const user = await getUser() + + if (!user) { + return null + } + + const [deleted] = await db.delete(storedContent) + .where(and(eq(storedContent.user, user.id), eq(storedContent.id, id))) + .returning(); + + await db.delete(contentToSpace) + .where(eq(contentToSpace.contentId, id)); + + return deleted + +} diff --git a/apps/web/src/components/Sidebar/MemoriesBar.tsx b/apps/web/src/components/Sidebar/MemoriesBar.tsx index 9b0376e3..aaf40fd9 100644 --- a/apps/web/src/components/Sidebar/MemoriesBar.tsx +++ b/apps/web/src/components/Sidebar/MemoriesBar.tsx @@ -46,7 +46,6 @@ import { ExpandedSpace } from "./ExpandedSpace"; import { StoredContent, StoredSpace } from "@/server/db/schema"; import Image from "next/image" import { useDebounce } from "@/hooks/useDebounce"; -import { searchMemoriesAndSpaces } from "@/actions/db"; export function MemoriesBar() { const [parent, enableAnimations] = useAutoAnimate(); @@ -165,7 +164,7 @@ export function MemoriesBar() { <> {spaces.map((space) => ( <SpaceItem - onDelete={() => {}} + onDelete={() => deleteSpace(space.id)} key={space.id} //onClick={() => setExpandedSpace(space.id)} {...space} @@ -256,7 +255,6 @@ export function SpaceItem({ }, [cachedMemories]) const _name = name.length > 10 ? name.slice(0, 10) + "..." : name - return ( <motion.div ref={itemRef} diff --git a/apps/web/src/contexts/MemoryContext.tsx b/apps/web/src/contexts/MemoryContext.tsx index 44fc9799..08ffbcf5 100644 --- a/apps/web/src/contexts/MemoryContext.tsx +++ b/apps/web/src/contexts/MemoryContext.tsx @@ -1,7 +1,7 @@ "use client"; import React, { useCallback } from "react"; import { ChachedSpaceContent, StoredContent, storedContent, StoredSpace } from "@/server/db/schema"; -import { addMemory, searchMemoriesAndSpaces, addSpace, fetchContentForSpace } from "@/actions/db"; +import { addMemory, searchMemoriesAndSpaces, addSpace, fetchContentForSpace, deleteSpace, deleteMemory } from "@/actions/db"; import { User } from "next-auth"; export type SearchResult = { @@ -13,20 +13,22 @@ export type SearchResult = { // temperory (will change) export const MemoryContext = React.createContext<{ spaces: StoredSpace[]; - deleteSpace: (id: number) => Promise<void>; freeMemories: StoredContent[]; addSpace: typeof addSpace; addMemory: typeof addMemory; cachedMemories: ChachedSpaceContent[]; search: typeof searchMemoriesAndSpaces; + deleteSpace: typeof deleteSpace; + deleteMemory: typeof deleteMemory; }>({ spaces: [], freeMemories: [], addMemory: (() => {}) as unknown as (typeof addMemory), addSpace: (async () => {}) as unknown as (typeof addSpace), - deleteSpace: async () => {}, cachedMemories: [], - search: async () => [] + search: async () => [], + deleteMemory: (() => {}) as unknown as (typeof deleteMemory), + deleteSpace: (() => {}) as unknown as (typeof deleteSpace) }); export const MemoryProvider: React.FC< @@ -46,8 +48,22 @@ export const MemoryProvider: React.FC< initialCachedMemories ); - const deleteSpace = async (id: number) => { - setSpaces((prev) => prev.filter((s) => s.id !== id)); + const _deleteSpace: typeof deleteSpace = async (...params) => { + const deleted = (await deleteSpace(...params))! + + setSpaces(prev => prev.filter(i => i.id !== deleted.id)) + setCachedMemories(prev => prev.filter(i => i.space !== deleted.id)) + + return deleted + } + + const _deleteMemory: typeof deleteMemory = async (...params) => { + const deleted = (await deleteMemory(...params))! + + setCachedMemories(prev => prev.filter(i => i.id !== deleted.id)) + setFreeMemories(prev => prev.filter(i => i.id !== deleted.id)) + + return deleted } // const fetchMemories = useCallback(async (query: string) => { @@ -94,9 +110,10 @@ export const MemoryProvider: React.FC< search: searchMemoriesAndSpaces, spaces, addSpace: _addSpace, - deleteSpace, + deleteSpace: _deleteSpace, freeMemories, cachedMemories, + deleteMemory: _deleteMemory, addMemory: _addMemory, }} > diff --git a/apps/web/src/server/db/schema.ts b/apps/web/src/server/db/schema.ts index f36e7740..f3eafb94 100644 --- a/apps/web/src/server/db/schema.ts +++ b/apps/web/src/server/db/schema.ts @@ -34,7 +34,7 @@ export const accounts = createTable( id: integer("id").notNull().primaryKey({ autoIncrement: true }), userId: text("userId", { length: 255 }) .notNull() - .references(() => users.id), + .references(() => users.id, { onDelete: 'cascade' }), type: text("type", { length: 255 }).notNull(), provider: text("provider", { length: 255 }).notNull(), providerAccountId: text("providerAccountId", { length: 255 }).notNull(), @@ -60,7 +60,7 @@ export const sessions = createTable( sessionToken: text("sessionToken", { length: 255 }).notNull(), userId: text("userId", { length: 255 }) .notNull() - .references(() => users.id), + .references(() => users.id, { onDelete: 'cascade' }), expires: int("expires", { mode: "timestamp" }).notNull(), }, (session) => ({ @@ -94,7 +94,7 @@ export const storedContent = createTable( "page", ), image: text("image", { length: 255 }), - user: text("user", { length: 255 }).references(() => users.id), + user: text("user", { length: 255 }).references(() => users.id, { onDelete: 'cascade' }), }, (sc) => ({ urlIdx: index("storedContent_url_idx").on(sc.url), @@ -109,10 +109,10 @@ export const contentToSpace = createTable( { contentId: integer("contentId") .notNull() - .references(() => storedContent.id), + .references(() => storedContent.id, { onDelete: 'cascade' }), spaceId: integer("spaceId") .notNull() - .references(() => space.id), + .references(() => space.id, { onDelete: 'cascade' }), }, (cts) => ({ compoundKey: primaryKey({ columns: [cts.contentId, cts.spaceId] }), @@ -124,7 +124,7 @@ export const space = createTable( { id: integer("id").notNull().primaryKey({ autoIncrement: true }), name: text("name").notNull().unique().default("none"), - user: text("user", { length: 255 }).references(() => users.id), + user: text("user", { length: 255 }).references(() => users.id, { onDelete: 'cascade' }), }, (space) => ({ nameIdx: index("spaces_name_idx").on(space.name), |