1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148enum LocationType {
INSIDE
OUTSIDE
}
enum SignUpType {
LOCAL
KAKAO
GOOGLE
NAVER
}
enum Emoji {
LIKE
HELPFUL
SMILE
SAD
}
enum ReportType {
USER
TOILET_REVIEW
}
enum Reason {
INAPPROPRIATE_NICKNAME
INAPPROPRIATE_CONTENT
CONTAINS_PROFANITY
HARASSMENT
SPAM
OTHER
}
generator client {
provider = "prisma-client-js"
binaryTargets = ["native"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Users {
id Int @id @default(autoincrement())
email String @unique
nickname String @unique
created_at DateTime @default(now())
is_suspended Boolean?
suspension_end_date DateTime?
report_count Int @default(0)
sign_up_type SignUpType
authentication Authentication?
toilet_reviews ToiletReviews[]
toilet_review_emoji ToiletReviewEmoji[]
reported_reports Reports[] @relation("ReportedUser")
target_reports Reports[] @relation("TargetUser")
}
model Places {
id Int @id @default(autoincrement())
title String
region_id Int?
address String
category String?
thum_url String?
telephone String?
stars String?
naver_place_id String?
naver_stars String?
naver_reviewer_counts String?
naver_review NaverReviews[]
toilet_reviews ToiletReviews[]
region Regions? @relation(fields: [region_id], references: [id])
}
model NaverReviews {
id Int @id @default(autoincrement())
place_id Int
description String
place Places @relation(fields: [place_id], references: [id], onDelete: Cascade)
}
model Authentication {
id Int @id @default(autoincrement())
user_id Int @unique
password String
failed_count Int @default(0)
user Users @relation(fields: [user_id], references: [id], onDelete: Cascade)
}
model Regions {
id Int @id @default(autoincrement())
administrative_district String
district String?
place Places[]
}
model ToiletReviews {
id Int @id @default(autoincrement())
place_id Int
user_id Int
stars Float
created_at DateTime @default(now())
updated_at DateTime @updatedAt
is_unisex Boolean?
description String?
visited_at DateTime?
location LocationType?
like_count Int @default(0)
helpful_count Int @default(0)
smile_count Int @default(0)
sad_count Int @default(0)
user Users @relation(fields: [user_id], references: [id], onDelete: Cascade)
place Places @relation(fields: [place_id], references: [id])
toilet_review_emoji ToiletReviewEmoji[]
report Reports[]
@@unique([place_id, user_id])
}
model ToiletReviewEmoji {
id Int @id @default(autoincrement())
toilet_review_id Int
user_id Int
emoji Emoji
toilet_reviews ToiletReviews @relation(fields: [toilet_review_id], references: [id], onDelete: Cascade)
user Users @relation(fields: [user_id], references: [id], onDelete: Cascade)
@@unique([toilet_review_id, user_id])
}
model Reports {
id Int @id @default(autoincrement())
report_type ReportType
reporter_id Int
target_user_id Int?
target_toilet_review_id Int?
reason Reason
description String?
reporter Users @relation("ReportedUser", fields: [reporter_id], references: [id])
target_user Users? @relation("TargetUser", fields: [target_user_id], references: [id])
target_toilet_review ToiletReviews? @relation(fields: [target_toilet_review_id], references: [id])
@@unique([reporter_id, target_user_id])
@@unique([reporter_id, target_toilet_review_id])
}