first
This commit is contained in:
+117
@@ -0,0 +1,117 @@
|
||||
"""Pydantic modely pro RAYNET endpointy.
|
||||
|
||||
Modely odpovídají RAYNET CRM API v2 (CompanyInsertDto). Slouží zároveň jako
|
||||
zdroj pro Swagger/OpenAPI dokumentaci.
|
||||
"""
|
||||
|
||||
from enum import Enum
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class Rating(str, Enum):
|
||||
A = "A"
|
||||
B = "B"
|
||||
C = "C"
|
||||
|
||||
|
||||
class CompanyState(str, Enum):
|
||||
A_POTENTIAL = "A_POTENTIAL"
|
||||
B_ACTUAL = "B_ACTUAL"
|
||||
C_DEFERRED = "C_DEFERRED"
|
||||
D_UNATTRACTIVE = "D_UNATTRACTIVE"
|
||||
|
||||
|
||||
class CompanyRole(str, Enum):
|
||||
A_SUBSCRIBER = "A_SUBSCRIBER"
|
||||
B_PARTNER = "B_PARTNER"
|
||||
C_SUPPLIER = "C_SUPPLIER"
|
||||
D_RIVAL = "D_RIVAL"
|
||||
|
||||
|
||||
class TaxPayer(str, Enum):
|
||||
YES = "YES"
|
||||
NO = "NO"
|
||||
|
||||
|
||||
class Address(BaseModel):
|
||||
name: Optional[str] = Field(default=None, examples=["Sídlo klienta"])
|
||||
street: Optional[str] = Field(default=None, examples=["Francouzská 6167/5"])
|
||||
city: Optional[str] = Field(default=None, examples=["Ostrava"])
|
||||
province: Optional[str] = Field(default=None, examples=["Morava"])
|
||||
zipCode: Optional[str] = Field(default=None, examples=["708 00"])
|
||||
country: Optional[str] = Field(default=None, examples=["CZ"])
|
||||
lat: Optional[float] = None
|
||||
lng: Optional[float] = None
|
||||
|
||||
|
||||
class ContactInfo(BaseModel):
|
||||
email: Optional[str] = Field(default=None, examples=["info@raynet.cz"])
|
||||
email2: Optional[str] = None
|
||||
fax: Optional[str] = None
|
||||
tel1: Optional[str] = Field(default=None, examples=["+420 553 401 520"])
|
||||
tel1Type: Optional[str] = Field(default=None, examples=["recepce"])
|
||||
tel2: Optional[str] = None
|
||||
tel2Type: Optional[str] = None
|
||||
www: Optional[str] = Field(default=None, examples=["www.raynet.cz"])
|
||||
doNotSendMM: Optional[bool] = None
|
||||
otherContact: Optional[str] = None
|
||||
|
||||
|
||||
class CompanyAddress(BaseModel):
|
||||
address: Optional[Address] = None
|
||||
contactInfo: Optional[ContactInfo] = None
|
||||
|
||||
|
||||
class CompanyData(BaseModel):
|
||||
"""Tělo požadavku pro vytvoření firmy (CompanyInsertDto).
|
||||
|
||||
Povinná pole: ``name``, ``rating``, ``state``, ``role``.
|
||||
"""
|
||||
|
||||
# Povinná pole
|
||||
name: str = Field(..., examples=["ACME s.r.o."])
|
||||
rating: Rating = Field(..., examples=[Rating.A])
|
||||
state: CompanyState = Field(..., examples=[CompanyState.A_POTENTIAL])
|
||||
role: CompanyRole = Field(..., examples=[CompanyRole.A_SUBSCRIBER])
|
||||
|
||||
# Volitelná pole
|
||||
regNumber: Optional[str] = Field(default=None, examples=["12345678"])
|
||||
taxNumber: Optional[str] = Field(default=None, examples=["CZ12345678"])
|
||||
taxNumber2: Optional[str] = None
|
||||
taxPayer: Optional[TaxPayer] = None
|
||||
bankAccount: Optional[str] = None
|
||||
notice: Optional[str] = None
|
||||
owner: Optional[int] = Field(default=None, description="ID vlastníka (uživatele)")
|
||||
category: Optional[int] = None
|
||||
contactSource: Optional[int] = None
|
||||
employeesNumber: Optional[int] = None
|
||||
legalForm: Optional[int] = None
|
||||
paymentTerm: Optional[int] = None
|
||||
turnover: Optional[int] = None
|
||||
territory: Optional[int] = None
|
||||
addresses: Optional[list[CompanyAddress]] = None
|
||||
tags: Optional[list[str]] = None
|
||||
customFields: Optional[dict] = None
|
||||
|
||||
# Umožní i pole, která zde nejsou explicitně vyjmenovaná (RAYNET jich má víc).
|
||||
model_config = {"extra": "allow"}
|
||||
|
||||
|
||||
class CreateCompanyRequest(BaseModel):
|
||||
"""Vstup endpointu /company.
|
||||
|
||||
API klíč (secret) se předává hlavičkou ``X-Api-Key`` – NENÍ součástí tohoto
|
||||
těla. Email a název instance jsou běžné identifikátory, proto jdou v těle.
|
||||
"""
|
||||
|
||||
email: str = Field(..., examples=["user@firma.cz"], description="Email uživatele RAYNET")
|
||||
instance_name: str = Field(..., examples=["moje-instance"], description="Název RAYNET instance")
|
||||
company: CompanyData
|
||||
|
||||
|
||||
class CreateCompanyResponse(BaseModel):
|
||||
id: Optional[int] = Field(default=None, description="ID nově vytvořené firmy")
|
||||
success: bool = True
|
||||
raw: Optional[dict] = Field(default=None, description="Surová odpověď RAYNET API")
|
||||
Reference in New Issue
Block a user