company flows

This commit is contained in:
debu-2 2026-10-04 20:01:29 +05:30
parent 6541284a4c
commit cc3f3f3de5
17 changed files with 1960 additions and 66 deletions

View file

@ -41,6 +41,13 @@ class Account(Base):
date_of_birth: Mapped[date] = mapped_column(Date)
phone_number: Mapped[str] = mapped_column(String(24), unique=True)
company_domain: Mapped[str | None] = mapped_column(String(253), nullable=True)
org_role: Mapped[str] = mapped_column(String(20), default="user")
member_status: Mapped[str] = mapped_column(String(20), default="active")
created_by_id: Mapped[uuid.UUID | None] = mapped_column(
UUID(as_uuid=True),
ForeignKey("users.id"),
nullable=True,
)
password_hash: Mapped[str] = mapped_column(String(255))
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
@ -127,3 +134,93 @@ class SmtpCredential(Base):
server_default=func.now(),
)
domain: Mapped[MailDomain] = relationship(back_populates="smtp_credentials")
class MailGroup(Base):
__tablename__ = "mail_groups"
__table_args__ = (
CheckConstraint(
"group_type IN ('distribution', 'dynamic')",
name="ck_mail_groups_group_type",
),
)
id: Mapped[uuid.UUID] = mapped_column(
UUID(as_uuid=True),
primary_key=True,
default=uuid.uuid4,
)
company_domain: Mapped[str] = mapped_column(String(253), index=True)
name: Mapped[str] = mapped_column(String(120))
email: Mapped[str] = mapped_column(String(320), unique=True, index=True)
group_type: Mapped[str] = mapped_column(String(20), default="distribution")
created_by_id: Mapped[uuid.UUID | None] = mapped_column(
UUID(as_uuid=True),
ForeignKey("users.id"),
nullable=True,
)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(),
)
members: Mapped[list["MailGroupMember"]] = relationship(
back_populates="group",
cascade="all, delete-orphan",
)
class MailGroupMember(Base):
__tablename__ = "mail_group_members"
id: Mapped[uuid.UUID] = mapped_column(
UUID(as_uuid=True),
primary_key=True,
default=uuid.uuid4,
)
group_id: Mapped[uuid.UUID] = mapped_column(
UUID(as_uuid=True),
ForeignKey("mail_groups.id"),
index=True,
)
account_id: Mapped[uuid.UUID] = mapped_column(
UUID(as_uuid=True),
ForeignKey("users.id"),
index=True,
)
group: Mapped[MailGroup] = relationship(back_populates="members")
account: Mapped[Account] = relationship()
class MailAlias(Base):
__tablename__ = "mail_aliases"
__table_args__ = (
CheckConstraint(
"alias_type IN ('user', 'group')",
name="ck_mail_aliases_alias_type",
),
CheckConstraint(
"status IN ('active', 'disabled')",
name="ck_mail_aliases_status",
),
)
id: Mapped[uuid.UUID] = mapped_column(
UUID(as_uuid=True),
primary_key=True,
default=uuid.uuid4,
)
company_domain: Mapped[str] = mapped_column(String(253), index=True)
alias_address: Mapped[str] = mapped_column(String(320), unique=True, index=True)
forwards_to: Mapped[str] = mapped_column(String(320))
alias_type: Mapped[str] = mapped_column(String(20), default="user")
is_domain_alias: Mapped[bool] = mapped_column(Boolean, default=False)
status: Mapped[str] = mapped_column(String(20), default="active")
created_by_id: Mapped[uuid.UUID | None] = mapped_column(
UUID(as_uuid=True),
ForeignKey("users.id"),
nullable=True,
)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(),
)