# Knihovna

## Struktura projektu

Projekt je organizován do několika klíčových částí:

```shell
Knihovna/
│
├── src/ # Zdrojové soubory – zde bude vaše implementace
│ ├── Funkce1.cs
│ ├── Funkce2.cs
│ └── ...
│
├── Database.cs # Definice databázových tabulek a datových modelů
│
├── Program.cs # Hlavní vstupní bod programu (spuštění aplikace)
│
└── docs/ # Dokumentace a zadání pro jednotlivé týmy
├── TymA.md
├── TymB.md
└── ...
```

---

## Popis hlavních souborů

### `./src/`

- každý tým implementuje své funkce **v samostatném souboru**, abychom se vyhnuli git konfliktům
- Například funkci pro vyhledávání knih uložte do souboru `VyhledavaniKnih.cs`.
- Tento přístup zajišťuje přehlednost, modularitu a snadné testování.

> [!IMPORTANT]
> Všechny proměnné se pojmenovávají v angličtině ve stylu PascalCase, to stejné platí pro názvy souborů.

### `Database.cs`

- Obsahuje **definici tabulek** a **datových struktur**, které reprezentují databázi (např. `Knihy`, `Ctenari`, `Vypujcky`).
- Není vhodné měnit strukturu bez předchozí domluvy s ostatními členy týmu, protože soubor je sdílený v rámci celého projektu.

![Databaze](docs/db-erd.svg)

### `Program.cs`

- Slouží jako **hlavní vstupní bod** aplikace.
- Zde se spouští program, načítají data a volají funkce z adresáře `src`.
- Tento soubor zajišťuje propojení všech částí projektu.

---

## Postup při přidávání vaší práce

### Klonování repozitáře

Stáhněte si projekt lokálně pomocí GITu:

```bash
git clone https://gitea.homework.zip/shinya/Knihovna.git
```

Tímto příkazem vytvoříte lokální kopii projektu na vašem počítači.

## Úpravy a implementace

Vytvořte nebo upravte soubory v adresáři ./src/.

Dodržujte strukturu projektu a konvence psaní kódu.

Průběžně testujte své změny (např. pomocí dotnet run).

Pokud nemate dotnet tak docker compose up -d
a docker exec -it knihovna bash
Tam mate prostredi s nainstalovanym dotnetem a vsemi dependencies

## Commit a push

Jakmile máte změny hotové, proveďte následující příkazy:

Dodržujte conventional commits:
https://www.conventionalcommits.org/en/v1.0.0/

Cheatsheet:
https://ashababnoor.github.io/cheatsheets/cheatsheets/conventional-commits

```bash
git add .
git commit -m "feat: funkce vyhledávání knih"
git push
```

Tímto nahrajete změny zpět na server.

Pozor: Před odesláním změn vždy nejprve stáhněte aktuální verzi projektu:

```bash
git pull
```

- a vyřešte případné konflikty, pokud se vyskytnou.

## Zadání projektů

V adresáři ./docs se nachází zadání pro jednotlivé týmy.
Každý tým má svůj vlastní soubor (např. TymA.md, TymB.md), který obsahuje:

- konkrétní popis úkolu,
- technické požadavky,
- a případně hodnoticí kritéria.

## Info

- Přidat, upravit, vypsat, vymazat knihy

- Filtrace knih podle autora atd...
- Počet dostupných výtisků

1. Přidat knihu
2. Upravit knihu
3. Vymazat knihu

- Vyhledávat podle konkrétního specifikovaného parametru
- Vyhledávat podle názvu, autora
- Filtrace podle autora, nakladatelství
- Filtrování na serveru
- Implementace uživatele a jeho výpůjček
- Kniha má maximálně 6/7 autorů

## Práce

1. Struktura databáze
2. Informace z databáze zpracování
3.

## Funkce

- GetBooks() param. filter wrapper function, pick if by name or author
    - GetBooksByAuthor() param. filter
    - GetBooksByName() param. filter
    - GetStolenBooks() param. filter
    - GetAvailableBooks() param. filter
- GetBorrowedBooks() param. userID
- GetBookInfo() param. knihaID
- AddBook() param. KnihaInfo
- RemoveBook() param. knihaID
- EditBook() param. knihaID
- AddAuthor() param. AutorInfo
- EditAuthor() param. AutorID
- AddNakladatelstvi() param. NakladatelstviInfo
- EditNakladatelstvi() param. NakladatelstviID
