Scope knowledge and image libraries by brand
Frontend CI / Frontend (push) Successful in 2m59s
Backend CI / Backend (push) Successful in 14m58s

This commit is contained in:
2026-06-30 12:30:10 +08:00
parent 95ddb3057f
commit ced0c4ec0f
35 changed files with 1136 additions and 326 deletions
@@ -1,7 +1,8 @@
-- name: ListImageAssets :many
SELECT id, tenant_id, folder_id, object_key, name, size_bytes, status, created_by, created_at, updated_at
SELECT id, tenant_id, brand_id, folder_id, object_key, name, size_bytes, status, created_by, created_at, updated_at
FROM image_assets
WHERE tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id)
AND status = 'active'
AND deleted_at IS NULL
AND (
@@ -17,6 +18,7 @@ LIMIT sqlc.arg(page_size) OFFSET sqlc.arg(page_offset);
SELECT COUNT(*)::INT AS total
FROM image_assets
WHERE tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id)
AND status = 'active'
AND deleted_at IS NULL
AND (
@@ -27,39 +29,50 @@ WHERE tenant_id = sqlc.arg(tenant_id)
AND (sqlc.narg(search_query)::TEXT IS NULL OR name ILIKE '%' || sqlc.narg(search_query)::TEXT || '%');
-- name: GetImageAsset :one
SELECT id, tenant_id, folder_id, object_key, name, size_bytes, status, created_by, created_at, updated_at
SELECT id, tenant_id, brand_id, folder_id, object_key, name, size_bytes, status, created_by, created_at, updated_at
FROM image_assets
WHERE id = sqlc.arg(id) AND tenant_id = sqlc.arg(tenant_id);
WHERE id = sqlc.arg(id)
AND tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id);
-- name: InsertImageAsset :one
INSERT INTO image_assets (tenant_id, folder_id, object_key, name, size_bytes, status, created_by)
VALUES (sqlc.arg(tenant_id), sqlc.narg(folder_id), sqlc.arg(object_key), sqlc.arg(name), sqlc.arg(size_bytes), sqlc.arg(status), sqlc.arg(created_by))
INSERT INTO image_assets (tenant_id, brand_id, folder_id, object_key, name, size_bytes, status, created_by)
VALUES (sqlc.arg(tenant_id), sqlc.arg(brand_id), sqlc.narg(folder_id), sqlc.arg(object_key), sqlc.arg(name), sqlc.arg(size_bytes), sqlc.arg(status), sqlc.arg(created_by))
RETURNING id;
-- name: UpdateImageAssetStatus :exec
UPDATE image_assets
SET status = sqlc.arg(status), updated_at = NOW()
WHERE id = sqlc.arg(id) AND tenant_id = sqlc.arg(tenant_id);
WHERE id = sqlc.arg(id)
AND tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id);
-- name: UpdateImageAssetDeleted :exec
UPDATE image_assets
SET status = 'deleted', deleted_at = NOW(), updated_at = NOW()
WHERE id = sqlc.arg(id) AND tenant_id = sqlc.arg(tenant_id);
WHERE id = sqlc.arg(id)
AND tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id);
-- name: UpdateImageAssetName :exec
UPDATE image_assets
SET name = sqlc.arg(name), updated_at = NOW()
WHERE id = sqlc.arg(id) AND tenant_id = sqlc.arg(tenant_id);
WHERE id = sqlc.arg(id)
AND tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id);
-- name: UpdateImageAssetFolder :exec
UPDATE image_assets
SET folder_id = sqlc.narg(folder_id), updated_at = NOW()
WHERE id = sqlc.arg(id) AND tenant_id = sqlc.arg(tenant_id);
WHERE id = sqlc.arg(id)
AND tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id);
-- name: ListActiveImagesByFolder :many
SELECT id, object_key, size_bytes
FROM image_assets
WHERE tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id)
AND folder_id = sqlc.arg(folder_id)
AND status = 'active'
AND deleted_at IS NULL;
@@ -68,6 +81,7 @@ WHERE tenant_id = sqlc.arg(tenant_id)
UPDATE image_assets
SET status = 'pending_delete', folder_id = NULL, updated_at = NOW()
WHERE tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id)
AND folder_id = sqlc.arg(folder_id)
AND status = 'active'
AND deleted_at IS NULL;
@@ -76,6 +90,7 @@ WHERE tenant_id = sqlc.arg(tenant_id)
SELECT COUNT(*)::INT AS count
FROM image_assets
WHERE tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id)
AND folder_id IS NULL
AND status = 'active'
AND deleted_at IS NULL;
@@ -1,35 +1,43 @@
-- name: ListImageFolders :many
SELECT f.id, f.tenant_id, f.name, f.created_at, f.updated_at,
SELECT f.id, f.tenant_id, f.brand_id, f.name, f.created_at, f.updated_at,
COUNT(ia.id) FILTER (WHERE ia.status = 'active' AND ia.deleted_at IS NULL)::INT AS image_count
FROM image_folders f
LEFT JOIN image_assets ia ON ia.tenant_id = f.tenant_id AND ia.folder_id = f.id
LEFT JOIN image_assets ia ON ia.tenant_id = f.tenant_id AND ia.brand_id = f.brand_id AND ia.folder_id = f.id
WHERE f.tenant_id = sqlc.arg(tenant_id)
AND f.brand_id = sqlc.arg(brand_id)
GROUP BY f.id
ORDER BY f.name;
-- name: CreateImageFolder :one
INSERT INTO image_folders (tenant_id, name)
VALUES (sqlc.arg(tenant_id), sqlc.arg(name))
INSERT INTO image_folders (tenant_id, brand_id, name)
VALUES (sqlc.arg(tenant_id), sqlc.arg(brand_id), sqlc.arg(name))
RETURNING id;
-- name: UpdateImageFolder :exec
UPDATE image_folders
SET name = sqlc.arg(name), updated_at = NOW()
WHERE id = sqlc.arg(id) AND tenant_id = sqlc.arg(tenant_id);
WHERE id = sqlc.arg(id)
AND tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id);
-- name: GetImageFolder :one
SELECT id, tenant_id, name, created_at, updated_at
SELECT id, tenant_id, brand_id, name, created_at, updated_at
FROM image_folders
WHERE id = sqlc.arg(id) AND tenant_id = sqlc.arg(tenant_id);
WHERE id = sqlc.arg(id)
AND tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id);
-- name: DeleteImageFolder :exec
DELETE FROM image_folders
WHERE id = sqlc.arg(id) AND tenant_id = sqlc.arg(tenant_id);
WHERE id = sqlc.arg(id)
AND tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id);
-- name: CountActiveImagesInFolder :one
SELECT COUNT(*)::INT AS count
FROM image_assets
WHERE tenant_id = sqlc.arg(tenant_id)
AND brand_id = sqlc.arg(brand_id)
AND folder_id = sqlc.arg(folder_id)
AND status = 'active'
AND deleted_at IS NULL;