feat: stabilize admin dashboard, refactor group management, implement PWA, and fix routing

This commit is contained in:
2026-05-03 19:51:18 +05:00
parent 622ca04170
commit 0598e07823
36 changed files with 1387 additions and 467 deletions
+40 -34
View File
@@ -8,20 +8,19 @@ datasource db {
}
model User {
id String @id @default(cuid())
email String @unique
username String @unique
password String
role String @default("user")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
profile Profile?
canvases Canvas[]
groupMembers GroupMember[]
id String @id @default(cuid())
email String @unique
username String @unique
password String
role String @default("user")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
activities Activity[]
followers Follow[] @relation("following")
following Follow[] @relation("follower")
canvases Canvas[]
following Follow[] @relation("follower")
followers Follow[] @relation("following")
groupMembers GroupMember[]
profile Profile?
}
model Profile {
@@ -34,8 +33,7 @@ model Profile {
followerCount Int @default(0)
followingCount Int @default(0)
joinedAt DateTime @default(now())
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model Canvas {
@@ -48,22 +46,22 @@ model Canvas {
edges Json @default("[]")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
owner User @relation(fields: [ownerId], references: [id], onDelete: Cascade)
group Group? @relation(fields: [groupId], references: [id], onDelete: SetNull)
group Group? @relation(fields: [groupId], references: [id])
owner User @relation(fields: [ownerId], references: [id], onDelete: Cascade)
}
model Group {
id String @id @default(cuid())
id String @id @default(cuid())
name String
description String @default("")
isPublic Boolean @default(true)
description String @default("")
isPublic Boolean @default(true)
ownerId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
members GroupMember[]
canvases Canvas[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
controlType String? @default("REMOTE")
canvases Canvas[]
members GroupMember[]
Kiosk Kiosk[]
}
model GroupMember {
@@ -72,9 +70,8 @@ model GroupMember {
groupId String
role String @default("member")
joinedAt DateTime @default(now())
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
group Group @relation(fields: [groupId], references: [id], onDelete: Cascade)
group Group @relation(fields: [groupId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([userId, groupId])
}
@@ -87,8 +84,7 @@ model Activity {
targetType String
timestamp DateTime @default(now())
metadata String?
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model Follow {
@@ -96,9 +92,19 @@ model Follow {
followerId String
followingId String
since DateTime @default(now())
follower User @relation("follower", fields: [followerId], references: [id], onDelete: Cascade)
following User @relation("following", fields: [followingId], references: [id], onDelete: Cascade)
follower User @relation("follower", fields: [followerId], references: [id], onDelete: Cascade)
following User @relation("following", fields: [followingId], references: [id], onDelete: Cascade)
@@unique([followerId, followingId])
}
model Kiosk {
id String @id
name String
location String?
groupId String
status String @default("offline")
lastSeen DateTime @default(now())
createdAt DateTime @default(now())
Group Group @relation(fields: [groupId], references: [id])
}