11#ifndef MANTISBASE_APP_H
12#define MANTISBASE_APP_H
18#include <argparse/argparse.hpp>
19#include <dukglue/dukglue.h>
115 [[nodiscard]]
int run();
133 static int quit(
const int& exitCode = 0,
const std::string& reason =
"Something went wrong!");
139 [[nodiscard]]
int port()
const;
156 [[nodiscard]] std::string
host()
const;
167 [[nodiscard]] std::string
publicDir()
const;
178 [[nodiscard]] std::string
dataDir()
const;
202 [[nodiscard]] std::string
dbType()
const;
229 [[nodiscard]] argparse::ArgumentParser&
cmd()
const;
246 [[nodiscard]]
Entity entity(
const std::string& entity_name)
const;
255 [[nodiscard]]
bool hasEntity(
const std::string& entity_name)
const;
258 [[nodiscard]] duk_context*
ctx()
const;
274 [[nodiscard]] std::chrono::time_point<std::chrono::steady_clock>
startTime()
const;
286 void init(
int argc = 0,
char* argv[] = {});
299 void setPoolSize(
const int& pool_size);
307 bool ensureDirsAreCreated()
const;
309#ifdef MANTIS_ENABLE_SCRIPTING
319 void loadStartScript()
const;
326 void loadAndExecuteScript(
const std::string& filePath)
const;
333 void loadScript(
const std::string& relativePath)
const;
335 std::string version_JSWrapper()
const {
return appVersion(); }
336 std::string jwtSecretKey_JSWrapper()
const {
return jwtSecretKey(); }
337 void quit_JSWrapper(
int code,
const std::string& msg);
345 [[nodiscard]] Database* duk_db()
const;
346 [[nodiscard]] Router* duk_router()
const;
350 std::vector<std::string> m_cmdArgs;
353 std::atomic<bool> m_isCreated =
false;
355 std::string m_publicDir;
356 std::string m_dataDir;
357 std::string m_scriptsDir;
358 std::string m_dbType;
361 std::chrono::time_point<std::chrono::steady_clock> m_startTime;
364 std::string m_host =
"127.0.0.1";
367 bool m_toStartServer =
false;
368 bool m_launchAdminPanel =
false;
369 bool m_isDevMode =
false;
371 std::unique_ptr<Logger> m_logger;
372 std::unique_ptr<Database> m_database;
373 std::unique_ptr<RealtimeDB> m_realtime;
374 std::unique_ptr<Router> m_router;
375 std::unique_ptr<KeyValStore> m_kvStore;
376 std::unique_ptr<argparse::ArgumentParser> m_opts;
377 duk_context* m_dukCtx;
Database connection and session management.
Definition database.h:39
Represents a database table/entity with schema and CRUD operations.
Definition entity.h:39
Manages application settings.
Definition kv_store.h:23
MantisBase entry point.
Definition mantisbase.h:40
~MantisBase()
Definition mantisbase.cpp:19
duk_context * ctx() const
Get the duktape context.
Definition mantisbase.cpp:281
static int quit(const int &exitCode=0, const std::string &reason="Something went wrong!")
Quit the running application immediately.
Definition mantisbase.cpp:184
Entity entity(const std::string &entity_name) const
Fetch a table schema encapsulated by an Entity object from given the table name. If table does not ex...
Definition mantisbase.cpp:267
static int appMajorVersion()
Fetch the minor version.
Definition mantisbase.cpp:364
static int appMinorVersion()
Fetch the major version.
Definition mantisbase.cpp:360
argparse::ArgumentParser & cmd() const
Get the commandline parser object.
Definition mantisbase.cpp:248
bool hasEntity(const std::string &entity_name) const
Check if table schema encapsulated by an Entity object from given the table name exists....
Definition mantisbase.cpp:277
bool isDevMode() const
Definition mantisbase.cpp:335
std::string dbType() const
Retrieves the active database type.
Definition mantisbase.cpp:372
int port() const
Retrieve HTTP Listening port.
Definition mantisbase.cpp:376
MantisBase(const MantisBase &)=delete
void setHost(const std::string &host)
Update HTTP Server host address.
Definition mantisbase.cpp:392
void setDataDir(const std::string &dir)
Update the data directory for MantisApp.
Definition mantisbase.cpp:426
int poolSize() const
Retrieve the database pool size value.
Definition mantisbase.cpp:400
RealtimeDB & rt() const
Get the realtime unit (SQLite/PostgreSQL change detection for SSE /api/v1/realtime).
Definition mantisbase.cpp:263
KeyValStore & settings() const
Get the KeyValue unit object.
Definition mantisbase.cpp:256
static MantisBase & create(int argc, char **argv)
Create class instance given cmd args passed in.
Definition mantisbase.cpp:56
int run()
Start the http server and start listening for requests.
Definition mantisbase.cpp:225
std::string publicDir() const
Retrieve the public static file directory.
Definition mantisbase.cpp:411
void setPublicDir(const std::string &dir)
Update HTTP server static file directory.
Definition mantisbase.cpp:415
std::string host() const
Retrieve HTTP Server host address. For instance, a host of 127.0.0.1, 0.0.0.0, etc.
Definition mantisbase.cpp:388
std::chrono::time_point< std::chrono::steady_clock > startTime() const
Get the server start time in std::chrono::
Definition mantisbase.cpp:331
MantisBase & operator=(const MantisBase &)=delete
void setPort(const int &port)
Set a new port value for HTTP server.
Definition mantisbase.cpp:380
static int appPatchVersion()
Fetch the patch version.
Definition mantisbase.cpp:368
Logger & logs() const
Get the logs unit object.
Definition mantisbase.cpp:260
std::string dataDir() const
Retrieves the data directory where SQLite db and files are stored.
Definition mantisbase.cpp:422
static std::string jwtSecretKey()
Retrieve the JWT secret key.
Definition mantisbase.cpp:348
MantisBase(MantisBase &&)=delete
void setScriptsDir(const std::string &dir)
Update the scripts directory for MantisApp.
Definition mantisbase.cpp:437
Router & router() const
Get the router object instance.
Definition mantisbase.cpp:252
std::string scriptsDir() const
Retrieves the scripts directory where JavaScript files are stored used for extending functionality in...
Definition mantisbase.cpp:433
MantisBase & operator=(MantisBase &&)=delete
static MantisBase & instance()
Retrieve existing application instance.
Definition mantisbase.cpp:48
void setDbType(const std::string &dbType)
Definition mantisbase.cpp:339
void close()
Close the application and reset object instances that are dependent on the class.
Definition mantisbase.cpp:195
Database & db() const
Get the database unit object.
Definition mantisbase.cpp:244
static std::string appVersion()
Definition mantisbase.cpp:356
void openBrowserOnStart() const
Launch browser with the admin dashboard page. If all goes well, the default OS browser should open (i...
Definition mantisbase.cpp:285
HTTP router for managing routes and request handling.
Definition router.h:38
Key-value store for application settings.
router.h
Definition auth.h:15
nlohmann::json json
Shorten JSON namespace.
Definition context_store.h:18
Type definitions and aliases for MantisBase.