import { redirect } from 'next/navigation'; import { apiFetch } from '../../lib/api'; import { createSession, getSession } from '../../lib/auth/session'; import styles from './styles.module.css'; // Server Action: оформляет регистрацию и в зависимости от настроек либо сразу // авторизует пользователя, либо перенаправляет его на страницу входа // с подсказкой подтвердить почту. async function registerAction(formData: FormData) { 'use server'; // 1. Извлекаем значения из формы. Метод `FormData.get` возвращает `FormDataEntryValue` | null, // поэтому приводим к строке и удаляем пробелы по краям. const fullName = String(formData.get('fullName') ?? '').trim(); const email = String(formData.get('email') ?? '').trim(); const password = String(formData.get('password') ?? '').trim(); // Необязательные поля переводим в undefined, чтобы backend не записывал пустые строки. const motivation = String(formData.get('motivation') ?? '').trim() || undefined; if (!fullName || !email || !password) { redirect('/register?error=' + encodeURIComponent('Заполните имя, email и пароль.')); } try { // 2. Собираем payload в формате, который ожидает FastAPI. const payload = { full_name: fullName, email, password, motivation }; const response = await apiFetch('/auth/register', { method: 'POST', body: JSON.stringify(payload) }); if (response && 'access_token' in response) { // 3a. Если подтверждение почты отключено — получаем JWT, создаём сессию и отправляем пилота на онбординг. createSession({ token: response.access_token, role: 'pilot', fullName }); redirect('/onboarding'); } // 3b. При включённом подтверждении backend возвращает текст подсказки и debug-код. const detail = response?.detail ?? 'Проверьте почту для подтверждения.'; const debug = response?.debug_token ? ` Код: ${response.debug_token}` : ''; redirect('/login?info=' + encodeURIComponent(`${detail}${debug}`)); } catch (error) { console.error('Registration failed:', error); // 4. Любые сетевые/серверные ошибки показываем пользователю через query string. const message = error instanceof Error ? error.message : 'Не удалось завершить регистрацию.'; redirect('/register?error=' + encodeURIComponent(message)); } } export default async function RegisterPage({ searchParams }: { searchParams: { error?: string } }) { const existing = await getSession(); if (existing) { redirect(existing.role === 'hr' ? '/admin' : '/'); } const errorMessage = searchParams.error; return (

Регистрация пилота

После регистрации вы попадёте на онбординг и сможете выполнять миссии. Если включено подтверждение почты, мы отправим код на указанную почту.

{errorMessage &&

{errorMessage}

}