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ırHatalı 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.
Ö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 sqlite3SELECT = "SELECT id, sent_at, text FROM messages WHERE conversation_id = ?"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. `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() 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.
Gönderince sayaca yedi bilgi gider; gerekçe metnin cihazında kalır. Veriler