feat: mail phase 2 - delete, move, drafts
- Add deleted_at field to Mail/MailAccount/MailFolder models
- Add DELETE /{mail_id} endpoint (soft-delete + IMAP EXPUNGE)
- Add POST /{mail_id}/move endpoint (IMAP UID MOVE + folder_id update)
- Add POST /drafts and PUT /drafts/{id} endpoints (save/edit drafts)
- Add imap_delete_mail() and imap_move_mail() service functions
- Add save_draft() and update_draft() service functions
- Frontend: deleteMail, moveMail, saveDraft, updateDraft API functions
- ComposeModal: draft mode with Save Draft button
- MailDetail: delete/move buttons, edit-draft for drafts
- Mail.tsx: bulk delete/move, move dropdown, draft handlers
- i18n: 13 new keys (de/en)
This commit is contained in:
@@ -48,6 +48,7 @@ class MailAccount(Base, TenantMixin):
|
||||
encrypted_password: Mapped[str] = mapped_column(Text, nullable=False)
|
||||
is_shared: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
|
||||
is_active: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True)
|
||||
deleted_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
|
||||
|
||||
|
||||
# --- Mail Folders (F-MAIL-01, F-MAIL-19) ---
|
||||
@@ -80,6 +81,7 @@ class MailFolder(Base, TenantMixin):
|
||||
is_standard: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
|
||||
unread_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
|
||||
total_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
|
||||
deleted_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
|
||||
|
||||
|
||||
# --- Mails (F-MAIL-01, F-MAIL-03, F-MAIL-05) ---
|
||||
@@ -132,6 +134,7 @@ class Mail(Base, TenantMixin):
|
||||
sent_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
|
||||
contact_id: Mapped[uuid.UUID | None] = mapped_column(PGUUID(as_uuid=True), nullable=True)
|
||||
company_id: Mapped[uuid.UUID | None] = mapped_column(PGUUID(as_uuid=True), nullable=True)
|
||||
deleted_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
|
||||
|
||||
|
||||
# --- Mail Attachments (F-MAIL-04) ---
|
||||
|
||||
Reference in New Issue
Block a user