"""기술지원 문의 요청 API.""" from fastapi import APIRouter, Request from common_util.common_util_auth import get_optional_session from common_util.common_util_email import send_email_background from common_util.common_util_email_templates import support_request_email from config.config_db import get_db_pool from config.config_system import ADMIN_EMAIL from .A08_Support_Schema import SupportRequestPayload router = APIRouter(prefix="/api/a08", tags=["Support"]) async def _get_company_name(company_id: int | None) -> str | None: """회사 ID로 회사명을 조회한다. 없으면 None.""" if not company_id: return None pool = get_db_pool() async with pool.acquire() as connection, connection.cursor() as cursor: await cursor.execute("SELECT name FROM companies WHERE id = %s", (company_id,)) row = await cursor.fetchone() return row[0] if row else None @router.post("/support") async def submit_support_request(payload: SupportRequestPayload, request: Request): """기술지원 문의 요청 접수 및 메일 발송. 로그인 상태면 세션의 회사 정보를 연결하고, 비로그인이면 고객이 입력한 값만 저장한다. """ # 로그인 상태면 회사 정보 연결 (비로그인이면 None) session = await get_optional_session(request) company_id = session["company_id"] if session else None company_name = await _get_company_name(company_id) pool = get_db_pool() async with pool.acquire() as connection, connection.cursor() as cursor: await cursor.execute( """INSERT INTO support_requests (company_id, company_name, user_name, user_email, user_phone, subject, message) VALUES (%s, %s, %s, %s, %s, %s, %s)""", ( company_id, company_name, payload.name, payload.email, payload.phone, payload.subject, payload.message, ), ) await connection.commit() # 관리자에게 문의 알림 메일 발송 if ADMIN_EMAIL: subject, html = support_request_email( payload.name, payload.email, payload.phone, company_name, payload.subject, payload.message, ) send_email_background(ADMIN_EMAIL, subject, html) return {"status": "success", "message": "문의가 접수되었습니다. 곧 연락드리겠습니다."}