Untitled

mail@pastecode.io avatar
unknown
python
a year ago
2.2 kB
3
Indexable
Never
@app.route("/order", methods=("GET",))
def order_index():
    """Show all the orders."""
    error = None
    try:
        page = request.args.get("page", 1, type=int)
        items_per_page = 2 
        page_start_index = (page - 1) * items_per_page
        with pool.connection() as conn:
            with conn.cursor(row_factory=namedtuple_row) as cur:
                orders_page = cur.execute(
                    f"""
                    SELECT o.order_no, o.cust_no, STRING_AGG(c.sku, ',') AS sku_list
                    FROM orders o
                    JOIN contains c ON o.order_no=c.order_no
                    JOIN product p ON c.sku=p.sku
                    GROUP BY o.order_no 
                    ORDER BY o.order_no DESC
                    LIMIT {items_per_page}
                    OFFSET {page_start_index};
                    """,
                    {},
                ).fetchall()
               
                # fetchone(): retorna a primeira linha de resultados
                # como é um count() retorna um único valor que é o count.
                total_orders = cur.execute(
                    f"""
                    SELECT COUNT(DISTINCT o.order_no)
                    FROM orders o
                    JOIN contains c ON o.order_no=c.order_no
                    JOIN product p ON c.sku=p.sku;
                    """,
                    {},
                ).fetchone()[0]
                
        #log.debug(f"Found {cur.rowcount} rows.")
        # API-like response is returned to clients that request JSON explicitly (e.g., fetch)
        if (
            request.accept_mimetypes["application/json"]
            and not request.accept_mimetypes["text/html"]
        ):
            return jsonify(orders)
        
        # Se dividíssemos apenas total orders / items_per_page não consideraríamos
        # os possíveis iteis que não satisfazem uma página inteira e por isso fazem com que 
        # a divisão não seja inteira.
        total_pages = (total_orders + items_per_page - 1) // items_per_page
        return render_template("order/index.html", orders=orders_page, total_pages=total_pages, page = page)
    except Exception as e:
        return str(e)