Last bit of major changes

Closes #1
Closes #5
Closes #6
Closes #8
Closes #9
Closes #10
This commit is contained in:
2026-01-26 04:11:38 -06:00
parent 1cd87156bd
commit 739d136209
24 changed files with 1157 additions and 410 deletions

View File

@@ -55,13 +55,44 @@ class Address(models.Model):
class PaymentMethod(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='payment_methods')
# For now, we'll store mock data. In a real app complexity is higher (PCI compliance etc)
billing_address = models.ForeignKey(Address, on_delete=models.SET_NULL, null=True, blank=True, related_name='payment_methods')
brand = models.CharField(max_length=50) # Visa, Mastercard
last4 = models.CharField(max_length=4)
exp_month = models.PositiveIntegerField()
exp_year = models.PositiveIntegerField()
is_default = models.BooleanField(default=False)
# Encrypted fields
card_number_encrypted = models.BinaryField(blank=True, null=True)
cvv_encrypted = models.BinaryField(blank=True, null=True)
@property
def card_number(self):
try:
from store.utils import Encryptor
return Encryptor.decrypt(self.card_number_encrypted)
except ImportError:
# Fallback if store isn't ready or circular import
return None
@card_number.setter
def card_number(self, value):
from store.utils import Encryptor
self.card_number_encrypted = Encryptor.encrypt(value)
if value and len(str(value)) >= 4:
self.last4 = str(value)[-4:]
@property
def cvv(self):
from store.utils import Encryptor
return Encryptor.decrypt(self.cvv_encrypted)
@cvv.setter
def cvv(self, value):
from store.utils import Encryptor
self.cvv_encrypted = Encryptor.encrypt(value)
def __str__(self):
return f"{self.brand} ending in {self.last4}"