front_ponto_eletronico/routes/shift.py
2025-04-16 19:48:09 -03:00

126 lines
4.4 KiB
Python

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