commit
e0543c47ae
@ -0,0 +1,27 @@
|
||||
default: start
|
||||
|
||||
clean:
|
||||
@rm -rf .data
|
||||
|
||||
start: .data
|
||||
@docker run -it -d --name=bodytrack-db \
|
||||
-p 5432:5432/tcp \
|
||||
-e POSTGRES_USER=postgres \
|
||||
-e POSTGRES_PASSWORD=admin \
|
||||
-e POSTGRES_DB=bodytrack \
|
||||
-v $$PWD/.data:/var/lib/postgresql/data \
|
||||
-v $$PWD/schema:/docker-entrypoint-initdb.d:ro \
|
||||
-v /etc/passwd:/etc/passwd:ro \
|
||||
-u $$UID:$$UID \
|
||||
postgres:13-alpine
|
||||
|
||||
logs:
|
||||
docker logs bodytrack-db
|
||||
|
||||
stop:
|
||||
@docker rm -f -v bodytrack-db
|
||||
|
||||
.PHONY: clean default start stop
|
||||
|
||||
.data:
|
||||
@mkdir -p .data
|
@ -0,0 +1 @@
|
||||
CREATE TYPE UNIT AS ENUM ('Metric', 'Imperial');
|
@ -0,0 +1,30 @@
|
||||
CREATE SCHEMA Accounts;
|
||||
|
||||
CREATE TABLE Accounts.Users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
email VARCHAR(128) NOT NULL UNIQUE,
|
||||
emailVerificationTs TIMESTAMP DEFAULT NULL,
|
||||
passwordHash VARCHAR(512) NOT NULL
|
||||
);
|
||||
|
||||
|
||||
|
||||
CREATE TABLE Accounts.Profile (
|
||||
userId INT NOT NULL REFERENCES Accounts.Users(id),
|
||||
username VARCHAR(64) NOT NULL,
|
||||
birthdate TIMESTAMP NOT NULL,
|
||||
height DECIMAL NOT NULL,
|
||||
displayUnit UNIT NOT NULL
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE Accounts.UsersAuth (
|
||||
userId INT NOT NULL REFERENCES Accounts.Users(id),
|
||||
tokenHash VARCHAR(512) NOT NULL,
|
||||
device VARCHAR(64) NOT NULL,
|
||||
createdTs TIMESTAMP DEFAULT NOW(),
|
||||
sourceIp VARCHAR(32) DEFAULT NULL
|
||||
);
|
||||
|
||||
|
||||
|
@ -0,0 +1,11 @@
|
||||
CREATE SCHEMA Stats;
|
||||
|
||||
CREATE TABLE Stats.WeightLog (
|
||||
id SERIAL PRIMARY KEY,
|
||||
userId INT NOT NULL REFERENCES Accounts.Users(id),
|
||||
value DECIMAL NOT NULL,
|
||||
recordedTs TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
UNIQUE(userId)
|
||||
);
|
||||
|
||||
|
@ -0,0 +1,11 @@
|
||||
CREATE ROLE api LOGIN PASSWORD 'api-user';
|
||||
|
||||
GRANT SELECT, UPDATE, INSERT ON ALL TABLES IN SCHEMA "accounts" TO api;
|
||||
GRANT USAGE ON SCHEMA "accounts" TO api;
|
||||
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA "accounts" TO api;
|
||||
|
||||
GRANT SELECT, UPDATE, INSERT ON ALL TABLES IN SCHEMA "stats" TO api;
|
||||
GRANT USAGE ON SCHEMA "stats" TO api;
|
||||
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA "stats" TO api;
|
||||
|
||||
|
@ -0,0 +1,15 @@
|
||||
|
||||
INSERT INTO Accounts.Users(email, emailVerificationTs, passwordHash) VALUES ('adam@vdhsn.com', NOW(), 'JDJhJDA0JDlMdVRFek9SQi92RGxucXpYOVZkRWVSQXphR2R2VGZPZGJvYWNMeDhZM2NmUkFRaVFUYkpP');
|
||||
|
||||
INSERT INTO Accounts.Users(email, emailVerificationTs, passwordHash) VALUES ('adam@example.com', NULL, 'JDJhJDA0JDlMdVRFek9SQi92RGxucXpYOVZkRWVSQXphR2R2VGZPZGJvYWNMeDhZM2NmUkFRaVFUYkpP');
|
||||
|
||||
|
||||
INSERT INTO Accounts.Profile (userId, username, birthdate, height, displayUnit)
|
||||
VALUES (1, 'adam', '1990-09-28 5:23:54', 182.88, 'Imperial');
|
||||
|
||||
|
||||
INSERT INTO Accounts.Profile (userId, username, birthdate, height, displayUnit)
|
||||
VALUES (2, 'adam', '1990-09-28 5:23:54', 182.88, 'Imperial');
|
||||
|
||||
|
||||
INSERT INTO Stats.WeightLog (userId, value) VALUES (1, 77.1107);
|
Loading…
Reference in new issue