base service with authentication and user creation
This commit is contained in:
13
db/Dockerfile
Normal file
13
db/Dockerfile
Normal file
@@ -0,0 +1,13 @@
|
||||
FROM docker.io/library/postgres:15
|
||||
|
||||
# Set environment variables
|
||||
ENV POSTGRES_USER=chatapp
|
||||
ENV POSTGRES_PASSWORD=secret
|
||||
ENV POSTGRES_DB=chatapp
|
||||
|
||||
# Copy the initialization SQL script
|
||||
COPY init.sql /docker-entrypoint-initdb.d/
|
||||
COPY mock_data.sql /docker-entrypoint-initdb.d/
|
||||
|
||||
# Expose port 5432
|
||||
EXPOSE 5432
|
||||
26
db/init.sql
Normal file
26
db/init.sql
Normal file
@@ -0,0 +1,26 @@
|
||||
CREATE TABLE IF NOT EXISTS user (
|
||||
id SERIAL PRIMARY KEY,
|
||||
email TEXT UNIQUE,
|
||||
username TEXT NOT NULL UNIQUE,
|
||||
password_hash TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS channel (
|
||||
id SERIAL PRIMARY KEY,
|
||||
owner INT NOT NULL REFERENCES user(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS membership (
|
||||
user INT REFERENCES user(id),
|
||||
channel INT REFERENCES channel(id),
|
||||
PRIMARY KEY (user, channel)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS message (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
sender INT REFERENCES user(id) NOT NULL,
|
||||
channel INT REFERENCES channel(id) NOT NULL,
|
||||
type VARCHAR(32) NOT NULL,
|
||||
content TEXT NOT NULL
|
||||
);
|
||||
24
db/mock_data.sql
Normal file
24
db/mock_data.sql
Normal file
@@ -0,0 +1,24 @@
|
||||
INSERT INTO user (username, password_hash, email) VALUES
|
||||
('alice', '$argon2id$v=19$m=19456,t=2,p=1$W0OzC/dmZQt7/xUJt4E9hA$cYiUC91a5yCQU9tDUadw0FKjUmTRv453cYwu1nfMKUQ', 'alice@example.com'),
|
||||
('bob', '$argon2id$v=19$m=19456,t=2,p=1$1T7VaQps1X5Wj+TJHt8FIQ$/hA7PSITskjELwfNw+s6BvCJmUA4dDDrSGJvDvHx7Kc', 'bob@example.com'),
|
||||
('carol', '$argon2id$v=19$m=19456,t=2,p=1$Kw4Re4lggxzDldu3vNl2PA$6DP4MPftfXI77g8EZRXYmWgcnVnAKLq0dkZOb/eBIC8', 'carol@example.com');
|
||||
|
||||
INSERT INTO channel (owner, name) VALUES
|
||||
(1, 'General Discussion'),
|
||||
(2, 'Tech Talk'),
|
||||
(1, 'Random Memes');
|
||||
|
||||
INSERT INTO membership (user, channel) VALUES
|
||||
(1, 1), -- Alice in General Discussion
|
||||
(2, 1), -- Bob in General Discussion
|
||||
(2, 2), -- Bob in Tech Talk
|
||||
(3, 1), -- Carol in General Discussion
|
||||
(1, 3); -- Alice in Random Memes
|
||||
|
||||
INSERT INTO message (sender, channel, type, content) VALUES
|
||||
(1, 1, 'text', 'Hey everyone, hows it going?'),
|
||||
(2, 1, 'text', 'All good! Just trying to get through some work.'),
|
||||
(3, 1, 'text', 'Hello! How are you guys?'),
|
||||
(2, 2, 'text', 'Anyone seen the new tech updates?'),
|
||||
(1, 3, 'image', 'Heres a funny meme I found!'),
|
||||
(3, 1, 'text', 'I love how active this channel is!');
|
||||
Reference in New Issue
Block a user