from datetime import datetime, timezone from app.extensions import db from sqlalchemy.sql import func from sqlalchemy.exc import IntegrityError import uuid from app.utils.logger import logger class Members(db.Model): __tablename__ = 'members' id = db.Column(db.Integer, primary_key=True, autoincrement=True) uid = db.Column(db.String(150), nullable=False) username = db.Column(db.String(25), nullable=False) password = db.Column(db.String(100), nullable=True) loc = db.Column(db.String(20), nullable=True) status = db.Column(db.Integer, default=1) added = db.Column(db.DateTime(timezone=False), server_default=func.now()) updated = db.Column(db.DateTime(timezone=False), server_default=func.now(), onupdate=func.now()) email = db.Column(db.String(100), nullable=False) account_name = db.Column(db.String(100), nullable=True) firstname = db.Column(db.String(25), nullable=False) lastname = db.Column(db.String(100), nullable=True) country = db.Column(db.String(3), nullable=True) def to_dict(self): return { "id": self.id, "uid": self.uid, "username": self.account_id, "account_id": self.username, "password": self.password, "country": self.country, "loc": self.loc, "status": self.status, "added": self.added.isoformat() if self.added else None, "updated": self.updated.isoformat() if self.updated else None, "email": self.email, "account_name": self.account_name, "firstname": self.firstname, "lastname": self.lastname } def __repr__(self): return f'' @classmethod def get_member_by_username(cls, username): member = cls.query.filter_by(username=str(username)).first() if not member: return None return member @classmethod def get_member_by_uid(cls, uid): member = cls.query.filter_by(uid=str(uid)).first() if not member: logger.info(f"User UID = {uid} found") return None return member @classmethod def add_member(cls, firstname, lastname, email, username,password, country): # Save the response member_data = cls( uid=str(uuid.uuid4()), firstname=firstname, lastname=lastname, username =username, email=email, country=country, password=password, added=datetime.now(timezone.utc), updated=datetime.now(timezone.utc) ) try: db.session.add(member_data) except IntegrityError as err: raise ValueError(f"Database integrity error: {err}") return member_data # ''' # Table "public.members" # Column | Type | Collation | Nullable | Default # --------------+-----------------------------+-----------+----------+------------------------------------- # id | integer | | not null | nextval('members_id_seq'::regclass) # uid | uuid | | | uuid_generate_v4() # username | character varying(25) | | not null | # password | character varying(250) | | not null | # loc | inet | | | # status | integer | | | 0 # added | timestamp without time zone | | | now() # updated | timestamp without time zone | | | now() # email | character varying(100) | | | # account_name | character varying(100) | | | # firstname | character varying(25) | | | # lastname | character varying(25) | | | # '''