from flask_mysqldb import MySQL from flask import Flask, Blueprint, jsonify, request from .auth import token_required import os import traceback import MySQLdb imagem = Blueprint('imagem', __name__) mysql = MySQL() CAMINHO_PERFIL = "/var/www/Backend/itguys/ambiente_python/repositorio_img/perfil/" CAMINHO_FUNDOS = "/var/www/Backend/itguys/ambiente_python/repositorio_img/fundos/" def salvar_imagem(arquivo, tipo_imagem, nome_usuario): """Salva a imagem no diretório correspondente e retorna o caminho relativo""" nome_arquivo = f"{nome_usuario}.jpg" if tipo_imagem == "perfil": caminho_diretorio = CAMINHO_PERFIL caminho_relativo = f"perfil/{nome_arquivo}" else: caminho_diretorio = CAMINHO_FUNDOS caminho_relativo = f"fundos/{nome_arquivo}" caminho_completo = os.path.join(caminho_diretorio, nome_arquivo) # Garante que o diretório existe os.makedirs(caminho_diretorio, exist_ok=True) # Salva a imagem arquivo.save(caminho_completo) return caminho_relativo # Retorna o caminho relativo para o banco de dados def get_db_connection(): """Verifica e retorna uma conexão válida com o banco de dados""" try: conn = mysql.connection conn.ping() # Verifica se a conexão está ativa return conn except MySQLdb.OperationalError: return mysql.connection # Tenta criar uma nova conexão @imagem.route('/imagem', methods=['POST']) @token_required def receber_imagem(data): try: nome_usuario = data.get('user', '') # Separa o usuário do dominío if not nome_usuario: return jsonify({"status": "error", "message": "Usuário não autenticado!"}), 405 nome_usuario = nome_usuario.split('@')[0] imagem_perfil = request.files.get('perfil') imagem_foto_fundo = request.files.get('foto_fundo') # Verifica se as imagens foram enviadas corretamente if not imagem_perfil or not imagem_foto_fundo: return jsonify({"status": "error", "message": "Imagens não enviadas corretamente!"}), 400 # Salva as imagens e obtém os caminhos relativos caminho_perfil = salvar_imagem(imagem_perfil, "perfil", nome_usuario) caminho_foto_fundo = salvar_imagem(imagem_foto_fundo, "fundo", nome_usuario) # Conecta-se ao banco e executa a query de atualização conn = get_db_connection() cursor = conn.cursor() query = """ UPDATE usuarios SET img_perfil = %s, img_fundo = %s WHERE usuario = %s """ valores = (caminho_perfil, caminho_foto_fundo, nome_usuario) cursor.execute(query, valores) conn.commit() cursor.close() return jsonify({"status": "success", "message": "Imagens enviadas e salvas com sucesso!"}), 200 except MySQLdb.OperationalError as e: return jsonify({"status": "error", "message": f"Erro de conexão com o banco de dados: {str(e)}"}), 500 except Exception as e: traceback.print_exc() return jsonify({"status": "error", "message": str(e)}), 500