Prisma ਨਾਲ ਇੱਕ ਪ੍ਰੋਜੈਕਟ ਮੈਨੇਜਮੈਂਟ ਟੂਲ ਬਣਾਉਣਾ
ਮੈਂ Trello ਵਾਂਗ ਇੱਕ ਸਹਿਯੋਗੀ ਪ੍ਰੋਜੈਕਟ ਮੈਨੇਜਮੈਂਟ ਟੂਲ ਬਣਾ ਰਿਹਾ ਹਾਂ। ਮੈਂ React, Express.js, PostgreSQL, ਅਤੇ Socket.io ਦੀ ਵਰਤੋਂ ਕਰ ਰਿਹਾ ਹਾਂ।
ਪਹਿਲਾ ਕਦਮ ਡਾਟਾਬੇਸ schema ਹੈ। ਮੈਂ users, projects, boards, tasks, comments, ਅਤੇ notifications ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਛੇ models ਤਿਆਰ ਕੀਤੇ ਹਨ।
ਮੇਰੇ Prisma schema ਡਿਜ਼ਾਈਨ ਤੋਂ ਮੁੱਖ ਤਕਨੀਕੀ ਚੋਣਾਂ ਅਤੇ ਸਬਕ ਇੱਥੇ ਹਨ:
• IDs ਲਈ CUID ਦੀ ਵਰਤੋਂ ਕਰੋ
ਮੈਂ ਸਾਰੀਆਂ IDs ਲਈ @default(cuid()) ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹਾਂ। ਜਨਤਕ (public) URLs ਲਈ ਇਹ ਸਧਾਰਨ ਨੰਬਰਾਂ ਨਾਲੋਂ ਬਿਹਤਰ ਹਨ। ਇਹ ਲੋਕਾਂ ਨੂੰ ਇਹ ਅੰਦਾਜ਼ਾ ਲਗਾਉਣ ਤੋਂ ਰੋਕਦੇ ਹਨ ਕਿ ਤੁਹਾਡੇ ਕੋਲ ਕਿੰਨੇ ਰਿਕਾਰਡ ਹਨ।
• ਸਪੱਸ਼ਟ ਰਿਲੇਸ਼ਨ ਨਾਮ (Explicit Relation Names)
ਜਦੋਂ ਦੋ ਫੀਲਡ ਇੱਕੋ ਮਾਡਲ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦੀਆਂ ਹਨ, ਤਾਂ Prisma ਉਲਝ ਜਾਂਦਾ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਇੱਕ task ਦਾ ਇੱਕ creator ਅਤੇ ਇੱਕ assignee ਹੁੰਦਾ ਹੈ। ਦੋਵੇਂ Users ਹਨ। ਮਾਈਗ੍ਰੇਸ਼ਨ ਗਲਤੀਆਂ ਤੋਂ ਬਚਣ ਲਈ ਮੈਨੂੰ @relation ਨਾਮਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇਹਨਾਂ ਰਿਲੇਸ਼ਨਾਂ ਨੂੰ ਸਪੱਸ਼ਟ ਤੌਰ 'ਤੇ ਨਾਮ ਦੇਣਾ ਚਾਹੀਦਾ ਹੈ।
• Many-to-Many ਰਿਲੇਸ਼ਨਾਂ ਲਈ Junction Tables
ਇੱਕ user ਕਈ projects ਦਾ ਹਿੱਸਾ ਹੋ ਸਕਦਾ ਹੈ। ਇੱਕ project ਵਿੱਚ ਕਈ users ਹੋ ਸਕਦੇ ਹਨ। ਮੈਂ ਉਹਨਾਂ ਨੂੰ ਜੋੜਨ ਲਈ ਇੱਕ ProjectMember ਮਾਡਲ ਬਣਾਇਆ ਹੈ। ਮੈਂ userId ਅਤੇ projectId 'ਤੇ ਇੱਕ unique constraint ਜੋੜੀ ਹੈ। ਇਹ ਇੱਕੋ user ਨੂੰ ਦੋ ਵਾਰ ਇੱਕੋ ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਣ ਤੋਂ ਰੋਕਦਾ ਹੈ।
• Hierarchy ਅਤੇ Logic
Tasks, projects ਵਿੱਚ ਨਹੀਂ ਹੁੰਦੇ। ਉਹ boards ਵਿੱਚ ਹੁੰਦੇ ਹਨ। Boards, projects ਵਿੱਚ ਹੁੰਦੇ ਹਨ। ਇਹ drag-and-drop ਨੂੰ ਸਰਲ ਬਣਾਉਂਦਾ ਹੈ। ਕਿਸੇ task ਨੂੰ ਹਿਲਾਉਣ ਲਈ, ਤੁਹਾਨੂੰ ਸਿਰਫ਼ ਉਸਦੀ boardId ਨੂੰ ਅਪਡੇਟ ਕਰਨਾ ਪੈਂਦਾ ਹੈ।
• Nullable ਰਿਲੇਸ਼ਨਾਂ
ਕੁਝ ਰਿਲੇਸ਼ਨਾਂ ਲਾਜ਼ਮੀ ਹੁੰਦੀਆਂ ਹਨ, ਅਤੇ ਕੁਝ ਵਿਕਲਪਿਕ (optional) ਹੁੰਦੀਆਂ ਹਨ। ਇੱਕ task ਦਾ creator ਹੋਣਾ ਜ਼ਰੂਰੀ ਹੈ, ਇਸ ਲਈ ਮੈਂ question mark ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰਦਾ। Assignee ਵਿਕਲਪਿਕ ਹੈ, ਇਸ ਲਈ ਮੈਂ User? ਅਤੇ String? ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹਾਂ। Schema ਨੂੰ ਕੰਮ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ ਦੋਵੇਂ ਸ਼ਾਮਲ ਕਰਨੇ ਚਾਹੀਦੇ ਹਨ।
ਮੈਨੂੰ ਮਿਲੀਆਂ ਆਮ ਗਲਤੀਆਂ:
- Defaults ਲਈ single quotes ਦੀ ਵਰਤੋਂ ਕਰਨਾ। Prisma ਲਈ double quotes ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।
- references syntax ਵਿੱਚ colon ਭੁੱਲ ਜਾਣਾ।
- ਗਲਤੀ ਨਾਲ ID ਫੀਲਡ 'ਤੇ
@default(now())ਲਗਾ ਦੇਣਾ।
ਅੱਗੇ, ਮੈਂ Express backend ਬਣਾਵਾਂਗਾ ਅਤੇ real-time updates ਲਈ Socket.io ਸੈੱਟਅੱਪ ਕਰਾਂਗਾ।