4
4
//////////////////////////////////////////////////////////////////////////////////////////////
5
5
6
6
datasource db {
7
- provider = " postgresql "
8
- url = env (" DATABASE_URL " )
9
- directUrl = env (" DATABASE_DIRECT_URL " )
7
+ provider = " postgresql "
8
+ url = env (" DATABASE_URL " )
9
+ directUrl = env (" DATABASE_DIRECT_URL " )
10
10
}
11
11
12
12
generator client {
13
- provider = " prisma-client-js "
13
+ provider = " prisma-client-js "
14
14
}
15
15
16
16
enum SpaceUserRole {
17
- USER
18
- ADMIN
17
+ USER
18
+ ADMIN
19
19
}
20
20
21
21
/// @@deny('all', auth() == null)
22
22
/// @@allow('create', true)
23
23
/// @@allow('read', members?[user == auth()])
24
24
/// @@allow('update,delete', members?[user == auth() && role == ADMIN])
25
25
model Space {
26
- id String @id () @default (uuid () )
27
- createdAt DateTime @default (now () )
28
- updatedAt DateTime @updatedAt ()
29
- /// @length(4, 50)
30
- name String
31
- /// @regex('^[0-9a-zA-Z-_]{4,16}$')
32
- slug String @unique ()
33
- members SpaceUser []
34
- lists List []
26
+ id String @id () @default (uuid () )
27
+ createdAt DateTime @default (now () )
28
+ updatedAt DateTime @updatedAt ()
29
+ /// @length(4, 50)
30
+ name String
31
+ /// @regex('^[0-9a-zA-Z-_]{4,16}$')
32
+ slug String @unique ()
33
+ members SpaceUser []
34
+ lists List []
35
35
}
36
36
37
37
/// @@deny('all', auth() == null)
38
38
/// @@allow('create,update,delete', space.members?[user == auth() && role == ADMIN])
39
39
/// @@allow('read', space.members?[user == auth()])
40
40
model SpaceUser {
41
- id String @id () @default (uuid () )
42
- createdAt DateTime @default (now () )
43
- updatedAt DateTime @updatedAt ()
44
- space Space @relation (fields : [spaceId ] , references : [id ] , onDelete : Cascade )
45
- spaceId String
46
- user User @relation (fields : [userId ] , references : [id ] , onDelete : Cascade )
47
- userId String
48
- role SpaceUserRole
41
+ id String @id () @default (uuid () )
42
+ createdAt DateTime @default (now () )
43
+ updatedAt DateTime @updatedAt ()
44
+ space Space @relation (fields : [spaceId ] , references : [id ] , onDelete : Cascade )
45
+ spaceId String
46
+ user User @relation (fields : [userId ] , references : [id ] , onDelete : Cascade )
47
+ userId String
48
+ role SpaceUserRole
49
49
50
- @@unique ([userId , spaceId ] )
50
+ @@unique ([userId , spaceId ] )
51
51
}
52
52
53
53
/// @@allow('create,read', true)
54
54
/// @@allow('all', auth() == this)
55
55
model User {
56
- id String @id () @default (cuid () )
57
- /// @email
58
- email String @unique ()
59
- /// @password
60
- /// @omit
61
- /// @length(6, 32)
62
- password String
63
- name String ?
64
- spaces SpaceUser []
65
- todos Todo []
66
- lists List []
56
+ id String @id () @default (cuid () )
57
+ /// @email
58
+ email String @unique ()
59
+ /// @password
60
+ /// @omit
61
+ /// @length(6, 32)
62
+ password String
63
+ name String ?
64
+ spaces SpaceUser []
65
+ todos Todo []
66
+ lists List []
67
67
}
68
68
69
69
/// @@deny('all', auth() == null)
@@ -72,32 +72,32 @@ model User {
72
72
/// @@allow('update', owner == auth() && space.members?[user == auth()] && future().owner == owner)
73
73
/// @@allow('delete', owner == auth())
74
74
model List {
75
- id String @id () @default (uuid () )
76
- createdAt DateTime @default (now () )
77
- updatedAt DateTime @updatedAt ()
78
- space Space @relation (fields : [spaceId ] , references : [id ] , onDelete : Cascade )
79
- spaceId String
80
- owner User @relation (fields : [ownerId ] , references : [id ] , onDelete : Cascade )
81
- ownerId String
82
- /// @length(1, 100)
83
- title String
84
- private Boolean @default (false )
85
- todos Todo []
75
+ id String @id () @default (uuid () )
76
+ createdAt DateTime @default (now () )
77
+ updatedAt DateTime @updatedAt ()
78
+ space Space @relation (fields : [spaceId ] , references : [id ] , onDelete : Cascade )
79
+ spaceId String
80
+ owner User @relation (fields : [ownerId ] , references : [id ] , onDelete : Cascade )
81
+ ownerId String
82
+ /// @length(1, 100)
83
+ title String
84
+ private Boolean @default (false )
85
+ todos Todo []
86
86
}
87
87
88
88
/// @@deny('all', auth() == null)
89
89
/// @@allow('all', list.owner == auth())
90
90
/// @@allow('all', list.space.members?[user == auth()] && !list.private)
91
91
/// @@deny('update', future().owner != owner)
92
92
model Todo {
93
- id String @id () @default (uuid () )
94
- createdAt DateTime @default (now () )
95
- updatedAt DateTime @updatedAt ()
96
- owner User @relation (fields : [ownerId ] , references : [id ] , onDelete : Cascade )
97
- ownerId String
98
- list List @relation (fields : [listId ] , references : [id ] , onDelete : Cascade )
99
- listId String
100
- /// @length(1, 100)
101
- title String
102
- completedAt DateTime ?
103
- }
93
+ id String @id () @default (uuid () )
94
+ createdAt DateTime @default (now () )
95
+ updatedAt DateTime @updatedAt ()
96
+ owner User @relation (fields : [ownerId ] , references : [id ] , onDelete : Cascade )
97
+ ownerId String
98
+ list List @relation (fields : [listId ] , references : [id ] , onDelete : Cascade )
99
+ listId String
100
+ /// @length(1, 100)
101
+ title String
102
+ completedAt DateTime ?
103
+ }
0 commit comments