diff --git a/backend/app/admin/api/v1/sys/__init__.py b/backend/app/admin/api/v1/sys/__init__.py index 0263bcec2..a11ee7f54 100644 --- a/backend/app/admin/api/v1/sys/__init__.py +++ b/backend/app/admin/api/v1/sys/__init__.py @@ -2,7 +2,6 @@ # -*- coding: utf-8 -*- from fastapi import APIRouter -from backend.app.admin.api.v1.sys.config import router as config_router from backend.app.admin.api.v1.sys.data_rule import router as data_rule_router from backend.app.admin.api.v1.sys.dept import router as dept_router from backend.app.admin.api.v1.sys.dict_data import router as dict_data_router @@ -16,7 +15,6 @@ router = APIRouter(prefix='/sys') -router.include_router(config_router, prefix='/configs', tags=['系统参数配置']) router.include_router(dept_router, prefix='/depts', tags=['系统部门']) router.include_router(dict_data_router, prefix='/dict-datas', tags=['系统字典数据']) router.include_router(dict_type_router, prefix='/dict-types', tags=['系统字典类型']) diff --git a/backend/app/admin/conf.py b/backend/app/admin/conf.py index 20fa6c08e..0b6d7bed4 100644 --- a/backend/app/admin/conf.py +++ b/backend/app/admin/conf.py @@ -27,13 +27,10 @@ class AdminSettings(BaseSettings): CAPTCHA_LOGIN_REDIS_PREFIX: str = 'fba:login:captcha' CAPTCHA_LOGIN_EXPIRE_SECONDS: int = 60 * 5 # 3 分钟 - # 参数配置 - CONFIG_BUILT_IN_TYPES: list[str] = ['website', 'protocol', 'policy'] - @lru_cache def get_admin_settings() -> AdminSettings: - """获取 admin 参数配置""" + """获取 admin 配置""" return AdminSettings() diff --git a/backend/app/admin/model/__init__.py b/backend/app/admin/model/__init__.py index 2e7ff5268..b16c32e11 100644 --- a/backend/app/admin/model/__init__.py +++ b/backend/app/admin/model/__init__.py @@ -1,6 +1,5 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -from backend.app.admin.model.config import Config from backend.app.admin.model.data_rule import DataRule from backend.app.admin.model.dept import Dept from backend.app.admin.model.dict_data import DictData diff --git a/backend/plugin/config/__init__.py b/backend/plugin/config/__init__.py new file mode 100644 index 000000000..56fafa58b --- /dev/null +++ b/backend/plugin/config/__init__.py @@ -0,0 +1,2 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- diff --git a/backend/plugin/config/api/__init__.py b/backend/plugin/config/api/__init__.py new file mode 100644 index 000000000..56fafa58b --- /dev/null +++ b/backend/plugin/config/api/__init__.py @@ -0,0 +1,2 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- diff --git a/backend/plugin/config/api/v1/__init__.py b/backend/plugin/config/api/v1/__init__.py new file mode 100644 index 000000000..56fafa58b --- /dev/null +++ b/backend/plugin/config/api/v1/__init__.py @@ -0,0 +1,2 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- diff --git a/backend/plugin/config/api/v1/sys/__init__.py b/backend/plugin/config/api/v1/sys/__init__.py new file mode 100644 index 000000000..56fafa58b --- /dev/null +++ b/backend/plugin/config/api/v1/sys/__init__.py @@ -0,0 +1,2 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- diff --git a/backend/app/admin/api/v1/sys/config.py b/backend/plugin/config/api/v1/sys/config.py similarity index 97% rename from backend/app/admin/api/v1/sys/config.py rename to backend/plugin/config/api/v1/sys/config.py index a3b6b0543..60253c24e 100644 --- a/backend/app/admin/api/v1/sys/config.py +++ b/backend/plugin/config/api/v1/sys/config.py @@ -4,19 +4,19 @@ from fastapi import APIRouter, Depends, Path, Query -from backend.app.admin.schema.config import ( - CreateConfigParam, - GetConfigDetail, - SaveBuiltInConfigParam, - UpdateConfigParam, -) -from backend.app.admin.service.config_service import config_service from backend.common.pagination import DependsPagination, PageData, paging_data from backend.common.response.response_schema import ResponseModel, ResponseSchemaModel, response_base from backend.common.security.jwt import DependsJwtAuth from backend.common.security.permission import RequestPermission from backend.common.security.rbac import DependsRBAC from backend.database.db import CurrentSession +from backend.plugin.config.schema.config import ( + CreateConfigParam, + GetConfigDetail, + SaveBuiltInConfigParam, + UpdateConfigParam, +) +from backend.plugin.config.service.config_service import config_service router = APIRouter() diff --git a/backend/plugin/config/conf.py b/backend/plugin/config/conf.py new file mode 100644 index 000000000..eb1eae5dc --- /dev/null +++ b/backend/plugin/config/conf.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +from functools import lru_cache + +from pydantic_settings import BaseSettings + + +class ConfigSettings(BaseSettings): + """参数配置""" + + # 参数 + CONFIG_BUILT_IN_TYPES: list[str] = ['website', 'protocol', 'policy'] + + +@lru_cache +def get_config_settings() -> ConfigSettings: + """获取参数配置""" + return ConfigSettings() + + +config_settings = get_config_settings() diff --git a/backend/plugin/config/crud/__init__.py b/backend/plugin/config/crud/__init__.py new file mode 100644 index 000000000..56fafa58b --- /dev/null +++ b/backend/plugin/config/crud/__init__.py @@ -0,0 +1,2 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- diff --git a/backend/app/admin/crud/crud_config.py b/backend/plugin/config/crud/crud_config.py similarity index 87% rename from backend/app/admin/crud/crud_config.py rename to backend/plugin/config/crud/crud_config.py index 872174b37..68cc50350 100644 --- a/backend/app/admin/crud/crud_config.py +++ b/backend/plugin/config/crud/crud_config.py @@ -6,9 +6,9 @@ from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy_crud_plus import CRUDPlus -from backend.app.admin.conf import admin_settings -from backend.app.admin.model import Config -from backend.app.admin.schema.config import CreateConfigParam, UpdateConfigParam +from backend.plugin.config.conf import config_settings +from backend.plugin.config.model import Config +from backend.plugin.config.schema.config import CreateConfigParam, UpdateConfigParam class CRUDConfig(CRUDPlus[Config]): @@ -22,7 +22,7 @@ async def get(self, db: AsyncSession, pk: int) -> Config | None: :param pk: 参数配置 ID :return: """ - return await self.select_model_by_column(db, id=pk, type__not_in=admin_settings.CONFIG_BUILT_IN_TYPES) + return await self.select_model_by_column(db, id=pk, type__not_in=config_settings.CONFIG_BUILT_IN_TYPES) async def get_by_type(self, db: AsyncSession, type: str) -> Sequence[Config]: """ @@ -63,7 +63,7 @@ async def get_list(self, name: str | None = None, type: str | None = None) -> Se :param type: 参数配置类型 :return: """ - filters = {'type__not_in': admin_settings.CONFIG_BUILT_IN_TYPES} + filters = {'type__not_in': config_settings.CONFIG_BUILT_IN_TYPES} if name is not None: filters.update(name__like=f'%{name}%') if type is not None: @@ -100,7 +100,7 @@ async def delete(self, db: AsyncSession, pk: list[int]) -> int: :return: """ return await self.delete_model_by_column( - db, allow_multiple=True, id__in=pk, type__not_in=admin_settings.CONFIG_BUILT_IN_TYPES + db, allow_multiple=True, id__in=pk, type__not_in=config_settings.CONFIG_BUILT_IN_TYPES ) diff --git a/backend/plugin/config/model/__init__.py b/backend/plugin/config/model/__init__.py new file mode 100644 index 000000000..47a8bcf47 --- /dev/null +++ b/backend/plugin/config/model/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +from backend.plugin.config.model.config import Config diff --git a/backend/app/admin/model/config.py b/backend/plugin/config/model/config.py similarity index 100% rename from backend/app/admin/model/config.py rename to backend/plugin/config/model/config.py diff --git a/backend/plugin/config/plugin.toml b/backend/plugin/config/plugin.toml new file mode 100644 index 000000000..5c380851f --- /dev/null +++ b/backend/plugin/config/plugin.toml @@ -0,0 +1,6 @@ +[app] +include = 'admin' + +[api.config] +prefix = '/configs' +tags = '系统参数配置' diff --git a/backend/plugin/config/schema/__init__.py b/backend/plugin/config/schema/__init__.py new file mode 100644 index 000000000..56fafa58b --- /dev/null +++ b/backend/plugin/config/schema/__init__.py @@ -0,0 +1,2 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- diff --git a/backend/app/admin/schema/config.py b/backend/plugin/config/schema/config.py similarity index 100% rename from backend/app/admin/schema/config.py rename to backend/plugin/config/schema/config.py diff --git a/backend/plugin/config/service/__init__.py b/backend/plugin/config/service/__init__.py new file mode 100644 index 000000000..56fafa58b --- /dev/null +++ b/backend/plugin/config/service/__init__.py @@ -0,0 +1,2 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- diff --git a/backend/app/admin/service/config_service.py b/backend/plugin/config/service/config_service.py similarity index 93% rename from backend/app/admin/service/config_service.py rename to backend/plugin/config/service/config_service.py index 618c88cd8..6090fee69 100644 --- a/backend/app/admin/service/config_service.py +++ b/backend/plugin/config/service/config_service.py @@ -4,16 +4,16 @@ from sqlalchemy import Select -from backend.app.admin.conf import admin_settings -from backend.app.admin.crud.crud_config import config_dao -from backend.app.admin.model import Config -from backend.app.admin.schema.config import ( +from backend.common.exception import errors +from backend.database.db import async_db_session +from backend.plugin.config.conf import config_settings +from backend.plugin.config.crud.crud_config import config_dao +from backend.plugin.config.model import Config +from backend.plugin.config.schema.config import ( CreateConfigParam, SaveBuiltInConfigParam, UpdateConfigParam, ) -from backend.common.exception import errors -from backend.database.db import async_db_session class ConfigService: @@ -83,7 +83,7 @@ async def create(*, obj: CreateConfigParam) -> None: :return: """ async with async_db_session.begin() as db: - if obj.type in admin_settings.CONFIG_BUILT_IN_TYPES: + if obj.type in config_settings.CONFIG_BUILT_IN_TYPES: raise errors.ForbiddenError(msg='非法类型参数') config = await config_dao.get_by_key(db, obj.key) if config: