# Time Tracking and Management System

## Overview

The Time Tracking and Management System is a comprehensive web application
designed to manage and track work hours efficiently. The system showcases a
backend developed in both Go and Dart with functional programming principles,
and a React frontend to provide an interactive user experience.

## Features

- User management: Registration, login, profile updates.
- Time tracking: Start/stop time tracking, manual entry, break management.
- Project management: Create and manage projects.
- Reporting: Generate daily/weekly reports and export as PDF/CSV.
- Real-time updates using WebSockets.
- Role-based access control (RBAC) with a permission system.

## Architecture

The project follows Domain-Driven Design (DDD) and Clean Architecture principles
to ensure a modular, maintainable, and scalable codebase. The system is
structured into well-defined layers with separation of concerns.

### Technology Stack

- **Frontend**: React, Axios/Fetch API, WebSockets, Styled Components.
- **Backend (Go)**:
  - GORM for ORM, `go-redis` for caching.
  - `gorilla/websocket` and `gorilla/mux` for WebSocket and HTTP handling.
- **Backend (Dart)**:
  - `drift` or `aqueduct` for ORM, `redis_client` for Redis integration.
  - `shelf_web_socket` for WebSocket handling.
- **Databases**: PostgreSQL for primary data storage, Redis for caching and
  real-time updates.

## Directory Structure

- `backend-go/`: Go backend implementation.
- `backend-dart/`: Dart backend implementation.
- `frontend-react/`: React frontend implementation.
- `docs/`: Documentation files, including LaTeX source for specifications and
  design diagrams.

## Getting Started

### Prerequisites

- Node.js (for the React frontend)
- Go (for the Go backend)
- Dart (for the Dart backend)
- PostgreSQL and Redis servers

### Installation

1. **Clone the repository**:
   ```bash
   git clone https://inf-git.th-rosenheim.de/studavrije7683/ws24-kp-avril.git
   cd ws24-kp-avril
   ```

#### Requirements

- PNPM: npm install -g pnpm

### Run Software

You can start developing and hacking by starting the dev container. Besides that
you can also install the dev environment on your host system. Make sure versions
do match.

## Frontend

```bash
cd frontend-react
deno install # devcontainer does this for you
deno run dev # starts web ui on port 3000
```

## Go-Backend

```bash
cd backend-go
go run cmd/actatempus/main.go # Backend on port 8080
```

## Dart-Backend

```bash
cd backend-dart
dart run bin/backend_dart.dart # Backend on port 8080
```

# Known Issues

## Hydration issue caused by browser extensions

Some browserextensions inject js code. This leads to a mismatch between the ssr
and the client rendered version. In case of grammerly, you can see that some
attribute was injected in the dom `data-lt-installed="true"`
![alt text](docs/media/image.png)
