mirror of
https://github.com/Danneschs/platbik.git
synced 2026-05-06 17:18:56 +02:00
200 lines
7.0 KiB
Markdown
200 lines
7.0 KiB
Markdown
# Platbík
|
|
|
|
**Autor:** Danneschs
|
|
|
|
Webová aplikace pro správu společných nákupů a vyrovnávání dluhů mezi uživateli.
|
|
|
|
## O aplikaci
|
|
|
|
Platbík je webová aplikace pro evidenci a správu společných nákupů ve skupině lidí (např. spolubydlící, přátelé, rodina). Aplikace umožňuje zaznamenávat nákupy, automaticky počítat dluhy mezi uživateli a spravovat jejich vyrovnání.
|
|
|
|
### Vznik
|
|
Návrh frontendu této aplikace vznikl jako semestrální práce na **Fakultě aplikovaných věd Západočeské univerzity v Plzni** z předmětu Úvod do uživatelských rozhraní (KIV/UUR). Backend byl později dokončen jako semestrální práce z předmětu Základy počítačových sítí (KIV/ZPS) a na aplikaci je dále pracováno v rámci osobního použití.
|
|
|
|
### Hlavní funkce
|
|
|
|
- **Evidence nákupů** — zaznamenávání nákupů s detaily (položky, cena, obchod),
|
|
- **Správa spoluplatitelů** — určení, kdo se na nákupu podílel,
|
|
- **Automatický výpočet dluhů** — systém automaticky počítá, kdo komu dluží,
|
|
- **Závazkové vztahy** — přehled dluhů mezi uživateli,
|
|
- **Historie transakcí** — kompletní historie všech nákupů a vyrovnání,
|
|
- **Notifikace** — upozornění na nové transakce,
|
|
- **Podpora více měn** — nastavitelná měna přes konfiguraci (CZK, EUR).
|
|
|
|
---
|
|
|
|
## Technologie
|
|
|
|
### Backend (C#/.NET)
|
|
| Technologie | Verze |
|
|
|---|---|
|
|
| ASP.NET Core | 10.0 |
|
|
| Entity Framework Core | 9.0.6 |
|
|
| JWT autentizace | 8.0.17 |
|
|
| SQLite | 9.0.6 |
|
|
|
|
### Frontend
|
|
| Technologie | Verze |
|
|
|---|---|
|
|
| React | 19 |
|
|
| Material-UI (MUI) | 7 |
|
|
| MUI X Data Grid | 7 |
|
|
| React Router | 7 |
|
|
| Zustand | 5 |
|
|
| Vite | 6 |
|
|
| **@danneschs/libnik-ui** | **0.1.0** |
|
|
|
|
Frontend využívá sdílenou komponentovou knihovnu **[@danneschs/libnik-ui](https://github.com/Danneschs/libnik-ui)**, která obsahuje obecné UI komponenty (dialogy, tabulky, formuláře, rozložení stránky) opakovaně použitelné napříč projekty.
|
|
|
|
---
|
|
|
|
## Struktura projektu
|
|
|
|
```
|
|
platbik/
|
|
├── src/
|
|
│ ├── backend/ # Backend C#/.NET
|
|
│ │ ├── Controllers/ # API endpointy
|
|
│ │ ├── Models/ # Datové modely
|
|
│ │ ├── Services/ # Business logika
|
|
│ │ ├── DTOs/ # Data Transfer Objects
|
|
│ │ ├── Middleware/ # Middleware komponenty
|
|
│ │ └── Data/ # Databázový kontext a SQLite soubor
|
|
│ └── frontend/ # React aplikace (Vite)
|
|
│ └── src/
|
|
│ ├── Main.jsx # Vstupní bod, ThemeProvider + BrowserRouter
|
|
│ ├── App.jsx # Definice routes
|
|
│ ├── Grid.jsx # Obal stránky (autentizace, navigace, dialogy)
|
|
│ ├── theme.js # MUI theme projektu (barvy, paleta)
|
|
│ ├── styles/ # Globální CSS (výška html/body/#root)
|
|
│ ├── api/ # Komunikace s backendem (fetch funkce)
|
|
│ │ └── wrappers/ # Pomocné obalové funkce
|
|
│ ├── auth/ # Autentizační kontext a komponenty
|
|
│ │ ├── AuthContext.js
|
|
│ │ ├── AuthProvider.jsx
|
|
│ │ └── FullPageSpinner.jsx
|
|
│ ├── config/ # Konfigurace měny (kontext)
|
|
│ ├── bookmarks/ # Stránky aplikace
|
|
│ │ ├── AllPurchases.jsx
|
|
│ │ ├── MyPurchases.jsx
|
|
│ │ ├── MyCommitments.jsx
|
|
│ │ ├── Auth.jsx
|
|
│ │ ├── About.jsx
|
|
│ │ └── NotLogged.jsx
|
|
│ ├── components/
|
|
│ │ ├── dialogs/ # Aplikační dialogy
|
|
│ │ │ ├── EditPurchaseDialog.jsx
|
|
│ │ │ ├── DebtorDetailDialog.jsx
|
|
│ │ │ ├── NotificationsDialog.jsx
|
|
│ │ │ ├── PayDialog.jsx
|
|
│ │ │ └── RegistrationRequestsDialog.jsx
|
|
│ │ └── columns/ # Definice sloupců pro DataGrid
|
|
│ │ ├── getPurchaseColumns.jsx
|
|
│ │ ├── getCommitmentColumns.jsx
|
|
│ │ ├── getItemColumns.jsx
|
|
│ │ ├── getTransactionColumns.jsx
|
|
│ │ ├── EditCellWithTooltip.jsx
|
|
│ │ └── widths/ColumnWidths.js
|
|
│ ├── mappers/ # Transformace dat z API
|
|
│ └── objects/ # DTO a doménové objekty
|
|
└── model/ # Databázový ER diagram
|
|
```
|
|
|
|
---
|
|
|
|
## Instalace a spuštění
|
|
|
|
### Požadavky
|
|
|
|
- .NET SDK 10.0 (pro backend)
|
|
- Node.js a npm (pro frontend)
|
|
|
|
### Backend (C#)
|
|
|
|
```bash
|
|
cd src/backend
|
|
|
|
# Nastavení JWT klíče jako environment variable
|
|
export JWT__Key="váš-tajný-klíč"
|
|
|
|
# Volitelně: nastavení měny (základní je CZK)
|
|
export CURRENCY_CODE="CZK"
|
|
|
|
# Aktualizace databáze
|
|
dotnet ef database update
|
|
|
|
# Spuštění
|
|
dotnet run
|
|
```
|
|
|
|
Backend běží standardně na `http://localhost:5000` nebo `https://localhost:5001`.
|
|
|
|
### Frontend
|
|
|
|
```bash
|
|
cd src/frontend
|
|
|
|
# Instalace závislostí
|
|
npm install
|
|
|
|
# Vývojový server
|
|
npm run dev
|
|
|
|
# Nebo build pro produkci
|
|
npm run build
|
|
```
|
|
|
|
Frontend běží standardně na `http://localhost:5173`.
|
|
|
|
---
|
|
|
|
## Konfigurace
|
|
|
|
### Environment proměnné (pro backend)
|
|
|
|
| Proměnná | Povinná | Popis |
|
|
|---|---|---|
|
|
| `JWT__Key` | ano | Tajný klíč pro podepisování JWT tokenů |
|
|
| `CURRENCY_CODE` | ne | Kód měny (`"CZK"`, `"EUR"`), výchozí `"CZK"` |
|
|
|
|
### Barvy a vzhled
|
|
|
|
Barvy aplikace jsou definovány v `src/frontend/src/theme.js` jako MUI theme. Změnou hodnot v tomto souboru se upraví vzhled celé aplikace — komponenty z `@danneschs/libnik-ui` čtou barvy z `ThemeProvider` tohoto projektu, takže reagují na nastavené téma stejně jako ostatní MUI komponenty.
|
|
|
|
---
|
|
|
|
## API Endpointy
|
|
|
|
### Autentizace
|
|
- `POST /api/auth/register` — registrace nového uživatele
|
|
- `POST /api/auth/login` — přihlášení uživatele
|
|
|
|
### Uživatelé
|
|
- `GET /api/users` — seznam všech uživatelů
|
|
- `GET /api/users/{id}` — detail uživatele
|
|
- `PUT /api/users/{id}` — aktualizace uživatele
|
|
- `DELETE /api/users/{id}` — smazání uživatele
|
|
|
|
### Nákupy
|
|
- `GET /api/purchases` — seznam všech nákupů
|
|
- `GET /api/purchases/{id}` — detail nákupu
|
|
- `POST /api/purchases` — vytvoření nového nákupu
|
|
- `PUT /api/purchases/{id}` — aktualizace nákupu
|
|
- `DELETE /api/purchases/{id}` — smazání nákupu
|
|
|
|
### Závazkové vztahy
|
|
- `GET /api/commitments` — přehled dluhů mezi uživateli
|
|
|
|
### Transakce
|
|
- `GET /api/transaction-logs` — historie transakcí
|
|
- `POST /api/transaction-logs` — vytvoření nové transakce
|
|
|
|
### Konfigurace
|
|
- `GET /api/config` — globální konfigurace aplikace
|
|
- `GET /api/exchange-rates` — aktuální směnné kurzy
|
|
|
|
---
|
|
|
|
## Databázový model
|
|

|