module main import vweb import db.sqlite import time import os struct App { vweb.Context mut: config shared Config is_admin bool pub mut: db sqlite.DB } fn main() { mut app := &App{} mut app_config := Config{} lock app.config { app.config = load_config() or { panic('Could not load config file: ' + err.msg()) } app_config = app.config.copy() } if !os.exists(app_config.db_path) { println('Creating database file at ' + app_config.db_path) mut file := os.create(app_config.db_path) or { panic(err) } file.close() } app.db = sqlite.connect(app_config.db_path) or { println('Database error!') panic(err) } app.create_tables() // orm does not yet return Results // if sqlite.is_error(sql_code) { // println('Could not create tables!') // panic('Error code ' + sql_code.str()) // } mut host := '::' if app_config.host.len != 0 { host = app_config.host } // Handle graceful shutdown for Docker os.signal_opt(os.Signal.int, app.shutdown) or { panic(err) } os.signal_opt(os.Signal.term, app.shutdown) or { panic(err) } vweb.run_at(app, vweb.RunParams{ host: host port: app_config.port family: .ip6 }) or { panic(err) } } fn (mut app App) shutdown(sig os.Signal) { app.db.close() or { panic(err) } println('Shut down database gracefully') println('Exiting...') time.sleep(1e+9) // Sleep one second exit(0) }