Files
raynet/app/models.py
T
JiriUhlir 28596fe772 first
2026-06-18 14:49:29 +02:00

118 lines
3.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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")