# backend/api/models.py from django.db import models from django.conf import settings class LinkGroup(models.Model): owner = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='api_link_groups' ) name = models.CharField(max_length=100) order = models.PositiveIntegerField(default=0) description = models.TextField(blank=True, null=True) icon = models.ImageField( upload_to='link_groups/', null=True, blank=True, help_text='Иконка группы ссылок' ) # Новые поля для кастомизации header_color = models.CharField( max_length=7, default='#ffffff', help_text='Цвет заголовка группы (hex)' ) background_image = models.ImageField( upload_to='group_backgrounds/', null=True, blank=True, help_text='Фоновое изображение группы' ) is_expanded = models.BooleanField( default=True, help_text='Развернута ли группа по умолчанию' ) display_style = models.CharField( max_length=20, choices=[ ('list', 'Список'), ('grid', 'Сетка'), ('cards', 'Карточки'), ('compact', 'Компактный'), ('sidebar', 'Боковая панель'), ('masonry', 'Кладка'), ('timeline', 'Лента времени'), ('magazine', 'Журнальный'), ], default='list', help_text='Стиль отображения ссылок в группе' ) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) is_public = models.BooleanField(default=False) is_favorite = models.BooleanField(default=False) def __str__(self): return f"{self.owner.username} — {self.name}" class Link(models.Model): owner = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='links' ) group = models.ForeignKey( LinkGroup, on_delete=models.SET_NULL, null=True, blank=True, related_name='links' ) title = models.CharField(max_length=200) url = models.URLField() description = models.TextField(blank=True, null=True) icon = models.ImageField( upload_to='links/', null=True, blank=True, help_text='Иконка для этой ссылки' ) order = models.PositiveIntegerField(default=0) def __str__(self): return self.title