full
Deploy to Production / deploy-production (push) Successful in 26s Details

This commit is contained in:
root 2026-02-13 20:35:13 +03:00
parent 118f33f77b
commit 8c6406269c
17 changed files with 1138 additions and 293 deletions

View File

@ -107,56 +107,274 @@ def send_email_notification(notification):
# Если шаблон не содержит body, используем дефолтный
if not email_body:
action_button = ''
if notification.action_url:
action_url = f"{settings.FRONTEND_URL}{notification.action_url}"
action_button = f'''
<tr>
<td style="padding-top: 8px; padding-bottom: 24px; text-align: center;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td style="background-color: #7444FD; border-radius: 4px;">
<a href="{action_url}" style="display: inline-block; padding: 14px 32px; font-size: 16px; font-weight: 500; color: #FFFFFF; text-decoration: none; border-radius: 4px;">
Перейти
</a>
</td>
</tr>
</table>
</td>
</tr>
'''
email_body = f"""
<html>
<body style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
<div style="background-color: #f8f9fa; padding: 20px; border-radius: 8px;">
<h2 style="color: #333;">{notification.title}</h2>
<div style="background-color: white; padding: 20px; border-radius: 8px; margin: 20px 0;">
<p style="color: #666; line-height: 1.6;">{notification.message}</p>
</div>
{f'<a href="{settings.FRONTEND_URL}{notification.action_url}" style="display: inline-block; background-color: #3B82F6; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px;">Перейти</a>' if notification.action_url else ''}
<p style="color: #999; font-size: 12px; margin-top: 20px;">
Это автоматическое уведомление от образовательной платформы.
</p>
</div>
</body>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!--[if mso]>
<style type="text/css">
body, table, td {{font-family: Arial, sans-serif !important;}}
</style>
<![endif]-->
</head>
<body style="margin: 0; padding: 0; background-color: #FAFAFA; font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #FAFAFA;">
<tr>
<td align="center" style="padding: 40px 20px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="600" style="max-width: 600px; background-color: #FFFFFF; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
<tr>
<td style="padding: 40px 40px 30px 40px; text-align: center;">
<!-- Стилизованный текстовый логотип uchill -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td>
<span style="display: inline-block; color: #7444FD; letter-spacing: 1px; font-size: 48px; font-weight: 600; line-height: 1.2;">
<span style="background-color: #7444FD; color: #ffffff; border-radius: 2px; margin-right: 2px; font-weight: 600; font-size: 48px; display: inline-block; vertical-align: baseline; line-height: 1; padding: 2px 8px; letter-spacing: 0;">u</span><span style="vertical-align: baseline;">chill</span>
</span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="padding: 0 40px 40px 40px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="padding-bottom: 24px;">
<h1 style="margin: 0; font-size: 28px; font-weight: 500; color: #212121; line-height: 1.2;">{notification.title}</h1>
</td>
</tr>
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">{notification.message}</p>
</td>
</tr>
{action_button}
</table>
</td>
</tr>
<tr>
<td style="padding: 30px 40px; background-color: #F5F5F5; border-radius: 0 0 8px 8px; border-top: 1px solid #E0E0E0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="text-align: center; font-size: 14px; color: #757575; line-height: 1.6;">
<p style="margin: 0 0 10px 0;">С уважением,<br><strong style="color: #7444FD;">Команда Uchill</strong></p>
<p style="margin: 10px 0 0 0; font-size: 12px; color: #9E9E9E;">
© 2026 Uchill. Все права защищены.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
"""
else:
# Если есть шаблон, оборачиваем его в базовую HTML структуру, если нужно
if not email_body.strip().startswith('<html'):
action_button = ''
if notification.action_url:
action_url = f"{settings.FRONTEND_URL}{notification.action_url}"
action_button = f'''
<tr>
<td style="padding-top: 8px; padding-bottom: 24px; text-align: center;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td style="background-color: #7444FD; border-radius: 4px;">
<a href="{action_url}" style="display: inline-block; padding: 14px 32px; font-size: 16px; font-weight: 500; color: #FFFFFF; text-decoration: none; border-radius: 4px;">
Перейти
</a>
</td>
</tr>
</table>
</td>
</tr>
'''
email_body = f"""
<html>
<body style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
<div style="background-color: #f8f9fa; padding: 20px; border-radius: 8px;">
{email_body}
{f'<a href="{settings.FRONTEND_URL}{notification.action_url}" style="display: inline-block; background-color: #3B82F6; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px; margin-top: 20px;">Перейти</a>' if notification.action_url else ''}
<p style="color: #999; font-size: 12px; margin-top: 20px;">
Это автоматическое уведомление от образовательной платформы.
</p>
</div>
</body>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!--[if mso]>
<style type="text/css">
body, table, td {{font-family: Arial, sans-serif !important;}}
</style>
<![endif]-->
</head>
<body style="margin: 0; padding: 0; background-color: #FAFAFA; font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #FAFAFA;">
<tr>
<td align="center" style="padding: 40px 20px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="600" style="max-width: 600px; background-color: #FFFFFF; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
<tr>
<td style="padding: 40px 40px 30px 40px; text-align: center;">
<!-- Стилизованный текстовый логотип uchill -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td>
<span style="display: inline-block; color: #7444FD; letter-spacing: 1px; font-size: 48px; font-weight: 600; line-height: 1.2;">
<span style="background-color: #7444FD; color: #ffffff; border-radius: 2px; margin-right: 2px; font-weight: 600; font-size: 48px; display: inline-block; vertical-align: baseline; line-height: 1; padding: 2px 8px; letter-spacing: 0;">u</span><span style="vertical-align: baseline;">chill</span>
</span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="padding: 0 40px 40px 40px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="padding-bottom: 24px;">
{email_body}
</td>
</tr>
{action_button}
</table>
</td>
</tr>
<tr>
<td style="padding: 30px 40px; background-color: #F5F5F5; border-radius: 0 0 8px 8px; border-top: 1px solid #E0E0E0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="text-align: center; font-size: 14px; color: #757575; line-height: 1.6;">
<p style="margin: 0 0 10px 0;">С уважением,<br><strong style="color: #7444FD;">Команда Uchill</strong></p>
<p style="margin: 10px 0 0 0; font-size: 12px; color: #9E9E9E;">
© 2026 Uchill. Все права защищены.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
"""
except NotificationTemplate.DoesNotExist:
# Если шаблона нет, используем дефолтный
email_subject = notification.title
action_button = ''
if notification.action_url:
action_url = f"{settings.FRONTEND_URL}{notification.action_url}"
action_button = f'''
<tr>
<td style="padding-top: 8px; padding-bottom: 24px; text-align: center;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td style="background-color: #7444FD; border-radius: 4px;">
<a href="{action_url}" style="display: inline-block; padding: 14px 32px; font-size: 16px; font-weight: 500; color: #FFFFFF; text-decoration: none; border-radius: 4px;">
Перейти
</a>
</td>
</tr>
</table>
</td>
</tr>
'''
email_body = f"""
<html>
<body style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
<div style="background-color: #f8f9fa; padding: 20px; border-radius: 8px;">
<h2 style="color: #333;">{notification.title}</h2>
<div style="background-color: white; padding: 20px; border-radius: 8px; margin: 20px 0;">
<p style="color: #666; line-height: 1.6;">{notification.message}</p>
</div>
{f'<a href="{settings.FRONTEND_URL}{notification.action_url}" style="display: inline-block; background-color: #3B82F6; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px;">Перейти</a>' if notification.action_url else ''}
<p style="color: #999; font-size: 12px; margin-top: 20px;">
Это автоматическое уведомление от образовательной платформы.
</p>
</div>
</body>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!--[if mso]>
<style type="text/css">
body, table, td {{font-family: Arial, sans-serif !important;}}
</style>
<![endif]-->
</head>
<body style="margin: 0; padding: 0; background-color: #FAFAFA; font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #FAFAFA;">
<tr>
<td align="center" style="padding: 40px 20px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="600" style="max-width: 600px; background-color: #FFFFFF; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
<tr>
<td style="padding: 40px 40px 30px 40px; text-align: center;">
<!-- Стилизованный текстовый логотип uchill -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td>
<span style="display: inline-block; color: #7444FD; letter-spacing: 1px; font-size: 48px; font-weight: 600; line-height: 1.2;">
<span style="background-color: #7444FD; color: #ffffff; border-radius: 2px; margin-right: 2px; font-weight: 600; font-size: 48px; display: inline-block; vertical-align: baseline; line-height: 1; padding: 2px 8px; letter-spacing: 0;">u</span><span style="vertical-align: baseline;">chill</span>
</span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="padding: 0 40px 40px 40px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="padding-bottom: 24px;">
<h1 style="margin: 0; font-size: 28px; font-weight: 500; color: #212121; line-height: 1.2;">{notification.title}</h1>
</td>
</tr>
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">{notification.message}</p>
</td>
</tr>
{action_button}
</table>
</td>
</tr>
<tr>
<td style="padding: 30px 40px; background-color: #F5F5F5; border-radius: 0 0 8px 8px; border-top: 1px solid #E0E0E0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="text-align: center; font-size: 14px; color: #757575; line-height: 1.6;">
<p style="margin: 0 0 10px 0;">С уважением,<br><strong style="color: #7444FD;">Команда Uchill</strong></p>
<p style="margin: 10px 0 0 0; font-size: 12px; color: #9E9E9E;">
© 2026 Uchill. Все права защищены.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
"""

View File

@ -18,7 +18,8 @@
{ "country_code": "RU", "country_name": "Россия", "city": "Саратов", "timezone": "Europe/Saratov" },
{ "country_code": "RU", "country_name": "Россия", "city": "Тюмень", "timezone": "Asia/Yekaterinburg" },
{ "country_code": "RU", "country_name": "Россия", "city": "Иркутск", "timezone": "Asia/Irkutsk" },
{ "country_code": "RU", "country_name": "Россия", "city": "Владивосток", "timezone": "Asia/Vladivostok" }
{ "country_code": "RU", "country_name": "Россия", "city": "Владивосток", "timezone": "Asia/Vladivostok" },
{ "country_code": "RU", "country_name": "Россия", "city": "Ульяновск", "timezone": "Europe/Samara" }
]

View File

@ -923,10 +923,36 @@ class ClientManagementViewSet(viewsets.ViewSet):
# Здесь заранее аннотируем эти значения одним SQL-запросом.
from django.db.models import Count, Q
# Получаем ID студентов из принятых связей (MentorStudentConnection)
# Это нужно для случаев, когда связь создана, но ментор ещё не добавлен в client.mentors
accepted_connections = MentorStudentConnection.objects.filter(
mentor=user,
status=MentorStudentConnection.STATUS_ACCEPTED
).values_list('student_id', flat=True)
# Получаем ID клиентов, у которых ментор уже добавлен в client.mentors
clients_with_mentor = Client.objects.filter(mentors=user).values_list('id', flat=True)
# Получаем ID клиентов из принятых связей, у которых ментор ещё не добавлен
clients_to_sync = Client.objects.filter(
user_id__in=accepted_connections
).exclude(id__in=clients_with_mentor).values_list('id', flat=True)
# Синхронизация: добавляем ментора в client.mentors для клиентов с принятыми связями
# Используем bulk операцию для эффективности
if clients_to_sync:
clients_to_update = Client.objects.filter(id__in=clients_to_sync)
for client in clients_to_update:
client.mentors.add(user)
# Фильтруем клиентов: либо ментор в client.mentors, либо есть принятая связь
clients = (
Client.objects.filter(mentors=user)
Client.objects.filter(
Q(mentors=user) | Q(user_id__in=accepted_connections)
)
.select_related('user')
.prefetch_related('mentors')
.distinct()
.annotate(
# Поля с суффиксом _annotated читает ClientSerializer (если присутствуют)
scheduled_lessons_annotated=Count(

View File

@ -0,0 +1,64 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{% block title %}Uchill{% endblock %}</title>
<!--[if mso]>
<style type="text/css">
body, table, td {font-family: Arial, sans-serif !important;}
</style>
<![endif]-->
</head>
<body style="margin: 0; padding: 0; background-color: #FAFAFA; font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;">
<!-- Wrapper table -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #FAFAFA;">
<tr>
<td align="center" style="padding: 40px 20px;">
<!-- Main content table -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="600" style="max-width: 600px; background-color: #FFFFFF; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
<!-- Header with logo -->
<tr>
<td style="padding: 40px 40px 30px 40px; text-align: center; background-color: #FFFFFF; border-radius: 8px 8px 0 0;">
<!-- Стилизованный текстовый логотип uchill -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td>
<span style="display: inline-block; color: #7444FD; letter-spacing: 1px; font-size: 48px; font-weight: 600; line-height: 1.2;">
<span style="background-color: #7444FD; color: #ffffff; border-radius: 2px; margin-right: 2px; font-weight: 600; font-size: 48px; display: inline-block; vertical-align: baseline; line-height: 1; padding: 2px 8px; letter-spacing: 0;">u</span><span style="vertical-align: baseline;">chill</span>
</span>
</td>
</tr>
</table>
</td>
</tr>
<!-- Content block -->
<tr>
<td style="padding: 0 40px 40px 40px;">
{% block content %}{% endblock %}
</td>
</tr>
<!-- Footer -->
<tr>
<td style="padding: 30px 40px; background-color: #F5F5F5; border-radius: 0 0 8px 8px; border-top: 1px solid #E0E0E0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="text-align: center; font-size: 14px; color: #757575; line-height: 1.6;">
<p style="margin: 0 0 10px 0;">С уважением,<br><strong style="color: #7444FD;">Команда Uchill</strong></p>
<p style="margin: 10px 0 0 0; font-size: 12px; color: #9E9E9E;">
© {% now "Y" %} Uchill. Все права защищены.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

View File

@ -1,36 +1,170 @@
<!DOCTYPE html>
<html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Приглашение от ментора - Uchill</title>
<!--[if mso]>
<style type="text/css">
body, table, td {font-family: Arial, sans-serif !important;}
</style>
<![endif]-->
</head>
<body style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; line-height: 1.6; color: #333; max-width: 600px; margin: 0 auto; padding: 20px; background-color: #f5f5f5;">
<div style="background-color: white; border-radius: 8px; padding: 40px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
<div style="text-align: center; margin-bottom: 30px;">
<h1 style="color: #3B82F6; margin: 0; font-size: 28px;">Приглашение от ментора</h1>
</div>
<body style="margin: 0; padding: 0; background-color: #FAFAFA; font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;">
<!-- Wrapper table -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #FAFAFA;">
<tr>
<td align="center" style="padding: 40px 20px;">
<!-- Main content table -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="600" style="max-width: 600px; background-color: #FFFFFF; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
<!-- Header with logo -->
<tr>
<td style="padding: 40px 40px 30px 40px; text-align: center; background-color: #FFFFFF; border-radius: 8px 8px 0 0;">
<!-- Стилизованный текстовый логотип uchill -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td>
<span style="display: inline-block; color: #7444FD; letter-spacing: 1px; font-size: 48px; font-weight: 600; line-height: 1.2;">
<span style="background-color: #7444FD; color: #ffffff; border-radius: 2px; margin-right: 2px; font-weight: 600; font-size: 48px; display: inline-block; vertical-align: baseline; line-height: 1; padding: 2px 8px; letter-spacing: 0;">u</span><span style="vertical-align: baseline;">chill</span>
</span>
</td>
</tr>
</table>
</td>
</tr>
<p style="font-size: 16px; margin-bottom: 20px;">Здравствуйте!</p>
<!-- Content -->
<tr>
<td style="padding: 0 40px 40px 40px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<!-- Title -->
<tr>
<td style="padding-bottom: 24px;">
<h1 style="margin: 0; font-size: 28px; font-weight: 500; color: #212121; line-height: 1.2;">Приглашение от ментора</h1>
</td>
</tr>
<p style="font-size: 16px; margin-bottom: 20px;"><strong>{{ mentor_name }}</strong> приглашает вас в качестве ученика на платформу.</p>
<!-- Greeting -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">
Здравствуйте!
</p>
</td>
</tr>
{% if set_password_url %}
<p style="font-size: 16px; margin-bottom: 20px;">Для начала работы установите пароль и подтвердите приглашение.</p>
<div style="text-align: center; margin: 30px 0;">
<a href="{{ set_password_url }}" style="display: inline-block; background-color: #3B82F6; color: white; padding: 14px 28px; text-decoration: none; border-radius: 6px; font-weight: 600; font-size: 16px;">Установить пароль и подтвердить</a>
</div>
<p style="font-size: 12px; color: #9CA3AF; word-break: break-all;">{{ set_password_url }}</p>
{% elif confirm_url %}
<p style="font-size: 16px; margin-bottom: 20px;">Подтвердите приглашение, чтобы начать занятия с ментором.</p>
<div style="text-align: center; margin: 30px 0;">
<a href="{{ confirm_url }}" style="display: inline-block; background-color: #3B82F6; color: white; padding: 14px 28px; text-decoration: none; border-radius: 6px; font-weight: 600; font-size: 16px;">Подтвердить приглашение</a>
</div>
<p style="font-size: 12px; color: #9CA3AF; word-break: break-all;">{{ confirm_url }}</p>
{% endif %}
<!-- Main message -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">
<strong style="color: #7444FD;">{{ mentor_name }}</strong> приглашает вас в качестве ученика на платформу Uchill.
</p>
</td>
</tr>
<div style="margin-top: 40px; padding-top: 20px; border-top: 1px solid #E5E7EB;">
<p style="margin: 0; font-size: 14px; color: #6B7280;">С уважением,<br><strong>Команда платформы</strong></p>
</div>
</div>
{% if set_password_url %}
<!-- New user flow -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">
Для начала работы установите пароль и подтвердите приглашение.
</p>
</td>
</tr>
<!-- Button -->
<tr>
<td style="padding-top: 8px; padding-bottom: 24px; text-align: center;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td style="background-color: #7444FD; border-radius: 4px;">
<a href="{{ set_password_url }}" style="display: inline-block; padding: 14px 32px; font-size: 16px; font-weight: 500; color: #FFFFFF; text-decoration: none; border-radius: 4px;">
Установить пароль и подтвердить
</a>
</td>
</tr>
</table>
</td>
</tr>
<!-- Link fallback -->
<tr>
<td style="padding-bottom: 24px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #F5F5F5; border-radius: 4px;">
<tr>
<td style="padding: 12px;">
<p style="margin: 0; font-size: 12px; color: #9E9E9E; word-break: break-all; line-height: 1.5;">
{{ set_password_url }}
</p>
</td>
</tr>
</table>
</td>
</tr>
{% elif confirm_url %}
<!-- Existing user flow -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">
Подтвердите приглашение, чтобы начать занятия с ментором.
</p>
</td>
</tr>
<!-- Button -->
<tr>
<td style="padding-top: 8px; padding-bottom: 24px; text-align: center;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td style="background-color: #7444FD; border-radius: 4px;">
<a href="{{ confirm_url }}" style="display: inline-block; padding: 14px 32px; font-size: 16px; font-weight: 500; color: #FFFFFF; text-decoration: none; border-radius: 4px;">
Подтвердить приглашение
</a>
</td>
</tr>
</table>
</td>
</tr>
<!-- Link fallback -->
<tr>
<td style="padding-bottom: 24px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #F5F5F5; border-radius: 4px;">
<tr>
<td style="padding: 12px;">
<p style="margin: 0; font-size: 12px; color: #9E9E9E; word-break: break-all; line-height: 1.5;">
{{ confirm_url }}
</p>
</td>
</tr>
</table>
</td>
</tr>
{% endif %}
</table>
</td>
</tr>
<!-- Footer -->
<tr>
<td style="padding: 30px 40px; background-color: #F5F5F5; border-radius: 0 0 8px 8px; border-top: 1px solid #E0E0E0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="text-align: center; font-size: 14px; color: #757575; line-height: 1.6;">
<p style="margin: 0 0 10px 0;">С уважением,<br><strong style="color: #7444FD;">Команда Uchill</strong></p>
<p style="margin: 10px 0 0 0; font-size: 12px; color: #9E9E9E;">
© 2026 Uchill. Все права защищены.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

View File

@ -1,6 +1,6 @@
Здравствуйте!
{{ mentor_name }} приглашает вас в качестве ученика на платформу.
{{ mentor_name }} приглашает вас в качестве ученика на платформу Uchill.
{% if set_password_url %}
Установите пароль и подтвердите приглашение по ссылке:
@ -11,4 +11,4 @@
{% endif %}
С уважением,
Команда платформы
Команда Uchill

View File

@ -1,39 +1,146 @@
<!DOCTYPE html>
<html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Восстановление пароля - Uchill</title>
<!--[if mso]>
<style type="text/css">
body, table, td {font-family: Arial, sans-serif !important;}
</style>
<![endif]-->
</head>
<body style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; line-height: 1.6; color: #333; max-width: 600px; margin: 0 auto; padding: 20px; background-color: #f5f5f5;">
<div style="background-color: white; border-radius: 8px; padding: 40px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
<div style="text-align: center; margin-bottom: 30px;">
<h1 style="color: #EF4444; margin: 0; font-size: 28px;">Восстановление пароля</h1>
</div>
<body style="margin: 0; padding: 0; background-color: #FAFAFA; font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;">
<!-- Wrapper table -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #FAFAFA;">
<tr>
<td align="center" style="padding: 40px 20px;">
<!-- Main content table -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="600" style="max-width: 600px; background-color: #FFFFFF; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
<!-- Header with logo -->
<tr>
<td style="padding: 40px 40px 30px 40px; text-align: center; background-color: #FFFFFF; border-radius: 8px 8px 0 0;">
<!-- Стилизованный текстовый логотип uchill -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td>
<span style="display: inline-block; color: #7444FD; letter-spacing: 1px; font-size: 48px; font-weight: 600; line-height: 1.2;">
<span style="background-color: #7444FD; color: #ffffff; border-radius: 2px; margin-right: 2px; font-weight: 600; font-size: 48px; display: inline-block; vertical-align: baseline; line-height: 1; padding: 2px 8px; letter-spacing: 0;">u</span><span style="vertical-align: baseline;">chill</span>
</span>
</td>
</tr>
</table>
</td>
</tr>
<p style="font-size: 16px; margin-bottom: 20px;">Здравствуйте, <strong>{{ user_full_name }}</strong>!</p>
<!-- Content -->
<tr>
<td style="padding: 0 40px 40px 40px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<!-- Title -->
<tr>
<td style="padding-bottom: 24px;">
<h1 style="margin: 0; font-size: 28px; font-weight: 500; color: #212121; line-height: 1.2;">Восстановление пароля</h1>
</td>
</tr>
<p style="font-size: 16px; margin-bottom: 20px;">Вы запросили восстановление пароля для вашего аккаунта. Нажмите на кнопку ниже, чтобы установить новый пароль.</p>
<!-- Greeting -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">
Здравствуйте, <strong style="color: #212121;">{{ user_full_name }}</strong>!
</p>
</td>
</tr>
<div style="text-align: center; margin: 30px 0;">
<a href="{{ reset_url }}" style="display: inline-block; background-color: #EF4444; color: white; padding: 14px 28px; text-decoration: none; border-radius: 6px; font-weight: 600; font-size: 16px;">Восстановить пароль</a>
</div>
<!-- Main message -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">
Вы запросили восстановление пароля для вашего аккаунта. Нажмите на кнопку ниже, чтобы установить новый пароль.
</p>
</td>
</tr>
<p style="font-size: 14px; color: #6B7280; margin-top: 30px;">Или скопируйте и вставьте эту ссылку в браузер:</p>
<p style="font-size: 12px; color: #9CA3AF; word-break: break-all; background-color: #F3F4F6; padding: 10px; border-radius: 4px; margin: 10px 0;">{{ reset_url }}</p>
<!-- Button -->
<tr>
<td style="padding-top: 8px; padding-bottom: 24px; text-align: center;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td style="background-color: #7444FD; border-radius: 4px;">
<a href="{{ reset_url }}" style="display: inline-block; padding: 14px 32px; font-size: 16px; font-weight: 500; color: #FFFFFF; text-decoration: none; border-radius: 4px;">
Восстановить пароль
</a>
</td>
</tr>
</table>
</td>
</tr>
<div style="background-color: #FEF3C7; border-left: 4px solid #F59E0B; padding: 15px; margin: 20px 0; border-radius: 4px;">
<p style="margin: 0; font-size: 14px; color: #92400E;"><strong>⚠️ Важно:</strong> Ссылка действительна в течение 24 часов.</p>
</div>
<!-- Link fallback -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0 0 8px 0; font-size: 14px; color: #757575;">
Или скопируйте и вставьте эту ссылку в браузер:
</p>
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #F5F5F5; border-radius: 4px;">
<tr>
<td style="padding: 12px;">
<p style="margin: 0; font-size: 12px; color: #9E9E9E; word-break: break-all; line-height: 1.5;">
{{ reset_url }}
</p>
</td>
</tr>
</table>
</td>
</tr>
<div style="margin-top: 30px; padding-top: 20px; border-top: 1px solid #E5E7EB;">
<p style="margin: 0; font-size: 12px; color: #9CA3AF;">Если вы не запрашивали восстановление пароля, просто проигнорируйте это письмо. Ваш пароль останется без изменений.</p>
</div>
<!-- Warning box -->
<tr>
<td style="padding-bottom: 24px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #FFF3E0; border-left: 4px solid #FF9800; border-radius: 4px;">
<tr>
<td style="padding: 16px;">
<p style="margin: 0; font-size: 14px; color: #E65100;">
<strong>⚠️ Важно:</strong> Ссылка действительна в течение 24 часов.
</p>
</td>
</tr>
</table>
</td>
</tr>
<div style="margin-top: 20px; padding-top: 20px; border-top: 1px solid #E5E7EB;">
<p style="margin: 0; font-size: 14px; color: #6B7280;">С уважением,<br><strong>Команда Lessoni</strong></p>
</div>
</div>
<!-- Security notice -->
<tr>
<td style="padding-top: 24px; border-top: 1px solid #E0E0E0;">
<p style="margin: 0; font-size: 12px; color: #9E9E9E; line-height: 1.6;">
Если вы не запрашивали восстановление пароля, просто проигнорируйте это письмо. Ваш пароль останется без изменений.
</p>
</td>
</tr>
</table>
</td>
</tr>
<!-- Footer -->
<tr>
<td style="padding: 30px 40px; background-color: #F5F5F5; border-radius: 0 0 8px 8px; border-top: 1px solid #E0E0E0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="text-align: center; font-size: 14px; color: #757575; line-height: 1.6;">
<p style="margin: 0 0 10px 0;">С уважением,<br><strong style="color: #7444FD;">Команда Uchill</strong></p>
<p style="margin: 10px 0 0 0; font-size: 12px; color: #9E9E9E;">
© 2026 Uchill. Все права защищены.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

View File

@ -9,8 +9,4 @@
Если вы не запрашивали восстановление пароля, просто проигнорируйте это письмо. Ваш пароль останется без изменений.
С уважением,
Команда платформы
Команда Uchill

View File

@ -1,40 +1,155 @@
<!DOCTYPE html>
<html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Добро пожаловать на Uchill</title>
<!--[if mso]>
<style type="text/css">
body, table, td {font-family: Arial, sans-serif !important;}
</style>
<![endif]-->
</head>
<body style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; line-height: 1.6; color: #333; max-width: 600px; margin: 0 auto; padding: 20px; background-color: #f5f5f5;">
<div style="background-color: white; border-radius: 8px; padding: 40px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
<div style="text-align: center; margin-bottom: 30px;">
<h1 style="color: #3B82F6; margin: 0; font-size: 28px;">Добро пожаловать!</h1>
</div>
<body style="margin: 0; padding: 0; background-color: #FAFAFA; font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;">
<!-- Wrapper table -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #FAFAFA;">
<tr>
<td align="center" style="padding: 40px 20px;">
<!-- Main content table -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="600" style="max-width: 600px; background-color: #FFFFFF; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
<!-- Header with logo -->
<tr>
<td style="padding: 40px 40px 30px 40px; text-align: center; background-color: #FFFFFF; border-radius: 8px 8px 0 0;">
<!-- Стилизованный текстовый логотип uchill -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td>
<span style="display: inline-block; color: #7444FD; letter-spacing: 1px; font-size: 48px; font-weight: 600; line-height: 1.2;">
<span style="background-color: #7444FD; color: #ffffff; border-radius: 2px; margin-right: 2px; font-weight: 600; font-size: 48px; display: inline-block; vertical-align: baseline; line-height: 1; padding: 2px 8px; letter-spacing: 0;">u</span><span style="vertical-align: baseline;">chill</span>
</span>
</td>
</tr>
</table>
</td>
</tr>
<p style="font-size: 16px; margin-bottom: 20px;">Здравствуйте, <strong>{{ user_full_name }}</strong>!</p>
<!-- Content -->
<tr>
<td style="padding: 0 40px 40px 40px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<!-- Title -->
<tr>
<td style="padding-bottom: 24px;">
<h1 style="margin: 0; font-size: 28px; font-weight: 500; color: #212121; line-height: 1.2;">Добро пожаловать!</h1>
</td>
</tr>
<p style="font-size: 16px; margin-bottom: 20px;">Вас добавили на Lessoni. Для начала работы необходимо установить пароль для вашего аккаунта.</p>
<!-- Greeting -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">
Здравствуйте, <strong style="color: #212121;">{{ user_full_name }}</strong>!
</p>
</td>
</tr>
<div style="background-color: #F3F4F6; border-left: 4px solid #3B82F6; padding: 15px; margin: 20px 0; border-radius: 4px;">
<p style="margin: 0; font-size: 14px;"><strong>Ваш email для входа:</strong></p>
<p style="margin: 5px 0 0 0; font-size: 14px; color: #6B7280;">{{ user_email }}</p>
</div>
<!-- Main message -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">
Вас добавили на Uchill. Для начала работы необходимо установить пароль для вашего аккаунта.
</p>
</td>
</tr>
<div style="text-align: center; margin: 30px 0;">
<a href="{{ set_password_url }}" style="display: inline-block; background-color: #3B82F6; color: white; padding: 14px 28px; text-decoration: none; border-radius: 6px; font-weight: 600; font-size: 16px;">Установить пароль</a>
</div>
<!-- Info box -->
<tr>
<td style="padding-bottom: 24px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #F5F5F5; border-left: 4px solid #7444FD; border-radius: 4px;">
<tr>
<td style="padding: 16px;">
<p style="margin: 0 0 8px 0; font-size: 14px; font-weight: 500; color: #212121;">
Ваш email для входа:
</p>
<p style="margin: 0; font-size: 14px; color: #757575;">
{{ user_email }}
</p>
</td>
</tr>
</table>
</td>
</tr>
<p style="font-size: 14px; color: #6B7280; margin-top: 30px;">Или скопируйте и вставьте эту ссылку в браузер:</p>
<p style="font-size: 12px; color: #9CA3AF; word-break: break-all; background-color: #F3F4F6; padding: 10px; border-radius: 4px; margin: 10px 0;">{{ set_password_url }}</p>
<!-- Button -->
<tr>
<td style="padding-top: 8px; padding-bottom: 24px; text-align: center;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td style="background-color: #7444FD; border-radius: 4px;">
<a href="{{ set_password_url }}" style="display: inline-block; padding: 14px 32px; font-size: 16px; font-weight: 500; color: #FFFFFF; text-decoration: none; border-radius: 4px;">
Установить пароль
</a>
</td>
</tr>
</table>
</td>
</tr>
<div style="background-color: #FEF3C7; border-left: 4px solid #F59E0B; padding: 15px; margin: 20px 0; border-radius: 4px;">
<p style="margin: 0; font-size: 14px; color: #92400E;"><strong>⚠️ Важно:</strong> Ссылка действительна в течение 7 дней.</p>
</div>
<!-- Link fallback -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0 0 8px 0; font-size: 14px; color: #757575;">
Или скопируйте и вставьте эту ссылку в браузер:
</p>
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #F5F5F5; border-radius: 4px;">
<tr>
<td style="padding: 12px;">
<p style="margin: 0; font-size: 12px; color: #9E9E9E; word-break: break-all; line-height: 1.5;">
{{ set_password_url }}
</p>
</td>
</tr>
</table>
</td>
</tr>
<div style="margin-top: 40px; padding-top: 20px; border-top: 1px solid #E5E7EB;">
<p style="margin: 0; font-size: 14px; color: #6B7280;">С уважением,<br><strong>Команда Lessoni</strong></p>
</div>
</div>
<!-- Warning box -->
<tr>
<td style="padding-bottom: 24px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #FFF3E0; border-left: 4px solid #FF9800; border-radius: 4px;">
<tr>
<td style="padding: 16px;">
<p style="margin: 0; font-size: 14px; color: #E65100;">
<strong>⚠️ Важно:</strong> Ссылка действительна в течение 7 дней.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!-- Footer -->
<tr>
<td style="padding: 30px 40px; background-color: #F5F5F5; border-radius: 0 0 8px 8px; border-top: 1px solid #E0E0E0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="text-align: center; font-size: 14px; color: #757575; line-height: 1.6;">
<p style="margin: 0 0 10px 0;">С уважением,<br><strong style="color: #7444FD;">Команда Uchill</strong></p>
<p style="margin: 10px 0 0 0; font-size: 12px; color: #9E9E9E;">
© 2026 Uchill. Все права защищены.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

View File

@ -1,6 +1,6 @@
Здравствуйте, {{ user_full_name }}!
Вас добавили на образовательную платформу. Для начала работы необходимо установить пароль для вашего аккаунта.
Вас добавили на Uchill. Для начала работы необходимо установить пароль для вашего аккаунта.
Ваш email для входа: {{ user_email }}
@ -10,8 +10,4 @@
Важно: Ссылка действительна в течение 7 дней.
С уважением,
Команда платформы
Команда Uchill

View File

@ -1,35 +1,131 @@
<!DOCTYPE html>
<html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Подтверждение email - Uchill</title>
<!--[if mso]>
<style type="text/css">
body, table, td {font-family: Arial, sans-serif !important;}
</style>
<![endif]-->
</head>
<body style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; line-height: 1.6; color: #333; max-width: 600px; margin: 0 auto; padding: 20px; background-color: #f5f5f5;">
<div style="background-color: white; border-radius: 8px; padding: 40px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
<div style="text-align: center; margin-bottom: 30px;">
<h1 style="color: #3B82F6; margin: 0; font-size: 28px;">Подтверждение email</h1>
</div>
<body style="margin: 0; padding: 0; background-color: #FAFAFA; font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;">
<!-- Wrapper table -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #FAFAFA;">
<tr>
<td align="center" style="padding: 40px 20px;">
<!-- Main content table -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="600" style="max-width: 600px; background-color: #FFFFFF; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
<!-- Header with logo -->
<tr>
<td style="padding: 40px 40px 30px 40px; text-align: center; background-color: #FFFFFF; border-radius: 8px 8px 0 0;">
<!-- Стилизованный текстовый логотип uchill -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td>
<span style="display: inline-block; color: #7444FD; letter-spacing: 1px; font-size: 48px; font-weight: 600; line-height: 1.2;">
<span style="background-color: #7444FD; color: #ffffff; border-radius: 2px; margin-right: 2px; font-weight: 600; font-size: 48px; display: inline-block; vertical-align: baseline; line-height: 1; padding: 2px 8px; letter-spacing: 0;">u</span><span style="vertical-align: baseline;">chill</span>
</span>
</td>
</tr>
</table>
</td>
</tr>
<p style="font-size: 16px; margin-bottom: 20px;">Здравствуйте, <strong>{{ user_full_name }}</strong>!</p>
<!-- Content -->
<tr>
<td style="padding: 0 40px 40px 40px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<!-- Title -->
<tr>
<td style="padding-bottom: 24px;">
<h1 style="margin: 0; font-size: 28px; font-weight: 500; color: #212121; line-height: 1.2;">Подтверждение email</h1>
</td>
</tr>
<p style="font-size: 16px; margin-bottom: 20px;">Спасибо за регистрацию на Lessoni. Для завершения регистрации необходимо подтвердить ваш email адрес.</p>
<!-- Greeting -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">
Здравствуйте, <strong style="color: #212121;">{{ user_full_name }}</strong>!
</p>
</td>
</tr>
<div style="text-align: center; margin: 30px 0;">
<a href="{{ verification_url }}" style="display: inline-block; background-color: #3B82F6; color: white; padding: 14px 28px; text-decoration: none; border-radius: 6px; font-weight: 600; font-size: 16px;">Подтвердить email</a>
</div>
<!-- Main message -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">
Спасибо за регистрацию на Uchill. Для завершения регистрации необходимо подтвердить ваш email адрес.
</p>
</td>
</tr>
<p style="font-size: 14px; color: #6B7280; margin-top: 30px;">Или скопируйте и вставьте эту ссылку в браузер:</p>
<p style="font-size: 12px; color: #9CA3AF; word-break: break-all; background-color: #F3F4F6; padding: 10px; border-radius: 4px; margin: 10px 0;">{{ verification_url }}</p>
<!-- Button -->
<tr>
<td style="padding-top: 8px; padding-bottom: 24px; text-align: center;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td style="background-color: #7444FD; border-radius: 4px;">
<a href="{{ verification_url }}" style="display: inline-block; padding: 14px 32px; font-size: 16px; font-weight: 500; color: #FFFFFF; text-decoration: none; border-radius: 4px;">
Подтвердить email
</a>
</td>
</tr>
</table>
</td>
</tr>
<div style="margin-top: 30px; padding-top: 20px; border-top: 1px solid #E5E7EB;">
<p style="margin: 0; font-size: 12px; color: #9CA3AF;">Если вы не регистрировались на нашей платформе, просто проигнорируйте это письмо.</p>
</div>
<!-- Link fallback -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0 0 8px 0; font-size: 14px; color: #757575;">
Или скопируйте и вставьте эту ссылку в браузер:
</p>
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #F5F5F5; border-radius: 4px;">
<tr>
<td style="padding: 12px;">
<p style="margin: 0; font-size: 12px; color: #9E9E9E; word-break: break-all; line-height: 1.5;">
{{ verification_url }}
</p>
</td>
</tr>
</table>
</td>
</tr>
<div style="margin-top: 20px; padding-top: 20px; border-top: 1px solid #E5E7EB;">
<p style="margin: 0; font-size: 14px; color: #6B7280;">С уважением,<br><strong>Команда Lessoni</strong></p>
</div>
</div>
<!-- Security notice -->
<tr>
<td style="padding-top: 24px; border-top: 1px solid #E0E0E0;">
<p style="margin: 0; font-size: 12px; color: #9E9E9E; line-height: 1.6;">
Если вы не регистрировались на нашей платформе, просто проигнорируйте это письмо.
</p>
</td>
</tr>
</table>
</td>
</tr>
<!-- Footer -->
<tr>
<td style="padding: 30px 40px; background-color: #F5F5F5; border-radius: 0 0 8px 8px; border-top: 1px solid #E0E0E0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="text-align: center; font-size: 14px; color: #757575; line-height: 1.6;">
<p style="margin: 0 0 10px 0;">С уважением,<br><strong style="color: #7444FD;">Команда Uchill</strong></p>
<p style="margin: 10px 0 0 0; font-size: 12px; color: #9E9E9E;">
© 2026 Uchill. Все права защищены.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

View File

@ -1,6 +1,6 @@
Здравствуйте, {{ user_full_name }}!
Спасибо за регистрацию на нашей образовательной платформе. Для завершения регистрации необходимо подтвердить ваш email адрес.
Спасибо за регистрацию на Uchill. Для завершения регистрации необходимо подтвердить ваш email адрес.
Перейдите по ссылке для подтверждения:
{{ verification_url }}
@ -8,8 +8,4 @@
Если вы не регистрировались на нашей платформе, просто проигнорируйте это письмо.
С уважением,
Команда платформы
Команда Uchill

View File

@ -1,31 +1,131 @@
<!DOCTYPE html>
<html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Добро пожаловать на Uchill</title>
<!--[if mso]>
<style type="text/css">
body, table, td {font-family: Arial, sans-serif !important;}
</style>
<![endif]-->
</head>
<body style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; line-height: 1.6; color: #333; max-width: 600px; margin: 0 auto; padding: 20px; background-color: #f5f5f5;">
<div style="background-color: white; border-radius: 8px; padding: 40px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
<div style="text-align: center; margin-bottom: 30px;">
<h1 style="color: #3B82F6; margin: 0; font-size: 28px;">Добро пожаловать!</h1>
</div>
<body style="margin: 0; padding: 0; background-color: #FAFAFA; font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;">
<!-- Wrapper table -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #FAFAFA;">
<tr>
<td align="center" style="padding: 40px 20px;">
<!-- Main content table -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="600" style="max-width: 600px; background-color: #FFFFFF; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
<!-- Header with logo -->
<tr>
<td style="padding: 40px 40px 30px 40px; text-align: center; background-color: #FFFFFF; border-radius: 8px 8px 0 0;">
<!-- Стилизованный текстовый логотип uchill -->
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td>
<span style="display: inline-block; color: #7444FD; letter-spacing: 1px; font-size: 48px; font-weight: 600; line-height: 1.2;">
<span style="background-color: #7444FD; color: #ffffff; border-radius: 2px; margin-right: 2px; font-weight: 600; font-size: 48px; display: inline-block; vertical-align: baseline; line-height: 1; padding: 2px 8px; letter-spacing: 0;">u</span><span style="vertical-align: baseline;">chill</span>
</span>
</td>
</tr>
</table>
</td>
</tr>
<p style="font-size: 16px; margin-bottom: 20px;">Здравствуйте, <strong>{{ user_full_name }}</strong>!</p>
<!-- Content -->
<tr>
<td style="padding: 0 40px 40px 40px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<!-- Title -->
<tr>
<td style="padding-bottom: 24px;">
<h1 style="margin: 0; font-size: 28px; font-weight: 500; color: #212121; line-height: 1.2;">Добро пожаловать!</h1>
</td>
</tr>
<p style="font-size: 16px; margin-bottom: 20px;">Добро пожаловать на Lessoni! Ваш аккаунт успешно создан.</p>
<!-- Greeting -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">
Здравствуйте, <strong style="color: #212121;">{{ user_full_name }}</strong>!
</p>
</td>
</tr>
<div style="background-color: #F3F4F6; border-left: 4px solid #3B82F6; padding: 15px; margin: 20px 0; border-radius: 4px;">
<p style="margin: 0; font-size: 14px;"><strong>Ваш email для входа:</strong></p>
<p style="margin: 5px 0 0 0; font-size: 14px; color: #6B7280;">{{ user_email }}</p>
</div>
<!-- Main message -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">
Добро пожаловать на Uchill! Ваш аккаунт успешно создан.
</p>
</td>
</tr>
<p style="font-size: 16px; margin-top: 30px;">Теперь вы можете войти в систему и начать пользоваться всеми возможностями платформы.</p>
<!-- Info box -->
<tr>
<td style="padding-bottom: 24px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background-color: #F5F5F5; border-left: 4px solid #7444FD; border-radius: 4px;">
<tr>
<td style="padding: 16px;">
<p style="margin: 0 0 8px 0; font-size: 14px; font-weight: 500; color: #212121;">
Ваш email для входа:
</p>
<p style="margin: 0; font-size: 14px; color: #757575;">
{{ user_email }}
</p>
</td>
</tr>
</table>
</td>
</tr>
<div style="margin-top: 40px; padding-top: 20px; border-top: 1px solid #E5E7EB;">
<p style="margin: 0; font-size: 14px; color: #6B7280;">С уважением,<br><strong>Команда Lessoni</strong></p>
</div>
</div>
<!-- CTA -->
<tr>
<td style="padding-bottom: 24px;">
<p style="margin: 0; font-size: 16px; color: #424242; line-height: 1.6;">
Теперь вы можете войти в систему и начать пользоваться всеми возможностями платформы.
</p>
</td>
</tr>
<!-- Button -->
<tr>
<td style="padding-top: 8px; padding-bottom: 24px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0">
<tr>
<td style="background-color: #7444FD; border-radius: 4px;">
<a href="https://app.uchill.online/login" style="display: inline-block; padding: 14px 32px; font-size: 16px; font-weight: 500; color: #FFFFFF; text-decoration: none; border-radius: 4px;">
Войти в систему
</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!-- Footer -->
<tr>
<td style="padding: 30px 40px; background-color: #F5F5F5; border-radius: 0 0 8px 8px; border-top: 1px solid #E0E0E0;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="text-align: center; font-size: 14px; color: #757575; line-height: 1.6;">
<p style="margin: 0 0 10px 0;">С уважением,<br><strong style="color: #7444FD;">Команда Uchill</strong></p>
<p style="margin: 10px 0 0 0; font-size: 12px; color: #9E9E9E;">
© 2026 Uchill. Все права защищены.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

View File

@ -1,14 +1,10 @@
Здравствуйте, {{ user_full_name }}!
Добро пожаловать на нашу образовательную платформу. Ваш аккаунт успешно создан.
Добро пожаловать на Uchill! Ваш аккаунт успешно создан.
Ваш email для входа: {{ user_email }}
Теперь вы можете войти в систему и начать пользоваться всеми возможностями платформы.
С уважением,
Команда платформы
Команда Uchill

View File

@ -1,5 +1,5 @@
"""
Django settings для Lessoni - образовательной платформы.
Django settings для Uchill - образовательной платформы.
"""
import os
@ -46,7 +46,7 @@ if os.getenv('SENTRY_DSN') and os.getenv('DEBUG', 'True') == 'False':
environment=os.getenv('SENTRY_ENVIRONMENT', 'production'),
# Релиз (версия приложения)
release=os.getenv('SENTRY_RELEASE', 'lessoni@1.0.0'),
release=os.getenv('SENTRY_RELEASE', 'uchill@1.0.0'),
# Игнорировать определенные ошибки
ignore_errors=[