چند وقتی است تصمیم گرفتم یک پروژه شخصی کمی متفاوت انجام بدهم. بعد از مدتی، انجام پروژه فروشگاهی تکراری و خسته کننده می‌شود. در ضمن یک تمرین خوب هم خواهد بود برای مواجه شدن با چالش های جدید.

گفتم شاید بد نباشد مراحل انجام کار و چالش های حین توسعه را اینجا بنویسم شاید به درد کسی بخورد(البته فکر میکنم بیشتر از همه به درد خودم در آینده خواهد خورد).

پروژه Bug tracker

قرار است یک پروژه bug tracker را اجرا کنم. یک سامانه تحت وب تا باگ‌هایی که در پروژه ها اتفاق می افتد را بشود در آن ثبت کرد. اینطوری یک لاگ(log) کامل از همه خطاهایی که هنگام توسعه در یک پروژه رخ می‌دهد خواهم داشت.

البته از این برنامه می‌شود برای ثبت فیچرهای جدید هم استفاده کرد. شاید اسم پروژه‌هایی مثل sentry یا bugsnag را شنیده باشید. کار اینها ثبت و مانیتور خطاهای نرم افزار است. اما من قرار نیست در این پروژه در سطح این جور نرم افزار ها کار کنم. به همین خاطر، قبل از شروع بهتر است مشخص کنم که محصول نهایی چه ویژگی هایی خواهد داشت.

قدم اول: مشخص کردن ویژگی های پروژه

معمولا پروژه های نرم افزاری تا به انتها برسند(اگر برسند) کلی تغییرات اساسی می کنند اما باید یک حداقل ویژگی های مورد نظر محصول یا همان MVP را مشخص کنیم تا وقت خودمان را با ساختن فیچرهای اضافی تلف نکنیم.

زبان برنامه نویسی و فریمورک

از php و فریمورک لاراول برای ساخت این پروژه استفاده می کنم.

حداقل فیچرهای مورد نیاز پروژه bug tracker:

  • هر کاربر بتواند با ایمیل ثبت نام کند.
  • هر کاربر یک پنل داشته باشد و تعداد دلخوا پروژه تعریف کند.
  • کاربر ایجاد کننده پروژه(مدیر پروژه) این قابلیت را داشته باشد تا کاربرهای دیگر را به پروژه اضافه کند.
  • کاربرهای عضو پروژه بتوانند باگ یا فیچر جدید اضافه کنند.
  • هر باگ فقط توسط ایجاد کننده آن بسته شود.
  • هر باگ قابلیت محول کردن به کاربر دیگر را داشته باشد.

به نظرم برای MVP همین مقدار کافیست.

قدم دوم:طراحی دیتابیس

برای این بخش جستجویی در گوگل کردم و پروژه های مشابه را دیدم. در اخر به این ساختار برای دیتابیس رسیدم:

جدول users:

چون ثبت نام قرار است با ایمیل و رمز عبور باشد یک ستون برای ایمیل و یکی برای password داریم. ستون name را هم اضافه می کنم برای نمایش اسم کاربرها در پروفایل.

remember_token: برای گزینه remember_me

email_verified_at: برای اینکه تاییدیه ایمیل کاربر ثبت شود.

چون می‌خواهم از starter kit لاراول برای اعتبارسنجی استفاده کنم فقط ستون name را اضافه می‌کنم. بقیه ستون هایی بالا گفتم پیشفرض در migration لاراول وجود دارند.

جدول projects:

در این جدول قرار است اسم پروژه، توضیحات پروژه و کاربر ایجاد کننده پروژه ثبت شود.

name: اسم پروژه

description: توضیحات پروژه

user_id:آی دی کاربر سازنده پروژه

created_at:تاریخ ایجاد پروژه

updated_at: تاریخ اخرین اپدیت

جدول issues:

در این جدول همه باگ ها(یا فیچرها) ثبت خواهد شد.

project_id:مشخص می‌کند این باگ مربوط به کدام پروژه است.

title:عنوان باگ

decription: توضیحات مربوط به باگ که معمولا بهتر است چگونگی باز تولید(reproduce) باگ باشد.

assigned_to_user_id: آیدی کاربری که حل باگ به او محول شده.

priority: میزان اولویت.

status: وضعیت فعلی باگ.

created_by_user_id: چه کاربری این باگ را ایجاد کرده است.

closed_by_user_id: چه کاربری باگ را بسته است.

closed_at: تاریخ بسته شدن باگ.

created_at:تاریخ ایجاد باگ.

updated_at: تاریخ اخرین اپدیت.

جدول project_users

یک از فیچرها این بود که هر پروژه بتواند کاربرهای مختلف داشته باشد. این جدول مسئول نگهداری id کاربرهای هر پروژه است.

در هر سطر این جدول یک project_id و یک user_id ثبت می‌شود.

به این ترتیب مشخص می شود هر کاربر در چه پروژه یا پروژه هایی عضو است و هر پروژه هم چه کاربرانی دارد.

access_type: سطح دسترسی اعضا را در MVP تعریف نکردم اما به نظرم رسید یک ستون برای این کار داشته باشم احتمالا بعدا بخواهم این فیچر را هم اضافه کنم.

confirmed: این ستون برای این است که وقتی مدیر پروژه یک کاربر را اضافه می‌کند کاربر در پروفایل خودش بتواند عضویت در پروژه را تایید کند.

created_at: تاریخ ایجاد ردیف

updated_at: تاریخ اخرین اپدیت

قدم سوم:انتخاب یک قالب آماده

چون فرانت اند کار نیستم و نمی خواهم خودم را درگیر کارهای UI کنم یک قالب آماده انتخاب می‌کنم و با همان کار را انجام می‌دهم. فکر می‌کنم به خاطر شباهت ظاهری پنل سیستم باگ ترکر با پنل های مدیریتی، بد نباشد از یک قالب مدیریتی برای این کار استفاده کنم.

از قبل قالب metronic را برای پروژه های مختلف استفاده می‌کردم. کامپوننت های اماده بسیار خوبی دارد و برای کار من کفایت می‌کند. پس برای این پروژه هم با همین کار خواهم کرد.

بسیار خوب. تا اینجا مقدمات پروژه مشخص شد. در پست های بعد پیشرفت کار و بقیه چالش هایی که سر راهم قرار گرفت را گزارش می‌دهم.