İçeriğe geç

Mesajları sayfa sayfa getirme

API / backend · Zorluk 3/5 · Python · 30 satırKöken: Kurgu

Görev

Yapay zekâdan istenen

GET /conversations/<id>/messages uç noktası için sayfalama yaz: mesajlar en yeniden eskiye, sayfa sayfa gelsin. Her sayfa next değeri döndürür; istemci bir sonraki sayfa için onu geri gönderir ve kaydırarak her mesajı tam bir kez görmelidir. Daha eski mesaj kalmadıysa next None olsun. sent_at saniye hassasiyetinde, hep aynı biçimde UTC ISO 8601 metnidir. Kullanıcının bu konuşmanın üyesi olduğu ve limit'in 1–100 arasında olduğu daha önce kontrol edildi.

Teslim notu

Yapay zekâ kodu teslim ederken şunu yazdı:

“Sayfalama imleçle yapılıyor, yani yeni mesaj gelse de sayfalar kaymıyor. Sıralama id ile de belirleniyor, sorgu parametreli; bir fazla satır okunarak son sayfa doğru tespit ediliyor.”

Yapay zekânın yazdığı kod

Python30 satır

Hatalı bulduğun satırları işaretle; her işarete önem seç ve nedenini bir cümleyle yaz.

Satıra tıkla ya da dokun. Klavyede satıra gidip Enter'a bas.

0/5 işaret
Önem nasıl seçilir
  • KritikVeri kaybı, güvenlik açığı ya da para kaybı
  • ÖnemliGörevin istediği bir durumda kullanıcı yanlış sonuç alır
  • KüçükGörevin dışında kalan nadir bir uç durum ya da okunurluk

Test konusunda önem, testin yakalamadığı hatalı uygulamanın etkisine göre belirlenir.

Gerekçe puanlanmaz; sonuçta örnek cevapla karşılaştırırsın.

import sqlite3
2
SELECT = "SELECT id, sent_at, text FROM messages WHERE conversation_id = ?"
4
5
def list_messages(
    conn: sqlite3.Connection,
    conversation_id: int,
    limit: int,
    after: tuple[str, int] | None = None,
) -> dict:
    """GET /conversations/<id>/messages: newest first, one page at a time.
13
    `after` is the `next` value of the previous page (None on the first
    page). `next` is None when there are no older messages.
    """
    sql = SELECT
    params: list = [conversation_id]
    if after is not None:
        sql += " AND sent_at < ?"
        params.append(after[0])
    sql += " ORDER BY sent_at DESC, id DESC LIMIT ?"
    params.append(limit + 1)
    rows = conn.execute(sql, params).fetchall()
25
    page = rows[:limit]
    items = [{"id": r[0], "sent_at": r[1], "text": r[2]} for r in page]
    has_more = len(rows) > limit
    next_value = (page[-1][1], page[-1][0]) if has_more else None
    return {"items": items, "next": next_value}

Kanıtlayan test

Doğru seçenek, bu kodda başarısız olan, yani hatayı ortaya çıkaran testtir.

Test seçenekleri
Göndermek için en az bir satır işaretle.

Gönderince sayaca yedi bilgi gider; gerekçe metnin cihazında kalır. Veriler