[server][core][fs] ResourceByID

This commit is contained in:
Abhishek Shroff
2025-03-24 01:13:58 +05:30
parent 631a3f4e6c
commit 0a60dfb654
5 changed files with 28 additions and 29 deletions

View File

@@ -235,30 +235,6 @@ func (q *Queries) ReadDir(ctx context.Context, arg ReadDirParams) ([]Resource, e
return items, nil
}
const resourceByID = `-- name: ResourceByID :one
SELECT id, name, parent, dir, created, modified, deleted, content_length, content_type, content_sha256, permissions, grants FROM resources WHERE id = $1::UUID
`
func (q *Queries) ResourceByID(ctx context.Context, resourceID uuid.UUID) (Resource, error) {
row := q.db.QueryRow(ctx, resourceByID, resourceID)
var i Resource
err := row.Scan(
&i.ID,
&i.Name,
&i.Parent,
&i.Dir,
&i.Created,
&i.Modified,
&i.Deleted,
&i.ContentLength,
&i.ContentType,
&i.ContentSha256,
&i.Permissions,
&i.Grants,
)
return i, err
}
const resourceByPath = `-- name: ResourceByPath :one
WITH RECURSIVE nodes(id, parent, search, depth) AS (
SELECT r.id, r.parent, array_remove(string_to_array($1::text, '/', NULL), ''), 0

View File

@@ -13,7 +13,12 @@ func (f filesystem) ResourceByPath(path string) (Resource, error) {
}
func (f filesystem) ResourceByID(id uuid.UUID) (Resource, error) {
return f.resourceFromResult(f.db.ResourceByID(f.ctx, id))
const query = "SELECT * FROM resources WHERE id = $1::UUID"
if rows, err := f.db.Query(f.ctx, query, id); err != nil {
return Resource{}, err
} else {
return pgx.CollectExactlyOneRow(rows, pgx.RowToFunc[Resource](f.readResource))
}
}
func (f filesystem) resourceFromResult(r db.Resource, err error) (Resource, error) {

View File

@@ -49,6 +49,27 @@ func scanResourceRow(row pgx.CollectableRow) (Resource, error) {
return r, err
}
func (f filesystem) readResource(row pgx.CollectableRow) (Resource, error) {
r, err := scanResourceRow(row)
if err != nil {
return r, err
}
permission := Permission(0)
if f.fullAccess {
permission = -1
} else if p, err := readPermissionFromJson(r.permissions, f.username); err != nil {
return Resource{}, err
} else {
permission = p
}
if permission&PermissionRead == 0 {
return Resource{}, ErrResourceNotFound
}
r.f = f
r.userPermission = permission
return r, err
}
func collectNonDirResourceIDs(rows pgx.Rows, e error) (total int, ids []uuid.UUID, err error) {
if e != nil {
return 0, nil, e

View File

@@ -51,7 +51,7 @@ func (f filesystem) TrashList(cursor string, n uint) ([]Resource, string, error)
if rows, err := f.db.Query(f.ctx, query, params...); err != nil {
return nil, "", err
} else if res, err := pgx.CollectRows(rows, scanResourceRow); err != nil {
} else if res, err := pgx.CollectRows(rows, f.readResource); err != nil {
return nil, "", err
} else {
if res == nil {

View File

@@ -31,9 +31,6 @@ SELECT r.*
ON r.id = n.id
WHERE cardinality(n.search) = n.depth;
-- name: ResourceByID :one
SELECT * FROM resources WHERE id = @resource_id::UUID;
-- name: GetAncestors :many
WITH RECURSIVE nodes(id, name, parent, permissions, self) AS (
SELECT r.id, r.name, r.parent, r.permissions, TRUE