admin的数据库文件补全,修复uvue中的数据库接入bug

This commit is contained in:
comlibmb
2026-02-25 10:02:50 +08:00
parent 5d00e3d74e
commit dc8f899610
40 changed files with 1629 additions and 625 deletions

View File

@@ -2,9 +2,8 @@
-- Admin 商品模块 - 删除分类 RPC
-- 位置docs/sql/30_rpc/product/
-- 对象类型RPC 函数SECURITY DEFINER
-- 方案:方案 1有子项禁止删除
-- 版本v1
-- 依赖ml_categories, ak_users 表已存在
-- 版本v1支持级联软删除商品关联
-- 依赖ml_categories, ml_products, ak_users 表已存在
-- =====================================================================================
CREATE OR REPLACE FUNCTION public.rpc_admin_category_delete(
@@ -15,31 +14,36 @@ SECURITY DEFINER
SET search_path = public
LANGUAGE plpgsql
AS $$
DECLARE
v_user_id UUID;
BEGIN
-- 1. 权限检查
IF NOT EXISTS (
SELECT 1 FROM public.ak_users
WHERE id = auth.uid() AND role IN ('admin', 'analytics')
) THEN
RAISE EXCEPTION 'Permission denied';
IF NOT public.check_admin_permission('product:category:delete') THEN
RAISE EXCEPTION 'Permission denied: product:category:delete';
END IF;
-- 2. 检查是否有子分类 (方案 1)
-- 2. 获取当前操作用户 ID
SELECT id INTO v_user_id FROM public.ak_users WHERE auth_id = auth.uid();
-- 3. 检查是否有子分类 (方案 1)
IF EXISTS (
SELECT 1 FROM public.ml_categories WHERE parent_id = p_id
SELECT 1 FROM public.ml_categories
WHERE parent_id = p_id AND deleted_at IS NULL
) THEN
RAISE EXCEPTION '请先删除该分类下的子分类';
END IF;
-- 3. 检查是否有商品关联 (可选,通常作为安全保障)
IF EXISTS (
SELECT 1 FROM public.ml_products WHERE category_id = p_id AND status != 4
) THEN
RAISE EXCEPTION '该分类下仍有商品,无法删除';
END IF;
-- 4. 级联软删除:该分类下的所有商品
UPDATE public.ml_products
SET deleted_at = now(),
deleted_by = v_user_id
WHERE category_id = p_id AND deleted_at IS NULL;
-- 4. 执行删除
DELETE FROM public.ml_categories WHERE id = p_id;
-- 5. 执行删除分类本身
UPDATE public.ml_categories
SET deleted_at = now(),
deleted_by = v_user_id
WHERE id = p_id AND deleted_at IS NULL;
RETURN FOUND;
END;