add db stuff

trunk
Adam Veldhousen 3 years ago
commit e0543c47ae
Signed by: adam
GPG Key ID: 6DB29003C6DD1E4B

@ -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…
Cancel
Save