feat: folders db migration

This commit is contained in:
Timothy J. Baek 2024-10-16 02:53:16 -07:00
parent eef9045dcc
commit dedb26fd5c
2 changed files with 54 additions and 9 deletions

View File

@ -0,0 +1,41 @@
"""Add folder table
Revision ID: c69f45358db4
Revises: 3ab32c4b8f59
Create Date: 2024-10-16 02:02:35.241684
"""
from alembic import op
import sqlalchemy as sa
revision = "c69f45358db4"
down_revision = "3ab32c4b8f59"
branch_labels = None
depends_on = None
def upgrade():
op.create_table(
"folder",
sa.Column("id", sa.Text(), primary_key=True, nullable=False),
sa.Column("parent_id", sa.Text(), nullable=True),
sa.Column("user_id", sa.Text(), nullable=True),
sa.Column("name", sa.Text(), nullable=False),
sa.Column("items", sa.JSON(), nullable=True),
sa.Column("meta", sa.JSON(), nullable=True),
sa.Column(
"created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False
),
sa.Column(
"updated_at",
sa.DateTime(),
nullable=False,
server_default=sa.func.now(),
onupdate=sa.func.now(),
),
)
def downgrade():
op.drop_table("folder")

View File

@ -38,15 +38,11 @@
import DeleteConfirmDialog from '$lib/components/common/ConfirmDialog.svelte'; import DeleteConfirmDialog from '$lib/components/common/ConfirmDialog.svelte';
import Spinner from '../common/Spinner.svelte'; import Spinner from '../common/Spinner.svelte';
import Loader from '../common/Loader.svelte'; import Loader from '../common/Loader.svelte';
import FilesOverlay from '../chat/MessageInput/FilesOverlay.svelte';
import AddFilesPlaceholder from '../AddFilesPlaceholder.svelte'; import AddFilesPlaceholder from '../AddFilesPlaceholder.svelte';
import { select } from 'd3-selection';
import SearchInput from './Sidebar/SearchInput.svelte'; import SearchInput from './Sidebar/SearchInput.svelte';
import ChevronDown from '../icons/ChevronDown.svelte';
import ChevronUp from '../icons/ChevronUp.svelte';
import ChevronRight from '../icons/ChevronRight.svelte';
import Collapsible from '../common/Collapsible.svelte';
import Folder from '../common/Folder.svelte'; import Folder from '../common/Folder.svelte';
import Plus from '../icons/Plus.svelte';
import Tooltip from '../common/Tooltip.svelte';
const BREAKPOINT = 768; const BREAKPOINT = 768;
@ -381,7 +377,7 @@
<div class="px-2.5 flex justify-between space-x-1 text-gray-600 dark:text-gray-400"> <div class="px-2.5 flex justify-between space-x-1 text-gray-600 dark:text-gray-400">
<a <a
id="sidebar-new-chat-button" id="sidebar-new-chat-button"
class="flex flex-1 justify-between rounded-xl px-2 h-full hover:bg-gray-100 dark:hover:bg-gray-900 transition" class="flex flex-1 justify-between rounded-lg px-2 h-full hover:bg-gray-100 dark:hover:bg-gray-900 transition"
href="/" href="/"
draggable="false" draggable="false"
on:click={async () => { on:click={async () => {
@ -425,7 +421,7 @@
</a> </a>
<button <button
class=" cursor-pointer px-2 py-2 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-900 transition" class=" cursor-pointer px-2 py-2 flex rounded-lg hover:bg-gray-100 dark:hover:bg-gray-900 transition"
on:click={() => { on:click={() => {
showSidebar.set(!$showSidebar); showSidebar.set(!$showSidebar);
}} }}
@ -452,7 +448,7 @@
{#if $user?.role === 'admin'} {#if $user?.role === 'admin'}
<div class="px-2.5 flex justify-center text-gray-800 dark:text-gray-200"> <div class="px-2.5 flex justify-center text-gray-800 dark:text-gray-200">
<a <a
class="flex-grow flex space-x-3 rounded-xl px-2.5 py-2 hover:bg-gray-100 dark:hover:bg-gray-900 transition" class="flex-grow flex space-x-3 rounded-lg px-2.5 py-2 hover:bg-gray-100 dark:hover:bg-gray-900 transition"
href="/workspace" href="/workspace"
on:click={() => { on:click={() => {
selectedChatId = null; selectedChatId = null;
@ -493,6 +489,14 @@
<div class="absolute z-40 w-full h-full flex justify-center"></div> <div class="absolute z-40 w-full h-full flex justify-center"></div>
{/if} {/if}
<div class="absolute z-40 right-4 top-1">
<Tooltip content={$i18n.t('New folder')}>
<button class="p-1 rounded-lg hover:bg-white/5 transition">
<Plus />
</button>
</Tooltip>
</div>
<SearchInput <SearchInput
bind:value={search} bind:value={search}
on:input={searchDebounceHandler} on:input={searchDebounceHandler}