freeleaps-service-hub/apps/devops/app/common/models/deployment/deployment.py
2025-05-18 22:23:44 -07:00

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