from django.conf import settings from django.db import models from pyblackbird_cc.resources.models import Resource class Product(models.Model): name = models.CharField(max_length=255) stripe_product_id = models.CharField(max_length=100) class Price(models.Model): product = models.ForeignKey(Product, on_delete=models.CASCADE) price = models.IntegerField(default=0) stripe_price_id = models.CharField(max_length=100) def get_display_price(self): return "{0:.2f}".format(self.price / 100) class ShoppingCart(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return f"Shopping Cart for {self.user.username}" class CartItem(models.Model): cart = models.ForeignKey(ShoppingCart, on_delete=models.CASCADE, related_name="items") resource = models.ForeignKey(Resource, on_delete=models.CASCADE) quantity = models.PositiveIntegerField(default=1) added_at = models.DateTimeField(auto_now_add=True) class Meta: unique_together = ("cart", "resource") def __str__(self): return f"{self.quantity} of {self.resource.name} in {self.cart.user.username}'s cart" def get_total_price(self): return self.quantity * self.resource.price class SubscriptionPlan(models.Model): name = models.CharField(max_length=255) price = models.DecimalField(max_digits=6, decimal_places=2) description = models.TextField() allowed_downloads = models.PositiveIntegerField() class Subscription(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) plan = models.ForeignKey(SubscriptionPlan, on_delete=models.CASCADE) is_active = models.BooleanField(default=False) start_date = models.DateTimeField(null=True, blank=True) end_date = models.DateTimeField(null=True, blank=True) def __str__(self): return f"Subscription for {self.user.username}"