# Documentation v1.0.0

We are constantly doing updates on the product and documentation, so please check the online version.

## Installation

1. You need `Node.js (at least 10.x version)` installed on your machine. If you don't have it, you should install it
2. Clone project from github or download an archive
3. `cd` to your downloaded Argon app
4. Install necessary dependencies:

- Via node `npm` package manager - Run `npm install` on the project root
- Via node `yarn` package manager - Run `yarn install` on the project root

## Configuration for PostgreSQL database and Redis data structure store

##### Via Docker

1. Install Docker on your machine
2. Run `docker-compose up -d` in a terminal on the project root. This will start 3 containers:

- database(PostgreSQL) container;
- redis container - required for session management;
- haproxy container - required only for a staging/production setup;

##### Via another chosen solution.

1. Install your PostgreSQL database
2. Install your Redis server
3. Change connection configuration, from your root `cd` to `env-files` folder and change the following configurations with your own:

- For Posgresql connection:

    DATABASE_URL=http://127.0.0.1:5432
                    DATABASE_NAME=creativeTim
                    DATABASE_USER=creativeTim
                    DATABASE_PASSWORD=creativeTim

- For Redis connection:

    REDIS_HOST=localhost
                    REDIS_PORT=6379

## Migrations and Seeds

1. For database tables structure, in project root run: `npm knex migrate:latest` or `yarn knex migrate:latest` if you are using `yarn` as the default package manager
2. To create a default user run: `npm knex seed:run` or `yarn knex seed:run` if you are using `yarn` as the default package manager

## Run the application

1. For starting the application, the following script (defined in `package.json` under `scripts`) must be called

- via npm: `npm run start` or `npm run dev` for starting the development environment, which has livereload enabled;
- via yarn: `yarn start` or `yarn dev` for starting the development environment, which has livereload enabled

## Usage

Register a user or login using admin@argon.com and secret and start testing the preset (make sure to run the migrations and seeders for these credentials to be available).

Besides the dashboard and the auth pages this preset also has an edit profile page. Keep in mind that all the features can be viewed once you login using the credentials provided above or by registering your own user.

## Features

For each feature code `cd` into `features` folder, and you will found a folder for each feature, mostly each folder contain:

- A `routes.js` file that usually contains `GET` and `POST` requests, for eg the profile router looks like this:

    const { wrap } = require('async-middleware');

                    const requestBodyValidation = require('./commands/verify-request-body');
                    const updateUserInfo = require('./commands/update-user-info');

                    const { loadPage } = require('./commands/profile');

                    module.exports = (router, middlewares = []) => {
                      router.get('/profile', middlewares.map(middleware => wrap(middleware)), wrap(loadPage));

                      router.post('/update-profile-info', wrap(requestBodyValidation), wrap(updateUserInfo));

                      return router;
                    };

- A `repository.js` file that contains feature database queries
- A `commands` folder where you can find the all feature functionality functions, for eg the one for login template rendering looks like this:

    function loadPage(req, res) {
                      debug('login:servePage', req, res);
                      res.render('pages/login');
                    }

- A `constants.js` file, to store all your static variables, for eg:

    const USERNAME_PASSWORD_COMBINATION_ERROR = 'These credentials do not match our records.';
                    const INTERNAL_SERVER_ERROR = 'Something went wrong! Please try again.';

All feature routes are mounted in `routes/index.js` from the project root.

## For the Front-end side:

##### Templates

- You can find all the templates in `views` folder where you will find:

1. The `layout.ejs` file, the main template layout.
2. A `pages` folder with all the pages templates
3. A `partials` folder with the common components for eg. header, footer, sidebar

## Change log

Please see the changelog for more information on what has changed recently.

## Credits

- Creative Tim
- Under Development Office

## License

MIT License.

## Screen shots