Semaine 7
This commit is contained in:
45
Semaine_07/Jour_04/bank/entities/credit_cards.py
Normal file
45
Semaine_07/Jour_04/bank/entities/credit_cards.py
Normal file
@@ -0,0 +1,45 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user