front_ponto_eletronico/routes/licenses.py
2025-03-17 15:00:51 -03:00

98 lines
3.4 KiB
Python

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/<int:user_id>', 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('/<int:license_id>', 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('/<int:license_id>', 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