امان از ویرایشهای ویکیپدیا!
— حامد
حامد که از محتوای ویکیپدیا بسیار ناراحت و خسته شده، قصد دارد تا آن را به شیوهای که خودش دوست دارد پیادهسازی کند. او میخواهد رفتار تمام کاربرانی که پستی را ویرایش میکنند را زیر نظر داشته باشد و همچنین اطلاعات سازنده و آخرین ویرایشکننده را هم سریعاً بهدست بیاورد.
شما باید برای رسیدن به این هدف به او کمک کنید.
جزئیات پروژه
پروژهی اولیه را از این لینک دانلود کنید.
ساختار فایلها
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
راهاندازی پروژه
برای اجرای پروژه، باید 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 |
مقدار جدید |
سپس باید بین این جداول روابط زیر را برقرار کنید:
- هر کاربر میتواند چندین پست ایجاد کند و هر پست متعلق به یک کاربر است.
- هر کاربر میتواند چندین ویرایش بر روی پستها داشته باشد و هر ویرایش را یک کاربر ایجاد کرده است.
- بین جدول پستها و جدول ویرایشها باید رابطهی چندبهچند وجود داشته باشد. مایگریشن مربوط به جدول میانی این رابطه هم که از قبل وجود دارد نیز باید تکمیل شود.
ساختار نهایی جداول باید بهصورت زیر باشد:
مدلها
در آخرین گام شما باید امکانی را به این پروژه اضافه کنید که اگر پستی ایجاد شد، مقادیر 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
را زیپ کرده و آپلود کنید.
ارسال پاسخ برای این سؤال