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/', 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/', 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/', 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))