๐Ÿ“ฆ Kimsoo0119 / map_finder_backend

๐Ÿ“„ schema.prisma ยท 148 lines
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])
}