Files
MermsCoreFlask/app/api/services/file_upload.py
T
CHIEFSOFT\ameye 42f9d7fb24 upload upgrases
2026-01-01 01:04:41 -05:00

131 lines
4.9 KiB
Python

from flask import jsonify
from app.api.enums import KafkaMessage
from app.api.services import MyProductsService
from app.config import settings
from app.models import Members, MembersWebfiles
from app.utils.logger import logger
from app.api.services.base_service import BaseService
from sqlalchemy import func, desc
from app.extensions import db
from app.api.types.data_types import MemberFileData
import os
from werkzeug.utils import secure_filename
import time
from app.api.helpers.response_helper import ResponseHelper
from app.api.schemas.user import UserSchema
class FileUploadService(BaseService):
UPLOAD_FOLDER = settings.UPLOAD_FOLDER # '/app/uploads' # '/uploads'
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
@staticmethod
def member_webfiles(data):
try:
validated_data = FileUploadService.validate_data(data, UserSchema())
user_token = validated_data.get('token')
member_uid = str(validated_data.get('uid'))
# Who is this
member_data = Members.get_member_by_uid(member_uid)
if not member_data:
return jsonify({"message": "User not found"}), 500
member_id=member_data.id
result_file_list = MembersWebfiles.get_member_webfiles_by_member_id(20)
file_list = []
if result_file_list:
for t in result_file_list:
file_list.append({
'id': t.id,
'file_uid': t.uid,
'member_id': t.member_id,
'member_uid': t.member_uid,
'file_group': t.file_group,
'filename': t.filename,
'save_filename': t.save_filename,
'file_type': t.file_type,
'status': t.status,
'file_size': t.file_size,
'added': t.added.isoformat() if t.added else None,
'updated': t.updated.isoformat() if t.updated else None
})
response_data = {
"file_list": file_list,
"media_server": settings.MEDIA_SERVER,
}
return ResponseHelper.success(data=response_data)
except Exception as e:
logger.error(f"An error occurred getting file list: {str(e)}", exc_info=True)
return jsonify({"message": "Internal Server Error"}), 500
# return file_list
@staticmethod
def process_file_upload(upload_type: str, file, member_uid):
timestamp_integer = int(time.time())
## MAKE SURE WE HAVE BASE FOLDERS
if not os.path.isdir(FileUploadService.UPLOAD_FOLDER):
os.makedirs(FileUploadService.UPLOAD_FOLDER)
file_uid = "I GOT HERE "
try:
# Who is this
member_data = Members.get_member_by_uid(member_uid)
if not member_data:
return jsonify({"message": "User not found"}), 500
member_id=member_data.id
final_folder = f"W{member_id:010d}"
save_path = FileUploadService.UPLOAD_FOLDER + "/WEBSITE"
if not os.path.isdir(save_path):
os.makedirs(save_path)
logger.info(f'POST CALLED 5 {file.filename}')
save_path = FileUploadService.UPLOAD_FOLDER + "/WEBSITE/" + final_folder
if not os.path.isdir(save_path):
os.makedirs(save_path)
filename = secure_filename(file.filename)
# This is to avert duplicate file name issues
save_filename = str(timestamp_integer) + "-" + filename
final_save_path = os.path.join(save_path, save_filename)
logger.info(f'POST CALLED 6 {final_save_path}')
file.save(final_save_path)
save_file_props = MemberFileData()
save_file_props.member_uid = member_uid
save_file_props.filename = filename
save_file_props.save_filename = save_filename
save_file_props.file_group="WEBSITE"
save_file_props.member_id = member_id
save_file_props.file_size = 0
save_file_props.file_type = filename.rsplit('.', 1)[1].lower()
save_result = MembersWebfiles.create_file_profile(save_file_props)
logger.info(f"After Insert Members File Data {save_result} ")
response_data = {
"save_result": save_result,
"file_uid": file_uid,
}
return response_data
except Exception as e:
logger.error(f"An error occurred while uploading file: {str(e)}", exc_info=True)
return jsonify({"message": "Internal Server Error"}), 500
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in FileUploadService.ALLOWED_EXTENSIONS