# Backend Architecture (Go)

**Note:** This document describes a *conceptual* architecture and is not a final, binding requirement.

The backend is written in Go using idiomatic Go patterns. While initially following Clean Architecture and DDD principles, we've adapted to a more pragmatic approach that better fits Go's conventions and reduces boilerplate code.

## Project Structure
```
timetracker-backend/
├── cmd/                               # Einstiegspunkte
│   ├── api/
│   │   └── main.go
│   └── worker/
│       └── main.go
├── internal/                          # Interner Code
│   ├── domain/                        # Domain Layer (DDD)
│   │   ├── entities/                  # Domain Entitäten
│   │   │   ├── user.go
│   │   │   ├── company.go
│   │   │   ├── project.go
│   │   │   ├── timeentry.go
│   │   │   ├── customer.go
│   │   │   ├── activity.go
│   │   │   ├── sprint.go
│   │   │   ├── task.go
│   │   │   └── kanban.go
│   │   ├── repositories/              # Repository Interfaces
│   │   │   ├── user_repository.go
│   │   │   ├── company_repository.go
│   │   │   ├── project_repository.go
│   │   │   ├── timeentry_repository.go
│   │   │   └── ...
│   │   ├── services/                  # Service Interfaces und Implementierungen
│   │   │   ├── auth_service.go
│   │   │   ├── user_service.go
│   │   │   ├── timetracking_service.go
│   │   │   ├── reporting_service.go
│   │   │   └── ...
│   │   └── valueobjects/              # Value Objects
│   │       ├── money.go
│   │       ├── duration.go
│   │       └── ...
│   ├── application/                   # Anwendungsfälle
│   │   ├── auth/                      # Authentication Use Cases
│   │   │   ├── login.go
│   │   │   ├── register.go
│   │   │   └── ...
│   │   ├── timetracking/              # Zeiterfassung Use Cases
│   │   │   ├── create_time_entry.go
│   │   │   ├── update_time_entry.go
│   │   │   ├── list_time_entries.go
│   │   │   └── ...
│   │   ├── projects/                  # Projektverwaltung Use Cases
│   │   │   └── ...
│   │   ├── customers/                 # Kundenverwaltung Use Cases
│   │   │   └── ...
│   │   └── reporting/                 # Berichtswesen Use Cases
│   │       └── ...
│   ├── infrastructure/                # Infrastruktur
│   │   ├── persistence/               # Datenbankzugriff
│   │   │   ├── postgres/              # PostgreSQL Implementierung
│   │   │   │   ├── connection.go
│   │   │   │   ├── user_repository.go
│   │   │   │   ├── company_repository.go
│   │   │   │   └── ...
│   │   │   └── migrations/
│   │   ├── security/                  # Sicherheitsimplementierungen
│   │   │   ├── jwt.go
│   │   │   ├── password.go
│   │   │   └── rbac.go
│   │   ├── messaging/                 # Messaging-Implementierungen
│   │   │   ├── email.go
│   │   │   └── notification.go
│   │   └── external/                  # Externe Dienste
│   │       ├── calendar/
│   │       ├── pdf/
│   │       └── webhook/
│   └── interfaces/                    # Interfaces
│       ├── http/                      # HTTP-API
│       │   ├── handlers/              # API Handler
│       │   │   ├── auth_handler.go
│       │   │   ├── user_handler.go
│       │   │   ├── time_entry_handler.go
│       │   │   └── ...
│       │   ├── middleware/            # Middleware
│       │   │   ├── auth_middleware.go
│       │   │   ├── tenant_middleware.go
│       │   │   ├── logging_middleware.go
│       │   │   └── ...
│       │   ├── dto/                   # Data Transfer Objects
│       │   │   ├── auth_dto.go
│       │   │   ├── user_dto.go
│       │   │   ├── time_entry_dto.go
│       │   │   └── ...
│       │   └── routes/                # API Routes
│       │       └── router.go
│       └── grpc/                      # gRPC-API (Optional für Microservice-Kommunikation)
├── pkg/                               # Öffentliche Pakete
│   ├── functional/                    # FPGO Utilities
│   │   ├── option.go
│   │   ├── result.go
│   │   └── ...
│   ├── validator/                     # Validierung
│   │   └── validator.go
│   ├── logger/                        # Logging
│   │   └── logger.go
│   ├── errors/                        # Fehlerbehandlung
│   │   └── errors.go
│   └── utils/                         # Allgemeine Utilities
│       ├── date.go
│       ├── crypto.go
│       └── ...
├── api/                               # API Definitionen
│   └── swagger/                       # Swagger Dokumentation
│       └── swagger.yaml
├── deployments/                       # Deployment-Konfigurationen
│   ├── docker/
│   │   ├── Dockerfile
│   │   └── docker-compose.yml
│   └── kubernetes/
│       ├── api.yaml
│       └── worker.yaml
├── test/                              # Tests
│   ├── unit/
│   ├── integration/
│   └── e2e/
├── scripts/                           # Skripte
│   ├── migration.sh
│   ├── seed.sh
│   └── ...
├── docu/                              # Projektdokumentation
│   ├── general_overview.md
│   ├── backend_architecture.md
│   ├── frontend_architecture.md
│   ├── database_schema.md
│   ├── security_privacy.md
│   ├── extensibility_integrations.md
│   ├── deployment_devops.md
│   ├── llm_guidance.md
│   └── README.md
├── go.mod
├── go.sum
└── README.md
```
