mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-09-24 05:05:20 -04:00
change: Add prisma
as dependency, add DATABASE_URL
env variable
This commit is contained in:
parent
1e2b321bd8
commit
571add052b
6
new/backend/.gitignore
vendored
Normal file
6
new/backend/.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
node_modules/
|
||||||
|
# Keep environment variables out of version control
|
||||||
|
.env
|
||||||
|
|
||||||
|
# Remove the database file
|
||||||
|
db.sqlite
|
@ -21,5 +21,10 @@ HTTP_BASE_URL=http://localhost:4000
|
|||||||
# HTTP_HOST=0.0.0.0
|
# HTTP_HOST=0.0.0.0
|
||||||
# HTTP_PORT=4000
|
# HTTP_PORT=4000
|
||||||
|
|
||||||
|
# -- This variable determines the database to connect to.
|
||||||
|
# -- Note that this has to be of the same database type as specified in the Prisma schema.
|
||||||
|
# -- Right now it's SQLite since we already use it.
|
||||||
|
DATABASE_URL=file:./db.sqlite
|
||||||
|
|
||||||
# -- Do change this variable, lest you wish to anger the computer.
|
# -- Do change this variable, lest you wish to anger the computer.
|
||||||
SECURITY_SECRET=changeme
|
SECURITY_SECRET=changeme
|
@ -24,6 +24,7 @@
|
|||||||
"author": "",
|
"author": "",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fastify/type-provider-typebox": "^3.5.0",
|
"@fastify/type-provider-typebox": "^3.5.0",
|
||||||
|
"@prisma/client": "5.3.1",
|
||||||
"@pronounspage/common": "workspace:*",
|
"@pronounspage/common": "workspace:*",
|
||||||
"@sinclair/typebox": "^0.31.14",
|
"@sinclair/typebox": "^0.31.14",
|
||||||
"csv-parse": "^5.5.0",
|
"csv-parse": "^5.5.0",
|
||||||
@ -36,6 +37,7 @@
|
|||||||
"nodemon": "^3.0.1",
|
"nodemon": "^3.0.1",
|
||||||
"npm-run-all": "^4.1.5",
|
"npm-run-all": "^4.1.5",
|
||||||
"pino-pretty": "^10.2.0",
|
"pino-pretty": "^10.2.0",
|
||||||
|
"prisma": "^5.3.1",
|
||||||
"rimraf": "^5.0.1",
|
"rimraf": "^5.0.1",
|
||||||
"typescript": "^5.2.2"
|
"typescript": "^5.2.2"
|
||||||
},
|
},
|
||||||
|
333
new/backend/prisma/schema.prisma
Normal file
333
new/backend/prisma/schema.prisma
Normal file
@ -0,0 +1,333 @@
|
|||||||
|
generator client {
|
||||||
|
provider = "prisma-client-js"
|
||||||
|
}
|
||||||
|
|
||||||
|
datasource db {
|
||||||
|
provider = "sqlite"
|
||||||
|
url = env("DATABASE_URL")
|
||||||
|
}
|
||||||
|
|
||||||
|
model OldAuditLog {
|
||||||
|
id String @id
|
||||||
|
userId String?
|
||||||
|
username String?
|
||||||
|
event String
|
||||||
|
payload String?
|
||||||
|
|
||||||
|
@@map("audit_log")
|
||||||
|
}
|
||||||
|
|
||||||
|
model NewAuditLog {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
userId String
|
||||||
|
username String
|
||||||
|
email String
|
||||||
|
loggedAt Int
|
||||||
|
locale String
|
||||||
|
actionType String
|
||||||
|
actionData String
|
||||||
|
|
||||||
|
@@map("audit_logs_new")
|
||||||
|
}
|
||||||
|
|
||||||
|
model Authenticator {
|
||||||
|
id String @id
|
||||||
|
userId String?
|
||||||
|
type String
|
||||||
|
payload String
|
||||||
|
validUntil Int?
|
||||||
|
users User? @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
||||||
|
|
||||||
|
@@index([userId], map: "authenticators_userId")
|
||||||
|
@@index([type], map: "authenticators_type")
|
||||||
|
@@map("authenticators")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Some manual changes here:
|
||||||
|
// 1. `bannedBy` is a nullable
|
||||||
|
model BanProposal {
|
||||||
|
id String @id
|
||||||
|
userId String
|
||||||
|
bannedBy String?
|
||||||
|
bannedTerms String
|
||||||
|
bannedReason String
|
||||||
|
bannedByUser User? @relation("ban_proposals_bannedByTousers", fields: [bannedBy], references: [id], onDelete: SetNull, onUpdate: NoAction)
|
||||||
|
user User @relation("ban_proposals_userIdTousers", fields: [userId], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
||||||
|
|
||||||
|
@@index([userId], map: "ban_proposals_userId")
|
||||||
|
@@map("ban_proposals")
|
||||||
|
}
|
||||||
|
|
||||||
|
model Ban {
|
||||||
|
type String
|
||||||
|
value String
|
||||||
|
|
||||||
|
@@id([type, value])
|
||||||
|
@@map("ban")
|
||||||
|
}
|
||||||
|
|
||||||
|
model Inclusive {
|
||||||
|
id String @id
|
||||||
|
insteadOf String
|
||||||
|
say String
|
||||||
|
because String
|
||||||
|
locale String
|
||||||
|
approved Int
|
||||||
|
base_id String?
|
||||||
|
author_id String?
|
||||||
|
categories String?
|
||||||
|
links String?
|
||||||
|
deleted Int @default(0)
|
||||||
|
clarification String?
|
||||||
|
users User? @relation(fields: [author_id], references: [id], onUpdate: NoAction)
|
||||||
|
|
||||||
|
@@index([insteadOf], map: "inclusive_insteadOf")
|
||||||
|
@@index([locale], map: "inclusive_locale")
|
||||||
|
@@map("inclusive")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.
|
||||||
|
model Link {
|
||||||
|
url String? @id
|
||||||
|
expiresAt Int?
|
||||||
|
favicon String?
|
||||||
|
relMe String?
|
||||||
|
nodeinfo String?
|
||||||
|
|
||||||
|
@@map("links")
|
||||||
|
@@ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
model Name {
|
||||||
|
id String @id
|
||||||
|
name String
|
||||||
|
locale String
|
||||||
|
origin String?
|
||||||
|
meaning String?
|
||||||
|
usage String?
|
||||||
|
legally String?
|
||||||
|
pros String?
|
||||||
|
cons String?
|
||||||
|
notablePeople String?
|
||||||
|
links String?
|
||||||
|
namedays String?
|
||||||
|
namedaysComment String?
|
||||||
|
deleted Int @default(0)
|
||||||
|
approved Int @default(0)
|
||||||
|
base_id String?
|
||||||
|
author_id String?
|
||||||
|
|
||||||
|
@@index([locale], map: "names_locale")
|
||||||
|
@@index([name], map: "names_name")
|
||||||
|
@@index([locale, name], map: "names_name_locale")
|
||||||
|
@@map("names")
|
||||||
|
}
|
||||||
|
|
||||||
|
model Noun {
|
||||||
|
id String @id
|
||||||
|
masc String
|
||||||
|
fem String
|
||||||
|
neutr String
|
||||||
|
mascPl String
|
||||||
|
femPl String
|
||||||
|
neutrPl String
|
||||||
|
approved Int
|
||||||
|
base_id String?
|
||||||
|
locale String @default("pl")
|
||||||
|
author_id String?
|
||||||
|
deleted Int @default(0)
|
||||||
|
sources String?
|
||||||
|
users User? @relation(fields: [author_id], references: [id], onUpdate: NoAction)
|
||||||
|
|
||||||
|
@@index([masc], map: "nouns_masc")
|
||||||
|
@@index([locale], map: "nouns_locale")
|
||||||
|
@@map("nouns")
|
||||||
|
}
|
||||||
|
|
||||||
|
model Profile {
|
||||||
|
id String @id
|
||||||
|
userId String
|
||||||
|
locale String
|
||||||
|
names String
|
||||||
|
pronouns String
|
||||||
|
description String
|
||||||
|
birthday String?
|
||||||
|
links String
|
||||||
|
flags String
|
||||||
|
words String
|
||||||
|
active Int
|
||||||
|
teamName String?
|
||||||
|
footerName String?
|
||||||
|
footerAreas String?
|
||||||
|
customFlags String @default("{}")
|
||||||
|
card String?
|
||||||
|
credentials String?
|
||||||
|
credentialsLevel Int?
|
||||||
|
credentialsName Int?
|
||||||
|
cardDark String?
|
||||||
|
opinions String @default("{}")
|
||||||
|
timezone String?
|
||||||
|
sensitive String @default("[]")
|
||||||
|
users User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
||||||
|
user_connections UserConnection[]
|
||||||
|
|
||||||
|
@@unique([userId, locale], map: "sqlite_autoindex_profiles_2")
|
||||||
|
@@index([footerAreas], map: "profiles_footerAreas")
|
||||||
|
@@index([footerName], map: "profiles_footerName")
|
||||||
|
@@index([teamName], map: "profiles_teamName")
|
||||||
|
@@index([locale, userId], map: "profiles_locale_userId")
|
||||||
|
@@index([userId], map: "profiles_userId")
|
||||||
|
@@index([locale], map: "profiles_locale")
|
||||||
|
@@map("profiles")
|
||||||
|
}
|
||||||
|
|
||||||
|
model Report {
|
||||||
|
id String @id
|
||||||
|
userId String?
|
||||||
|
reporterId String?
|
||||||
|
comment String
|
||||||
|
isAutomatic Int?
|
||||||
|
isHandled Int?
|
||||||
|
snapshot String?
|
||||||
|
users_reports_reporterIdTousers User? @relation("reports_reporterIdTousers", fields: [reporterId], references: [id], onUpdate: NoAction)
|
||||||
|
users_reports_userIdTousers User? @relation("reports_userIdTousers", fields: [userId], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
||||||
|
|
||||||
|
@@index([userId], map: "reports_userId")
|
||||||
|
@@index([isHandled], map: "reports_isHandled")
|
||||||
|
@@index([isAutomatic], map: "reports_isAutomatic")
|
||||||
|
@@map("reports")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.
|
||||||
|
model SocialLookup {
|
||||||
|
userId String
|
||||||
|
provider String
|
||||||
|
identifier String
|
||||||
|
users User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
||||||
|
|
||||||
|
@@index([provider, identifier], map: "social_lookup_provider_identifier")
|
||||||
|
@@map("social_lookup")
|
||||||
|
@@ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
model Source {
|
||||||
|
id String @id
|
||||||
|
locale String
|
||||||
|
pronouns String
|
||||||
|
type String
|
||||||
|
author String?
|
||||||
|
title String
|
||||||
|
extra String?
|
||||||
|
year Int?
|
||||||
|
fragments String
|
||||||
|
comment String?
|
||||||
|
link String?
|
||||||
|
submitter_id String?
|
||||||
|
approved Int? @default(0)
|
||||||
|
deleted Int? @default(0)
|
||||||
|
base_id String?
|
||||||
|
key String?
|
||||||
|
images String?
|
||||||
|
spoiler Int @default(0)
|
||||||
|
users User? @relation(fields: [submitter_id], references: [id], onUpdate: NoAction)
|
||||||
|
|
||||||
|
@@index([locale], map: "sources_locale")
|
||||||
|
@@map("sources")
|
||||||
|
}
|
||||||
|
|
||||||
|
model Stat {
|
||||||
|
id String
|
||||||
|
locale String
|
||||||
|
users Int
|
||||||
|
data String
|
||||||
|
|
||||||
|
@@id([id, locale])
|
||||||
|
@@map("stats")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client.
|
||||||
|
model SubscriptionMessage {
|
||||||
|
id String? @id
|
||||||
|
subscription_id String
|
||||||
|
campaign String
|
||||||
|
|
||||||
|
@@map("subscription_messages")
|
||||||
|
@@ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
model Term {
|
||||||
|
id String @id
|
||||||
|
term String
|
||||||
|
original String?
|
||||||
|
definition String
|
||||||
|
locale String
|
||||||
|
approved Int
|
||||||
|
base_id String?
|
||||||
|
author_id String?
|
||||||
|
deleted Int @default(0)
|
||||||
|
flags String @default("[]")
|
||||||
|
category String?
|
||||||
|
images String @default("")
|
||||||
|
key String?
|
||||||
|
users User? @relation(fields: [author_id], references: [id], onUpdate: NoAction)
|
||||||
|
|
||||||
|
@@index([term], map: "terms_term")
|
||||||
|
@@index([locale], map: "terms_locale")
|
||||||
|
@@map("terms")
|
||||||
|
}
|
||||||
|
|
||||||
|
model UserConnection {
|
||||||
|
id String @id
|
||||||
|
from_profileId String
|
||||||
|
to_userId String
|
||||||
|
relationship String
|
||||||
|
users User @relation(fields: [to_userId], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
||||||
|
profiles Profile @relation(fields: [from_profileId], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
||||||
|
|
||||||
|
@@index([to_userId], map: "user_connections_to_userId")
|
||||||
|
@@index([from_profileId], map: "user_connections_from_profileId")
|
||||||
|
@@map("user_connections")
|
||||||
|
}
|
||||||
|
|
||||||
|
model UserMessage {
|
||||||
|
id String @id
|
||||||
|
userId String
|
||||||
|
adminId String
|
||||||
|
message String
|
||||||
|
|
||||||
|
@@map("user_messages")
|
||||||
|
}
|
||||||
|
|
||||||
|
model User {
|
||||||
|
id String @id
|
||||||
|
username String @unique(map: "users_username")
|
||||||
|
email String @unique(map: "users_email")
|
||||||
|
roles String
|
||||||
|
avatarSource String?
|
||||||
|
bannedReason String?
|
||||||
|
suspiciousChecked Unsupported("tinyint") @default(dbgenerated("0"))
|
||||||
|
usernameNorm String? @unique(map: "users_usernameNorm")
|
||||||
|
bannedTerms String?
|
||||||
|
bannedBy String?
|
||||||
|
lastActive Int?
|
||||||
|
banSnapshot String?
|
||||||
|
inactiveWarning Int?
|
||||||
|
adminNotifications Int @default(7)
|
||||||
|
loginAttempts String?
|
||||||
|
timesheets String?
|
||||||
|
socialLookup Int @default(0)
|
||||||
|
authenticators Authenticator[]
|
||||||
|
ban_proposals_ban_proposals_bannedByTousers BanProposal[] @relation("ban_proposals_bannedByTousers")
|
||||||
|
ban_proposals_ban_proposals_userIdTousers BanProposal[] @relation("ban_proposals_userIdTousers")
|
||||||
|
inclusive Inclusive[]
|
||||||
|
nouns Noun[]
|
||||||
|
profiles Profile[]
|
||||||
|
reports_reports_reporterIdTousers Report[] @relation("reports_reporterIdTousers")
|
||||||
|
reports_reports_userIdTousers Report[] @relation("reports_userIdTousers")
|
||||||
|
social_lookup SocialLookup[] @ignore
|
||||||
|
sources Source[]
|
||||||
|
terms Term[]
|
||||||
|
user_connections UserConnection[]
|
||||||
|
|
||||||
|
@@map("users")
|
||||||
|
}
|
@ -22,6 +22,9 @@ export interface Config {
|
|||||||
host: string;
|
host: string;
|
||||||
port: number;
|
port: number;
|
||||||
};
|
};
|
||||||
|
database: {
|
||||||
|
url: string;
|
||||||
|
}
|
||||||
security: {
|
security: {
|
||||||
secret: string;
|
secret: string;
|
||||||
};
|
};
|
||||||
@ -86,6 +89,9 @@ export function loadConfigFromEnv(): Config {
|
|||||||
host: envVarOrDefault("HTTP_HOST", identity, "0.0.0.0"),
|
host: envVarOrDefault("HTTP_HOST", identity, "0.0.0.0"),
|
||||||
port: envVarOrDefault("HTTP_PORT", parseInteger, 4000),
|
port: envVarOrDefault("HTTP_PORT", parseInteger, 4000),
|
||||||
},
|
},
|
||||||
|
database: {
|
||||||
|
url: envVarNotNull("DATABASE_URL", identity),
|
||||||
|
},
|
||||||
security: {
|
security: {
|
||||||
secret: envVarNotNull("SECURITY_SECRET", identity),
|
secret: envVarNotNull("SECURITY_SECRET", identity),
|
||||||
},
|
},
|
||||||
|
36
new/pnpm-lock.yaml
generated
36
new/pnpm-lock.yaml
generated
@ -32,6 +32,9 @@ importers:
|
|||||||
'@fastify/type-provider-typebox':
|
'@fastify/type-provider-typebox':
|
||||||
specifier: ^3.5.0
|
specifier: ^3.5.0
|
||||||
version: 3.5.0(@sinclair/typebox@0.31.14)
|
version: 3.5.0(@sinclair/typebox@0.31.14)
|
||||||
|
'@prisma/client':
|
||||||
|
specifier: 5.3.1
|
||||||
|
version: 5.3.1(prisma@5.3.1)
|
||||||
'@pronounspage/common':
|
'@pronounspage/common':
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../common
|
version: link:../common
|
||||||
@ -63,6 +66,9 @@ importers:
|
|||||||
pino-pretty:
|
pino-pretty:
|
||||||
specifier: ^10.2.0
|
specifier: ^10.2.0
|
||||||
version: 10.2.0
|
version: 10.2.0
|
||||||
|
prisma:
|
||||||
|
specifier: ^5.3.1
|
||||||
|
version: 5.3.1
|
||||||
rimraf:
|
rimraf:
|
||||||
specifier: ^5.0.1
|
specifier: ^5.0.1
|
||||||
version: 5.0.1
|
version: 5.0.1
|
||||||
@ -220,6 +226,28 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
/@prisma/client@5.3.1(prisma@5.3.1):
|
||||||
|
resolution: {integrity: sha512-ArOKjHwdFZIe1cGU56oIfy7wRuTn0FfZjGuU/AjgEBOQh+4rDkB6nF+AGHP8KaVpkBIiHGPQh3IpwQ3xDMdO0Q==}
|
||||||
|
engines: {node: '>=16.13'}
|
||||||
|
requiresBuild: true
|
||||||
|
peerDependencies:
|
||||||
|
prisma: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
prisma:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
'@prisma/engines-version': 5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59
|
||||||
|
prisma: 5.3.1
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@prisma/engines-version@5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59:
|
||||||
|
resolution: {integrity: sha512-y5qbUi3ql2Xg7XraqcXEdMHh0MocBfnBzDn5GbV1xk23S3Mq8MGs+VjacTNiBh3dtEdUERCrUUG7Z3QaJ+h79w==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@prisma/engines@5.3.1:
|
||||||
|
resolution: {integrity: sha512-6QkILNyfeeN67BNEPEtkgh3Xo2tm6D7V+UhrkBbRHqKw9CTaz/vvTP/ROwYSP/3JT2MtIutZm/EnhxUiuOPVDA==}
|
||||||
|
requiresBuild: true
|
||||||
|
|
||||||
/@sinclair/typebox@0.31.14:
|
/@sinclair/typebox@0.31.14:
|
||||||
resolution: {integrity: sha512-2spk0ie6J/4r+nwb55OtBXUn5cZLF9S98fopIjuutBVoq8yLRNh+h8QvMkCjMu5gWBMnnZ/PUSXeHE3xGBPKLQ==}
|
resolution: {integrity: sha512-2spk0ie6J/4r+nwb55OtBXUn5cZLF9S98fopIjuutBVoq8yLRNh+h8QvMkCjMu5gWBMnnZ/PUSXeHE3xGBPKLQ==}
|
||||||
dev: false
|
dev: false
|
||||||
@ -1844,6 +1872,14 @@ packages:
|
|||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/prisma@5.3.1:
|
||||||
|
resolution: {integrity: sha512-Wp2msQIlMPHe+5k5Od6xnsI/WNG7UJGgFUJgqv/ygc7kOECZapcSz/iU4NIEzISs3H1W9sFLjAPbg/gOqqtB7A==}
|
||||||
|
engines: {node: '>=16.13'}
|
||||||
|
hasBin: true
|
||||||
|
requiresBuild: true
|
||||||
|
dependencies:
|
||||||
|
'@prisma/engines': 5.3.1
|
||||||
|
|
||||||
/process-warning@2.2.0:
|
/process-warning@2.2.0:
|
||||||
resolution: {integrity: sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==}
|
resolution: {integrity: sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==}
|
||||||
dev: false
|
dev: false
|
||||||
|
Loading…
x
Reference in New Issue
Block a user