diff --git a/backend/internal/db/files.sql.go b/backend/internal/db/files.sql.go index e13472f..e84965a 100644 --- a/backend/internal/db/files.sql.go +++ b/backend/internal/db/files.sql.go @@ -14,7 +14,7 @@ import ( const createFile = `-- name: CreateFile :one INSERT INTO files (id, name, mime_type, size, storage_key, checksum, created_at, updated_at) VALUES ($1, $2, $3, $4, $5, $6, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) -RETURNING id, name, mime_type, size, storage_key, checksum, ocr_text, created_at, updated_at +RETURNING id, name, mime_type, size, storage_key, checksum, ocr_text, created_at, updated_at, is_folder ` type CreateFileParams struct { @@ -46,6 +46,36 @@ func (q *Queries) CreateFile(ctx context.Context, arg CreateFileParams) (File, e &i.OcrText, &i.CreatedAt, &i.UpdatedAt, + &i.IsFolder, + ) + return i, err +} + +const createFolder = `-- name: CreateFolder :one +INSERT INTO files (id, name, created_at, updated_at) +VALUES ($1, $2, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) +RETURNING id, name, mime_type, size, storage_key, checksum, ocr_text, created_at, updated_at, is_folder +` + +type CreateFolderParams struct { + ID string `json:"id"` + Name string `json:"name"` +} + +func (q *Queries) CreateFolder(ctx context.Context, arg CreateFolderParams) (File, error) { + row := q.db.QueryRowContext(ctx, createFolder, arg.ID, arg.Name) + var i File + err := row.Scan( + &i.ID, + &i.Name, + &i.MimeType, + &i.Size, + &i.StorageKey, + &i.Checksum, + &i.OcrText, + &i.CreatedAt, + &i.UpdatedAt, + &i.IsFolder, ) return i, err } @@ -61,7 +91,7 @@ func (q *Queries) DeleteFile(ctx context.Context, id string) error { } const getFile = `-- name: GetFile :one -SELECT id, name, mime_type, size, storage_key, checksum, ocr_text, created_at, updated_at FROM files +SELECT id, name, mime_type, size, storage_key, checksum, ocr_text, created_at, updated_at, is_folder FROM files WHERE id = $1 LIMIT 1 ` @@ -78,12 +108,13 @@ func (q *Queries) GetFile(ctx context.Context, id string) (File, error) { &i.OcrText, &i.CreatedAt, &i.UpdatedAt, + &i.IsFolder, ) return i, err } const listFiles = `-- name: ListFiles :many -SELECT id, name, mime_type, size, storage_key, checksum, ocr_text, created_at, updated_at FROM files +SELECT id, name, mime_type, size, storage_key, checksum, ocr_text, created_at, updated_at, is_folder FROM files ORDER BY created_at DESC ` @@ -106,6 +137,7 @@ func (q *Queries) ListFiles(ctx context.Context) ([]File, error) { &i.OcrText, &i.CreatedAt, &i.UpdatedAt, + &i.IsFolder, ); err != nil { return nil, err } @@ -121,7 +153,7 @@ func (q *Queries) ListFiles(ctx context.Context) ([]File, error) { } const listFilesByID = `-- name: ListFilesByID :many -SELECT id, name, mime_type, size, storage_key, checksum, ocr_text, created_at, updated_at FROM files +SELECT id, name, mime_type, size, storage_key, checksum, ocr_text, created_at, updated_at, is_folder FROM files WHERE id = ANY($1::text[]) ORDER BY created_at DESC ` @@ -145,6 +177,7 @@ func (q *Queries) ListFilesByID(ctx context.Context, dollar_1 []string) ([]File, &i.OcrText, &i.CreatedAt, &i.UpdatedAt, + &i.IsFolder, ); err != nil { return nil, err } diff --git a/backend/internal/db/migrations/004_folders.down.sql b/backend/internal/db/migrations/004_folders.down.sql new file mode 100644 index 0000000..6de30ce --- /dev/null +++ b/backend/internal/db/migrations/004_folders.down.sql @@ -0,0 +1,2 @@ +-- VaultDrop 003: tags table +ALTER TABLE files DROP COLUMN IF EXISTS is_folder; \ No newline at end of file diff --git a/backend/internal/db/migrations/004_folders.up.sql b/backend/internal/db/migrations/004_folders.up.sql new file mode 100644 index 0000000..6628717 --- /dev/null +++ b/backend/internal/db/migrations/004_folders.up.sql @@ -0,0 +1 @@ +ALTER TABLE files ADD COLUMN is_folder BOOLEAN NOT NULL DEFAULT false; \ No newline at end of file diff --git a/backend/internal/db/models.go b/backend/internal/db/models.go index a8520c4..dc15ec5 100644 --- a/backend/internal/db/models.go +++ b/backend/internal/db/models.go @@ -19,6 +19,7 @@ type File struct { OcrText string `json:"ocr_text"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` + IsFolder bool `json:"is_folder"` } type FileTag struct { diff --git a/backend/internal/db/queries/files.sql b/backend/internal/db/queries/files.sql index 4a6949f..338823e 100644 --- a/backend/internal/db/queries/files.sql +++ b/backend/internal/db/queries/files.sql @@ -16,6 +16,11 @@ INSERT INTO files (id, name, mime_type, size, storage_key, checksum, created_at, VALUES ($1, $2, $3, $4, $5, $6, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) RETURNING *; +-- name: CreateFolder :one +INSERT INTO files (id, name, created_at, updated_at) +VALUES ($1, $2, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) +RETURNING *; + -- name: UpdateFile :exec UPDATE files SET name = $1, mime_type = $2, ocr_text = $3, updated_at = CURRENT_TIMESTAMP diff --git a/backend/internal/db/tags.sql.go b/backend/internal/db/tags.sql.go index 2bb0b86..fd7a4d8 100644 --- a/backend/internal/db/tags.sql.go +++ b/backend/internal/db/tags.sql.go @@ -64,7 +64,7 @@ func (q *Queries) DeleteTag(ctx context.Context, id string) error { } const getFilesByTagID = `-- name: GetFilesByTagID :many -SELECT f.id, f.name, f.mime_type, f.size, f.storage_key, f.checksum, f.ocr_text, f.created_at, f.updated_at FROM files f +SELECT f.id, f.name, f.mime_type, f.size, f.storage_key, f.checksum, f.ocr_text, f.created_at, f.updated_at, f.is_folder FROM files f JOIN file_tags ft ON f.id = ft.file_id WHERE ft.tag_id = $1 ORDER BY f.created_at DESC @@ -89,6 +89,7 @@ func (q *Queries) GetFilesByTagID(ctx context.Context, tagID sql.NullString) ([] &i.OcrText, &i.CreatedAt, &i.UpdatedAt, + &i.IsFolder, ); err != nil { return nil, err }