# WhereIsMyMoney

Eine moderne Webanwendung zur persönlichen Finanzverwaltung mit umfassenden Funktionen für Transaktionsmanagement und Finanzübersicht.

## Features

### Transaktionsmanagement
- **Vollständige CRUD-Operationen**: Erstellen, Bearbeiten, Löschen von Transaktionen
- **Multi-Edit-Funktionalität**: Mehrere Transaktionen gleichzeitig bearbeiten
- **Multi-Delete-Funktionalität**: Mehrere Transaktionen gleichzeitig löschen
- **Erweiterte Filter**: Nach Datum, Beschreibung, Kategorie, Konto, Typ und Betrag filtern
- **Paginierung**: Übersichtliche Navigation durch große Transaktionslisten
- **Regelmäßige Transaktionen**: Automatische Generierung wiederkehrender Transaktionen

### Konten & Kategorien
- **Bankkonten-Management**: Verwaltung mehrerer Bankkonten mit verschiedenen Typen
- **Depot-Management**: Verwaltung von Investment-Depots verschiedener Broker
- **Kategorien-System**: Flexible Kategorisierung mit Icons für bessere Übersicht
- **Übersicht über Einnahmen und Ausgaben**: Detaillierte Finanzanalyse

### Benutzerfreundlichkeit
- **Responsive Design**: Optimiert für Desktop und Mobile
- **Interaktive Dashboards**: Grafische Darstellung der Finanzdaten mit Chart.js
- **Benutzereinstellungen**: Passwort-Management und Profilverwaltung
- **Session-Management**: Sichere Benutzeranmeldung mit Safari-Kompatibilität

### Technische Features
- **Type-safe Templates**: a-h/templ für sichere HTML-Generierung
- **Moderne Architektur**: GORM für Datenbankoperationen
- **RESTful API**: JSON-basierte Endpunkte für AJAX-Operationen
- **Filter-Persistierung**: URL-Parameter bleiben bei Navigation erhalten

## Technologien

- **Backend**: Go 1.23 mit Gin Framework
- **Templates**: a-h/templ für type-safe HTML Templates
- **Database**: GORM mit SQLite
- **Configuration**: Viper für Konfigurationsmanagement
- **Sessions**: Gorilla Sessions
- **Frontend**: Tailwind CSS

## Installation

1. Repository klonen oder herunterladen
2. In das Projektverzeichnis wechseln:
   ```bash
   cd whereismymoney
   ```
3. Dependencies installieren:
   ```bash
   go mod tidy
   ```
4. Templates generieren:
   ```bash
   templ generate
   ```
5. Server starten:
   ```bash
   go run main.go
   ```
## API Routes

### Authentifizierung
- **Auth**: `/login`, `/register`, `/logout`

### Hauptseiten
- **Dashboard**: `/` (geschützt) - Finanzübersicht mit Grafiken
- **Transaktionen**: `/transactions` (geschützt) - Transaktionsliste mit Filtern
- **Konten**: `/accounts` (geschützt) - Bank- und Depot-Verwaltung
- **Einstellungen**: `/settings` (geschützt) - Benutzereinstellungen

### Transaktions-API
- **GET** `/transactions` - Transaktionsliste mit Paginierung und Filtern
- **POST** `/transactions` - Neue Transaktion erstellen
- **PUT** `/transactions/:id` - Transaktion bearbeiten
- **DELETE** `/transactions/:id` - Transaktion löschen
- **PUT** `/transactions/multi-update` - Mehrere Transaktionen bearbeiten
- **DELETE** `/transactions/multi-delete` - Mehrere Transaktionen löschen

### Recurring Transactions
- **GET** `/recurring` - Regelmäßige Transaktionen anzeigen
- **POST** `/recurring` - Neue regelmäßige Transaktion erstellen
- **PUT** `/recurring/:id` - Regelmäßige Transaktion bearbeiten
- **DELETE** `/recurring/:id` - Regelmäßige Transaktion löschen

6. Browser öffnen: http://localhost:8080

## Entwicklung

### Templates generieren
```bash
templ generate
```

### Server starten
```bash
go run main.go
```

### Build erstellen
```bash
go build -o app .
./app
```

## Konfiguration

Die App verwendet eine `config.yaml` Datei für die Konfiguration:

```yaml
server:
  host: localhost
  port: "8080"

database:
  type: sqlite
  path: "./whereismymoney.db"
```

## Projekt-Struktur

```
whereismymoney/
├── main.go                    # Hauptanwendung mit Routing
├── config.yaml               # Konfigurationsdatei
├── whereismymoney.db         # SQLite Datenbank
├── static/
│   ├── css/
│   │   └── style.css         # Custom CSS
│   └── js/
│       └── dashboard-charts.js # Chart.js Konfiguration
├── internal/
│   ├── config/
│   │   └── config.go         # Konfigurationsverwaltung
│   ├── database/
│   │   └── database.go       # Datenbankverbindung und Migrationen
│   ├── handlers/
│   │   └── handlers.go       # HTTP Handler (Auth, Transaktionen, etc.)
│   ├── models/
│   │   └── models.go         # GORM Modelle (User, Transaction, etc.)
│   └── views/               # Templ Templates
│       ├── layout.templ      # Basis-Layout
│       ├── navigation.templ  # Navigation-Komponente
│       ├── dashboard.templ   # Dashboard mit Grafiken
│       ├── transactions.templ # Transaktionsliste mit Filtern
│       ├── accounts.templ    # Konten-Management
│       ├── recurring.templ   # Regelmäßige Transaktionen
│       ├── settings.templ    # Benutzereinstellungen
│       ├── login.templ       # Login-Seite
│       └── register.templ    # Registrierung
└── README.md                 # Diese Datei
```

## Datenbank-Modelle

### User
- Benutzerauthentifizierung mit bcrypt
- Beziehungen zu Konten, Depots und Transaktionen

### Transaction
- Vollständige Transaktionsdaten (Betrag, Beschreibung, Datum, etc.)
- Verknüpfung zu Benutzern, Kategorien und Konten
- Unterstützung für Ein- und Ausgaben

### RecurringTransaction
- Vorlage für regelmäßige Transaktionen
- Flexible Intervalle (täglich, wöchentlich, monatlich, jährlich)
- Automatische Generierung neuer Transaktionen

### BankAccount & Depot
- Verschiedene Kontotypen (Girokonto, Sparkonto, Kreditkarte)
- Depot-Management für verschiedene Broker
- Saldo-Verfolgung

### Category
- Kategorisierung mit Icons
- Flexible Zuordnung zu Transaktionen
