صفحه بندی در وبسرویس

با درود خدمت دوستان . همیشه کتابخونه آماده بود ما هم سریع می رفتیم بدو بدو می زدیمش :grin: ولی الان اومدم سر اینکه چطور این رفتار رو در وب سرویس انجام بدم کمی دچار مشکل شدم از لحاظی هم دنبال اینکه مطالب به فارسی هم زیاد بشه شاید افرادی که مثل بنده شروع می کنند هم این مشکل رو پیدا کنند.

خوب سوال اصلی چطور شما یک صفحه بندی در وب سرویس خودتان درست می کنید ؟

به عنوان مثال کاربر می خواهد تمام پست های شما رو دریافت کند شما به صورت پیشفرض اولین بار ۱۰ مطلب را به اون بر می گردانید حالا کاربر دنبال مطالب بیشتری هست چطور باید درخواست را برای شما ارسال کند

چیزی که تو فکر من هست به این صورته :

من باید یک ورودی داشته باشم مثلا X که بگه از چند به بعد رو بهش بده مثلا ۱۰ تارو اولین بار گرفته حالا باید بگه ۱۰ به بعد بده . انجوری یک مشکلی من دارم اون مشکل اینکه من از id استفاده نکردم بلکه از uuid استفاده کردم . برای این باید چیکار کنم باز باید یک جدولی اضافه کنم مثل id که شماره اتوانکریمنت بگیره ؟

شما نظری در این رابطه دارید ؟

1 Like

آقا @shahryarjb عزیز ممنون از اینکه این پست زدی این کاری داشت بلد نبودی :smiley:

به عنوان مثال از یک کتابخونه ای مثل scrivener_ecto‍ در الکسیر استفاده می کنی که خروجی دیتابیس شما رو مشخص کنه وقتی این کارو کردید حالا تابه مورد نظر خودتون که همون تابع اکشن می باشد به دو صورت می سازید

تابع اول: با ورودی عدد صفحه به عنوان مثال start = 5 یعنی صفحه مورد نظر صفحه ۵ هست چون قبلا در query هم مشخص کردید که ۲۰ تا ۲۰ تا بیاره و باید هم مشخص بشه یا یک رنج مشخصی داده بشه که به سرور فشار نیاد ایشون ۵ مین صفحه از ۲۰ مطلب ۲۰ مطلب رو باید بیاره .

و برای فهم بیشتر این تابع مربوط به کواری ما هست

def show_category_posts_with_alias_link(seo_alias_link, pagenumber) do
    query = from u in BlogCategorySchema,
        join: c in assoc(u, :blog_posts),
        where: u.seo_alias_link == ^seo_alias_link,
        order_by: [desc: u.inserted_at],
        select: %{
          id: u.id,
          title: u.title,
          description: u.description,
          seo_alias_link: u.seo_alias_link,
          seo_words: u.seo_words,
          seo_description: u.seo_description,
          status: u.status,
          inserted_at: u.inserted_at,
          updated_at: u.updated_at,

          posts: %{
            id: c.id,
            title: c.title,
            description: c.description,
            short_description: c.short_description,
            seo_alias_link: c.seo_alias_link,
            seo_words: c.seo_words,
            seo_description: c.seo_description,
            status: c.status,
            post_pic: c.post_pic,
            inserted_at: c.inserted_at,
            updated_at: c.updated_at,
          }
        }
    Repo.paginate(query, %{page: pagenumber, page_size: 20})
  end

به صورت تصادفی با پست خودم برخورد کردم گفتم تکمیلش بکنم بی جواب نمونه :smiley:
موفق باشید

4 Likes