260706_1_계정, 로그인, 보안 초안 작성
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
"""기술지원 문의 요청 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": "문의가 접수되었습니다. 곧 연락드리겠습니다."}
|
||||
Reference in New Issue
Block a user