# Cicer

Cicer is a web based software to manage the stock, purchases and balance of a consumer association. It has being created for the needs of the [Garbanzo Negro](http://garbanzonegro.org).

## Requirements

- Golang >= 1.12
- Node.js

## Deployment

Build a copy using make:

```shell
make build
```

Create a secret for the authentication tokens:

```shell
head -c 21 < /dev/urandom | base64
```

Now you can copy the build folder and the cicer binary to your server and run it like:

```shell
./cicer -assets 'path/to/build' -secret 'scret' -addr ':8000'
```

Instead of flags all the params can be passed as env variables. See the names between `{` and `}` in:

```shell
./cicer -h
```

## Running it for development

To run Cicer in development mode, build and run the backend:

```shell
go build
./cicer
```

And then run the frontend with npm:

```shell
npm start
```

The backend API will be listening on port 8080, while the frontend will be on port 3000.

Open a browser and visit `http://localhost:3000`. You will be able to see any changes you do in the javascript side as you go (the backend side needs recompilation).

## Initialize data

When you run cicer, it will print an authentication token.
Use this token to seed some initial data (such a few users and products):

```shell
./setup.sh the.token.string
```

## Android

Requires android studio to be installed in the system. With it you can build the apk from command line:

```
make apk
```

The built apk will be in `android/app/build/outputs/apk/release/app-release-unsigned.apk`.

Or open android studio to test and build the app:

```
make build
npx cap copy
npx cap open android
```

### sign the apk

To sign the apk you need to have a key generated with:

```
keytool -genkey -v -keystore release.keystore -alias release -keyalg RSA -keysize 2048 -validity 10000
```

And then sign it:

```
apksigner sign --ks ~/release.keystore --out app.apk app-release-unsigned.apk
```