Managing SQL tables in package

This commit is contained in:
Awstin 2025-03-04 07:43:08 -05:00
parent f066aafd6a
commit 2d1efbc179
2 changed files with 46 additions and 2 deletions

36
schema.sql Normal file
View file

@ -0,0 +1,36 @@
DO $$
BEGIN
CREATE TYPE link_type as ENUM ('article', 'blog');
EXCEPTION
WHEN duplicate_object THEN null;
END
$$;
CREATE TABLE IF NOT EXISTS articles (
reference varchar(20) not null,
title varchar(50) not null,
previous varchar(20),
next varchar(20),
description text,
content text not null,
date date not null,
id serial primary key);
CREATE TABLE IF NOT EXISTS links (
url varchar(100) not null,
date_added date not null,
description text,
title text not null,
author varchar(50) not null,
link_type link_type not null,
id serial primary key);
CREATE TABLE IF NOT EXISTS users (
id integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
username text NOT NULL UNIQUE,
password text NOT NULL,
admin boolean NOT NULL);
CREATE TABLE IF NOT EXISTS sessions (
session_token BYTEA PRIMARY KEY,
user_id integer REFERENCES users (id) ON DELETE CASCADE NOT NULL);

View file

@ -1,6 +1,6 @@
#![allow(async_fn_in_trait)] #![allow(async_fn_in_trait)]
use crate::database::article::load_articles; use crate::database::article::load_articles;
use sqlx::PgPool; use sqlx::{Executor, PgPool};
use std::error::Error; use std::error::Error;
use tracing::info; use tracing::info;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
@ -11,7 +11,10 @@ mod errors;
mod html; mod html;
mod macros; mod macros;
pub async fn run_server(pool: PgPool) -> std::io::Result<()> { pub async fn run_server(pool: PgPool) -> Result<(), Box<dyn Error>> {
pool.execute(include_str!("../schema.sql"))
.await?;
tracing_subscriber::registry() tracing_subscriber::registry()
.with( .with(
tracing_subscriber::EnvFilter::try_from_default_env() tracing_subscriber::EnvFilter::try_from_default_env()
@ -19,11 +22,13 @@ pub async fn run_server(pool: PgPool) -> std::io::Result<()> {
) )
.with(tracing_subscriber::fmt::layer()) .with(tracing_subscriber::fmt::layer())
.init(); .init();
info!("initializing router..."); info!("initializing router...");
let port = 21212_u16; let port = 21212_u16;
let addr = std::net::SocketAddr::from(([0, 0, 0, 0], port)); let addr = std::net::SocketAddr::from(([0, 0, 0, 0], port));
let router = html::root::get_router(pool); let router = html::root::get_router(pool);
info!("router initialized, now listening on port {}", port); info!("router initialized, now listening on port {}", port);
match axum::Server::bind(&addr) match axum::Server::bind(&addr)
.serve(router.into_make_service()) .serve(router.into_make_service())
.await .await
@ -35,6 +40,9 @@ pub async fn run_server(pool: PgPool) -> std::io::Result<()> {
} }
pub async fn run_load(pool: &PgPool) -> Result<(), Box<dyn Error>> { pub async fn run_load(pool: &PgPool) -> Result<(), Box<dyn Error>> {
pool.execute(include_str!("../schema.sql"))
.await?;
load_articles(pool).await?; load_articles(pool).await?;
Ok(()) Ok(())
} }