Budowanie narzędzia do zarządzania projektami z użyciem Prisma

Buduję narzędzie do kolaboracyjnego zarządzania projektami, podobne do Trello. Używam React, Express.js, PostgreSQL oraz Socket.io.

Pierwszym krokiem jest schemat bazy danych. Zaprojektowałem sześć modeli do obsługi użytkowników, projektów, tablic, zadań, komentarzy i powiadomień.

Oto kluczowe wybory techniczne i lekcje wyciągnięte z projektowania mojego schematu Prisma:

• Używanie CUID dla identyfikatorów (ID) Używam @default(cuid()) dla wszystkich ID. Są one lepsze niż proste liczby w przypadku publicznych adresów URL. Zapobiegają one zgadywaniu przez użytkowników, ile rekordów znajduje się w bazie.

• Jawne nazwy relacji Gdy dwa pola wskazują na ten sam model, Prisma może się pogubić. Na przykład zadanie ma twórcę (creator) i osobę przypisaną (assignee). Obie te role to Users. Muszę jawnie nazwać te relacje, używając nazw @relation, aby uniknąć błędów podczas migracji.

• Tabele łączące dla relacji wiele-do-wielu Użytkownik może należeć do wielu projektów. Projekt może mieć wielu użytkowników. Stworzyłem model ProjectMember, aby je połączyć. Dodałem unikalne ograniczenie (unique constraint) na userId i projectId. Zapobiega to dwukrotnemu dołączeniu tego samego użytkownika do tego samego projektu.

• Hierarchia i logika Zadania nie znajdują się bezpośrednio w projektach. Znajdują się na tablicach. Tablice zaś należą do projektów. Dzięki temu funkcja drag-and-drop jest prosta. Aby przenieść zadanie, wystarczy zaktualizować jego boardId.

• Relacje dopuszczające wartości NULL Niektóre relacje są wymagane, a inne opcjonalne. Zadanie musi mieć twórcę, więc nie używam znaku zapytania. Osoba przypisana jest opcjonalna, więc używam User? oraz String?. Musisz uwzględnić oba te elementy, aby schemat działał poprawnie.

Typowe błędy, które napotkałem:

Następnie zbuduję backend w Express i skonfiguruję Socket.io do aktualizacji w czasie rzeczywistym.

Źródło: https://dev.to/chinwuba_jeffrey/building-a-project-management-tool-from-scratch-starting-with-the-prisma-schema-161