from django.conf import settings from django.db import models class ReadingSettings(models.Model): """Per-user reading preferences for the e-book reader view.""" THEME_CHOICES = [ ("sepia", "Sepia"), ("dark", "Dark"), ("light", "Light"), ("paper", "Paper"), ] FONT_CHOICES = [ ("sans-serif", "Sans-serif"), ("serif", "Serif"), ("monospace", "Monospace"), ] ORIENTATION_CHOICES = [ ("auto", "Auto"), ("portrait", "Portrait"), ("landscape", "Landscape"), ] user = models.OneToOneField( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="reading_settings", primary_key=True, ) font_family = models.CharField(max_length=32, choices=FONT_CHOICES, default="serif") font_size = models.PositiveSmallIntegerField(default=18) line_height = models.FloatField(default=1.6) margin_width = models.PositiveSmallIntegerField(default=16) background_color = models.CharField(max_length=7, default="#f5f0eb") text_color = models.CharField(max_length=7, default="#1a1a1a") brightness = models.PositiveSmallIntegerField(default=100) orientation_lock = models.CharField( max_length=16, choices=ORIENTATION_CHOICES, default="auto" ) theme = models.CharField(max_length=32, choices=THEME_CHOICES, default="sepia") created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "reader_reading_settings" verbose_name = "Reading Settings" verbose_name_plural = "Reading Settings" def __str__(self) -> str: return f"{self.user} — {self.theme} ({self.font_size}px)"