Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Lập trình Web & Backend] Query engine tổng hợp

    Query engine tổng hợp

    Bài tổng kết: xây một query engine nhỏ thực hiện đầy đủ pipeline backend: filter (AND nhiều điều kiện) → sort (nhiều trường, ổn định) → paginate, kèm metadata.

    Cho danh sách bản ghi và query object:

    • filters: mảng { "field", "op", "value" } (op ∈ { "eq","gt","gte","lt","lte","contains" }), AND tất cả. contains so khớp chuỗi không phân biệt hoa thường.
    • sort: mảng { "field", "dir" } (áp dụng lần lượt, ổn định). Có thể rỗng.
    • page, perPage.

    In object JSON { "total": <sau filter>, "totalPages": <số>, "page": <page>, "data": [...] }.

    Ví dụ

    Lọc active eq true AND name contains "a", sort score desc, lấy trang 1.

    • Định dạng đầu vào:

      Dòng 1: JSON mảng bản ghi. Dòng 2: JSON object query { "filters", "sort", "page", "perPage" }.

    • Ràng buộc đầu vào:

      0 ≤ số bản ghi ≤ 1000; 0 ≤ số filters ≤ 10; 0 ≤ số sort ≤ 5; 1 ≤ page; 1 ≤ perPage ≤ 1000.

    • Định dạng đầu ra:

      In object JSON { "total", "totalPages", "page", "data" } theo đúng thứ tự khóa.

    Ví dụ:

    Đầu vào:

    [{"name":"alpha","active":true,"score":80},{"name":"beta","active":true,"score":90},{"name":"gamma","active":false,"score":70},{"name":"area","active":true,"score":60}]
    {"filters":[{"field":"active","op":"eq","value":true},{"field":"name","op":"contains","value":"a"}],"sort":[{"field":"score","dir":"desc"}],"page":1,"perPage":2}
    

    Đầu ra:

    {"total":3,"totalPages":2,"page":1,"data":[{"name":"beta","active":true,"score":90},{"name":"alpha","active":true,"score":80}]}

    Giải thích:

    active=true AND name chứa "a": alpha,beta,area (total=3). Sort score desc → beta90,alpha80,area60. Trang1 perPage2 → [beta,alpha].

    Đang tải editor...