// Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.27.0 // source: folders.sql package repository import ( "context" "github.com/google/uuid" "github.com/jackc/pgx/v5/pgtype" ) const countDocumentsByFolder = `-- name: CountDocumentsByFolder :one SELECT COUNT(*) as total FROM documents WHERE folderId = $1 ` // CountDocumentsByFolder // // SELECT COUNT(*) as total FROM documents // WHERE folderId = $1 func (q *Queries) CountDocumentsByFolder(ctx context.Context, folderid *uuid.UUID) (int64, error) { row := q.db.QueryRow(ctx, countDocumentsByFolder, folderid) var total int64 err := row.Scan(&total) return total, err } const createFolder = `-- name: CreateFolder :one INSERT INTO folders (path, parentId, clientId, createdBy) VALUES ($1, $2, $3, $4) RETURNING id, path, parentid, clientid, createdat, createdby ` type CreateFolderParams struct { Path string `db:"path"` Parentid *uuid.UUID `db:"parentid"` Clientid string `db:"clientid"` Createdby string `db:"createdby"` } // CreateFolder // // INSERT INTO folders (path, parentId, clientId, createdBy) // VALUES ($1, $2, $3, $4) // RETURNING id, path, parentid, clientid, createdat, createdby func (q *Queries) CreateFolder(ctx context.Context, arg *CreateFolderParams) (*Folder, error) { row := q.db.QueryRow(ctx, createFolder, arg.Path, arg.Parentid, arg.Clientid, arg.Createdby, ) var i Folder err := row.Scan( &i.ID, &i.Path, &i.Parentid, &i.Clientid, &i.Createdat, &i.Createdby, ) return &i, err } const getClientRootFolder = `-- name: GetClientRootFolder :one SELECT id, path, parentid, clientid, createdat, createdby FROM folders WHERE clientId = $1 AND path = '/' ` // Returns the root folder "/" for a client // // SELECT id, path, parentid, clientid, createdat, createdby FROM folders // WHERE clientId = $1 AND path = '/' func (q *Queries) GetClientRootFolder(ctx context.Context, clientid string) (*Folder, error) { row := q.db.QueryRow(ctx, getClientRootFolder, clientid) var i Folder err := row.Scan( &i.ID, &i.Path, &i.Parentid, &i.Clientid, &i.Createdat, &i.Createdby, ) return &i, err } const getDocumentsByFolder = `-- name: GetDocumentsByFolder :many SELECT id, clientid, hash, batch_id, filename, folderid, originalpath FROM documents WHERE folderId = $1 ORDER BY id ` // GetDocumentsByFolder // // SELECT id, clientid, hash, batch_id, filename, folderid, originalpath FROM documents // WHERE folderId = $1 // ORDER BY id func (q *Queries) GetDocumentsByFolder(ctx context.Context, folderid *uuid.UUID) ([]*Document, error) { rows, err := q.db.Query(ctx, getDocumentsByFolder, folderid) if err != nil { return nil, err } defer rows.Close() items := []*Document{} for rows.Next() { var i Document if err := rows.Scan( &i.ID, &i.Clientid, &i.Hash, &i.BatchID, &i.Filename, &i.Folderid, &i.Originalpath, ); err != nil { return nil, err } items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err } return items, nil } const getFolderByID = `-- name: GetFolderByID :one SELECT id, path, parentid, clientid, createdat, createdby FROM folders WHERE id = $1 ` // GetFolderByID // // SELECT id, path, parentid, clientid, createdat, createdby FROM folders // WHERE id = $1 func (q *Queries) GetFolderByID(ctx context.Context, id uuid.UUID) (*Folder, error) { row := q.db.QueryRow(ctx, getFolderByID, id) var i Folder err := row.Scan( &i.ID, &i.Path, &i.Parentid, &i.Clientid, &i.Createdat, &i.Createdby, ) return &i, err } const getFolderByPath = `-- name: GetFolderByPath :one SELECT id, path, parentid, clientid, createdat, createdby FROM folders WHERE clientId = $1 AND path = $2 ` type GetFolderByPathParams struct { Clientid string `db:"clientid"` Path string `db:"path"` } // GetFolderByPath // // SELECT id, path, parentid, clientid, createdat, createdby FROM folders // WHERE clientId = $1 AND path = $2 func (q *Queries) GetFolderByPath(ctx context.Context, arg *GetFolderByPathParams) (*Folder, error) { row := q.db.QueryRow(ctx, getFolderByPath, arg.Clientid, arg.Path) var i Folder err := row.Scan( &i.ID, &i.Path, &i.Parentid, &i.Clientid, &i.Createdat, &i.Createdby, ) return &i, err } const getFolderLabelCounts = `-- name: GetFolderLabelCounts :many SELECT dl.label, COUNT(DISTINCT dl.documentId) as count FROM documents d INNER JOIN documentLabels dl ON d.id = dl.documentId WHERE d.folderId = $1 GROUP BY dl.label ORDER BY dl.label ` type GetFolderLabelCountsRow struct { Label string `db:"label"` Count int64 `db:"count"` } // GetFolderLabelCounts // // SELECT dl.label, COUNT(DISTINCT dl.documentId) as count // FROM documents d // INNER JOIN documentLabels dl ON d.id = dl.documentId // WHERE d.folderId = $1 // GROUP BY dl.label // ORDER BY dl.label func (q *Queries) GetFolderLabelCounts(ctx context.Context, folderid *uuid.UUID) ([]*GetFolderLabelCountsRow, error) { rows, err := q.db.Query(ctx, getFolderLabelCounts, folderid) if err != nil { return nil, err } defer rows.Close() items := []*GetFolderLabelCountsRow{} for rows.Next() { var i GetFolderLabelCountsRow if err := rows.Scan(&i.Label, &i.Count); err != nil { return nil, err } items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err } return items, nil } const getFolderTree = `-- name: GetFolderTree :many WITH RECURSIVE folder_tree AS ( -- Base case: start with the target folder SELECT id, path, parentId, clientId, createdAt, createdBy FROM folders WHERE id = $1 UNION ALL -- Recursive case: find all child folders SELECT f.id, f.path, f.parentId, f.clientId, f.createdAt, f.createdBy FROM folders f INNER JOIN folder_tree ft ON f.parentId = ft.id ) SELECT id, path, parentId, clientId, createdAt, createdBy FROM folder_tree ORDER BY path ` type GetFolderTreeRow struct { ID uuid.UUID `db:"id"` Path string `db:"path"` Parentid *uuid.UUID `db:"parentid"` Clientid string `db:"clientid"` Createdat pgtype.Timestamp `db:"createdat"` Createdby string `db:"createdby"` } // GetFolderTree // // WITH RECURSIVE folder_tree AS ( // -- Base case: start with the target folder // SELECT id, path, parentId, clientId, createdAt, createdBy // FROM folders // WHERE id = $1 // // UNION ALL // // -- Recursive case: find all child folders // SELECT f.id, f.path, f.parentId, f.clientId, f.createdAt, f.createdBy // FROM folders f // INNER JOIN folder_tree ft ON f.parentId = ft.id // ) // SELECT id, path, parentId, clientId, createdAt, createdBy // FROM folder_tree // ORDER BY path func (q *Queries) GetFolderTree(ctx context.Context, dollar_1 *uuid.UUID) ([]*GetFolderTreeRow, error) { rows, err := q.db.Query(ctx, getFolderTree, dollar_1) if err != nil { return nil, err } defer rows.Close() items := []*GetFolderTreeRow{} for rows.Next() { var i GetFolderTreeRow if err := rows.Scan( &i.ID, &i.Path, &i.Parentid, &i.Clientid, &i.Createdat, &i.Createdby, ); err != nil { return nil, err } items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err } return items, nil } const getFoldersByClientID = `-- name: GetFoldersByClientID :many SELECT id, path, parentid, clientid, createdat, createdby FROM folders WHERE clientId = $1 ORDER BY path ` // GetFoldersByClientID // // SELECT id, path, parentid, clientid, createdat, createdby FROM folders // WHERE clientId = $1 // ORDER BY path func (q *Queries) GetFoldersByClientID(ctx context.Context, clientid string) ([]*Folder, error) { rows, err := q.db.Query(ctx, getFoldersByClientID, clientid) if err != nil { return nil, err } defer rows.Close() items := []*Folder{} for rows.Next() { var i Folder if err := rows.Scan( &i.ID, &i.Path, &i.Parentid, &i.Clientid, &i.Createdat, &i.Createdby, ); err != nil { return nil, err } items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err } return items, nil } const getFoldersByParentID = `-- name: GetFoldersByParentID :many SELECT id, path, parentid, clientid, createdat, createdby FROM folders WHERE parentId = $1 ORDER BY path ` // GetFoldersByParentID // // SELECT id, path, parentid, clientid, createdat, createdby FROM folders // WHERE parentId = $1 // ORDER BY path func (q *Queries) GetFoldersByParentID(ctx context.Context, parentid *uuid.UUID) ([]*Folder, error) { rows, err := q.db.Query(ctx, getFoldersByParentID, parentid) if err != nil { return nil, err } defer rows.Close() items := []*Folder{} for rows.Next() { var i Folder if err := rows.Scan( &i.ID, &i.Path, &i.Parentid, &i.Clientid, &i.Createdat, &i.Createdby, ); err != nil { return nil, err } items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err } return items, nil } const getRootFolders = `-- name: GetRootFolders :many SELECT id, path, parentid, clientid, createdat, createdby FROM folders WHERE clientId = $1 AND parentId IS NULL ORDER BY path ` // Returns folders with null parentId (should only be the "/" root folder for each client) // // SELECT id, path, parentid, clientid, createdat, createdby FROM folders // WHERE clientId = $1 AND parentId IS NULL // ORDER BY path func (q *Queries) GetRootFolders(ctx context.Context, clientid string) ([]*Folder, error) { rows, err := q.db.Query(ctx, getRootFolders, clientid) if err != nil { return nil, err } defer rows.Close() items := []*Folder{} for rows.Next() { var i Folder if err := rows.Scan( &i.ID, &i.Path, &i.Parentid, &i.Clientid, &i.Createdat, &i.Createdby, ); err != nil { return nil, err } items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err } return items, nil } const getTopLevelFolders = `-- name: GetTopLevelFolders :many SELECT f.id, f.path, f.parentid, f.clientid, f.createdat, f.createdby FROM folders f INNER JOIN folders root ON f.parentId = root.id WHERE f.clientId = $1 AND root.path = '/' ORDER BY f.path ` // Returns folders that are direct children of the root folder "/" // These are the user-visible top-level folders (e.g., /folder1, /folder2) // // SELECT f.id, f.path, f.parentid, f.clientid, f.createdat, f.createdby FROM folders f // INNER JOIN folders root ON f.parentId = root.id // WHERE f.clientId = $1 AND root.path = '/' // ORDER BY f.path func (q *Queries) GetTopLevelFolders(ctx context.Context, clientid string) ([]*Folder, error) { rows, err := q.db.Query(ctx, getTopLevelFolders, clientid) if err != nil { return nil, err } defer rows.Close() items := []*Folder{} for rows.Next() { var i Folder if err := rows.Scan( &i.ID, &i.Path, &i.Parentid, &i.Clientid, &i.Createdat, &i.Createdby, ); err != nil { return nil, err } items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err } return items, nil } const renameFolder = `-- name: RenameFolder :exec UPDATE folders SET path = $2 WHERE id = $1 ` type RenameFolderParams struct { ID uuid.UUID `db:"id"` Path string `db:"path"` } // RenameFolder // // UPDATE folders // SET path = $2 // WHERE id = $1 func (q *Queries) RenameFolder(ctx context.Context, arg *RenameFolderParams) error { _, err := q.db.Exec(ctx, renameFolder, arg.ID, arg.Path) return err } const upsertFolder = `-- name: UpsertFolder :one INSERT INTO folders (path, parentId, clientId, createdBy) VALUES ($1, $2, $3, $4) ON CONFLICT (clientId, path) DO UPDATE SET path = EXCLUDED.path RETURNING id, path, parentid, clientid, createdat, createdby ` type UpsertFolderParams struct { Path string `db:"path"` Parentid *uuid.UUID `db:"parentid"` Clientid string `db:"clientid"` Createdby string `db:"createdby"` } // Insert a folder if it doesn't exist, or return the existing one // Used for auto-creating folder hierarchies during document upload // // INSERT INTO folders (path, parentId, clientId, createdBy) // VALUES ($1, $2, $3, $4) // ON CONFLICT (clientId, path) DO UPDATE SET path = EXCLUDED.path // RETURNING id, path, parentid, clientid, createdat, createdby func (q *Queries) UpsertFolder(ctx context.Context, arg *UpsertFolderParams) (*Folder, error) { row := q.db.QueryRow(ctx, upsertFolder, arg.Path, arg.Parentid, arg.Clientid, arg.Createdby, ) var i Folder err := row.Scan( &i.ID, &i.Path, &i.Parentid, &i.Clientid, &i.Createdat, &i.Createdby, ) return &i, err }