45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
from datetime import datetime
|
|
from random import randint
|
|
|
|
from accounts import Account
|
|
|
|
from sqlalchemy import Column, Integer, CHAR
|
|
from sqlalchemy.orm import relationship
|
|
|
|
from database import Base, engine
|
|
|
|
class CreditCard(Base):
|
|
__tablename__ = "credit_cards"
|
|
|
|
id = Column(Integer, primary_key= True, autoincrement= True)
|
|
number = Column(CHAR(19), nullable= False)
|
|
secure_code = Column(CHAR(3), nullable= False)
|
|
expire_date = Column(CHAR(5), nullable= False)
|
|
|
|
account = relationship("Account", back_populates= "credit_cards", uselist= False) # type: ignore
|
|
|
|
def __init__(self, account: "Account") -> None:
|
|
self.number = self.credit_card_number()
|
|
self.expire_date = self.expiration_date()
|
|
self.secure_code = self.security_code()
|
|
self.account = account
|
|
|
|
def __repr__(self) -> str:
|
|
return f"\
|
|
[Numéro de carte] : {self.number}\n\
|
|
[Date d'expiration] : {self.expire_date}\n\
|
|
[Code de sécurité] : {self.secure_code}"
|
|
|
|
def credit_card_number(self):
|
|
number = "".join(str(randint(0,9)) for _ in range(16))
|
|
return " ".join(number[_: _ + 4] for _ in range(0,16,4))
|
|
|
|
def security_code(self):
|
|
return "".join(str(randint(0,9)) for _ in range(3))
|
|
|
|
def expiration_date(self):
|
|
current_date = datetime.now()
|
|
future_date = current_date.replace(year=current_date.year + 5)
|
|
return str(future_date.strftime("%m/%y"))
|
|
|
|
Base.metadata.create_all(engine) |