aocdata 0.1.0

gRPC server interface to database that serves AOC puzzle dataset requests.
Documentation
# Aocdata

Aocdata provides data service i.e. datasets for [Advent Of Code](https://adventofcode.com) puzzles.
The service, the request format, and the response format are specified in [`aocdata.proto`](proto/aocdata.proto) file following the [Proto3](https://protobuf.dev/programming-guides/proto3) language guide.

# Setup
```
$ git clone https://gitlab.com/labcycle/aocdata.git
$ cd aocdata
```
The below commands simulate the database and the server through container images.
Replace `podman` with `docker` in the following commands to build and run images. NOTE: The `build` and `run` commands have NOT been tested using `docker`.

## Setup Postgresql database
This database holds datasets of the puzzles. If the database is already setup, skip to [Setup Aocdata server](#setup-aocdata-server) section.

NOTE: An example database holding sample datasets is set up below. For more extensive datasets, a new database with datasets should to be set up.

```
$ podman build -t aocdb -f ./db/Containerfile
$ podman run -dt --name aocdb_container -p 54320:5432 -e POSTGRES_PASSWORD="aocpg" aocdb 
``` 

## Setup Aocdata server
Postgresql database URL must be provided as an environment variable `AOC_DB_URL` to the container. e.g. `AOC_DB_URL="postgres://postgres:aocpg@localhost:54320/aoc"`.

```
$ podman build -t aocdata -f ./Containerfile
$ podman run -dt --name aocdata_container -p 31370:3137 -e AOC_DB_URL=__PostgresDbUrl__ aocdata
```

# How does it work
- Once the server is started, data can be requested using gRPC call using the unary RPC `GetData` and client-side `DataRequest` mentioning the year and day fields.
- The data response is sent as an optional string.
- The dataset string is queried from a Postgresql database (Thus, the database must be running as long as the server is taking requests).