# Company Tool

Mehrprojekt-Struktur für eine firmeninterne Software mit Rust-Backend, PostgreSQL,
Webfrontend und klassischem Desktopclient.

## Projekte

- `backend/`: Rust-Backend mit PostgreSQL-Anbindung und WebSocket-Kommunikation
- `web-frontend/`: Browserbasiertes Frontend mit Vue 3, Vite und TypeScript
- `desktop-client/`: Nativer Client für Linux, Windows und macOS mit egui/eframe
- `shared-protocol/`: Gemeinsame Rust-Typen für Socket-Nachrichten

## Kommunikation

Das Backend stellt einen WebSocket unter `ws://localhost:8080/ws` bereit. Die
Verbindung beginnt mit einem `hello`-Handshake. Danach werden fachliche
Nachrichten als AES-256-GCM-verschlüsselte Envelopes übertragen.

## PostgreSQL starten

Ausführliche Installationsschritte stehen in [INSTALL.md](INSTALL.md).
Betriebsnotizen zu Schlüsseln, E-Mail, Backup und TLS stehen in
[BETRIEB.md](BETRIEB.md).

```bash
cp .env.example .env
docker compose up -d postgres
```

## Backend starten

```bash
cargo run -p companytool-backend
```

## Kommunikation testen

In einem Terminal Backend starten, dann in einem zweiten Terminal:

```bash
COMMUNICATION_TEST_MODE=1 cargo run -p companytool-backend
```

```bash
node scripts/communication-test.mjs
```

Optional gegen eine andere URL:

```bash
node scripts/communication-test.mjs ws://localhost:8080/ws
```

Der Test öffnet zwei Clients, führt den verschlüsselten Handshake aus,
entschlüsselt Snapshots, sendet eine verschlüsselte Ping-Nachricht und prüft, ob
beide Clients ein verschlüsseltes Pong-Event erhalten.

## Webfrontend starten

```bash
cd web-frontend
npm install
npm run dev
```

## Desktopclient starten

```bash
cargo run -p companytool-desktop-client
```

Mit explizitem Backend:

```bash
cargo run -p companytool-desktop-client -- --api-url http://127.0.0.1:8080 --ws-url ws://127.0.0.1:8080/ws
```
