Files
2026-05-04 19:15:00 +02:00

67 lines
2.6 KiB
Python

from flask import Blueprint, request, jsonify
import models
api_bp = Blueprint('api', __name__, url_prefix='/api')
@api_bp.route('/anuncios', methods=['GET'])
def api_listar():
categoria = request.args.get('categoria', '').strip() or None
busqueda = request.args.get('q', '').strip() or None
ciudad = request.args.get('ciudad', '').strip() or None
anuncios = models.listar_anuncios(categoria=categoria, busqueda=busqueda, ciudad=ciudad)
return jsonify(anuncios)
@api_bp.route('/anuncios/<int:anuncio_id>', methods=['GET'])
def api_ver(anuncio_id):
anuncio = models.obtener_anuncio(anuncio_id)
if not anuncio:
return jsonify({'error': 'Anuncio no encontrado'}), 404
return jsonify(anuncio)
@api_bp.route('/anuncios', methods=['POST'])
def api_crear():
data = request.get_json(force=True, silent=True) or request.form
titulo = (data.get('titulo') or '').strip()
contenido = (data.get('contenido') or '').strip()
categoria = (data.get('categoria') or 'general').strip()
contacto = (data.get('contacto') or 'madrid@craigslist.local').strip()
ciudad = (data.get('ciudad') or 'madrid').strip()
if not titulo or not contenido:
return jsonify({'error': 'Titulo y contenido son obligatorios'}), 400
anuncio_id, token = models.crear_anuncio(titulo, contenido, categoria, contacto, ciudad)
return jsonify({'id': anuncio_id, 'token': token, 'message': 'Anuncio creado'}), 201
@api_bp.route('/anuncios/<int:anuncio_id>', methods=['DELETE'])
def api_borrar(anuncio_id):
data = request.get_json(force=True, silent=True) or request.form
token = (data.get('token') or '').strip()
if models.borrar_anuncio(anuncio_id, token):
return jsonify({'message': 'Anuncio borrado'}), 200
return jsonify({'error': 'Anuncio no encontrado o token incorrecto'}), 404
@api_bp.route('/anuncios/<int:anuncio_id>', methods=['PUT'])
def api_actualizar(anuncio_id):
data = request.get_json(force=True, silent=True) or request.form
campos = {}
for k in ('titulo', 'contenido', 'categoria', 'contacto', 'ciudad'):
if k in data:
campos[k] = data[k]
if not campos:
return jsonify({'error': 'No hay campos para actualizar'}), 400
if models.actualizar_anuncio(anuncio_id, **campos):
return jsonify({'message': 'Anuncio actualizado'})
return jsonify({'error': 'Anuncio no encontrado'}), 404
@api_bp.route('/categorias', methods=['GET'])
def api_categorias():
ciudad = request.args.get('ciudad', '').strip() or None
return jsonify(models.listar_categorias(ciudad=ciudad))