<h1>Contributions Guide</h1>

<h2>Table of Contents</h2>

- [Introduction](#introduction)
- [Project structure](#project-structure)
  - [Internal](#internal)
  - [Pkg](#pkg)
- [Writing tests](#writing-tests)

***

## Introduction

We propose a quick guide to learn how to contribute.

## Project structure

The main structure of the code base is as follows:

- `charts`: helm chart
- `cmds`: includes the project Golang entrypoints
- `docs`: project documentation
- `internal`: contains the explorer API logic and the cert manager implementation, this where most of the feature work will be done
- `pkg`: contains client implementation and shared libs
- `tests`: integration tests
- `tools`: DB tools to prepare the Postgres DB for testing and development
- `rootfs`: ZOS root endpoint that will be mounted in the docker image

### Internal

- `explorer`: contains the explorer server logic:
  - `db`: the db connection and operations
  - `mw`: defines the generic action mount that will be be used as http handler
- `certmanager`: logic to ensure certificates are available and up to date

`server.go` includes the logic for all the API operations.

### Pkg

- `client`: client implementation
- `types`: defines all the API objects

## Writing tests

Adding a new endpoint should be accompanied with a corresponding test. Ideally every change or bug fix should include a test to ensure the new behavior/fix is working as intended.

Since these are integration tests, you need to first make sure that your local db is already seeded with the ncessary data. See tools [doc](./db_testing.md) for more information about how to prepare your db.

Testing tools offer two clients that are the basic of most tests:

- `local`: this client connects to the local db
- `proxy client`: this client connects to the running local instance

You need to start an instance of the server before running the tests. Check [here](./commands.md) for how to start.