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!');
|
||||
41
flake.nix
Normal file
41
flake.nix
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
description = "chatapp";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
rust-overlay.url = "github:oxalica/rust-overlay";
|
||||
};
|
||||
|
||||
outputs = { nixpkgs, flake-utils, rust-overlay, ... }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
overlays = [ rust-overlay.overlays.default ];
|
||||
pkgs = import nixpkgs { inherit system overlays; };
|
||||
rust = pkgs.rust-bin.stable.latest.default;
|
||||
openssl = pkgs.openssl;
|
||||
in {
|
||||
packages.default = pkgs.rustPlatform.buildRustPackage {
|
||||
pname = "-server";
|
||||
version = "0.1.0";
|
||||
|
||||
src = ./.;
|
||||
cargoLock = { lockFile = ./Cargo.lock; };
|
||||
|
||||
nativeBuildInputs = [ rust pkgs.pkg-config ];
|
||||
|
||||
buildInputs = [ openssl ];
|
||||
|
||||
OPENSSL_LIB_DIR = "${openssl.out}/lib";
|
||||
OPENSSL_INCLUDE_DIR = "${openssl.dev}/include";
|
||||
PKG_CONFIG_PATH = "${openssl.dev}/lib/pkgconfig";
|
||||
};
|
||||
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages =
|
||||
[ rust pkgs.cargo pkgs.rust-analyzer pkgs.pkg-config openssl ];
|
||||
OPENSSL_DIR = openssl.dev;
|
||||
PKG_CONFIG_PATH = "${openssl.dev}/lib/pkgconfig";
|
||||
};
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user