#pragma once #include "../databasemanager.h" #include "../../core/mailitem.h" #include #include struct StoredAttachmentRecord { QString fileName; QString mimeType; QString contentId; qint64 size{0}; QString storedPath; }; class MailItemDao { public: static bool insert(MailItem& item); static bool upsert(MailItem& item); static bool update(const MailItem& item); static bool remove(qint64 id); static std::optional findById(qint64 id); static QVector findAll(); static QVector findByFolderId(int folderId); static QVector findByFolderIdSinceUid(int folderId, qint64 sinceUid); static std::optional maxUidForFolder(int folderId); static QVector getUidsForFolder(int folderId); static QVector uidsForFolder(int folderId); static std::optional findByUid(int folderId, qint64 uid); static bool removeByUid(int folderId, qint64 uid); static bool replaceAttachments(qint64 mailItemId, const QVector& attachments); static QVector attachmentsForMail(qint64 mailItemId); static int countUnreadByFolderId(int folderId); static int countAll(const QString& searchFilter, bool unreadOnly, bool flaggedOnly, bool hasAttachments); static int countByFolderId(int folderId, const QString& searchFilter, bool unreadOnly, bool flaggedOnly, bool hasAttachments); static QVector findAllPaginated(int offset, int limit, const QString& searchFilter, bool unreadOnly, bool flaggedOnly, bool hasAttachments); static QVector findByFolderIdPaginated(int folderId, int offset, int limit, const QString& searchFilter, bool unreadOnly, bool flaggedOnly, bool hasAttachments); };