diff --git a/.gitignore b/.gitignore index 45254b6..13b1eca 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,6 @@ yarn-error.log* next-env.d.ts /app/generated/prisma + +# test database +/database \ No newline at end of file diff --git a/README.md b/README.md index a10f7f4..9834df9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ ## 更新数据库prisma -`npx prisma migrate dev --name init` \ No newline at end of file +`npx prisma migrate dev --name init` + +### arch笔记本mysql测试服务器 + +`` +mysqld --basedir=/usr \ + --datadir=/home/aecw/re-AstarCupWeb/database \ + --socket=/home/aecw/re-AstarCupWeb/database/mysql.sock \ + --pid-file=/home/aecw/re-AstarCupWeb/database/mysql.pid & +`` diff --git a/prisma/models/Beatmap.prisma b/prisma/models/Beatmap.prisma new file mode 100644 index 0000000..f45db36 --- /dev/null +++ b/prisma/models/Beatmap.prisma @@ -0,0 +1,65 @@ +model Beatmap { + id Int @id @default(autoincrement()) + beatmap_id Int @unique + beatmapset_id Int @unique + title String + title_unicode String + artist String + artist_unicode String + creator String + cover_url String + version String + ar Float + od Float + cs Float + hp Float + bpm Float + length Int + max_combo Int + star_rating Float + mod Json @default("{}") + selectMod BeatmapSelectMod @default(NM) + selectModSlot Int @default(1) + selectByosuId Int + user User @relation(fields: [selectByosuId], references: [osuid]) + selectNote String @default("") + approved Boolean @default(false) + needTest Boolean @default(false) + isCustom Boolean @default(false) + isOriginal Boolean @default(false) + season Int @default(1) + category BeatmapCategory @default(QUA) + enabled Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + beatmapComment BeatmapComment? +} + +enum BeatmapCategory { + QUA + RO16 + QF + SF + F + GF +} + +enum BeatmapSelectMod { + NM + HD + HR + DT + LZ + TB +} + +model BeatmapComment { + id Int @id @default(autoincrement()) + beatmap_id Int @unique + beatmap Beatmap @relation(fields: [beatmap_id], references: [beatmap_id]) + comment String @default("") + osuid Int @unique + user User @relation(fields: [osuid], references: [osuid]) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} diff --git a/prisma/models/Message.prisma b/prisma/models/Message.prisma new file mode 100644 index 0000000..1d75d0c --- /dev/null +++ b/prisma/models/Message.prisma @@ -0,0 +1,7 @@ +model Message { + id Int @id @default(autoincrement()) + content String + osuid Int + user User @relation(fields: [osuid], references: [osuid]) + receiverId Int +} diff --git a/prisma/models/Multiplayer.prisma b/prisma/models/Multiplayer.prisma new file mode 100644 index 0000000..384bec0 --- /dev/null +++ b/prisma/models/Multiplayer.prisma @@ -0,0 +1,18 @@ +enum MultiplayerRoomType { + SOLO + TEAM_VS +} + +model MultiplayerSoloRoom { + room_id Int @id @default(autoincrement()) + type MultiplayerRoomType @default(SOLO) + player_red_id Int @unique + player_blue_id Int @unique + score_red Int + score_blue Int + start_time DateTime + end_time DateTime + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + teamId Int? +} diff --git a/prisma/models/MultiplayerTeamVs.prisma b/prisma/models/MultiplayerTeamVs.prisma new file mode 100644 index 0000000..5927dd8 --- /dev/null +++ b/prisma/models/MultiplayerTeamVs.prisma @@ -0,0 +1,12 @@ +model MultiplayerTeamvsRoom { + room_id Int @id @default(autoincrement()) + type MultiplayerRoomType @default(SOLO) + team_red_id Int @unique + team_blue_id Int @unique + start_time DateTime + end_time DateTime + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + team Team? @relation(fields: [teamId], references: [id]) + teamId Int? +} diff --git a/prisma/models/Team.prisma b/prisma/models/Team.prisma new file mode 100644 index 0000000..bf20596 --- /dev/null +++ b/prisma/models/Team.prisma @@ -0,0 +1,23 @@ +model Team { + id Int @id @default(autoincrement()) + name String + banner_url String + teamType TeamColor + members User[] + teamState TeamState @default(ACTIVE) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + multiplayerRooms MultiplayerTeamvsRoom[] +} + +enum TeamColor { + blue_team + red_team +} + +enum TeamState { + ACTIVE + UNAPPROVED + APPROVED + BANNED +} diff --git a/prisma/models/User.prisma b/prisma/models/User.prisma new file mode 100644 index 0000000..60be195 --- /dev/null +++ b/prisma/models/User.prisma @@ -0,0 +1,49 @@ +model User { + id Int @id @default(autoincrement()) + userState UserState @default(ACTIVE) + osuid Int @unique + username String @unique + pp Float @default(0) + global_rank Int @default(0) + country_rank Int @default(0) + country String + approved Int @default(0) + seed Int @default(0) + seasonal Int @default(1) + teams Team[] + userGroups UserGroup[] + beatmapComments BeatmapComment[] + messages Message[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + beatmaps Beatmap[] +} + +enum UserState { + ACTIVE + REGISTERED + ABANDONED + BANNED +} + +model UserGroup { + id Int @id @default(autoincrement()) + group UserGroupType + users User[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +enum UserGroupType { + HOST + ADMIN + POOLER + STREAMER + TESTER + GFX + SHEETER + PLAYER + COMMENTATOR + MAPPER + REFEREE +} diff --git a/prisma/models/UserGroup.prisma b/prisma/models/UserGroup.prisma new file mode 100644 index 0000000..dbed71b --- /dev/null +++ b/prisma/models/UserGroup.prisma @@ -0,0 +1,21 @@ +model UserGroup { + id Int @id @default(autoincrement()) + group UserGroupType + users User[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +enum UserGroupType { + HOST + ADMIN + POOLER + STREAMER + TESTER + GFX + SHEETER + PLAYER + COMMENTATOR + MAPPER + REFEREE +} diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 063dbed..4f13ae7 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -10,143 +10,14 @@ generator client { } datasource db { + // provider = "postgres" provider = "mysql" } -model User { - id Int @id @default(autoincrement()) - osuid Int @unique - username String @unique - pp Float @default(0) - global_rank Int @default(0) - country_rank Int @default(0) - country String - approved Int @default(0) - teams Team[] - seed Int @default(0) - seasonal Int @default(1) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - userGroups UserGroup[] - beatmapComments BeatmapComment[] - beatmap Beatmap? -} - -model UserGroup { - id Int @id @default(autoincrement()) - name String @unique - users User[] - group UserGroupType - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt -} - -enum UserGroupType { - HOST - ADMIN - POOLER - STREAMER - TESTER - GFX - SHEETER - PLAYER - COMMENTATOR - MAPPER - REFEREE -} - -model Team { - id Int @id @default(autoincrement()) - name String @unique - banner_url String - members User[] - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt -} - -model Setting { +model TournamentConfig { id Int @id @default(autoincrement()) tournament_name String @default("AstarCup") max_pp_for_registration Float @default(0) min_approved_playcount Float @default(0) current_seasonal Int @default(1) } - -model Beatmap { - id Int @id @default(autoincrement()) - beatmap_id Int @unique - beatmapset_id Int @unique - title String @unique - title_unicode String @unique - artist String @unique - artist_unicode String @unique - creator String @unique - cover_url String @unique - version String @unique - ar Float @unique - od Float @unique - cs Float @unique - hp Float @unique - bpm Float @unique - length Int @unique - max_combo Int @unique - star_rating Float @unique - mod Json - selectMod BeatmapSelectMod @default(NM) - selectModSlot Int @default(1) - selectByosuId Int @unique - user User @relation(fields: [selectByosuId], references: [osuid]) - approved Boolean @default(false) - needTest Boolean @default(false) - isCustom Boolean @default(false) - isOriginal Boolean @default(false) - season Int @default(1) - category BeatmapCategory - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - beatmapComment BeatmapComment? -} - -enum BeatmapCategory { - qua - ro16 - sf - f - gf - // todo: fix this -} - -enum BeatmapSelectMod { - NM - HD - HR - DT - LZ - TB -} - -model BeatmapComment { - id Int @id @default(autoincrement()) - beatmap_id Int @unique - beatmap Beatmap @relation(fields: [beatmap_id], references: [beatmap_id]) - comment String @default("") - osuid Int @unique - user User @relation(fields: [osuid], references: [osuid]) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt -} - -model MultiplayerRoom { - room_id Int @id @default(autoincrement()) - type MultiplayerRoomType @default(SOLO) - start_time DateTime - end_time DateTime - - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt -} - -enum MultiplayerRoomType { - SOLO - TEAM_VS -}