53 lines
1.3 KiB
Python
53 lines
1.3 KiB
Python
from datetime import datetime
|
|
from typing import Literal
|
|
|
|
from beanie import Document
|
|
from pydantic import Field
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class Deployment(Document):
|
|
deployment_id: str = Field(alias="_id")
|
|
deployment_stage: str
|
|
deployment_status: Literal["started", "failed", "succeeded", "aborted"]
|
|
|
|
deployment_target_env: Literal["alpha", "prod"]
|
|
deployment_ttl_hours: int = 2
|
|
|
|
deployment_project_id: str
|
|
deployment_project_name: str
|
|
deployment_product_id: str
|
|
deployment_product_name: str
|
|
deployment_git_url: str
|
|
deployment_git_sha256: str
|
|
deployment_reason: str
|
|
|
|
deployed_by: str
|
|
created_at: datetime = datetime.now()
|
|
updated_at: datetime = datetime.now()
|
|
|
|
class Settings:
|
|
name = "deployment"
|
|
indexes = [
|
|
[("deployment_product_id", 1), ("created_at", 1)], # Compound index
|
|
[("deployment_id", 1), ("deployment_status", 1)], # Compound index
|
|
{"keys": [("deployment_id", 1), ("deployment_stage", 1)], "unique": True} # Unique compound index
|
|
]
|
|
|
|
class InitDeploymentRequest(BaseModel):
|
|
product_id: str
|
|
sha256: str
|
|
target_env: str
|
|
user_id: str
|
|
reason: str = "not provided"
|
|
ttl_hours: int = 3
|
|
|
|
class CheckDeploymentStatusRequest(BaseModel):
|
|
product_id: str
|
|
target_env: str
|
|
user_id: str
|
|
|
|
|
|
|
|
|