adjusted readme
This commit is contained in:
		
							parent
							
								
									73ddbaeb6f
								
							
						
					
					
						commit
						b4d1a19926
					
				
							
								
								
									
										160
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										160
									
								
								README.md
									
									
									
									
									
								
							| @ -1,59 +1,73 @@ | |||||||
|  | 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 | # ⏰ ActaTempus: Time Tracking and Management System | ||||||
| 
 | 
 | ||||||
| ## 🌟 Overview | ## 🌟 Overview | ||||||
| 
 | 
 | ||||||
| **ActaTempus** for  work hour management and tracking. In the current state the goal of the project is, to show differences and similarities in functional porgramming.  | **ActaTempus** is a system for work hour management and tracking, showcasing differences and similarities in functional programming using two backend implementations: **Go** and **Dart**.   | ||||||
| Therefore the backend is currently developed in **Go** and **Dart**. The Implementations emphasize functional programming principles leading to a streamlined user experience. | 
 | ||||||
|  | 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 (Long-Term Goals) | ## 🚀 Features | ||||||
| 
 | 
 | ||||||
| ✅ **User Management**: Registration, login, profile updates   | ✅ **User Management**: Registration, login, profile updates   | ||||||
| ✅ **Time Tracking**: Start/stop tracking, manual entries, and break management   | ✅ **Time Tracking**: Start/stop tracking, manual entries, and break management   | ||||||
| ✅ **Project Management**: Create and manage projects, tasks, and time entries   | ✅ **Project Management**: Create and manage projects, tasks, and time entries   | ||||||
| ✅ **Reporting**: Generate daily/weekly reports and export as PDF/CSV   | ✅ **Task Management**: Manage tasks related to projects | ||||||
| ✅ **Role-Based Access Control (RBAC)**: Fine-grained permission system   |  | ||||||
| 
 | 
 | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
| ## 🏗️ Architecture | ## 🏗️ Architecture | ||||||
| 
 | 
 | ||||||
| ActaTempus adheres to **Domain-Driven Design (DDD)** and **Clean Architecture** principles for a scalable and maintainable codebase.   | ActaTempus adheres to **Domain-Driven Design (DDD)** and **Clean Architecture** principles. The system is divided into **four primary layers**: | ||||||
| The system is divided into **four primary layers**:   |  | ||||||
| 
 | 
 | ||||||
| 1️⃣ **Domain Layer**:   | 1️⃣ **Domain Layer**:   | ||||||
|    - Contracts, definitions, and interfaces only.   |    - Contracts, definitions, and core logic.   | ||||||
| 
 | 
 | ||||||
| 2️⃣ **Infrastructure Layer**:   | 2️⃣ **Infrastructure Layer**:   | ||||||
|    - Database and external service integrations (e.g., Prisma with PostgreSQL).   |    - Database integrations and external service interfaces (e.g., Prisma with PostgreSQL).   | ||||||
| 
 | 
 | ||||||
| 3️⃣ **Application Layer**:   | 3️⃣ **Application Layer**:   | ||||||
|    - Business logic, services, and response handling.   |    - Business logic, services, and response handling.   | ||||||
| 
 | 
 | ||||||
| 4️⃣ **Interface Layer**:   | 4️⃣ **Interface Layer**:   | ||||||
|    - External communication interfaces. |    - REST APIs for external communication. | ||||||
| 
 |  | ||||||
|  |  | ||||||
| 
 | 
 | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
| ## 🛠️ Technology Stack | ## 🛠️ Technology Stack | ||||||
| 
 | 
 | ||||||
| ### 🎨 Frontend: | ### ⚙️ Backend | ||||||
| - **Next.js**: React framework for SSR and SPA capabilities |  | ||||||
| - **Deno**: Lightweight, secure runtime for development tooling |  | ||||||
| 
 | 
 | ||||||
| ### ⚙️ Backend: |  | ||||||
| #### Go: | #### Go: | ||||||
| - **Prisma-Go**: PostgreSQL ORM integration with Prisma | - **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: | #### Dart: | ||||||
| - **Prisma-Dart**: PostgreSQL ORM adapter for 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: | ### 📦 Database | ||||||
| - **PostgreSQL**: Primary database | - **PostgreSQL**: Primary database for structured data storage. | ||||||
| - **Prisma**: Shared ORM schema across Dart and Go backends   | - **Prisma ORM**: Shared schema across Go and Dart implementations, providing unified database management.  | ||||||
| 
 | 
 | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
| @ -62,8 +76,7 @@ The system is divided into **four primary layers**: | |||||||
| ``` | ``` | ||||||
| backend-go/         # Go backend implementation | backend-go/         # Go backend implementation | ||||||
| backend-dart/       # Dart backend implementation | backend-dart/       # Dart backend implementation | ||||||
| frontend-next/      # Next.js frontend | docs/               # Documentation, including Insomnia collections | ||||||
| docs/               # Documentation, specs, and design diagrams |  | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| --- | --- | ||||||
| @ -71,13 +84,17 @@ docs/               # Documentation, specs, and design diagrams | |||||||
| ## 📖 Getting Started | ## 📖 Getting Started | ||||||
| 
 | 
 | ||||||
| ### Prerequisites | ### Prerequisites | ||||||
| 
 | For a seamless development experience, use the provided **devcontainer** setup. | ||||||
| All dependencies are bundled with the **devcontainer**. For manual setup, ensure you have:   | Ensure you have the following installed:   | ||||||
| - [Docker](https://www.docker.com/)   | - [Docker](https://www.docker.com/)   | ||||||
| - Node.js   | - [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   | - Go   | ||||||
| - Dart   | - Dart   | ||||||
| - PostgreSQL   | - PostgreSQL   | ||||||
|  | - NodeJS (required for Prisma) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| ### 🔧 Installation | ### 🔧 Installation | ||||||
| 
 | 
 | ||||||
| @ -88,26 +105,15 @@ All dependencies are bundled with the **devcontainer**. For manual setup, ensure | |||||||
|    ``` |    ``` | ||||||
| 
 | 
 | ||||||
| 2. **Use the devcontainer**:   | 2. **Use the devcontainer**:   | ||||||
|    Place the repository on a **Unix-native file system**.   |  | ||||||
|    Otherwise you will experience severe performance issues.  |  | ||||||
|    Launch it with Visual Studio Code: |    Launch it with Visual Studio Code: | ||||||
|    ```bash |    ```bash | ||||||
|    code . |    code . | ||||||
|    ``` |    ``` | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
| ## 🖥️ Running ActaTempus | ## 🖥️ Running ActaTempus | ||||||
| 
 | 
 | ||||||
| ### Frontend |  | ||||||
| 
 |  | ||||||
| ```bash |  | ||||||
| cd frontend-next |  | ||||||
| # Install dependencies (if not using devcontainer) |  | ||||||
| deno task dev # Starts the UI on port 3000 |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| ### Backend (Go) | ### Backend (Go) | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| @ -126,34 +132,30 @@ dart run bin/backend_dart.dart # Starts on port 8080 | |||||||
| 
 | 
 | ||||||
| ### 🗄️ Database Management | ### 🗄️ Database Management | ||||||
| 
 | 
 | ||||||
| ActaTempus uses **Prisma ORM** for database schema management and code generation across both backends. | ActaTempus uses **Prisma ORM** for schema management and code generation across both backends.   | ||||||
| Before the backend can connect you need to start the PostgresSQL server. To make things easier you can launch | Start the PostgreSQL server using the provided `docker-compose.yml`: | ||||||
| Postges with the shipped ```docker-compose.yml```. |  | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| docker compose up | docker compose up | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #### Deploy the Schema | #### Deploy the Schema | ||||||
| You only need to apply the schema with one of the following commands, as both result in the same schema. | Apply the schema using Prisma. Only one backend needs to execute the command, as both backends share the schema: | ||||||
| In case if you want to change the corresponding server edit the ```.env```-file within the backend projects. |  | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| cd backend-dart | cd backend-go | ||||||
| go run github.com/steebchen/prisma-client-go db push # within backend-go | go run github.com/steebchen/prisma-client-go db push | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| or   | or   | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| cd backend-go | cd backend-dart | ||||||
| go run github.com/steebchen/prisma-client-go db push # within backend-go | bunx prisma db push | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| #### Prisma Studio (UI) | #### Prisma Studio | ||||||
| Prisma Studio is WebUI that improves development with Databases as it allows looking right into the data as well as well as altering it. | Launch Prisma Studio for database visualization and management: | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| cd backend-dart | cd backend-dart | ||||||
| @ -161,11 +163,9 @@ bunx prisma studio | |||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ### Code Generation | ### Code Generation | ||||||
| To generate ORM Code for the specifig backend run the following commands. | Regenerate ORM code after modifying the `schema.prisma` file: | ||||||
| This is usually necessary after changes are made to the projects ``schema.prisma``-file. |  | ||||||
| 
 | 
 | ||||||
| ##### Dart | ##### Dart | ||||||
| 
 |  | ||||||
| ```bash | ```bash | ||||||
| cd backend-dart | cd backend-dart | ||||||
| bunx prisma generate | bunx prisma generate | ||||||
| @ -176,10 +176,12 @@ bunx prisma generate | |||||||
| cd backend-go | cd backend-go | ||||||
| go run github.com/steebchen/prisma-client-go generate | go run github.com/steebchen/prisma-client-go generate | ||||||
| ``` | ``` | ||||||
| --- |  | ||||||
| ## ⚠️ Testing |  | ||||||
| ##### Dart |  | ||||||
| 
 | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## ⚠️ Testing | ||||||
|  | 
 | ||||||
|  | ##### Dart | ||||||
| ```bash | ```bash | ||||||
| cd backend-dart | cd backend-dart | ||||||
| dart test | dart test | ||||||
| @ -192,50 +194,16 @@ go test ./... -v | |||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| --- | --- | ||||||
|  | ## 📖 Interaction with the System | ||||||
| 
 | 
 | ||||||
| ## 🔧 Known Issues | 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. | ||||||
| ### 🐛 Browser Extensions and Hydration |  | ||||||
| 
 |  | ||||||
| Some browser extensions (e.g., Grammarly) inject DOM attributes that cause SSR mismatches: |  | ||||||
| - Example: `<data-lt-installed="true">`   |  | ||||||
| - Disable such extensions if issues occur. |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
| 
 | 
 | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
| ## 🛣️ Roadmap |  | ||||||
| 
 |  | ||||||
| ### Phase 1: **Initialize** |  | ||||||
| - ✅ Define specifications   |  | ||||||
| - ✅ Set up repository   |  | ||||||
| 
 |  | ||||||
| ### Phase 2: **Setup** |  | ||||||
| - ✅ Frontend (Next.js, Deno)   |  | ||||||
| - ✅ Backends (Dart & Go)   |  | ||||||
| - ✅ Devcontainer   |  | ||||||
| 
 |  | ||||||
| ### Phase 3: **MVP Development** |  | ||||||
| - Build foundational backends in Go & Dart |  | ||||||
| - Implement:   |  | ||||||
|   - ✅ Domain layer (Entities, Repositories)   |  | ||||||
|   - ✅ Application logic (Services, DTOs, JWT Authentication)   |  | ||||||
|   - ✅ Basic authorization   |  | ||||||
| 
 |  | ||||||
| ### Phase 4: **Web UI** |  | ||||||
| - 🎨 Build frontend for:   |  | ||||||
|   - Timetracking   |  | ||||||
|   - Project management   |  | ||||||
|   - Reporting   |  | ||||||
| 
 |  | ||||||
| --- |  | ||||||
| 
 | 
 | ||||||
| ## 🌐 Resources | ## 🌐 Resources | ||||||
| 
 | 
 | ||||||
| ### Go Programming | - [Functional Programming in Go](https://pkg.go.dev/github.com/IBM/fp-go) | ||||||
| - [The Zen of Go](https://the-zen-of-go.netlify.app/) | - [Dart Documentation](https://dart.dev/) | ||||||
| 
 |  | ||||||
| ### Functional Programming in Go |  | ||||||
| - [IBM FP-Go Documentation](https://pkg.go.dev/github.com/IBM/fp-go) |  | ||||||
| 
 |  | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								docs/media/insomnia2.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/media/insomnia2.gif
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 9.6 MiB | 
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user