from flask import Blueprint, request, jsonify from flask_jwt_extended import jwt_required from flasgger.utils import swag_from from models.license import License, db from models.user import User from models.service import Service from utils import logged_user_id license_bp = Blueprint('license', __name__, url_prefix='/licenses') # 1. Criar Licença @license_bp.route('/', methods=['POST']) @jwt_required() @logged_user_id @swag_from('../docs/licenses/create.yml') # Referência ao arquivo YAML de documentação def create_license(): data = request.get_json() user_id = logged_user_id service_id = data.get('service_id') license_key = data.get('license_key') max_service_instances = data.get('max_service_instances') start_date = data.get('start_date') end_date = data.get('end_date') user = User.query.get(user_id) service = Service.query.get(service_id) if not user or not service: return jsonify({"msg": "Usuário ou Serviço não encontrado"}), 404 license = License( user_id=user_id, service_id=service_id, license_key=license_key, max_service_instances=max_service_instances, start_date=start_date, end_date=end_date ) db.session.add(license) db.session.commit() return jsonify({"msg": "Licença criada com sucesso"}), 201 # 2. Obter Licenças por Usuário @license_bp.route('/user/', methods=['GET']) @jwt_required() @swag_from('../docs/licenses/get_by_user_id.yml') # Referência ao arquivo YAML de documentação def get_licenses_by_user(user_id): licenses = License.query.filter_by(user_id=user_id).all() if not licenses: return jsonify({"msg": "Licenças não encontradas para o usuário"}), 404 return jsonify([{ 'id': license.id, 'service_id': license.service_id, 'license_key': license.license_key, 'max_service_instances': license.max_service_instances, 'start_date': license.start_date, 'end_date': license.end_date } for license in licenses]) # 3. Atualizar Licença @license_bp.route('/', methods=['PUT']) @jwt_required() @swag_from('../docs/licenses/update.yml') # Referência ao arquivo YAML de documentação def update_license(license_id): data = request.get_json() license = License.query.get(license_id) if not license: return jsonify({"msg": "Licença não encontrada"}), 404 license.user_id = data.get('user_id', license.user_id) license.service_id = data.get('service_id', license.service_id) license.license_key = data.get('license_key', license.license_key) license.max_service_instances = data.get('max_service_instances', license.max_service_instances) license.start_date = data.get('start_date', license.start_date) license.end_date = data.get('end_date', license.end_date) db.session.commit() return jsonify({"msg": "Licença atualizada com sucesso"}), 200 # 4. Deletar Licença @license_bp.route('/', methods=['DELETE']) @jwt_required() @swag_from('../docs/licenses/delete.yml') # Referência ao arquivo YAML de documentação def delete_license(license_id): license = License.query.get(license_id) if not license: return jsonify({"msg": "Licença não encontrada"}), 404 db.session.delete(license) db.session.commit() return jsonify({"msg": "Licença deletada com sucesso"}), 200