admin的数据库文件补全,修复uvue中的数据库接入bug
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user