""" 用户扩展属性 API 路由 """ from apiflask import APIBlueprint from flask_jwt_extended import jwt_required, current_user from iti.applications.common.utils import success from iti.applications.extensions import db from iti_system.extensions.sys_log import sys_log from iti.applications.common.enums import LogType from iti.applications.common.exceptions.biz_exp import BizException from iti_system.service.sys import sys_user_attribute as attr_service from .schemas.user_attribute import ( UserAttributeQuery, UserAttributeSetRequest, UserAttributeItemRequest, UserAttributeBatchRequest, ) from marshmallow import Schema, fields bp = APIBlueprint( "sys_user_attribute", __name__, url_prefix="/user/attributes", tag="系统.用户扩展属性", ) @bp.get("/") @jwt_required() @bp.doc(security="JWT") @bp.input(UserAttributeQuery, location="query") @bp.output(Schema.from_dict({"attributes": fields.Dict()})) def get_user_attributes(user_id: str, query_data: dict): """ 获取用户扩展属性 """ group = query_data.get("group") attributes = attr_service.get_user_attributes(user_id, group) return success({"attributes": attributes}) @bp.put("/") @jwt_required() @bp.doc(security="JWT") @bp.input(UserAttributeSetRequest, location="json") @sys_log( name="设置用户扩展属性", desc="批量设置用户扩展属性", type=LogType.OPERATION, save_db=True, execute_time=True, ) def set_user_attributes(user_id: str, json_data: dict): """ 批量设置用户扩展属性 """ attributes = json_data.get("attributes") group = json_data.get("group") attr_service.set_user_attributes(user_id, attributes, group) return success(message="设置成功") @bp.delete("//") @jwt_required() @bp.doc(security="JWT") @sys_log( name="删除用户扩展属性", desc="删除用户扩展属性分组或单个属性", type=LogType.OPERATION, save_db=True, execute_time=True, ) def delete_user_attributes(user_id: str, group: str): """ 删除用户扩展属性(整个分组) """ attr_service.delete_user_attribute(user_id, group) return success(message="删除成功") @bp.delete("///") @jwt_required() @bp.doc(security="JWT") @sys_log( name="删除用户扩展属性", desc="删除用户单个扩展属性", type=LogType.OPERATION, save_db=True, execute_time=True, ) def delete_user_attribute_key(user_id: str, group: str, key: str): """ 删除用户单个扩展属性 """ attr_service.delete_user_attribute(user_id, group, key) return success(message="删除成功") @bp.get("///") @jwt_required() @bp.doc(security="JWT") @bp.output(Schema.from_dict({"value": fields.Raw()})) def get_user_attribute_value(user_id: str, group: str, key: str): """ 获取单个属性值 """ value = attr_service.get_user_attribute_value(user_id, group, key) return success({"value": value}) @bp.put("///") @jwt_required() @bp.doc(security="JWT") @bp.input(UserAttributeItemRequest, location="json") @sys_log( name="设置用户扩展属性", desc="设置用户单个扩展属性", type=LogType.OPERATION, save_db=True, execute_time=True, ) def set_user_attribute_value(user_id: str, group: str, key: str, json_data: dict): """ 设置单个属性值 """ value = json_data.get("attr_value") attr_type = json_data.get("attr_type", "string") attr_service.set_user_attribute_value(user_id, group, key, value, attr_type) return success(message="设置成功") @bp.post("//batch") @jwt_required() @bp.doc(security="JWT") @bp.input(UserAttributeBatchRequest, location="json") @sys_log( name="批量设置用户扩展属性", desc="批量设置用户扩展属性(支持类型)", type=LogType.OPERATION, save_db=True, execute_time=True, ) def batch_set_user_attributes(user_id: str, json_data: dict): """ 批量设置用户扩展属性(支持指定类型、描述、排序) """ attributes = json_data.get("attributes", []) attr_service.batch_set_user_attributes_with_type(user_id, attributes) return success(message="批量设置成功") @bp.get("/current") @jwt_required() @bp.doc(security="JWT") @bp.input(UserAttributeQuery, location="query") @bp.output(Schema.from_dict({"attributes": fields.Dict()})) def get_current_user_attributes(query_data: dict): """ 获取当前用户的扩展属性 """ group = query_data.get("group") attributes = attr_service.get_user_attributes(current_user.id, group) return success({"attributes": attributes}) @bp.put("/current") @jwt_required() @bp.doc(security="JWT") @bp.input(UserAttributeSetRequest, location="json") @sys_log( name="设置当前用户扩展属性", desc="设置当前用户扩展属性", type=LogType.OPERATION, save_db=True, execute_time=True, ) def set_current_user_attributes(json_data: dict): """ 设置当前用户的扩展属性 """ attributes = json_data.get("attributes") group = json_data.get("group") attr_service.set_user_attributes(current_user.id, attributes, group) return success(message="设置成功")