210 lines
5.2 KiB
Markdown
Executable File
210 lines
5.2 KiB
Markdown
Executable File
Here’s the updated and streamlined README, reflecting your changes, including the removal of the frontend and the shift to Insomnia for interaction:
|
||
|
||
---
|
||
|
||
# ⏰ ActaTempus: Time Tracking and Management System
|
||
|
||
## 🌟 Overview
|
||
|
||
**ActaTempus** is a system for work hour management and tracking, showcasing differences and similarities in functional programming using two backend implementations: **Go** and **Dart**.
|
||
|
||
The current focus is backend development, while frontend development has been separated for future hobbyist work. Interaction with the system is facilitated through **Insomnia**, with an Insomnia collection provided in `docs/insomnia`.
|
||
|
||
---
|
||
|
||
## 🚀 Features
|
||
|
||
✅ **User Management**: Registration, login, profile updates
|
||
✅ **Time Tracking**: Start/stop tracking, manual entries, and break management
|
||
✅ **Project Management**: Create and manage projects, tasks, and time entries
|
||
✅ **Task Management**: Manage tasks related to projects
|
||
|
||
---
|
||
|
||
## 🏗️ Architecture
|
||
|
||
ActaTempus adheres to **Domain-Driven Design (DDD)** and **Clean Architecture** principles. The system is divided into **four primary layers**:
|
||
|
||
1️⃣ **Domain Layer**:
|
||
- Contracts, definitions, and core logic.
|
||
|
||
2️⃣ **Infrastructure Layer**:
|
||
- Database integrations and external service interfaces (e.g., Prisma with PostgreSQL).
|
||
|
||
3️⃣ **Application Layer**:
|
||
- Business logic, services, and response handling.
|
||
|
||
4️⃣ **Interface Layer**:
|
||
- REST APIs for external communication.
|
||
|
||
---
|
||
|
||
## 🛠️ Technology Stack
|
||
|
||
### ⚙️ Backend
|
||
|
||
#### Go:
|
||
- **Gin**: HTTP web framework for building REST APIs.
|
||
- **GORM**: PostgreSQL ORM for database interactions.
|
||
- **Prisma-Go**: Schema management and database adapter.
|
||
- **JWT (golang-jwt)**: Authentication and token generation.
|
||
- **fp-go**: Functional programming library for Go.
|
||
- **Viper**: Configuration management.
|
||
- **UUID**: Library for unique identifier generation.
|
||
- **Decimal (shopspring/decimal)**: High-precision decimal arithmetic.
|
||
|
||
#### Dart:
|
||
- **ORM (Drift/Aqueduct)**: Object-relational mapping for database integration.
|
||
- **PostgreSQL**: Database connectivity and query execution.
|
||
- **Shelf**: HTTP server framework.
|
||
- **Shelf Router**: Routing for Shelf applications.
|
||
- **JWT (dart_jsonwebtoken)**: Authentication and token generation.
|
||
- **fpdart**: Functional programming library for Dart.
|
||
- **Riverpod**: State management for the application.
|
||
- **Freezed**: Immutable data classes and sealed classes.
|
||
- **UUID**: Unique identifier generation.
|
||
- **Crypto**: Cryptographic utilities.
|
||
|
||
### 📦 Database
|
||
- **PostgreSQL**: Primary database for structured data storage.
|
||
- **Prisma ORM**: Shared schema across Go and Dart implementations, providing unified database management.
|
||
|
||
---
|
||
|
||
## 📁 Directory Structure
|
||
|
||
```
|
||
backend-go/ # Go backend implementation
|
||
backend-dart/ # Dart backend implementation
|
||
docs/ # Documentation, including Insomnia collections
|
||
```
|
||
|
||
---
|
||
|
||
## 📖 Getting Started
|
||
|
||
### Prerequisites
|
||
For a seamless development experience, use the provided **devcontainer** setup.
|
||
Ensure you have the following installed:
|
||
- [Docker](https://www.docker.com/)
|
||
- [VisualStudioCode](https://code.visualstudio.com/)
|
||
|
||
If you dont want to use devcontainers and/or docker you need to install the following dependencies on your own:
|
||
- Go
|
||
- Dart
|
||
- PostgreSQL
|
||
- NodeJS (required for Prisma)
|
||
|
||
|
||
### 🔧 Installation
|
||
|
||
1. **Clone the repository**:
|
||
```bash
|
||
git clone https://inf-git.th-rosenheim.de/studavrije7683/ws24-kp-avril.git
|
||
cd ws24-kp-avril
|
||
```
|
||
|
||
2. **Use the devcontainer**:
|
||
Launch it with Visual Studio Code:
|
||
```bash
|
||
code .
|
||
```
|
||
|
||
---
|
||
|
||
## 🖥️ Running ActaTempus
|
||
|
||
### Backend (Go)
|
||
|
||
```bash
|
||
cd backend-go
|
||
go run cmd/actatempus/main.go # Starts on port 8080
|
||
```
|
||
|
||
### Backend (Dart)
|
||
|
||
```bash
|
||
cd backend-dart
|
||
dart run bin/backend_dart.dart # Starts on port 8080
|
||
```
|
||
|
||
---
|
||
|
||
### 🗄️ Database Management
|
||
|
||
ActaTempus uses **Prisma ORM** for schema management and code generation across both backends.
|
||
Start the PostgreSQL server using the provided `docker-compose.yml`:
|
||
|
||
```bash
|
||
docker compose up
|
||
```
|
||
|
||
#### Deploy the Schema
|
||
Apply the schema using Prisma. Only one backend needs to execute the command, as both backends share the schema:
|
||
|
||
```bash
|
||
cd backend-go
|
||
go run github.com/steebchen/prisma-client-go db push
|
||
```
|
||
|
||
or
|
||
|
||
```bash
|
||
cd backend-dart
|
||
bunx prisma db push
|
||
```
|
||
|
||
#### Prisma Studio
|
||
Launch Prisma Studio for database visualization and management:
|
||
|
||
```bash
|
||
cd backend-dart
|
||
bunx prisma studio
|
||
```
|
||
|
||
### Code Generation
|
||
Regenerate ORM code after modifying the `schema.prisma` file:
|
||
|
||
##### Dart
|
||
```bash
|
||
cd backend-dart
|
||
bunx prisma generate
|
||
```
|
||
|
||
##### Go
|
||
```bash
|
||
cd backend-go
|
||
go run github.com/steebchen/prisma-client-go generate
|
||
```
|
||
|
||
---
|
||
|
||
## ⚠️ Testing
|
||
|
||
##### Dart
|
||
```bash
|
||
cd backend-dart
|
||
dart test
|
||
```
|
||
|
||
##### Go
|
||
```bash
|
||
cd backend-go
|
||
go test ./... -v
|
||
```
|
||
|
||
---
|
||
## 📖 Interaction with the System
|
||
|
||
Use **[Insomnia](https://insomnia.rest/)** for interacting with the APIs.
|
||
The Insomnia collection is provided under `docs/insomnia`. Import it to get started quickly with predefined requests.
|
||

|
||
|
||
---
|
||
|
||
|
||
## 🌐 Resources
|
||
|
||
- [Functional Programming in Go](https://pkg.go.dev/github.com/IBM/fp-go)
|
||
- [Dart Documentation](https://dart.dev/)
|