Prisma ile Bir Proje Yönetim Aracı Oluşturmak
Trello gibi iş birliğine dayalı bir proje yönetim aracı geliştiriyorum.
React, Express.js, PostgreSQL ve Socket.io kullanıyorum. Herhangi bir backend rotası yazmadan önce veritabanı şemasını tasarlamam gerekiyor.
Şema temeldir. Eğer şema yanlışsa, tüm uygulama çöker. İşte Prisma şema tasarımımın dökümü.
Modeller
• User: İsimleri, e-postaları ve şifreleri saklar. ID'ler için cuid() kullanıyorum. Bu, uzun ve benzersiz dizeler oluşturur. Sayılardan daha iyidir çünkü URL'de kullanıcı sayınızı ifşa etmez.
• Project: Proje adını ve açıklamasını tutar. Açıklamayı bir soru işareti kullanarak isteğe bağlı hale getirdim.
• ProjectMember: Bu bir ara tablodur (junction table). Kullanıcıları Projelerle ilişkilendirir. Bir kullanıcı birçok projeye katılabilen ve bir proje birçok kullanıcıya sahip olan bir yapıda, çoktan çoğa (many-to-many) ilişkiyi yönetmek için bu ara tabloya ihtiyacınız vardır. Aynı kullanıcının bir projeye iki kez katılmasına engel olmak için benzersiz bir kısıtlama (unique constraint) ekledim.
• Board: Görevler board'ların (panoların) içinde yer alır. Board'lar ise projelerin içindedir. Bu hiyerarşi, sürükle-bırak işlemini kolaylaştırır. Bir görevi sütunlar arasında taşımak sadece tek bir alan güncellemesidir.
• Task: Bu temel modeldir. User modeline iki farklı ilişkisi vardır:
- Atanmış bir kullanıcı (bu isteğe bağlıdır).
- Bir oluşturucu (bu zorunludur). Prisma'nın hangisinin hangisi olduğunu bilmesi için bu ilişkileri açıkça adlandırmam gerekti.
• Comment: Kullanıcılar görevlere yorum bırakabilir. Kodun okunabilirliğini korumak için ilişkiyi "user" yerine "author" olarak adlandırdım.
• Notification: Kullanıcılar için mesajları takip eden basit bir model.
Öğrenilen Teknik Dersler
Bunu oluştururken birkaç hatayla karşılaştım. Şunlara dikkat edin:
- Relation Names (İlişki İsimleri): Eğer iki alan aynı modele işaret ediyorsa, ilişkileri adlandırmalısınız. Yapmazsanız Prisma hata verecektir.
- Nullable Fields (Boş Bırakılabilir Alanlar): Eğer bir ilişki isteğe bağlıysa, hem ilişki alanına hem de yabancı anahtar (foreign key) alanına bir soru işareti koymalısınız.
- Syntax Errors (Sözdizimi Hataları): Prisma, varsayılan dizeler (string defaults) için çift tırnak gerektirir. Tek tırnak kullanmak hataya yol açacaktır.
- Relation Syntax (İlişki Sözdizimi): Her zaman doğru sözdizimini kullanın:
@relation(fields: [localField], references: [remoteField]).
Şema şu an migrate edildi. Bir sonraki adımda, gerçek zamanlı güncellemeler için Express backend ve Socket.io kurulumunu yapacağım.
Sıfırdan bir proje yönetim aracı oluşturmak: Prisma şeması ile başlangıç
Sıfırdan bir proje yönetim aracı oluşturmak göz korkutucu bir görev olabilir. Kullanıcıları, projeleri, görevleri, yorumları ve daha fazlasını düşünmeniz gerekir. Her uygulamanın temeli veritabanı şemasıdır. Bu makalede, proje yönetim aracımız için Prisma şemasını tasarlayarak başlayacağız.
Neden şema ile başlıyoruz?
Şema, uygulamanızın mimari planıdır. Verilerinizin yapısını, farklı varlıklar arasındaki ilişkileri ve verilerinizi yöneten kuralları tanımlar. İyi tasarlanmış bir şema; özellik geliştirmeyi, kod tabanını sürdürmeyi ve uygulamanızı ölçeklendirmeyi kolaylaştırır.
Varlıklarımızı tanımlamak
Proje yönetim aracımız için birkaç temel varlığı tanımlamamız gerekiyor:
- **User