100 lines
4.0 KiB
Python
100 lines
4.0 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, Header, Body, status, Request
|
|
from sqlalchemy.orm import Session
|
|
from fastapi.security import APIKeyHeader
|
|
from typing import Union, Optional, List
|
|
from typing_extensions import Annotated
|
|
from db import models, schemas, crud
|
|
import json
|
|
import logging
|
|
import datetime
|
|
from kafka import KafkaProducer
|
|
from fastapi.responses import FileResponse, StreamingResponse
|
|
import io
|
|
import openpyxl
|
|
import time
|
|
|
|
from db.schemas import RawData, RtuGenerator
|
|
from db.base import get_db
|
|
from db.models import RawDatas, Raw_data_herit
|
|
import pandas as pd
|
|
|
|
from process.logger import logger
|
|
|
|
from process.certification import cert_process
|
|
from process.response import response
|
|
|
|
from process.inquiry import manage_inquiry
|
|
|
|
KST = datetime.timezone(datetime.timedelta(hours=9))
|
|
|
|
router = APIRouter(
|
|
prefix="/inquiry",
|
|
tags=["inquiry"],
|
|
responses={404: {"description": "Not found"}},
|
|
)
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
|
|
async def get_body(request: Request):
|
|
return await request.body()
|
|
|
|
#==================================================================================================
|
|
# 문의 데이터 수집
|
|
#==================================================================================================
|
|
@router.post("/request")
|
|
async def request_inquiry(request: Request, body: bytes = Depends(get_body), db: Session = Depends(get_db)):
|
|
try:
|
|
# 인증서 갱신
|
|
auth_token = cert_process.renew_cert(request=request)
|
|
if auth_token['result'] == 'OK':
|
|
auth_token = auth_token['data']
|
|
elif auth_token['result'] == 'TOKEN_EXPIRED':
|
|
raise token_expired_return_process(auth_token['msg'])
|
|
else:
|
|
return await response.error_res(auth_token=auth_token, auth_type='NOMAL', msg_title='토큰 에러', msg_content='토큰 정보가 정확하지 않습니다.', data={})
|
|
# body에서 ID 추출
|
|
try:
|
|
body = json.loads(body)
|
|
except json.JSONDecodeError as e:
|
|
return await response.error_res(auth_token=auth_token, auth_type='NOMAL', msg_title='데이터 에러', msg_content='데이터 처리 장애가 발생했습니다. 요청정보를 정확히 입력했는지 확인해주세요.', data={})
|
|
|
|
user_seq_result = cert_process.get_user_seq_by_token(token=auth_token['token'])
|
|
if user_seq_result["result"] == 'OK':
|
|
user_seq = user_seq_result['data']['user_seq']
|
|
body['user_seq'] = user_seq
|
|
# 데이터 검증
|
|
title = body['title']
|
|
contents = body['contents']
|
|
# DB 저장
|
|
insert_inquiry_result = await manage_inquiry.insert_inquiry(inquiry=body, db=db)
|
|
if insert_inquiry_result['result'] == 'OK':
|
|
return await response.ok_res(auth_token=auth_token, data={}, db=db)
|
|
else:
|
|
return await response.error_res(auth_token=auth_token, auth_type='NOMAL', msg_title='문의 저장 실패', msg_content='문의 저장 처리중 에러가 발생했습니다.', data={})
|
|
else:
|
|
return await response.error_res(auth_token=auth_token, auth_type='NOMAL', msg_title='토큰 에러', msg_content='토큰 정보가 정확하지 않습니다.', data={})
|
|
|
|
except Exception as e:
|
|
logger.error(f"request error. URL: /room/score/create/room\nerror message: {e}")
|
|
return await response.error_res(auth_token=auth_token, auth_type='NOMAL', msg_title='방 생성 에러', msg_content='방 생성 처리중 에러가 발생했습니다.', data={})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#==================================================================================================
|
|
# 필요한 함수
|
|
#==================================================================================================
|
|
# 401 에러 발생
|
|
def token_expired_return_process(fail_msg):
|
|
logger.error(f"request fail: {fail_msg}")
|
|
return HTTPException(
|
|
status_code=401,
|
|
detail=f"{fail_msg}"
|
|
)
|
|
|
|
|
|
|