# Heisenberg Serverless

Database Naming Conventions
-----------------------------
Everything lowercase!!
Table names should be singular ie. company not companies
Fields should be snake case ie. company_name not companyName and should be no longer than two words if possible
Foreign key column must have a table name with their primary key ie. user_id represents a foreign key to the user table.

Serverless Setup
--------------------------------------------

Installation
--------

If using powershell, remove sls alias before using `sls`, or use `serverless` instead of `sls`.

```ps
# This only removes it for one session, you can add it to your profile if you want.
Remove-Item alias:sls
```

Install [AWS CLI](https://aws.amazon.com/cli/)

```ps
aws configure
```

```ps
npm install -g serverless
cd re-mind-serverless/
npm ci
# Now can run SLS from this folder (specify full path to config files)
# You don't need to specify --aws-profile unless you have named profiles setup.
```

Order of Deployment

01 - base.yml
02 - network.yml
03 - cognito.yml
04 - database.yml
serverless.layers.yml
serverless.authorizers.yml
05 - api-gateway.yml
.... other functions

configure your aws profile credentials (aws cli)

Serverless Deployment
--------------------------------------------

Package
--------
sls --aws-profile {aws_profile} --stage dev --region eu-west-1 --config {yml file} package

Deploy
-------
sls --aws-profile {aws_profile} --stage dev --region eu-west-1 --config {yml file} --package .serverless deploy

Deploy Single Function
----------------------
sls --aws-profile {aws_profile} --stage dev --region eu-west-1 --config {yml file} deploy function -f {functionName}


Test Lambda Locally
------------------------------------------------------

Change your imports to point to the layers locally like so:

require('../../../../../layers/database/nodejs/database');
const { getResponseFormat } = require('../../../../../layers/general-utils/nodejs/general-utils');
const { Category } = require('../../../../../layers/database/nodejs/models');

Then

serverless invoke local --function functionName -p pathToJSON