- 회사 설정 hidden_fields 신설: 상품 목록·등록폼·엑셀 양식에서 감추고 목표가 후보에서도 제외 - 용어 카탈로그 9→37개(상품·협력사·견적 그룹), 목록·폼·엑셀 헤더 배선 - 엑셀 '최저한도' → '인터넷 최저가' 표기 정정(구양식 헤더는 alias 유지), 공급사 컬럼 검증 유지 - 목표가 산정내역에 적용 모드·숨김 필드 반영, 목표가 상한 라벨에 산식(상품단가×2) 표기 - 공급사 포털: 초청 링크 session_id 로 로그인 전 회사 브랜딩 조회(무인증 엔드포인트), 기본 브랜드 negotium 워드마크, negotium·AI O2O 크레딧 표기 - 목록 테이블 뷰포트 기준 전환·툴바 줄바꿈·협상현황 카드뷰로 모바일/태블릿 대응 - 이용안내 FAQ 탭 추가, 이용안내·회사설정 탭 URL 쿼리 동기화 및 빠른이동 등록
75 lines
3.2 KiB
Python
75 lines
3.2 KiB
Python
from pydantic import Field
|
|
|
|
from common.models.gmodel import Res_WebPacketProtocol, WebPacketProtocol
|
|
|
|
|
|
# 라우터 폴더마다 protocol.py 를 두고 Req_/Res_ 를 정의한다 (protocol 규약).
|
|
class AuthProtocol(WebPacketProtocol):
|
|
pass
|
|
|
|
|
|
class Req_Login(AuthProtocol):
|
|
id: str = Field("", description="로그인 ID")
|
|
pw: str = Field("", description="비밀번호(평문, 서버에서 bcrypt 해시·검증)")
|
|
|
|
|
|
class Res_Login(Res_WebPacketProtocol):
|
|
su_id: str = Field("", description="유저 식별자(uuid)")
|
|
name: str = Field("", description="유저 개인 이름")
|
|
supplier_id: str = Field("", description="소속 공급사 uuid(partner.suppliers)")
|
|
supplier_name: str = Field("", description="공급사명")
|
|
role: int = Field(0, description="권한 코드 1=user, 2=manager (UserRole)")
|
|
access_token: str = Field("", description="액세스 토큰(JWT)")
|
|
refresh_token: str = Field("", description="리프레시 토큰(JWT)")
|
|
|
|
|
|
class Req_CreateAccount(AuthProtocol):
|
|
supplier_id: str = Field("", max_length=36, description="소속 공급사 uuid(partner.suppliers.supplier_id)")
|
|
id: str = Field("", max_length=20, description="로그인 ID")
|
|
pw: str = Field("", description="비밀번호(평문, 서버에서 bcrypt 해시)")
|
|
name: str = Field("", max_length=50, description="이름")
|
|
email: str = Field("", max_length=255, description="이메일")
|
|
contact_number: str = Field("", max_length=20, description="연락처")
|
|
role: int = Field(1, description="권한 코드 1=user, 2=manager (UserRole)")
|
|
|
|
|
|
class Res_CreateAccount(Res_WebPacketProtocol):
|
|
su_id: str = Field("", description="생성된 유저 식별자(uuid)")
|
|
|
|
|
|
class Res_RefreshToken(Res_WebPacketProtocol):
|
|
access_token: str = Field("", description="재발급된 액세스 토큰(JWT)")
|
|
|
|
|
|
class Res_Me(Res_WebPacketProtocol):
|
|
su_id: str = Field("", description="유저 식별자(uuid)")
|
|
id: str = Field("", description="로그인 ID")
|
|
name: str = Field("", description="유저 개인 이름")
|
|
supplier_id: str = Field("", description="소속 공급사 uuid")
|
|
supplier_name: str = Field("", description="공급사명")
|
|
role: int = Field(0, description="권한 코드 1=user, 2=manager (UserRole)")
|
|
branding: dict = Field(default_factory=dict, description="소속 회사 브랜딩(companies.settings.branding). 서비스명/로고/색")
|
|
session_fields: list = Field(default_factory=list, description="협상완료 부가정보 필드 정의(companies.settings.session_fields). 공급사가 타결 후 입력")
|
|
|
|
|
|
class Res_Logout(Res_WebPacketProtocol):
|
|
pass
|
|
|
|
|
|
class Res_PopupStatus(Res_WebPacketProtocol):
|
|
service_info: bool = Field(False, description="협상 유의사항(서비스 안내) 팝업 '안내 보지 않기' 여부")
|
|
|
|
|
|
class Req_HidePopup(AuthProtocol):
|
|
popup_type: str = Field("", description="숨길 팝업 종류: service_info")
|
|
|
|
|
|
class Res_HidePopup(Res_WebPacketProtocol):
|
|
pass
|
|
|
|
|
|
class Res_SessionBranding(Res_WebPacketProtocol):
|
|
service_name: str = Field("", description="회사 서비스명(companies.settings.branding.service_name). 미설정 시 빈 값")
|
|
logo_url: str = Field("", description="회사 로고 URL")
|
|
primary_color: str = Field("", description="브랜드 색상(hex)")
|