ساخت یک ابزار مدیریت پروژه با Prisma

من در حال ساخت یک ابزار مدیریت پروژه مشارکتی شبیه به Trello هستم. من از React، Express.js، PostgreSQL و Socket.io استفاده می‌کنم.

اولین قدم، طرحواره (schema) پایگاه داده است. من شش مدل برای مدیریت کاربران، پروژه‌ها، بردها (boards)، وظایف (tasks)، کامنت‌ها و اعلان‌ها طراحی کرده‌ام.

در اینجا انتخاب‌های فنی کلیدی و درس‌هایی که از طراحی schema در Prisma آموختم، آورده شده است:

• استفاده از CUID برای شناسه‌ها (IDs) من برای تمام شناسه‌ها از @default(cuid()) استفاده می‌کنم. این‌ها برای URLهای عمومی بهتر از اعداد ساده هستند و از حدس زدن تعداد رکوردها توسط افراد جلوگیری می‌کنند.

• نام‌گذاری صریح روابط وقتی دو فیلد به یک مدل واحد اشاره می‌کنند، Prisma دچار سردرگمی می‌شود. برای مثال، یک وظیفه (task) دارای یک سازنده (creator) و یک مسئول (assignee) است. هر دو از نوع Users هستند. من باید این روابط را با استفاده از نام‌های @relation به طور صریح نام‌گذاری کنم تا از خطاهای مهاجرت (migration) جلوگیری شود.

• جداول واسط (Junction Tables) برای روابط چند-به-چند یک کاربر می‌تواند عضو پروژه‌های زیادی باشد و یک پروژه می‌تواند کاربران زیادی داشته باشد. من یک مدل ProjectMember برای پیوند دادن آن‌ها ایجاد کردم. همچنین یک محدودیت یکتا (unique constraint) روی userId و projectId اضافه کردم. این کار از عضویت مجدد یک کاربر در یک پروژه جلوگیری می‌کند.

• سلسله‌مراتب و منطق وظایف (tasks) در پروژه‌ها قرار ندارند، بلکه در بردها (boards) قرار می‌گیرند. بردها نیز در پروژه‌ها قرار دارند. این ساختار باعث می‌شود قابلیت کشیدن و رها کردن (drag-and-drop) ساده شود. برای جابه‌جایی یک وظیفه، فقط کافی است boardId آن را به‌روزرسانی کنید.

• روابط قابل تهی (Nullable) برخی روابط الزامی و برخی اختیاری هستند. یک وظیفه حتماً باید یک سازنده داشته باشد، بنابراین از علامت سوال استفاده نمی‌کنم. اما مسئول (assignee) اختیاری است، پس از User? و String? استفاده می‌کنم. برای اینکه schema به درستی کار کند، باید هر دو حالت را لحاظ کنید.

اشتباهات رایجی که متوجه شدم:

در مرحله بعد، بک‌اند Express را خواهم ساخت و Socket.io را برای به‌روزرسانی‌های آنی (real-time) راه‌اندازی خواهم کرد.

منبع: https://dev.to/chinwuba_jeffrey/building-a-project-management-tool-from-scratch-starting-with-the-prisma-schema-161