Compare commits

...

2 Commits

Author SHA1 Message Date
c5c8f27ae6
Merge pull request #1 from enaut/move-to-sqlx
Move diesel to sqlx
2021-03-21 13:40:34 +01:00
a4d5982e3c
make initial migrations work (no db file exists). 2021-03-21 13:02:55 +01:00
2 changed files with 22 additions and 15 deletions

View File

@ -8,11 +8,10 @@ CREATE TABLE IF NOT EXISTS users (
email VARCHAR NOT NULL, email VARCHAR NOT NULL,
password VARCHAR NOT NULL, password VARCHAR NOT NULL,
role INTEGER DEFAULT 1 NOT NULL, role INTEGER DEFAULT 1 NOT NULL,
UNIQUE(username, email) UNIQUE(username),
UNIQUE(email)
); );
CREATE UNIQUE INDEX ux_username ON users(username);
CREATE TABLE IF NOT EXISTS links ( CREATE TABLE IF NOT EXISTS links (
id INTEGER PRIMARY KEY NOT NULL, id INTEGER PRIMARY KEY NOT NULL,
title VARCHAR NOT NULL, title VARCHAR NOT NULL,

View File

@ -5,6 +5,7 @@ use clap::{
use dotenv::dotenv; use dotenv::dotenv;
use sqlx::{migrate::Migrator, Pool, Sqlite}; use sqlx::{migrate::Migrator, Pool, Sqlite};
use std::{ use std::{
fs::File,
io::{self, BufRead, Write}, io::{self, BufRead, Write},
path::PathBuf, path::PathBuf,
}; };
@ -213,14 +214,16 @@ async fn parse_args_to_config(config: ArgMatches<'_>, log: Logger) -> ServerConf
pub(crate) async fn setup() -> Result<Option<crate::ServerConfig>, ServerError> { pub(crate) async fn setup() -> Result<Option<crate::ServerConfig>, ServerError> {
dotenv().ok(); dotenv().ok();
// initiallize the logger
let decorator = slog_term::TermDecorator::new().build(); let decorator = slog_term::TermDecorator::new().build();
let drain = slog_term::FullFormat::new(decorator).build().fuse(); let drain = slog_term::FullFormat::new(decorator).build().fuse();
let drain = slog_async::Async::new(drain).build().fuse(); let drain = slog_async::Async::new(drain).build().fuse();
let log = slog::Logger::root(drain, slog_o!("name" => "Pslink")); let log = slog::Logger::root(drain, slog_o!("name" => "Pslink"));
// Print launch info
slog_info!(log, "Launching Pslink a 'Private short link generator'"); slog_info!(log, "Launching Pslink a 'Private short link generator'");
slog_info!(log, ".env file setup, logging initialized"); slog_info!(log, "logging initialized");
let app = generate_cli(); let app = generate_cli();
@ -236,6 +239,7 @@ pub(crate) async fn setup() -> Result<Option<crate::ServerConfig>, ServerError>
.parse::<PathBuf>() .parse::<PathBuf>()
.expect("Failed to parse Database path."); .expect("Failed to parse Database path.");
if !db.exists() { if !db.exists() {
if config.subcommand_matches("migrate-database").is_none() {
let msg = format!( let msg = format!(
concat!( concat!(
"Database not found at {}!", "Database not found at {}!",
@ -247,6 +251,10 @@ pub(crate) async fn setup() -> Result<Option<crate::ServerConfig>, ServerError>
slog_error!(log, "{}", msg); slog_error!(log, "{}", msg);
eprintln!("{}", msg); eprintln!("{}", msg);
return Ok(None); return Ok(None);
}
// create an empty database file the if above makes sure that this file does not exist.
File::create(db)?;
}; };
let server_config: crate::ServerConfig = parse_args_to_config(config.clone(), log).await; let server_config: crate::ServerConfig = parse_args_to_config(config.clone(), log).await;