#P1701
POST /v2/mail/attachments/download
Mail: Download Attachment
این اندپوینت وظیفه دریافت لینک دانلود فایلهای پیوست ایمیل را بر عهده دارد.
برای ایمیلهای ورودی (Inbox)، از استراتژی Lazy Download استفاده میشود: فایل ابتدا روی سرور ایمیل خارجی است؛ اگر اولین بار باشد که درخواست میشود، فایل دانلود شده، در S3 ذخیره میشود و لینک آن در دیتابیس ثبت میگردد. در درخواستهای بعدی، لینک مستقیم S3 بازگردانده میشود.
Request Overview
URL:
/v2/mail/attachments/downloadMethod: POST
Controller: MailController@mailAttachmentsDownload
Middleware Stack: authWithJwt
Access Control
- دسترسی معتبر JWT.
Body Parameters
| Field | Type | Description |
|---|---|---|
| id | integer | (الزامی) شناسه رکورد پیوست در جدول لوکال (`mail_attachment.id`). |
| service_id | integer | (الزامی برای Inbox) شناسه سرویس ایمیل جهت ارتباط با API خارجی. |
| mail_id | string | (الزامی برای Inbox) شناسه پیام در سرور خارجی (Message ID). |
| attach_id | string | (الزامی برای Inbox) شناسه پیوست در سرور خارجی. |
| branch | string | (الزامی) نام یا شناسه برنچ جهت ساختن مسیر ذخیرهسازی فایل در S3 (مثلاً: `uploads/{branch}/mailbox/...`). |
Logic Details
منطق پردازش به شرح زیر است:
- بازیابی رکورد: ابتدا رکورد پیوست از جدول
mail_attachmentبر اساسidخوانده میشود. - بررسی جهت (Direction):
- اگر Sent (ارسالی) باشد: فایل قبلاً هنگام ارسال آپلود شده است. لینک موجود در ستون
storageمستقیماً بازگردانده میشود. - اگر Inbox (دریافتی) باشد:
- بررسی کش (Cache Check): سیستم چک میکند آیا فیلد
storageمقدار دارد (Not Null)؟- بله: فایل قبلاً دانلود شده است. لینک S3 بازگردانده میشود.
- خیر (دانلود اولیه):
- یک درخواست به API سرویسدهنده ایمیل ارسال میشود (با استفاده از `service_id`, `mail_id`, `attach_id`).
- محتوای فایل (Base64) دریافت میشود.
- فایل در S3 (فضای ابری) آپلود میشود.
- لینک فایل جدید در ستون
storageرکورد دیتابیس آپدیت میشود تا در دفعات بعدی دانلود نشود. - لینک نهایی به کاربر ارسال میشود.
- بررسی کش (Cache Check): سیستم چک میکند آیا فیلد
- اگر Sent (ارسالی) باشد: فایل قبلاً هنگام ارسال آپلود شده است. لینک موجود در ستون
Response Structure
پاسخ موفق
- Status Code:
200 OK(یا بازگشت آرایه موفق) - Body:
{ "status": true, "time": 1670158000, "link": "https://storage.bucket.com/uploads/main/mailbox/2023/05/file.pdf" }
Flowchart
Start (POST /attachments/download)
↓
Fetch `mail_attachment` by ID
↓
Direction?
Sent
Return `storage`
(Existing Link)
(Existing Link)
Inbox
Storage Exists?
Yes
Return Link
No (Null)
Fetch External API
Get Base64 Content
Get Base64 Content
↓
Upload to S3
Update DB `storage`
Update DB `storage`
↓
Return New Link