from flask import Blueprint, request, jsonify from flasgger.utils import swag_from from models.shifts import Shift, db from models.service_instance import ServiceInstance shift_bp = Blueprint('shift', __name__, url_prefix='/shift/') # Criar um turno @shift_bp.route('/', methods=['POST']) @swag_from('../docs/shifts/create.yml') def create_shift(): """Cria um novo turno.""" data = request.get_json() # Verifica se a service_instance existe service_instance_id = data.get('service_instance_id') ServiceInstance.query.get_or_404(service_instance_id) # Cria o turno shift = Shift( name=data['name'], day=data['day'], start_time=data['start_time'], end_time=data['end_time'], interval_start=data['interval_start'], interval_end=data['interval_end'], type_interval=data['type_interval'], service_instance_id=data['service_instance_id'] ) db.session.add(shift) db.session.commit() return jsonify({'message': 'Shift created successfully', 'id': shift.id}), 201 # Atualizar um turno @shift_bp.route('/', methods=['PUT']) @swag_from('../docs/shifts/update.yml') def update_shift(shift_id): """Atualiza um turno existente.""" data = request.get_json() print(data) # Localiza o turno ou retorna 404 shift = Shift.query.get_or_404(shift_id) # Atualiza os campos fornecidos no body if 'name' in data: shift.name = data['name'] if 'day' in data: shift.days = data['day'] if 'start_time' in data: shift.start_time = data['start_time'] if 'end_time' in data: shift.end_time=data['end_time'] if 'interval_start' in data: shift.interval_start=data['interval_start'] if 'interval_end' in data: shift.interval_end=data['interval_end'] if 'type_interval' in data: shift.type_interval=data['type_interval'] if 'service_instance_id' in data: ServiceInstance.query.get_or_404(data['service_instance_id']) # Valida a existência shift.service_instance_id = data['service_instance_id'] db.session.commit() return jsonify({'message': 'Shift updated successfully'}), 200 # Listar turnos @shift_bp.route('/', methods=['GET']) @swag_from('../docs/shifts/list.yml') def list_shifts(): """Lista todos os turnos, opcionalmente filtrando por instância de serviço.""" service_instance_id = request.args.get('service_instance_id') if service_instance_id: # Filtrar por service_instance_id shifts = Shift.query.filter_by(service_instance_id=service_instance_id).all() else: # Retornar todos os turnos shifts = Shift.query.all() shift_list = [{ 'id': shift.id, 'name': shift.name, 'day': shift.day, "start_time": shift.start_time.strftime("%H:%M"), "end_time": shift.end_time.strftime("%H:%M"), "interval_start": shift.interval_start.strftime("%H:%M") if shift.interval_start else None, "interval_end": shift.interval_end.strftime("%H:%M") if shift.interval_end else None, 'type_interval' : shift.type_interval, 'service_instance_id': shift.service_instance_id } for shift in shifts] return jsonify(shift_list), 200 @shift_bp.route('/', methods=['GET']) @swag_from('../docs/shifts/get.yml') def get_shift_id(shift_id): shift = Shift.query.get(shift_id) if not shift: return jsonify({'error': 'Escala não encontrada'}), 404 return jsonify({ 'id': shift.id, 'name': shift.name, 'day': shift.day, "start_time": shift.start_time.strftime("%H:%M"), "end_time": shift.end_time.strftime("%H:%M"), "interval_start": shift.interval_start.strftime("%H:%M") if shift.interval_start else None, "interval_end": shift.interval_end.strftime("%H:%M") if shift.interval_end else None, 'type_interval' : shift.type_interval, 'service_instance_id': shift.service_instance_id}),200 # Deletar um turno @shift_bp.route('/', methods=['DELETE']) @swag_from('../docs/shifts/delete.yml') def delete_shift(shift_id): """Deleta um turno pelo ID.""" shift = Shift.query.get_or_404(shift_id) db.session.delete(shift) db.session.commit() return jsonify({'message': 'Shift deleted successfully'}), 200