# Configurations

## DB Config
`config\db.config.ts` 
```
import { DatabaseConfig } from 'mission.core';

export const DbConfig: DatabaseConfig = {
    userName: App.Config.DATABASE_USER_NAME,
    password: App.Config.DATABASE_PASSWORD,
    database: App.Config.DATABASE_NAME,
    options: {
        host: App.Config.DATABASE_HOST_NAME,
        port: App.Config.DATABASE_PORT,
        dialect: App.Config.DATABASE_DIALECT,
        logging: console.warn,
        force: true,
        timezone: '+12:00',
        benchmark: true
    }
};

```
***

## Logger Config
`config\logger.config.ts`

```
import { LoggerOptionList } from 'mission.core';

export const LoggerConfig: {
    StartUpLoggerConfig: LoggerOptionList,
    ExceptionLoggerConfig: LoggerOptionList,
    SqlLoggerConfig: LoggerOptionList
} = {
        StartUpLoggerConfig: [
            {
                Console: {
                    level: 'info',
                    colorize: true,
                    timestamp: true,
                    json: true
                },
                File: {
                    filename: 'startup.log',
                    dirname: App.Config.LOG_FOLDER_PATH,
                    level: 'info',
                    handleExceptions: true,
                    timestamp: true,
                    humanReadableUnhandledException: true,
                    json: false
                }
            }
        ],
        ExceptionLoggerConfig: [
            {
                Console: {
                    level: 'info',
                    colorize: true,
                    timestamp: true,
                    json: true
                },
                DailyRotateFile: {
                    filename: 'exception.log',
                    dirname: App.Config.LOG_FOLDER_PATH,
                    level: 'info',
                    handleExceptions: true,
                    timestamp: true,
                    humanReadableUnhandledException: true,
                    json: false
                }
            }
        ],
        SqlLoggerConfig: [
            {
                Console: {
                    level: 'info',
                    colorize: true,
                    timestamp: true,
                    json: false
                },
                File: {
                    filename: 'sql.log',
                    dirname: App.Config.LOG_FOLDER_PATH,
                    level: 'info',
                    handleExceptions: true,
                    humanReadableUnhandledException: true,
                    json: false
                }
            }
        ]
    };

```
***

## Session Config

`config\session.config.ts`

```
import { SessionOptions } from 'mission.core';
import { WebConfig } from './WebServerConfig';

export const SessionConfig: SessionOptions = {
    secret: App.Config.SESSION_SECRET,
    cookie: {
        secure: WebConfig.isHttpsEnabled,
        maxAge: App.Config.SESSION_MAX_AGE,
        httpOnly: true
    },
    resave: false,
    saveUninitialized: true
};

```
***

## Web Server Config

`config\webserver.config.ts`

```
import { WebServerConfig } from 'mission.core';

export const WebConfig: WebServerConfig = {
    apiPort: App.Config.PORT,
    isHttpsEnabled: !!App.Config.SSL_CERTIFICATE_PATH,
    httpsCertificatepath: App.Config.SSL_CERTIFICATE_PATH,
    httpsKeypath: App.Config.SSL_KEY_PATH,
    staticFileConfig: {
        dotfiles: 'ignore',
        etag: false,
        extensions: ['htm', 'html'],
        index: ['index.html', 'index.htm'],
        maxAge: '1d',
        redirect: false,
        setHeaders: function (res: any, path: string, stat: string) {
            res.set('x-timestamp', Date.now().toString());
        }
    },
    corsOptions: {
        origin: '*',
        methods: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS'],
        allowedHeaders: ['Authorization', 'Origin', 'X-Requested-With', 'Content-Type', 'Accept'],
        exposedHeaders: [],
        credentials: true,
        maxAge: 3600
    },
    webBasePath: App.Config.WEB_APPLICATION_PATH,
    docsBasepath: App.Config.API_DOCUMENT_PATH
};

```
***

## Cache Config
'config\cache.config.ts`

```
import { RedisConfig, } from 'mission.core';
import { RedisStoreOptions } from 'connect-redis';

export const RedisSessionConfig: RedisStoreOptions = {
    host: App.Config.REDIS_HOST_NAME,
    port: App.Config.REDIS_PORT,
    db: 0
};

export const CacheConfig: RedisConfig = {
    host: App.Config.REDIS_HOST_NAME,
    port: App.Config.REDIS_PORT,
    connect_timeout: 60000,
    db: 'cache'
};

```
***

## App Config
`app.config.ts`

```
export const Config = {
    SSL_CERTIFICATE_PATH: '',
    SSL_KEY_PATH: '',
    PORT: this.SSL_CERTIFICATE_PATH ? 443 : 3000,
    DEFAULT_PAGE_SIZE: 50,
    WEB_APPLICATION_PATH: '/www',
    API_DOCUMENT_PATH: '/docs',
    CORS_ENABLED: false,
    /************* Database config **************/
    DATABASE_DIALECT: 'mysql',
    DATABASE_NAME: 'tools',
    DATABASE_USER_NAME: 'root',
    DATABASE_PASSWORD: 'irtt',
    DATABASE_HOST_NAME: 'localhost',
    DATABASE_PORT: 3306,
    /************* Redis config **************/
    REDIS_HOST_NAME: 'localhost',
    REDIS_PORT: 6379,
    REDIS_SSH_PORT: 22,
    /************* Cache config **************/
    CACHE_ENABLED: true,
    CACHE_PROVIDER: 'rediscacheprovider',
    /************* Session config **************/
    SESSION_SECRET: 'SecretKey',
    SESSION_MAX_AGE: 1000 * 60 * 10,
    /************* Email - SMTP config **************/
    SMPT_HOST: 'smtp.gmail.com',
    SMPT_PORT: 465,
    SMTP_SECURE: true, // use SSL
    SMTP_USER: 'user@gmail.com',
    SMTP_PASSWORD: 'mission.api',
    /************* Elasticsearch  config **************/

    /************* Log  config **************/
    LOG_FOLDER_PATH: './logs/',
    STARTUP_LOG_LEVEL: 'error',
    EXCEPTION_LOG_LEVEL: 'error',
    SQL_LOG_LEVEL: 'error',
    LOG_ENABLED: true,
    LOG_LEVEL: 'error',
    LOGGER_NAME: 'ConsoleLogger',
    FALL_BACK_LOGGER_NAME: 'ConsoleLogger',
    INSTRUMENTATION_LOGGER_NAME: 'ConsoleLogger',
    SQL_QUERY_LOGGER_NAME: 'ConsoleLogger',
};

```