proc-gen equipment drops from monsters can be picked up
[sketchy-heroes.git] / prisma / schema.prisma
1 generator client {
2   provider = "prisma-client-js"
3 }
4
5 datasource db {
6   provider = "postgresql"
7   url      = env("DATABASE_URL")
8 }
9
10 enum Biome {
11   PLAINS
12   FIELDS
13   WOODLAND
14   FOREST
15   SWAMP
16   TUNDRA
17   MOUNTAIN
18   CAVE
19   DESERT
20 }
21
22
23 model ZoneBiomes {
24   id String @id @default(uuid()) @db.Uuid
25   players Player?
26   playerId String? @db.Uuid
27   biome Biome
28   maxSteps Int @default(500)
29 }
30
31 model Player {
32   id          String @id @default(uuid()) @db.Uuid
33   username    String @unique
34   password    String
35   level       Int    @default(1)
36   currency    Int    @default(0)
37   pow         Int
38   zest        Int
39   woosh       Int
40   luck        Int
41   aha         Int
42   wow         Int
43   stamina     Int
44   hp          Int
45   statPoints Int    @default(0)
46   exp         Int    @default(0)
47   zoneBiome     ZoneBiomes @relation(fields: [zoneBiomeId], references: [id])
48   zoneBiomeId String @db.Uuid
49   authToken  AuthToken?
50   inventory Inventory[]
51   activeDrops WorldDrop[]
52   steps Int @default(0)
53 }
54
55 enum InventoryType {
56   HELM
57   R_SHOULDER
58   L_SHOULDER
59   TORSO
60   R_ARM
61   L_ARM
62   BOTH_ARMS
63   LEGS
64   L_FOOT
65   R_FOOT
66   WEAPON
67   SHIELD
68   ARMOUR
69 }
70
71 enum Rarity {
72   COMMON
73   UNCOMMON
74   RARE
75 }
76
77 model Item {
78   id String @id @default(uuid()) @db.Uuid
79   name String @unique
80   type InventoryType[]
81   durability Int @default(0)
82   minLevelDrop Int @default(1)
83   rarityDropRates Json
84   statModifiers Json
85   instances Inventory[]  // a list of all inventories of a particular item
86   lootTable LootTable[]
87   worldDrops WorldDrop[]  // a list of all active world drops
88 }
89
90 model WorldDrop {
91   id String @id @default(uuid()) @db.Uuid
92   baseItem Item @relation(fields: [itemId], references: [id])
93   itemId String @db.Uuid
94   dropDate DateTime @default(now())
95   droppedBy Player @relation(fields: [droppedById], references: [id])
96   droppedById String @db.Uuid
97 }
98
99 model Inventory {
100   id String @id @default(uuid()) @db.Uuid
101   player Player @relation(fields: [playerId], references: [id])
102   playerId String @db.Uuid
103   baseItem Item @relation(fields: [itemId], references: [id])
104   itemId String @db.Uuid
105   discovered Boolean @default(false)
106   usesUntilDiscovery Int @default(40)
107   maxDurability Int @default(1)  // this is set to 1 to handle things like potions
108   currentDurability Int @default(1)
109   rarity Rarity
110   type InventoryType[]
111   statModifiers Json
112   stackable Boolean @default(false) // if an item is "stackable" then the durability is the total number of items in that stack
113 }
114
115 model AuthToken {
116   token String @id @default(uuid()) @db.Uuid
117   player Player @relation(fields: [playerId], references: [id])
118   playerId String @db.Uuid
119   createdAt  DateTime   @default(now())
120   updatedAt  DateTime?   @updatedAt
121 }
122
123 enum MonsterType {
124   BEAST
125   FLYING
126   HUMANOID
127   GIANT
128   INSECT
129   UNDEAD
130 }
131
132 model Monster {
133   id String @id @default(uuid()) @db.Uuid
134   name String @unique
135   monsterType MonsterType[]
136   monsterBiomes MonsterBiome[]
137 }
138
139 model MonsterBiome {
140   id String @id @default(uuid()) @db.Uuid
141   monster Monster @relation(fields: [monsterId], references: [id])
142   monsterId String @db.Uuid
143   biome Biome
144   weight Decimal
145   dropRate Decimal @default(0.1)
146   time Json
147   lootTable LootTable[]
148   @@unique([monsterId, biome])
149 }
150
151 model LootTable {
152   monsterBiome MonsterBiome @relation(fields: [monsterBiomeId], references: [id])
153   monsterBiomeId String @db.Uuid
154   item Item @relation(fields: [itemId], references: [id])
155   itemId String @db.Uuid
156   dropRate Decimal
157   @@id([monsterBiomeId, itemId])
158 }
159
160 model Fight {
161   id String @id @default(uuid()) @db.Uuid
162   playerId String? @db.Uuid
163   monsterId String @db.Uuid
164   name String
165   type MonsterType[]
166   level Int
167   currency Int
168   pow         Int
169   zest        Int
170   woosh       Int
171   luck        Int
172   aha         Int
173   wow         Int
174   hp          Int
175   exp          Int
176 }