An open API service indexing awesome lists of open source software.

https://github.com/25th-floor/ttrack-server


https://github.com/25th-floor/ttrack-server

Last synced: 3 months ago
JSON representation

Awesome Lists containing this project

README

        

# TTrack Server

[![Build Status](https://travis-ci.org/25th-floor/ttrack-server.svg?branch=master)](https://travis-ci.org/25th-floor/ttrack-server)

A node Time Tracking application server. Needs a Postgres Database and a client.

Dockerhub: https://hub.docker.com/r/25thfloor/ttrack-server/

## Working
### Makefile
Our setups always include a `Makefile` which helps with the setup. Needs Docker!

To see all possible targets just enter `make` to your cli.

Targets:
* `up`: Starts the whole development stack
* `start`: Start the stack in detached mode
* `rm`: remove the development stack

* `yarn`: to call yarn commands in the running development stack like for example `make yarn test` to run the tests.
* `shell`: get a shell within the server container
* `postgres`: get a shell within the postgres container

### Development
Just call `make up` and it will start the node server in development mode and a postgres database instance with some basic database setup.

The node server will expose port `8000` and `8001` while postgres will expose `5432` for development purposes.

### Testing

To test the server code you need a running development environment, therefor you need to call `make up` prior to the tests.

Then just calling `make yarn test` will run the tests using yarn in the server container.

### Production

The Docker Image is located at https://hub.docker.com/r/25thfloor/ttrack-server.

It needs a running Database and can be configured using environment variables.

The needed variables are:
* DB_HOST: `your database hostname`
* DB_DATABASE: `your database name`
* DB_USER: `your database user`
* DB_PASSWORD: `your password`

Additional there are some optional ones too:
* NODE_ENV: `production`
* HOST: `0.0.0.0`
* PORT: `8000`
* DB_DRIVER: `pg`
* DB_PORT: `5432`
* DB_SCHEMA: `public`

One more thing, Sentry has been prepared so if you want to use it you just need to add your token as environment variable.
If you don't use sentry then just ignore the environment variable.
* SENTRY_TOKEN: `your sentry token`

## Documentation
### API
The hapi server uses the swagger plugin to show the rest api documentation.

You can access it while the server is running using `http://localhost:8000/docs`.

### Database functions
There are several functions implemented which do much of the work.

##### Functions for administration that are not used by the code
* **create_user**(firstname text, lastname text, email text, employment_start date, target interval): create a new user and it corresponding target time
* **user_add_new_target_time**(id integer, startdate date, target interval): change target time for a user and also update days and periods.
* **user_get_periods_for_type**(id integer, start_date date, period_type character varying DEFAULT 'Vacation'::character varying): get vacations for given user starting with start_date
* **user_worktime**(id INTEGER, due_date DATE): helper function to analyze the carry calculations in the database for given user

##### Functions used by the code
* **user_calculate_carry_time**(id INTEGER, due_date DATE): calculates carry time for given user
* **user_get_day_periods**(id INTEGER, date_from TIMESTAMP, date_to TIMESTAMP): Return days between the interval for the user including the periods for that time
* **user_get_start_date**(id integer): get first date for a user relevant for ttrack
* **user_get_target_time**(id INTEGER, day_date DATE): get the calculated target time for a user on a given date.
* **ttrack_get_all_vacations**(): get all vacations of all users from now to the beginning of ttrack

##### Helper Functions used by other Functions
* **user_get_average_day_time**(id integer, day_date date): get the average day time of a user, does not check for workdays. (used by user_get_target_time)

## Administration

To setup the users you need to be comfortable using the psql shell and working with the database as there is no Administration Interface, everything is done using pure sql.
The `user` table is your main starting point.

### Add a User

You can use the database function `create_user` to add a user with a target time.

### Change Target Time

Users change their target time for whatever reason. TTrack is able to handle this. You can always change the target time at a specific point in time using the `user_add_new_target_time` database function.

## Contributors

Since because of security concerns we needed to purge the git commit history, here are the contributors of the project.

* Marcus Artner
* Phillip Bisson
* Andreas de Pretis
* Stefan Oestreicher
* Martin Prebio
* Robert Prosenc
* Ali Sharif
* Pierre Strohmeier
* Thomas Subera

## History

It all started as a fun project and never majored of it. It is strictly a tool for tracking our times with our needs. (f.e. Austrian Holidays, no Administration, ...)