Api docs (SWAGGER, REDOC) available
This commit is contained in:
@@ -4,15 +4,23 @@ from sqlalchemy.orm import Session
|
||||
|
||||
from app.db.session import get_db
|
||||
from app.core.security import get_current_user, require_roles, UserClaims
|
||||
from app.schemas.payment import InvoiceCreate, InvoiceUpdate, InvoiceRead
|
||||
from app.models import Invoice
|
||||
from app.schemas.payment import InvoiceCreate, InvoiceUpdate, InvoiceRead, InvoiceOut
|
||||
from app.services.payment_service import PaymentService
|
||||
|
||||
router = APIRouter(prefix="/v1/invoices", tags=["payments"])
|
||||
|
||||
@router.post("", response_model=InvoiceRead, status_code=201)
|
||||
def create_invoice(payload: InvoiceCreate, db: Session = Depends(get_db),
|
||||
_: UserClaims = Depends(require_roles("ADMIN","MATCHMAKER"))):
|
||||
return PaymentService(db).create_invoice(**payload.model_dump(exclude_none=True))
|
||||
@router.post("", response_model=InvoiceOut, status_code=201)
|
||||
def create_invoice(payload: InvoiceCreate, db: Session = Depends(get_db)):
|
||||
inv = Invoice(
|
||||
client_id=payload.client_id, # UUID
|
||||
amount=payload.amount,
|
||||
currency=payload.currency,
|
||||
status="new",
|
||||
)
|
||||
db.add(inv)
|
||||
db.commit()
|
||||
db.refresh(inv)
|
||||
return inv
|
||||
|
||||
@router.get("", response_model=list[InvoiceRead])
|
||||
def list_invoices(client_id: str | None = None, status: str | None = None,
|
||||
|
||||
@@ -2,16 +2,17 @@ from __future__ import annotations
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
from sqlalchemy import String, DateTime, Numeric
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
from sqlalchemy.sql import func
|
||||
from sqlalchemy.dialects.postgresql import UUID as PG_UUID
|
||||
from uuid import uuid4
|
||||
|
||||
from app.db.session import Base
|
||||
|
||||
class Invoice(Base):
|
||||
__tablename__ = "invoices"
|
||||
id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
client_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), index=True, nullable=False)
|
||||
id = mapped_column(PG_UUID(as_uuid=True), primary_key=True, default=uuid4)
|
||||
client_id = mapped_column(PG_UUID(as_uuid=True), nullable=False)
|
||||
amount: Mapped[float] = mapped_column(Numeric(12,2), nullable=False)
|
||||
currency: Mapped[str] = mapped_column(String(3), default="USD")
|
||||
status: Mapped[str] = mapped_column(String(16), default="pending") # pending/paid/canceled
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
from __future__ import annotations
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
from uuid import UUID
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
class InvoiceCreate(BaseModel):
|
||||
client_id: str
|
||||
amount: float
|
||||
currency: str = "USD"
|
||||
client_id: UUID
|
||||
amount: int = Field(ge=0)
|
||||
currency: str
|
||||
description: Optional[str] = None
|
||||
|
||||
class InvoiceUpdate(BaseModel):
|
||||
@@ -15,10 +18,23 @@ class InvoiceUpdate(BaseModel):
|
||||
status: Optional[str] = None
|
||||
|
||||
class InvoiceRead(BaseModel):
|
||||
id: str
|
||||
client_id: str
|
||||
id: UUID
|
||||
client_id: UUID
|
||||
amount: float
|
||||
currency: str
|
||||
status: str
|
||||
description: Optional[str] = None
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class InvoiceOut(BaseModel):
|
||||
id: UUID
|
||||
client_id: UUID
|
||||
amount: int
|
||||
currency: str
|
||||
status: str
|
||||
created_at: datetime | None = None
|
||||
updated_at: datetime | None = None
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
40
services/payments/src/app/schemas/payment.py.bak.1754729104
Normal file
40
services/payments/src/app/schemas/payment.py.bak.1754729104
Normal file
@@ -0,0 +1,40 @@
|
||||
from __future__ import annotations
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
from uuid import UUID
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
class InvoiceCreate(BaseModel):
|
||||
client_id: UUID
|
||||
amount: int = Field(ge=0)
|
||||
currency: str
|
||||
description: Optional[str] = None
|
||||
|
||||
class InvoiceUpdate(BaseModel):
|
||||
amount: Optional[float] = None
|
||||
currency: Optional[str] = None
|
||||
description: Optional[str] = None
|
||||
status: Optional[str] = None
|
||||
|
||||
class InvoiceRead(BaseModel):
|
||||
id: str
|
||||
client_id: str
|
||||
amount: float
|
||||
currency: str
|
||||
status: str
|
||||
description: Optional[str] = None
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
|
||||
class InvoiceOut(BaseModel):
|
||||
id: UUID
|
||||
client_id: UUID
|
||||
amount: int
|
||||
currency: str
|
||||
status: str
|
||||
created_at: str | None = None
|
||||
# если есть другие UUID-поля — тоже как UUID
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
Reference in New Issue
Block a user