FluX
FluX
TTCTheo's Typesafe Cult
Created by FluX on 3/8/2023 in #questions
Question about Planetscale storage utilization
1 replies
TTCTheo's Typesafe Cult
Created by FluX on 2/12/2023 in #questions
Forms: How would you go about updating relations from the frontend?
(long-ish post) I'm currently building an admin dashboard, where you can manage users for example. A user can be edited by going to /dashboard/users/<userid>, and there I fetch the whole user object including relations (role object, permissions object).
model User {
id String @id @default(nanoid(14))
displayName String
image String
role UserRole @relation(fields: [roleId], references: [id])
roleId String
permissions UserPermission[]
createdAt String
updatedAt String

@@index([roleId])
}

model UserRole {
id String @id @default(nanoid(14))
name String @unique
displayName String
description String?
user User[]
}

model UserPermission {
id String @id @default(nanoid(18))
name String @unique
displayName String
description String?
user User[]
}
model User {
id String @id @default(nanoid(14))
displayName String
image String
role UserRole @relation(fields: [roleId], references: [id])
roleId String
permissions UserPermission[]
createdAt String
updatedAt String

@@index([roleId])
}

model UserRole {
id String @id @default(nanoid(14))
name String @unique
displayName String
description String?
user User[]
}

model UserPermission {
id String @id @default(nanoid(18))
name String @unique
displayName String
description String?
user User[]
}
I'm using Formik to handle my user editing form and I'm a bit uncertain about how to tackle updating all of the relations - especially the permissions. I want these to be toggleable via checkboxes. One way of doing this is to take the initial permissions object with all its nested permissions and create a copy of it (Formik does this for you). Then I can remove individual permissions from that object, or add a permissions unique name to it. Finally, I can compare that to the initial values and see which permissions got removed or which got added, and do multiple DB queries based on that (connect/disconnect user from permission). Maybe create endpoints like /addUserPermission and /removeUserPermission? Is this a good approach? Or is there maybe a better way that requires fewer queries?
2 replies