From a694826c36fc0f6308818f533f0e4344102e7ad0 Mon Sep 17 00:00:00 2001 From: mini Date: Fri, 8 Aug 2025 01:17:38 +0900 Subject: [PATCH 1/9] =?UTF-8?q?feat:=20api=20router=20=EB=93=B1=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/api_router.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/api/api_router.py b/app/api/api_router.py index b1c2d39..d7c6eab 100644 --- a/app/api/api_router.py +++ b/app/api/api_router.py @@ -2,7 +2,7 @@ from fastapi import APIRouter -from app.api import api_key_api, driver_api, test_api, user_db_api +from app.api import ai_chat_api, api_key_api, driver_api, test_api, user_db_api api_router = APIRouter() @@ -13,3 +13,4 @@ api_router.include_router(driver_api.router, prefix="/driver", tags=["Driver"]) api_router.include_router(user_db_api.router, prefix="/user/db", tags=["UserDb"]) api_router.include_router(api_key_api.router, prefix="/keys", tags=["API Key"]) +api_router.include_router(ai_chat_api.router, prefix="/chats", tags=["AI Chat"]) From 6877834cb0641ceed95ddad1067616eca7245281 Mon Sep 17 00:00:00 2001 From: mini Date: Fri, 8 Aug 2025 01:21:03 +0900 Subject: [PATCH 2/9] =?UTF-8?q?feat:=20api=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/ai_chat_api.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 app/api/ai_chat_api.py diff --git a/app/api/ai_chat_api.py b/app/api/ai_chat_api.py new file mode 100644 index 0000000..87ef3a1 --- /dev/null +++ b/app/api/ai_chat_api.py @@ -0,0 +1,34 @@ +from fastapi import APIRouter, Depends + +from app.core.response import ResponseMessage +from app.core.status import CommonCode +from app.schemas.ai_chat.create_model import AIChatCreate +from app.schemas.ai_chat.response_model import AIChatResponse +from app.services.ai_chat_service import AIChatService, ai_chat_service + +ai_chat_service_dependency = Depends(lambda: ai_chat_service) + +router = APIRouter() + + +@router.post( + "/actions", + response_model=ResponseMessage[AIChatResponse], + summary="Chat Tab 생성", + description="새로운 Chat Tab을 생성하여 로컬 데이터베이스에 저장합니다.", +) +def store_ai_chat( + chatName: AIChatCreate, service: AIChatService = ai_chat_service_dependency +) -> ResponseMessage[AIChatResponse]: + """ + - **name**: 새로운 Chat_tab 이름 (예: "채팅 타이틀") + """ + created_chat = service.store_ai_chat(chatName) + + response_data = AIChatResponse( + id=created_chat.id, + name=created_chat.name, + created_at=created_chat.created_at, + updated_at=created_chat.updated_at, + ) + return ResponseMessage.success(value=response_data, code=CommonCode.SUCCESS_AI_CHAT_CREATE) From bd87aa51e47df6953e78c39bed7f6527f87ae214 Mon Sep 17 00:00:00 2001 From: mini Date: Fri, 8 Aug 2025 01:21:20 +0900 Subject: [PATCH 3/9] =?UTF-8?q?feat:=20ai=20chat=20status=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/status.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/core/status.py b/app/core/status.py index 6d5e538..3055d4b 100644 --- a/app/core/status.py +++ b/app/core/status.py @@ -24,6 +24,7 @@ class CommonCode(Enum): """ KEY 성공 코드 - 22xx """ """ AI CHAT, DB 성공 코드 - 23xx """ + SUCCESS_AI_CHAT_CREATE = (status.HTTP_200_OK, "2300", "새로운 채팅 탭을 생성하였습니다.") """ ANNOTATION 성공 코드 - 24xx """ @@ -51,6 +52,18 @@ class CommonCode(Enum): ) """ AI CHAT, DB 클라이언트 오류 코드 - 43xx """ + INVALID_CHAT_NAME_FORMAT = (status.HTTP_400_BAD_REQUEST, "4300", "채팅 탭 이름의 형식이 올바르지 않습니다.") + INVALID_CHAT_NAME_LENGTH = ( + status.HTTP_400_BAD_REQUEST, + "4301", + "채팅 탭 이름의 길이는 255자를 초과할 수 없습니다.", + ) + INVALID_CHAT_NAME_CONTENT = ( + status.HTTP_400_BAD_REQUEST, + "4302", + "채팅 탭 이름에 SQL 예약어나 허용되지 않는 특수문자가 포함되어 있습니다. " + "허용되지 않는 특수 문자: 큰따옴표(\"), 작은따옴표('), 세미콜론(;), 꺾쇠괄호(<, >)", + ) """ ANNOTATION 클라이언트 오류 코드 - 44xx """ From 954b3a985e8f04edf5b240935fc30fd05fc21959 Mon Sep 17 00:00:00 2001 From: mini Date: Fri, 8 Aug 2025 01:22:24 +0900 Subject: [PATCH 4/9] =?UTF-8?q?feat:=20ai=20chat=20tab=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=97=90=EC=84=9C=20=EC=82=AC=EC=9A=A9=EB=90=A0=20?= =?UTF-8?q?=EC=8A=A4=ED=82=A4=EB=A7=88=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/schemas/ai_chat/base_model.py | 7 +++++++ app/schemas/ai_chat/db_model.py | 15 +++++++++++++++ app/schemas/ai_chat/response_model.py | 14 ++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 app/schemas/ai_chat/base_model.py create mode 100644 app/schemas/ai_chat/db_model.py create mode 100644 app/schemas/ai_chat/response_model.py diff --git a/app/schemas/ai_chat/base_model.py b/app/schemas/ai_chat/base_model.py new file mode 100644 index 0000000..d59c248 --- /dev/null +++ b/app/schemas/ai_chat/base_model.py @@ -0,0 +1,7 @@ +from pydantic import BaseModel, Field + + +class AIChatBase(BaseModel): + """모든 AI Chat Tab 스키마의 기본 모델""" + + name: str = Field(..., description="새로운 채팅 탭 이름") diff --git a/app/schemas/ai_chat/db_model.py b/app/schemas/ai_chat/db_model.py new file mode 100644 index 0000000..8bd1bf8 --- /dev/null +++ b/app/schemas/ai_chat/db_model.py @@ -0,0 +1,15 @@ +from datetime import datetime + +from app.schemas.ai_chat.base_model import AIChatBase + + +class AIChatInDB(AIChatBase): + """데이터베이스에 저장된 형태의 스키마 (내부용)""" + + id: str + name: str + created_at: datetime + updated_at: datetime + + class Config: + from_attributes = True diff --git a/app/schemas/ai_chat/response_model.py b/app/schemas/ai_chat/response_model.py new file mode 100644 index 0000000..e6d060b --- /dev/null +++ b/app/schemas/ai_chat/response_model.py @@ -0,0 +1,14 @@ +from datetime import datetime + +from pydantic import Field + +from app.schemas.ai_chat.base_model import AIChatBase + + +class AIChatResponse(AIChatBase): + """AI 채팅 탭 정보 API 응답용 스키마""" + + id: str = Field(..., description="채팅 세션의 고유 ID (서버에서 생성)") + name: str = Field(..., description="채팅 세션의 이름") + created_at: datetime + updated_at: datetime From 666699883df49cb22baeb72bce7073afb4f80504 Mon Sep 17 00:00:00 2001 From: mini Date: Fri, 8 Aug 2025 01:22:43 +0900 Subject: [PATCH 5/9] =?UTF-8?q?feat:=20repository=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/repository/ai_chat_repository.py | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 app/repository/ai_chat_repository.py diff --git a/app/repository/ai_chat_repository.py b/app/repository/ai_chat_repository.py new file mode 100644 index 0000000..a060108 --- /dev/null +++ b/app/repository/ai_chat_repository.py @@ -0,0 +1,46 @@ +import sqlite3 + +from app.core.utils import get_db_path +from app.schemas.ai_chat.db_model import AIChatInDB + + +class AIChatRepository: + + def create_ai_chat(self, new_id: str, name: str) -> AIChatInDB: + """ + 암호화된 API Key 정보를 받아 데이터베이스에 저장하고, + 저장된 객체를 반환합니다. + """ + db_path = get_db_path() + conn = None + try: + conn = sqlite3.connect(str(db_path), timeout=10) + conn.row_factory = sqlite3.Row + cursor = conn.cursor() + + cursor.execute( + """ + INSERT INTO chat_tab (id, name) + VALUES (?, ?) + """, + ( + new_id, + name, + ), + ) + conn.commit() + + cursor.execute("SELECT * FROM chat_tab WHERE id = ?", (new_id,)) + created_row = cursor.fetchone() + + if not created_row: + raise None + + return AIChatInDB.model_validate(dict(created_row)) + + finally: + if conn: + conn.close() + + +ai_chat_repository = AIChatRepository() From 23430767616988d16dd36b2ca6037984ddd31ea6 Mon Sep 17 00:00:00 2001 From: mini Date: Fri, 8 Aug 2025 01:22:52 +0900 Subject: [PATCH 6/9] =?UTF-8?q?feat:=20=EC=84=9C=EB=B9=84=EC=8A=A4=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/ai_chat_service.py | 43 +++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 app/services/ai_chat_service.py diff --git a/app/services/ai_chat_service.py b/app/services/ai_chat_service.py new file mode 100644 index 0000000..5c01f67 --- /dev/null +++ b/app/services/ai_chat_service.py @@ -0,0 +1,43 @@ +import sqlite3 + +from fastapi import Depends + +from app.core.exceptions import APIException +from app.core.status import CommonCode +from app.core.utils import generate_prefixed_uuid +from app.repository.ai_chat_repository import AIChatRepository, ai_chat_repository +from app.schemas.ai_chat.create_model import AIChatCreate +from app.schemas.ai_chat.db_model import AIChatInDB + +ai_chat_repository_dependency = Depends(lambda: ai_chat_repository) + + +class AIChatService: + def __init__(self, repository: AIChatRepository = ai_chat_repository): + self.repository = repository + + def store_ai_chat(self, chatName: AIChatCreate) -> AIChatInDB: + """새로운 AI 채팅을 데이터베이스에 저장합니다.""" + chatName.validate_with_name() + + new_id = generate_prefixed_uuid("CHAT_TAB") + + try: + created_row = self.repository.create_ai_chat( + new_id=new_id, + name=chatName.name, + ) + if not created_row: + raise APIException(CommonCode.FAIL_TO_VERIFY_CREATION) + + return created_row + + except sqlite3.Error as e: + # "database is locked" 오류를 명시적으로 처리 + if "database is locked" in str(e): + raise APIException(CommonCode.DB_BUSY) from e + # 기타 모든 sqlite3 오류 + raise APIException(CommonCode.FAIL) from e + + +ai_chat_service = AIChatService() From 85a1a5226618758216bf35975c022a3fb4c415a7 Mon Sep 17 00:00:00 2001 From: mini Date: Fri, 8 Aug 2025 01:23:39 +0900 Subject: [PATCH 7/9] =?UTF-8?q?feat:=20ai=20chat=20tab=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EC=8B=9C=20=EC=9D=B4=EB=A6=84=20=EC=9C=A0=ED=9A=A8?= =?UTF-8?q?=EC=84=B1=20=EA=B2=80=EC=82=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/schemas/ai_chat/create_model.py | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 app/schemas/ai_chat/create_model.py diff --git a/app/schemas/ai_chat/create_model.py b/app/schemas/ai_chat/create_model.py new file mode 100644 index 0000000..1bb3764 --- /dev/null +++ b/app/schemas/ai_chat/create_model.py @@ -0,0 +1,30 @@ +import re + +from app.core.exceptions import APIException +from app.core.status import CommonCode +from app.schemas.ai_chat.base_model import AIChatBase + + +class AIChatCreate(AIChatBase): + """새로운 Chat Tab 생성을 위한 스키마""" + + def validate_with_name(self) -> None: + """채팅 탭 이름에 대한 유효성 검증 로직을 수행합니다.""" + # 1. 문자열 전체가 공백 문자인지 확인 + if not self.name or self.name.isspace(): + raise APIException(CommonCode.INVALID_CHAT_NAME_FORMAT) + + # 2. 길이 제한 + if len(self.name) > 255: + raise APIException(CommonCode.INVALID_CHAT_NAME_LENGTH) + + # 3. 특수문자 및 SQL 예약어 확인 + # SQL 예약어와 위험한 특수문자를 검사합니다. + sql_keywords = ["SELECT", "INSERT", "UPDATE", "DELETE", "DROP", "OR", "AND"] + for keyword in sql_keywords: + if keyword in self.name.upper(): + raise APIException(CommonCode.INVALID_CHAT_NAME_CONTENT) + + # 특정 특수문자를 검사하는 예시 + if re.search(r"[;\"'`<>]", self.name): + raise APIException(CommonCode.INVALID_CHAT_NAME_CONTENT) From 826ab1014211ace4625cb9768a76b745045d656e Mon Sep 17 00:00:00 2001 From: mini Date: Sun, 10 Aug 2025 00:35:37 +0900 Subject: [PATCH 8/9] =?UTF-8?q?refactor:=20=EC=A7=81=EA=B4=80=EC=A0=81?= =?UTF-8?q?=EC=9D=B8=20=EC=9D=B4=EB=A6=84=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD(ai=5Fchat=20->=20chat=5Ftab)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/api_router.py | 4 ++-- app/api/{ai_chat_api.py => chat_tab_api.py} | 6 +++--- app/core/status.py | 8 ++++---- .../{ai_chat_repository.py => chat_tab_repository.py} | 2 +- app/schemas/{ai_chat => chat_tab}/base_model.py | 0 app/schemas/{ai_chat => chat_tab}/create_model.py | 10 +++++----- app/schemas/{ai_chat => chat_tab}/db_model.py | 2 +- app/schemas/{ai_chat => chat_tab}/response_model.py | 2 +- .../{ai_chat_service.py => chat_tab_service.py} | 6 +++--- 9 files changed, 20 insertions(+), 20 deletions(-) rename app/api/{ai_chat_api.py => chat_tab_api.py} (83%) rename app/repository/{ai_chat_repository.py => chat_tab_repository.py} (95%) rename app/schemas/{ai_chat => chat_tab}/base_model.py (100%) rename app/schemas/{ai_chat => chat_tab}/create_model.py (72%) rename app/schemas/{ai_chat => chat_tab}/db_model.py (82%) rename app/schemas/{ai_chat => chat_tab}/response_model.py (86%) rename app/services/{ai_chat_service.py => chat_tab_service.py} (86%) diff --git a/app/api/api_router.py b/app/api/api_router.py index d7c6eab..346914a 100644 --- a/app/api/api_router.py +++ b/app/api/api_router.py @@ -2,7 +2,7 @@ from fastapi import APIRouter -from app.api import ai_chat_api, api_key_api, driver_api, test_api, user_db_api +from app.api import api_key_api, chat_tab_api, driver_api, test_api, user_db_api api_router = APIRouter() @@ -13,4 +13,4 @@ api_router.include_router(driver_api.router, prefix="/driver", tags=["Driver"]) api_router.include_router(user_db_api.router, prefix="/user/db", tags=["UserDb"]) api_router.include_router(api_key_api.router, prefix="/keys", tags=["API Key"]) -api_router.include_router(ai_chat_api.router, prefix="/chats", tags=["AI Chat"]) +api_router.include_router(chat_tab_api.router, prefix="/chats", tags=["AI Chat"]) diff --git a/app/api/ai_chat_api.py b/app/api/chat_tab_api.py similarity index 83% rename from app/api/ai_chat_api.py rename to app/api/chat_tab_api.py index 87ef3a1..7aa4bcb 100644 --- a/app/api/ai_chat_api.py +++ b/app/api/chat_tab_api.py @@ -2,9 +2,9 @@ from app.core.response import ResponseMessage from app.core.status import CommonCode -from app.schemas.ai_chat.create_model import AIChatCreate -from app.schemas.ai_chat.response_model import AIChatResponse -from app.services.ai_chat_service import AIChatService, ai_chat_service +from app.schemas.chat_tab.create_model import AIChatCreate +from app.schemas.chat_tab.response_model import AIChatResponse +from app.services.chat_tab_service import AIChatService, ai_chat_service ai_chat_service_dependency = Depends(lambda: ai_chat_service) diff --git a/app/core/status.py b/app/core/status.py index 3055d4b..dc87e45 100644 --- a/app/core/status.py +++ b/app/core/status.py @@ -51,14 +51,14 @@ class CommonCode(Enum): "API 키가 선택한 서비스의 올바른 형식이 아닙니다. (예: OpenAI는 sk-로 시작)", ) - """ AI CHAT, DB 클라이언트 오류 코드 - 43xx """ - INVALID_CHAT_NAME_FORMAT = (status.HTTP_400_BAD_REQUEST, "4300", "채팅 탭 이름의 형식이 올바르지 않습니다.") - INVALID_CHAT_NAME_LENGTH = ( + """ AI CHAT TAB 클라이언트 오류 코드 - 43xx """ + INVALID_CHAT_TAB_NAME_FORMAT = (status.HTTP_400_BAD_REQUEST, "4300", "채팅 탭 이름의 형식이 올바르지 않습니다.") + INVALID_CHAT_TAB_NAME_LENGTH = ( status.HTTP_400_BAD_REQUEST, "4301", "채팅 탭 이름의 길이는 255자를 초과할 수 없습니다.", ) - INVALID_CHAT_NAME_CONTENT = ( + INVALID_CHAT_TAB_NAME_CONTENT = ( status.HTTP_400_BAD_REQUEST, "4302", "채팅 탭 이름에 SQL 예약어나 허용되지 않는 특수문자가 포함되어 있습니다. " diff --git a/app/repository/ai_chat_repository.py b/app/repository/chat_tab_repository.py similarity index 95% rename from app/repository/ai_chat_repository.py rename to app/repository/chat_tab_repository.py index a060108..bf96fe8 100644 --- a/app/repository/ai_chat_repository.py +++ b/app/repository/chat_tab_repository.py @@ -1,7 +1,7 @@ import sqlite3 from app.core.utils import get_db_path -from app.schemas.ai_chat.db_model import AIChatInDB +from app.schemas.chat_tab.db_model import AIChatInDB class AIChatRepository: diff --git a/app/schemas/ai_chat/base_model.py b/app/schemas/chat_tab/base_model.py similarity index 100% rename from app/schemas/ai_chat/base_model.py rename to app/schemas/chat_tab/base_model.py diff --git a/app/schemas/ai_chat/create_model.py b/app/schemas/chat_tab/create_model.py similarity index 72% rename from app/schemas/ai_chat/create_model.py rename to app/schemas/chat_tab/create_model.py index 1bb3764..c910fe5 100644 --- a/app/schemas/ai_chat/create_model.py +++ b/app/schemas/chat_tab/create_model.py @@ -2,7 +2,7 @@ from app.core.exceptions import APIException from app.core.status import CommonCode -from app.schemas.ai_chat.base_model import AIChatBase +from app.schemas.chat_tab.base_model import AIChatBase class AIChatCreate(AIChatBase): @@ -12,19 +12,19 @@ def validate_with_name(self) -> None: """채팅 탭 이름에 대한 유효성 검증 로직을 수행합니다.""" # 1. 문자열 전체가 공백 문자인지 확인 if not self.name or self.name.isspace(): - raise APIException(CommonCode.INVALID_CHAT_NAME_FORMAT) + raise APIException(CommonCode.INVALID_CHAT_TAB_NAME_FORMAT) # 2. 길이 제한 if len(self.name) > 255: - raise APIException(CommonCode.INVALID_CHAT_NAME_LENGTH) + raise APIException(CommonCode.INVALID_CHAT_TAB_NAME_LENGTH) # 3. 특수문자 및 SQL 예약어 확인 # SQL 예약어와 위험한 특수문자를 검사합니다. sql_keywords = ["SELECT", "INSERT", "UPDATE", "DELETE", "DROP", "OR", "AND"] for keyword in sql_keywords: if keyword in self.name.upper(): - raise APIException(CommonCode.INVALID_CHAT_NAME_CONTENT) + raise APIException(CommonCode.INVALID_CHAT_TAB_NAME_CONTENT) # 특정 특수문자를 검사하는 예시 if re.search(r"[;\"'`<>]", self.name): - raise APIException(CommonCode.INVALID_CHAT_NAME_CONTENT) + raise APIException(CommonCode.INVALID_CHAT_TAB_NAME_CONTENT) diff --git a/app/schemas/ai_chat/db_model.py b/app/schemas/chat_tab/db_model.py similarity index 82% rename from app/schemas/ai_chat/db_model.py rename to app/schemas/chat_tab/db_model.py index 8bd1bf8..833f95a 100644 --- a/app/schemas/ai_chat/db_model.py +++ b/app/schemas/chat_tab/db_model.py @@ -1,6 +1,6 @@ from datetime import datetime -from app.schemas.ai_chat.base_model import AIChatBase +from app.schemas.chat_tab.base_model import AIChatBase class AIChatInDB(AIChatBase): diff --git a/app/schemas/ai_chat/response_model.py b/app/schemas/chat_tab/response_model.py similarity index 86% rename from app/schemas/ai_chat/response_model.py rename to app/schemas/chat_tab/response_model.py index e6d060b..5a1c46f 100644 --- a/app/schemas/ai_chat/response_model.py +++ b/app/schemas/chat_tab/response_model.py @@ -2,7 +2,7 @@ from pydantic import Field -from app.schemas.ai_chat.base_model import AIChatBase +from app.schemas.chat_tab.base_model import AIChatBase class AIChatResponse(AIChatBase): diff --git a/app/services/ai_chat_service.py b/app/services/chat_tab_service.py similarity index 86% rename from app/services/ai_chat_service.py rename to app/services/chat_tab_service.py index 5c01f67..27ac918 100644 --- a/app/services/ai_chat_service.py +++ b/app/services/chat_tab_service.py @@ -5,9 +5,9 @@ from app.core.exceptions import APIException from app.core.status import CommonCode from app.core.utils import generate_prefixed_uuid -from app.repository.ai_chat_repository import AIChatRepository, ai_chat_repository -from app.schemas.ai_chat.create_model import AIChatCreate -from app.schemas.ai_chat.db_model import AIChatInDB +from app.repository.chat_tab_repository import AIChatRepository, ai_chat_repository +from app.schemas.chat_tab.create_model import AIChatCreate +from app.schemas.chat_tab.db_model import AIChatInDB ai_chat_repository_dependency = Depends(lambda: ai_chat_repository) From 84ffa96602fdbcf556df859237db5b724dbb7fd6 Mon Sep 17 00:00:00 2001 From: mini Date: Sun, 10 Aug 2025 00:37:25 +0900 Subject: [PATCH 9/9] =?UTF-8?q?refactor:=20=EC=B1=84=ED=8C=85=20=ED=83=AD?= =?UTF-8?q?=20=EA=B8=B8=EC=9D=B4=20=EC=A0=9C=ED=95=9C=20=EC=88=98=EC=A0=95?= =?UTF-8?q?(255=20->=20128)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/status.py | 2 +- app/db/init_db.py | 2 +- app/schemas/chat_tab/create_model.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/core/status.py b/app/core/status.py index dc87e45..d20e742 100644 --- a/app/core/status.py +++ b/app/core/status.py @@ -56,7 +56,7 @@ class CommonCode(Enum): INVALID_CHAT_TAB_NAME_LENGTH = ( status.HTTP_400_BAD_REQUEST, "4301", - "채팅 탭 이름의 길이는 255자를 초과할 수 없습니다.", + "채팅 탭 이름의 길이는 128자를 초과할 수 없습니다.", ) INVALID_CHAT_TAB_NAME_CONTENT = ( status.HTTP_400_BAD_REQUEST, diff --git a/app/db/init_db.py b/app/db/init_db.py index 79fa774..34a8c95 100644 --- a/app/db/init_db.py +++ b/app/db/init_db.py @@ -72,7 +72,7 @@ def initialize_database(): """ CREATE TABLE IF NOT EXISTS chat_tab ( id VARCHAR(64) PRIMARY KEY NOT NULL, - name VARCHAR(255), + name VARCHAR(128), created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ); diff --git a/app/schemas/chat_tab/create_model.py b/app/schemas/chat_tab/create_model.py index c910fe5..f811adc 100644 --- a/app/schemas/chat_tab/create_model.py +++ b/app/schemas/chat_tab/create_model.py @@ -15,7 +15,7 @@ def validate_with_name(self) -> None: raise APIException(CommonCode.INVALID_CHAT_TAB_NAME_FORMAT) # 2. 길이 제한 - if len(self.name) > 255: + if len(self.name) > 128: raise APIException(CommonCode.INVALID_CHAT_TAB_NAME_LENGTH) # 3. 특수문자 및 SQL 예약어 확인