Event-based usage tracking for billing. Records when members/courses are added or removed.
| 5 | |
| 6 | |
| 7 | class UsageEvent(SQLModel, table=True): |
| 8 | """ |
| 9 | Event-based usage tracking for billing. |
| 10 | Records when members/courses are added or removed. |
| 11 | """ |
| 12 | __table_args__ = ( |
| 13 | Index('ix_usage_event_org_feature_ts', 'org_id', 'feature', 'timestamp'), |
| 14 | ) |
| 15 | |
| 16 | id: Optional[int] = Field(default=None, primary_key=True) |
| 17 | org_id: int = Field( |
| 18 | sa_column=Column(BigInteger, ForeignKey("organization.id", ondelete="CASCADE")) |
| 19 | ) |
| 20 | feature: str # "members" or "courses" |
| 21 | event_type: str # "add" or "remove" |
| 22 | timestamp: datetime = Field(default_factory=datetime.now) |
| 23 | usage_after: int # Total count after this event |
| 24 | |
| 25 | |
| 26 | class UsageEventRead(SQLModel): |