from datetime import datetime, timezone, timedelta from itertools import product from app.extensions import db from sqlalchemy.exc import IntegrityError from sqlalchemy.orm import relationship from dateutil.relativedelta import relativedelta from datetime import timedelta import logging from sqlalchemy import and_, or_, not_ from sqlalchemy.sql import func from app.api.types.data_types import MemberFileData import uuid logger = logging.getLogger(__name__) class MembersWebfiles(db.Model): __tablename__ = 'members_webfiles' id = db.Column( db.Integer, primary_key=True, autoincrement=True, ) uid = db.Column(db.String(150), nullable=False) member_id = db.Column(db.Integer, nullable=False) member_uid = db.Column(db.String(100), nullable=False) file_group = db.Column(db.String(25), nullable=False) filename = db.Column(db.String(100), nullable=False) save_filename = db.Column(db.String(100), nullable=False) file_type = db.Column(db.String(50), nullable=False) status = db.Column(db.Integer, nullable=True, default=1) file_size = db.Column(db.Integer, nullable=True, default=0) added = db.Column(db.DateTime(timezone=True), server_default=func.now()) updated = db.Column(db.DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) @classmethod def create_file_profile(cls, file_data: MemberFileData): logger.info( f"File Data {file_data.member_id} {file_data.member_uid} {file_data.file_group} {file_data.filename} {file_data.save_filename} {file_data.file_type} {file_data.file_size} ") file_uid = str(uuid.uuid4()) file_save_data = cls( uid=str(file_uid), member_id=file_data.member_id, member_uid=file_data.member_uid, file_group=file_data.file_group, filename=file_data.filename, save_filename=file_data.save_filename, file_type=file_data.file_type, file_size=file_data.file_size, added=datetime.now(timezone.utc), updated=datetime.now(timezone.utc) ) try: logger.info(f"About to Insert Members File Data {file_data.member_id} ") db.session.add(file_save_data) db.session.commit() # db.session.flush() except IntegrityError as err: logger.error(f" Error inserting file_save_data data {err} -- ") raise ValueError(f"Database integrity error: {err}") save_result = { 'file_uid': file_uid } return save_result @classmethod def get_member_webfiles_by_member_id(cls, member_id): member_webfile = cls.query.filter_by(member_id=str(member_id)).order_by(cls.added.desc()).all() if not member_webfile: return None return member_webfile def to_dict(self): """ Convert the Loan object to a dictionary format for JSON serialization. """ return { 'id': self.id, 'uid': self.uid, 'member_id': self.member_id, 'member_uid': self.member_uid, 'file_group': self.file_group, 'filename': self.filename, 'save_filename': self.save_filename, 'file_type': self.file_type, 'status': self.status, 'file_size': self.file_size, 'added': self.added, 'updated': self.updated } def __repr__(self): return f''