diff --git a/backend/db/Dockerfile b/backend/db/Dockerfile index e69de29..6c9e911 100644 --- a/backend/db/Dockerfile +++ b/backend/db/Dockerfile @@ -0,0 +1,4 @@ +FROM postgres:15 + +RUN mkdir /docker-entrypoint-initdb.d +COPY createSchema.sql /docker-entrypoint-initdb.d \ No newline at end of file diff --git a/backend/db/createSchema.sql b/backend/db/createSchema.sql new file mode 100644 index 0000000..0041f5f --- /dev/null +++ b/backend/db/createSchema.sql @@ -0,0 +1,39 @@ +CREATE TABLE "user" ( + username VARCHAR(32) PRIMARY KEY +) + +CREATE TABLE game ( + id SERIAL PRIMARY KEY, + score INTEGER NOT NULL, + playtime TIME NOT NULL, + date DATE NOT NULL, + username VARCHAR(32) NOT NULL FOREIGN KEY REFERENCES "user" +) + +CREATE VIEW user_data AS ( + SELECT + username, + max(score) AS highscore, + sum(score) AS total_score, + sum(playtime) AS total_playtime, + avg(score) AS average_score, + count(*) AS games_played + FROM game + GROUP BY username +) + +CREATE VIEW lb_highscore AS ( + SELECT username, max(score) AS highscore FROM game GROUP BY username ORDER BY highscore DESC +) + +CREATE VIEW lb_highscore AS ( + SELECT username, sum(score) AS total_score, FROM game GROUP BY username ORDER BY total_score DESC +) + +CREATE VIEW lb_total_playtime AS ( + SELECT username, sum(playtime) AS total_playtime FROM game GROUP BY username ORDER BY total_playtime DESC +) + +CREATE VIEW lb_average_score AS ( + SELECT username, avg(score) AS average_score FROM game GROUP BY username ORDER BY average_score DESC +) \ No newline at end of file