aiteamutils 0.2.70__py3-none-any.whl → 0.2.72__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
aiteamutils/base_service.py
CHANGED
@@ -0,0 +1,78 @@
|
|
1
|
+
#기본 라이브러리
|
2
|
+
from fastapi import Request
|
3
|
+
from typing import TypeVar, Generic, Type, Dict, Any, Union, List
|
4
|
+
from sqlalchemy.orm import DeclarativeBase
|
5
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
6
|
+
from datetime import datetime
|
7
|
+
|
8
|
+
#패키지 라이브러리
|
9
|
+
from .exceptions import ErrorCode, CustomException
|
10
|
+
from .base_repository import BaseRepository
|
11
|
+
from .database import (
|
12
|
+
process_response,
|
13
|
+
build_search_filters
|
14
|
+
)
|
15
|
+
|
16
|
+
ModelType = TypeVar("ModelType", bound=DeclarativeBase)
|
17
|
+
|
18
|
+
class BaseService(Generic[ModelType]):
|
19
|
+
##################
|
20
|
+
# 1. 초기화 영역 #
|
21
|
+
##################
|
22
|
+
def __init__(
|
23
|
+
self,
|
24
|
+
model: Type[ModelType],
|
25
|
+
repository: BaseRepository[ModelType],
|
26
|
+
db_session: AsyncSession,
|
27
|
+
additional_models: Dict[str, Type[DeclarativeBase]] = None,
|
28
|
+
):
|
29
|
+
self.model = model
|
30
|
+
self.repository = repository
|
31
|
+
self.db_session = db_session
|
32
|
+
self.additional_models = additional_models or {},
|
33
|
+
|
34
|
+
async def list(
|
35
|
+
self,
|
36
|
+
skip: int = 0,
|
37
|
+
limit: int = 100,
|
38
|
+
filters: Dict[str, Any] | None = None,
|
39
|
+
search_params: Dict[str, Any] | None = None,
|
40
|
+
model_name: str | None = None,
|
41
|
+
request: Request | None = None,
|
42
|
+
response_model: Any = None
|
43
|
+
) -> List[Dict[str, Any]]:
|
44
|
+
try:
|
45
|
+
# 검색 조건 처리 및 필터 병합
|
46
|
+
if search_params:
|
47
|
+
search_filters = build_search_filters(request, search_params)
|
48
|
+
if filters:
|
49
|
+
# 기존 filters와 search_filters 병합 (search_filters가 우선 적용)
|
50
|
+
filters.update(search_filters)
|
51
|
+
else:
|
52
|
+
filters = search_filters
|
53
|
+
|
54
|
+
# 모델 이름을 통한 동적 처리
|
55
|
+
if model_name:
|
56
|
+
if model_name not in self.additional_models:
|
57
|
+
raise CustomException(
|
58
|
+
ErrorCode.INVALID_REQUEST,
|
59
|
+
detail=f"Model {model_name} not registered",
|
60
|
+
source_function=f"{self.__class__.__name__}.list"
|
61
|
+
)
|
62
|
+
model = self.additional_models[model_name]
|
63
|
+
return await self.repository.list(skip=skip, limit=limit, filters=filters, model=model)
|
64
|
+
|
65
|
+
return await self.repository.list(skip=skip, limit=limit, filters=filters)
|
66
|
+
except CustomException as e:
|
67
|
+
e.detail = f"Service list error for {self.repository.model.__tablename__}: {e.detail}"
|
68
|
+
e.source_function = f"{self.__class__.__name__}.list -> {e.source_function}"
|
69
|
+
raise e
|
70
|
+
except Exception as e:
|
71
|
+
raise CustomException(
|
72
|
+
ErrorCode.INTERNAL_ERROR,
|
73
|
+
detail=str(e),
|
74
|
+
source_function=f"{self.__class__.__name__}.list",
|
75
|
+
original_error=e
|
76
|
+
)
|
77
|
+
|
78
|
+
|
aiteamutils/version.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
"""버전 정보"""
|
2
|
-
__version__ = "0.2.
|
2
|
+
__version__ = "0.2.72"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
aiteamutils/__init__.py,sha256=kRBpRjark0M8ZwFfmKiMFol6CbIILN3WE4f6_P6iIq0,1089
|
2
2
|
aiteamutils/base_model.py,sha256=ODEnjvUVoxQ1RPCfq8-uZTfTADIA4c7Z3E6G4EVsSX0,2708
|
3
3
|
aiteamutils/base_repository.py,sha256=tG_xz4hHYAN3-wkrLvEPxyTucV4pzT6dihoKVJp2JIc,2079
|
4
|
-
aiteamutils/base_service.py,sha256=
|
4
|
+
aiteamutils/base_service.py,sha256=CfNBAgFREqOC1791ex2plKLZiSZ1U5el4GvvkVsN4qU,2901
|
5
5
|
aiteamutils/cache.py,sha256=07xBGlgAwOTAdY5mnMOQJ5EBxVwe8glVD7DkGEkxCtw,1373
|
6
6
|
aiteamutils/config.py,sha256=YdalpJb70-txhGJAS4aaKglEZAFVWgfzw5BXSWpkUz4,3232
|
7
7
|
aiteamutils/database.py,sha256=CbX7eNFwqz9O4ywVQMLlLrb6hDUJPtsgGg_Hgef-p2I,8126
|
@@ -9,7 +9,7 @@ aiteamutils/enums.py,sha256=ipZi6k_QD5-3QV7Yzv7bnL0MjDz-vqfO9I5L77biMKs,632
|
|
9
9
|
aiteamutils/exceptions.py,sha256=_lKWXq_ujNj41xN6LDE149PwsecAP7lgYWbOBbLOntg,15368
|
10
10
|
aiteamutils/security.py,sha256=xFVrjttxwXB1TTjqgRQQgQJQohQBT28vuW8FVLjvi-M,10103
|
11
11
|
aiteamutils/validators.py,sha256=PvI9hbMEAqTawgxPbiWRyx2r9yTUrpNBQs1AD3w4F2U,7726
|
12
|
-
aiteamutils/version.py,sha256=
|
13
|
-
aiteamutils-0.2.
|
14
|
-
aiteamutils-0.2.
|
15
|
-
aiteamutils-0.2.
|
12
|
+
aiteamutils/version.py,sha256=9RIZRehNxp6dA61_1-bTUirXc1q9QDosp-QZ_woFu0g,42
|
13
|
+
aiteamutils-0.2.72.dist-info/METADATA,sha256=WsFA3r2H1XUIsDXmhenz97uj3eT5jyZpN4CbNbps8rA,1718
|
14
|
+
aiteamutils-0.2.72.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
15
|
+
aiteamutils-0.2.72.dist-info/RECORD,,
|
File without changes
|