from django.db import models from django.contrib.postgres.fields import JSONField import uuid class UserData(models.Model): user_id = models.CharField(max_length=100, unique=True) expenses = models.JSONField(default=dict, blank=True) salary = models.JSONField(default=dict, blank=True) category = models.JSONField(default=dict, blank=True) user_data = models.JSONField(default=dict, blank=True) has_music_url_access = models.BooleanField(default=False) has_ai_access = models.BooleanField(default=False) data_backup_key = models.CharField(max_length=100, unique=True, blank=True) def __str__(self): return f"Data for User {self.user_id}" class AIKey(models.Model): aikey = models.CharField(max_length=100, unique=True) isActive = models.BooleanField(default=False) keySource = models.CharField(max_length=100, unique=True) def __str__(self): return f"Data for AIKey {self.keySource}" class AppVersion(models.Model): version = models.CharField(max_length=20) release_notes = models.TextField(null=True, blank=True) is_force_update = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) isActive = models.BooleanField(default=False) class Meta: db_table = "app_version" def save(self, *args, **kwargs): # If this version is active → deactivate others if self.isActive: AppVersion.objects.filter(isActive=True).exclude(id=self.id).update( isActive=False ) super().save(*args, **kwargs) def __str__(self): return self.version class Contact(models.Model): name = models.CharField(max_length=20) email = models.EmailField(max_length=50) message = models.TextField(max_length=500) def __str__(self): return self.name class ExpenseLog(models.Model): text = models.CharField(max_length=500) amount = models.FloatField(null=True, blank=True) predicted_category = models.CharField(max_length=100) confidence_score = models.FloatField() created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return f"{self.predicted_category} (${self.amount}): {self.text[:30]}"