feat(admin): контактный адрес и тестовое письмо в настройках админки
Поле включения/адреса в карточке «Контактный адрес» и кнопка «Отправить тестовое письмо» с выводом результата — рядом, по образцу соседних настроек AdminSettingsTab.
This commit is contained in:
@@ -34,6 +34,10 @@ export interface SettingsOut {
|
||||
registration_email_domain_enabled: boolean
|
||||
/** Эталонный домен для верификации (напр. `company.ru`) — `null`, если верификация выключена. */
|
||||
registration_email_domain: string | null
|
||||
/** Включён ли контактный адрес инстанса (подставляется в `Reply-To` исходящих писем). */
|
||||
contact_email_enabled: boolean
|
||||
/** Контактный адрес — `null`, если не задан/выключен. */
|
||||
contact_email: string | null
|
||||
}
|
||||
|
||||
/** Тело частичного обновления настроек инстанса — все поля опциональны. */
|
||||
@@ -48,6 +52,24 @@ export interface SettingsUpdateIn {
|
||||
/** Включение без домена или невалидный домен — backend отвечает 400. */
|
||||
registration_email_domain_enabled?: boolean
|
||||
registration_email_domain?: string | null
|
||||
/** Включение без email или невалидный email — backend отвечает 400. */
|
||||
contact_email_enabled?: boolean
|
||||
contact_email?: string | null
|
||||
}
|
||||
|
||||
/** Тело запроса тестовой отправки письма (`POST /admin/settings/test-email`). */
|
||||
export interface TestEmailIn {
|
||||
/** Не задан — backend отправит на email текущего администратора. */
|
||||
to?: string | null
|
||||
}
|
||||
|
||||
/** Результат тестовой отправки — успех или текст ошибки транспорта. */
|
||||
export interface TestEmailOut {
|
||||
success: boolean
|
||||
message: string
|
||||
/** Хост/порт SMTP — только при `EMAIL_BACKEND=smtp`, без логина/пароля. */
|
||||
smtp_host: string | null
|
||||
smtp_port: number | null
|
||||
}
|
||||
|
||||
/** Конференция в ответе админ-списка — `ConferenceOut` + сведения о владельце. */
|
||||
@@ -238,6 +260,14 @@ export async function updateAdminSettings(payload: SettingsUpdateIn): Promise<Se
|
||||
return apiRequest<SettingsOut>('/admin/settings', { method: 'PUT', body: payload })
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправить тестовое письмо синхронно — проверка почтовой конфигурации.
|
||||
* Результат приходит в теле ответа (`success`/`message`), не через HTTP-статус ошибки.
|
||||
*/
|
||||
export async function sendTestEmail(payload: TestEmailIn = {}): Promise<TestEmailOut> {
|
||||
return apiRequest<TestEmailOut>('/admin/settings/test-email', { method: 'POST', body: payload })
|
||||
}
|
||||
|
||||
/** Список команд для админки — с пагинацией. */
|
||||
export async function listAdminTeams(query: AdminTeamQuery = {}): Promise<PagedResult<TeamOut>> {
|
||||
const qs = toQueryString({ limit: query.limit, offset: query.offset })
|
||||
|
||||
Reference in New Issue
Block a user