#P1698
POST /v2/mail/address/store
Mail: Create Address
این اندپوینت برای ایجاد یک حساب ایمیل جدید استفاده میشود.
این متد یک فرآیند دو مرحلهای دارد: ابتدا درخواست ساخت اکانت را به سرویسدهنده خارجی (External API) ارسال میکند و در صورت موفقیت، اطلاعات آن را در دیتابیس محلی ذخیره کرده و به اپراتور درخواستدهنده تخصیص میدهد.
Request Overview
URL:
/v2/mail/address/storeMethod: POST
Controller: MailController@mailAddressStore
Middleware Stack: authWithJwt
Access Control
- دسترسی معتبر JWT (الزامی برای شناسایی اپراتور سازنده).
Body Parameters
| Field | Type | Description |
|---|---|---|
| service_id | string/int | (الزامی) شناسه سرویس در سیستم خارجی (Third-party) که برای فراخوانی API آن استفاده میشود. |
| server | integer | (الزامی) شناسه رکورد سرور در دیتابیس داخلی (`mail_servers.id`) برای اتصال ایمیل به سرور. |
| address | string | (اختیاری) نام کاربری ایمیل (بدون @domain). اگر ارسال نشود، سیستم به طور خودکار بر اساس نام لاتین اپراتور (`f.lastname`) آن را تولید میکند. |
Logic Details
فرآیند متد mailAddressStore به شرح زیر است:
- تعیین نام کاربری (Address Generation):
- اگر پارامتر
addressارسال شده باشد، همان استفاده میشود. - اگر ارسال نشده باشد، سیستم حرف اول
first_name_enو کلlast_name_enاپراتور را با نقطه ترکیب کرده و کوچک (lowercase) میکند. (مثال: `a.rezayi`).
- اگر پارامتر
- فراخوانی سرویس خارجی:
- یک درخواست
POSTبه آدرسbaseUrl/{service_id}/accountsارسال میشود. - پارامتر ارسالی:
{ "name": mailAddress }. - هدر: توکن Bearer داخلی سیستم (`$this->token`).
- یک درخواست
- بررسی پاسخ و ذخیرهسازی:
- اگر پاسخ سرویس خارجی موفق (`status == 'success'`) باشد:
یک رکورد در جدولmail_addressدرج میشود شامل:server: شناسه سرور داخلی.address: نام کاربری ایمیل.title: نام کامل فارسی اپراتور.users: آرایه JSON حاوی شناسه اپراتور سازنده (به عنوان مالک).avatarوservice_id.
- اگر پاسخ ناموفق باشد، پیام خطای سرویس خارجی بازگردانده میشود.
- اگر پاسخ سرویس خارجی موفق (`status == 'success'`) باشد:
Response Structure
پاسخ موفق (Created)
حساب کاربری هم در سرویس خارجی و هم در دیتابیس داخلی ایجاد شده است.
- Status Code:
200 OK - Body:
{ "status": true, "time": 1670155000, "data": "a.username" // The created mail address }
پاسخ ناموفق (API Reject)
سرویس خارجی درخواست ساخت اکانت را رد کرده است (مثلاً نام کاربری تکراری است).
- Status Code:
200 OK - Body:
{ "status": false, "time": 1670155005, "message": "User already exists or invalid name." // Error from external API }
پاسخ خطا (Exception)
- Status Code:
400 Bad Request - Body:
{ "status": false, "error": "Http request failed...", "trace": [...] }
Flowchart
Start (POST /mail/address/store)
↓
Has `address` Input?
No
Yes
Generate: lower(f.lastname)
Use Input Address
↓
External API Call
POST /accounts
(Payload: name)
POST /accounts
(Payload: name)
↓
API Result Success?
↓ (Yes)
DB Insert (mail_address)
Set `users` = [operator_id]
Set `title`, `avatar` from operator
Set `users` = [operator_id]
Set `title`, `avatar` from operator
↓
Return Status True + Address
→ (No)
Return Status False + API Message
→ On Exception
Return 400 Bad Request