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)