امان از ویرایش‌های ویکی‌پدیا!

— حامد

حامد که از محتوای ویکی‌پدیا بسیار ناراحت و خسته شده، قصد دارد تا آن را به شیوه‌ای که خودش دوست دارد پیاده‌سازی کند. او می‌خواهد رفتار تمام کاربرانی که پستی را ویرایش می‌کنند را زیر نظر داشته باشد و هم‌چنین اطلاعات سازنده و آخرین ویرایش‌کننده را هم سریعاً به‌دست بیاورد.

شما باید برای رسیدن به این هدف به او کمک کنید.

جزئیات پروژه

پروژه‌ی اولیه را از این لینک دانلود کنید.

ساختار فایل‌ها

qpedia
├── app
│   ├── Console
│   ├── Exceptions
│   ├── Http
│   ├── Models
│   │   ├── Edit.php
│   │   ├── Post.php
│   │   └── User.php
│   └── Providers
├── bootstrap
├── config
├── database
│   ├── factories
│   │   └── UserFactory.php
│   ├── migrations
│   │   ├── 2014_10_12_000000_create_users_table.php
│   │   ├── 2014_10_12_100000_create_password_resets_table.php
│   │   ├── 2019_08_19_000000_create_failed_jobs_table.php
│   │   ├── 2019_12_14_000001_create_personal_access_tokens_table.php
│   │   ├── 2021_11_30_135802_create_posts_table.php
│   │   ├── 2021_11_30_135820_create_edits_table.php
│   │   └── 2021_11_30_140323_create_edit_post_table.php
│   └── seeders
├── public
├── resources
├── routes
├── storage
├── tests
├── README.md
├── artisan
├── composer.json
├── composer.lock
├── package.json
├── phpunit.xml
├── server.php
└── webpack.mix.js
Plain text

راه‌اندازی پروژه

برای اجرای پروژه، باید php و composer را از قبل نصب کرده باشید.

  • ابتدا پروژه‌ی اولیه را دانلود و از حالت فشرده خارج کنید.
  • دستور composer install را در پوشه‌ی اصلی پروژه برای نصب نیازمندی‌ها اجرا کنید.
  • برای اجرای تست‌های نمونه، می‌توانید از دستور php artisan test استفاده کنید.

مایگریشن‌ها

مایگریشن‌های مربوط به پروژه از قبل ایجاد شده‌اند. در اولین گام باید ساختار جداول پروژه را مطابق توضیحات زیر تکمیل کنید:

مایگریشن posts: ستون‌های زیر را به مایگریشن جدول posts اضافه کنید:

نام ستون نوع تعریف
user_id bigInteger کلید خارجی به جدول users و ستون id
title string عنوان
body text بدنه
created_by bigInteger آی‌دی کاربر ایجاد‌کننده‌ی پست
updated_by bigInteger آی‌دی آخرین کاربر به‌روز‌کننده‌ی پست

مایگریشن edits: ستون‌های زیر را به مایگریشن جدول edits اضافه کنید:

نام ستون نوع تعریف
user_id bigInteger کلید خارجی به جدول users و ستون id
change string ستون تغییر‌یافته مثلا title
value string مقدار جدید

سپس باید بین این جداول روابط زیر را برقرار کنید:

  • هر کاربر می‌تواند چندین پست ایجاد کند و هر پست متعلق به یک کاربر است.
  • هر کاربر می‌تواند چندین ویرایش بر روی پست‌ها داشته باشد و هر ویرایش را یک کاربر ایجاد کرده است.
  • بین جدول پست‌ها و جدول ویرایش‌ها باید رابطه‌ی چند‌به‌چند وجود داشته باشد. مایگریشن مربوط به جدول میانی این رابطه هم که از قبل وجود دارد نیز باید تکمیل شود.

ساختار نهایی جداول باید به‌صورت زیر باشد:

نمودار ER

مدل‌ها

در آخرین گام شما باید امکانی را به این پروژه اضافه کنید که اگر پستی ایجاد شد، مقادیر created_by و updated_by این پست با آی‌دی کاربری که این پست را ایجاد کرده پر شود و اگر پستی آپدیت شد، مقدار updated_by آن نیز با آی‌دی کاربری که این پست را آپدیت کرد پر شود. در این حالت که پست آپدیت شد، باید مقدار تغییریافته‌ی پست را به دست آورده و آن را به جدول ویرایش‌ها اضافه کنید.

برای درک بهتر سؤال، فرض کنید کاربری با آی‌دی 1 پستی را با عنوان تست و محتوا تست تست تست ایجاد کرده. مقادیر created_by و updated_by این پست باید با مقدار 1 در دیتابیس وجود داشته باشند. حال فرض کنید کاربری با آی‌دی 2 عنوان این پست را به test ویرایش می‌کند. در این حالت باید مقدار updated_by این پست به آی‌دی 2 تغییر کند و هم‌چنین یک سطر به صورت زیر در جدول ویرایش‌ها اضافه شود:

user_id change value
2 title test

نکات

  • تضمین می‌شود که هنگام ویرایش پست‌ها کاربر در برنامه لاگین کرده است.
  • شما تنها مجاز به اعمال تغییرات در پوشه‌های app/Models و database/migrations هستید.
  • شما باید برای هر تغییر، یک سطر به جدول ویرایش‌ها اضافه کنید؛ یعنی اگر در مثال قبل علاوه بر عنوان پست، محتوای پست هم تغییر می‌کرد، باید یک سطر دیگر هم به جدول ویرایش‌ها اضافه می‌شد.

آن‌چه باید آپلود کنید

پس از پیاده‌سازی موارد خواسته‌شده، پوشه‌های app و database را زیپ کرده و آپلود کنید.


ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.