İçeriğe geç

Siparişleri tarih aralığıyla listeleme

API / backend · Zorluk 2/5 · TypeScript · 35 satırKöken: Kurgu

Görev

Yapay zekâdan istenen

Rapor ekranı için GET /orders?from=YYYY-MM-DD&to=YYYY-MM-DD uç noktasının filtresini yaz. İki gün de aralığa dahildir ve günler UTC'ye göredir. Tarih eksik, geçersiz ya da from to'dan sonraysa 400 ve hata kodu döndür; değilse 200 ve aralıktaki siparişleri döndür.

Teslim notu

Yapay zekâ kodu teslim ederken şunu yazdı:

“Tarihler biçim ve geçerlilik için kontrol ediliyor (31 Şubat gibi günler reddediliyor), ters aralık 400 alıyor. Karşılaştırma UTC'de yapıldığı için saat dilimi sorunu yok.”

Yapay zekânın yazdığı kod

TypeScript35 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.

export interface Order {
  id: string;
  totalCents: number;
  /** UTC, ISO 8601: "2026-10-10T15:00:00Z" */
  createdAt: string;
}
7
const DAY_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
9
function parseDay(value: string | undefined): Date | null {
  if (value === undefined || !DAY_PATTERN.test(value)) {
    return null;
  }
  const day = new Date(`${value}T00:00:00Z`);
  if (Number.isNaN(day.getTime()) || !day.toISOString().startsWith(value)) {
    return null;
  }
  return day;
}
20
export function ordersInRange(
  orders: Order[],
  query: { from?: string; to?: string },
) {
  const from = parseDay(query.from);
  const to = parseDay(query.to);
  if (from === null || to === null || from > to) {
    return { status: 400, body: { error: "invalid_range" } };
  }
  const matching = orders.filter((order) => {
    const createdAt = new Date(order.createdAt);
    return createdAt >= from && createdAt < to;
  });
  return { status: 200, body: { orders: matching } };
}

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