![He's watching you](toby.png)

# Toby

> HR software you love to hate

## Architecture
Directory structure little differs from a standard Laravel tree. We decided to refactor main `app` directory to better suit our needs. All classes are grouped in four major categories:
* `app/Architecture` for all framework-related stuff like service providers, exception handler and more;
* `app/Domain` for all framework-agnostic services related to the business logic of the application;
* `app/Eloquent` for all database/ORM-related classes like models, observers and scopes;
* `app/Infrastructure` for entry points to the application: CLI, HTTP and async ones.

## Local setup
- run `sh setup` or:

> `dcr` is an alias to `docker-compose run --rm -u "$(id -u):$(id -g)"`

- clone the repository
- initialize `.env` file and customize if needed

      cp .env.example .env

- build containers

      docker-compose build --no-cache --pull

- run containers

      docker-compose up -d

- install composer packages

      dcr php composer install

- generate app key

      dcr php php artisan key:generate

- generate storage link

      dcr php php artisan storage:link

- migrate and seed database

      dcr php php artisan migrate --seed

- install npm packages

      dcr node npm install

- build assets

      dcr node npm run dev

- place google credentials here: `/google-credentials.json` ([how to obtain the credentials](https://github.com/spatie/laravel-google-calendar#how-to-obtain-the-credentials-to-communicate-with-google-calendar))

### Available containers (local)

- **web** - nginx HTTP server
- **php** - php and composer stuff
- **node** - npm stuff
- **pgsql** - database for local development
- **mailhog** - for emails preview

### Running tests

If xDebug is installed, set environment variable **XDEBUG_MODE=off** to improve performance

      dcr -e XDEBUG_MODE=off php php artisan test

### Code style check

      dcr php composer cs
      dcr php composer csf
      dcr node npm run lint
      dcr node npm run lintf

### xDebug

* To use xDebug you need to set `DOCKER_INSTALL_XDEBUG` to `true` in `.env` file.
* Then rebuild php container `docker-compose up --build -d php`.
* You can also set up xDebug params (see docs https://xdebug.org/docs/all_settings) in `docker/dev/php/php.ini` file:

Default values for xDebug:

```
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.log_level=0
```

#### Disable xDebug

* It is possible to disable the Xdebug completely by setting the option **xdebug.mode** to **off**, or by setting the environment variable **XDEBUG_MODE=off**.
* See docs: (https://xdebug.org/docs/all_settings#mode)

CLI:

```
XDEBUG_MODE=off php artisan test
```

Docker container:

```
docker-compose run --rm -e XDEBUG_MODE=off php php artisan test
```
