diff --git a/backend/api/admin.py b/backend/api/admin.py index 12e27bd..533a934 100644 --- a/backend/api/admin.py +++ b/backend/api/admin.py @@ -8,7 +8,7 @@ class UserProfileInline(admin.StackedInline): can_delete = False verbose_name = 'Профиль пользователя' verbose_name_plural = 'Профили пользователей' - fields = ('is_active', 'phone_number', 'birthday', 'country', 'city','privacy_accepted','newsletter', 'uuid', 'image', 'authMailCode','additionalDetails') + fields = ('is_active','account_type', 'phone_number', 'birthday', 'country', 'city','privacy_accepted','newsletter', 'uuid', 'image', 'authMailCode','additionalDetails') readonly_fields = ('uuid','authMailCode') # ридонли в админке class UserAdmin(BaseUserAdmin): diff --git a/backend/api/auth/serializers.py b/backend/api/auth/serializers.py index 1771830..e23b35c 100644 --- a/backend/api/auth/serializers.py +++ b/backend/api/auth/serializers.py @@ -8,6 +8,7 @@ from api.models import UserProfile class UserResponseSerializer(serializers.Serializer): id = serializers.IntegerField() email = serializers.EmailField() + account_type = serializers.CharField(source='userprofile.account_type') name = serializers.CharField(source='first_name') surname = serializers.CharField(source='last_name') phone_number = serializers.CharField(source='userprofile.phone_number') diff --git a/backend/api/migrations/0002_userprofile_account_type_and_more.py b/backend/api/migrations/0002_userprofile_account_type_and_more.py new file mode 100644 index 0000000..8c13b6c --- /dev/null +++ b/backend/api/migrations/0002_userprofile_account_type_and_more.py @@ -0,0 +1,53 @@ +# Generated by Django 5.2.1 on 2025-05-19 09:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='userprofile', + name='account_type', + field=models.CharField(choices=[('free', 'Free'), ('lite', 'Lite'), ('pro', 'Pro')], default='free'), + ), + migrations.AlterField( + model_name='userprofile', + name='additionalDetails', + field=models.TextField(blank=True, null=True, verbose_name='Дополнительные детали'), + ), + migrations.AlterField( + model_name='userprofile', + name='birthday', + field=models.DateField(blank=True, null=True, verbose_name='Дата рождения'), + ), + migrations.AlterField( + model_name='userprofile', + name='city', + field=models.CharField(blank=True, max_length=35, null=True, verbose_name='Город'), + ), + migrations.AlterField( + model_name='userprofile', + name='country', + field=models.CharField(blank=True, max_length=15, null=True, verbose_name='Страна'), + ), + migrations.AlterField( + model_name='userprofile', + name='newsletter', + field=models.BooleanField(default=False, verbose_name='Подписка на новостную рассылку'), + ), + migrations.AlterField( + model_name='userprofile', + name='phone_number', + field=models.CharField(max_length=13, verbose_name='Номер телефона'), + ), + migrations.AlterField( + model_name='userprofile', + name='privacy_accepted', + field=models.BooleanField(default=False, verbose_name='Согласие с политикой конфиденциальности'), + ), + ] diff --git a/backend/api/models.py b/backend/api/models.py index 23ef371..11f2a8a 100644 --- a/backend/api/models.py +++ b/backend/api/models.py @@ -1,9 +1,11 @@ from django.contrib.auth.models import User from django.db import models +from routes.constants.account_types import account_types import uuid class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) + account_type = models.CharField(choices=account_types, default='free') is_active = models.BooleanField(default=True) phone_number = models.CharField(max_length=13, verbose_name="Номер телефона") birthday = models.DateField(null=True, blank=True, verbose_name="Дата рождения") diff --git a/backend/routes/constants/account_types.py b/backend/routes/constants/account_types.py new file mode 100644 index 0000000..9721d03 --- /dev/null +++ b/backend/routes/constants/account_types.py @@ -0,0 +1,5 @@ +account_types = [ + ("free", "Free"), + ("lite", "Lite"), + ('pro', "Pro"), +] \ No newline at end of file diff --git a/frontend/components/AccountSidebar.tsx b/frontend/components/AccountSidebar.tsx index 02067e8..86aa89e 100644 --- a/frontend/components/AccountSidebar.tsx +++ b/frontend/components/AccountSidebar.tsx @@ -23,9 +23,9 @@ const AccountSidebar: React.FC = ({ switch (accountType.toLowerCase()) { case 'free': return 'bg-gray-400 text-white' - case 'pro': + case 'lite': return 'bg-orage/70 text-white' - case 'premium': + case 'pro': return 'bg-blue-300' default: return 'bg-gray-200' @@ -85,7 +85,7 @@ const AccountSidebar: React.FC = ({ href={item.href} className={`${ isActive - ? 'bg-mainblocks text-white' + ? 'bg-orange/80 text-white' : 'text-gray-600 hover:bg-gray-100' } flex items-center p-4 text-sm font-medium rounded-lg transition-colors`} >