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

61 lines
1.5 KiB
Python

from datetime import datetime
from typing import Literal
from beanie import Document
from bson import ObjectId
from pydantic import Field, field_validator
from pydantic import BaseModel
class Deployment(Document):
deployment_id: str = Field(alias="_id")
@field_validator("deployment_id", mode="before")
@classmethod
def convert_object_id(cls, v):
return str(v)
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
# somehow combo + unique errors out
# {"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