| 244 | |
| 245 | |
| 246 | class TeamInvite(Base): |
| 247 | __tablename__ = "team_invite" |
| 248 | |
| 249 | id: Mapped[str] = mapped_column( |
| 250 | String(32), primary_key=True, default=lambda: token_hex(16) |
| 251 | ) |
| 252 | team_id: Mapped[str] = mapped_column(ForeignKey("team.id"), index=True) |
| 253 | email: Mapped[str] = mapped_column(String(320), index=True) |
| 254 | role: Mapped[str] = mapped_column( |
| 255 | SQLAEnum("owner", "admin", "member", name="team_invite_role"), |
| 256 | nullable=False, |
| 257 | default="member", |
| 258 | ) |
| 259 | status: Mapped[str] = mapped_column( |
| 260 | SQLAEnum("pending", "accepted", "revoked", name="team_invite_status"), |
| 261 | nullable=False, |
| 262 | default="pending", |
| 263 | ) |
| 264 | inviter_id: Mapped[int] = mapped_column(ForeignKey("user.id"), index=True) |
| 265 | created_at: Mapped[datetime] = mapped_column(default=utc_now) |
| 266 | expires_at: Mapped[datetime] = mapped_column( |
| 267 | default=lambda: utc_now() + timedelta(days=30) |
| 268 | ) |
| 269 | |
| 270 | # Relationships |
| 271 | team: Mapped[Team] = relationship() |
| 272 | inviter: Mapped[User] = relationship() |
| 273 | |
| 274 | |
| 275 | class GithubInstallation(Base): |
no test coverage detected