Readme update

This commit is contained in:
Zombori Péter
2025-10-08 20:20:05 +02:00
parent 839625fd6b
commit 96ab0f4eee

321
README.md
View File

@@ -1,3 +1,320 @@
# API
# Express API - MariaDB-hez
A Backend REST API-ja a web applikációnak, ami összeköti az adatbázist a frontenddel
A konténerizált NodeJS Express Api, ami a MariaDB adatbázist kiszolgálja.
## Endpointok
### [GET] `/`
Egyszerű health check végpont az API elérhetőségének ellenőrzésére. Nem igényel autentikációt.
> **példa:**
> #### Request Body:
> ```JSON
> {}
> ```
> #### Response:
> ```JSON
> {
> "status": "ok"
> }
> ```
---
### [POST] `/auth`
Bejelentkezés: ellenőrzi, hogy a megadott felhasználónév és jelszó helyes-e, és visszaadja, hogy az illető admin-e.
> **példa:**
> #### Request Body:
> ```JSON
> {
> "authUname": "admin",
> "authPw": "secret"
> }
> ```
> #### Response (sikeres):
> ```JSON
> {
> "ok": true,
> "admin": true,
> "userId": 1
> }
> ```
> #### Response (hibás adatok):
> ```JSON
> {
> "ok": false,
> "admin": false
> }
> ```
---
## Felhasználók (`/users`)
Minden `/users` művelet **admin jogosultságot** igényel. Az admin azonosítása a body-ban küldött `authUname` és `authPw` mezőkkel történik.
### [GET] `/users`
Összes felhasználó listázása (admin szükséges).
> **példa:**
> #### Request Body:
> ```JSON
> {
> "authUname": "admin",
> "authPw": "secret"
> }
> ```
> #### Response:
> ```JSON
> {
> "ok": true,
> "users": [
> { "id": 1, "uname": "admin", "admin": true, "note": "asd" },
> { "id": 2, "uname": "user1", "admin": false, "note": null }
> ]
> }
> ```
### [POST] `/users`
Új felhasználó létrehozása (admin szükséges). A jelszó SHA-256-tal hash-elten kerül tárolásra.
> **példa:**
> #### Request Body:
> ```JSON
> {
> "authUname": "admin",
> "authPw": "secret",
>
> "uname": "ujuser",
> "pw": "valami",
> "admin": false,
> "note": "Megjegyzés"
> }
> ```
> #### Response:
> ```JSON
> {
> "ok": true,
> "id": 3
> }
> ```
### [PATCH] `/users`
Felhasználó módosítása (admin szükséges). Az `id` kötelező; a többi mező opcionális. A `pw`-t plaintext-ben kell küldeni, a szerver hash-eli.
> **példa:**
> #### Request Body:
> ```JSON
> {
> "authUname": "admin",
> "authPw": "secret",
>
> "id": 2,
> "uname": "user2",
> "pw": "ujjelszo",
> "admin": false,
> "note": "Frissített felhasználó"
> }
> ```
> #### Response:
> ```JSON
> {
> "ok": true
> }
> ```
### [DELETE] `/users`
Felhasználó törlése (admin szükséges) az `id` alapján.
> **példa:**
> #### Request Body:
> ```JSON
> {
> "authUname": "admin",
> "authPw": "secret",
> "id": 2
> }
> ```
> #### Response:
> ```JSON
> {
> "ok": true,
> "deleted": 1
> }
> ```
---
## Kontaktok (`/contacts`)
Minden `/contacts` művelet **auth-ot** igényel (bármely létező felhasználó). A body-ban `authUname` és `authPw` szükséges.
### [GET] `/contacts`
Összes kontakt listázása (auth szükséges).
> **példa:**
> #### Request Body:
> ```JSON
> {
> "authUname": "user1",
> "authPw": "secret"
> }
> ```
> #### Response:
> ```JSON
> {
> "ok": true,
> "contacts": [
> { "id": 1, "name": "Teszt Elek", "phone": "+36 30 123 4567", "address": "Budapest", "note": "VIP" }
> ]
> }
> ```
### [POST] `/contacts`
Új kontakt létrehozása (auth szükséges).
> **példa:**
> #### Request Body:
> ```JSON
> {
> "authUname": "user1",
> "authPw": "secret",
> "name": "Teszt Elek",
> "phone": "+36 30 123 4567",
> "address": "Budapest",
> "note": "VIP"
> }
> ```
> #### Response:
> ```JSON
> {
> "ok": true,
> "id": 5
> }
> ```
### [PATCH] `/contacts`
Kontakt módosítása (auth szükséges). Az `id` kötelező; a `name`, `phone`/`phome`, `address`, `note` opcionálisak.
> **példa:**
> #### Request Body:
> ```JSON
> {
> "authUname": "user1",
> "authPw": "secret",
> "id": 5,
> "name": "Teszt Elek Jr.",
> "phone": "+36 70 111 2222",
> "note": "Frissítve"
> }
> ```
> #### Response:
> ```JSON
> {
> "ok": true
> }
> ```
### [DELETE] `/contacts`
Kontakt törlése (auth szükséges) az `id` alapján.
> **példa:**
> #### Request Body:
> ```JSON
> {
> "authUname": "user1",
> "authPw": "secret",
> "id": 5
> }
> ```
> #### Response:
> ```JSON
> {
> "ok": true,
> "deleted": 1
> }
> ```
## Futtatás:
A konténert a `docker-compose.yml` file írja le a `Dockerfile` alapján. Futtatása a következő:
### Indítás
```bash
docker compose up -d
```
> *Bizonyos operációs rendszereken `docker-compose up -d`*.
>
> *Illetve első indításnál `docker compose up -d --build`*
Logokkal való indításhoz a `docker compose logs` használható, folyamatos debug logokért a következő indítóparancs használatos Windows-on:
```bash
docker compose up -d ; docker compose logs -f
```
> Linux alatt `docker compose up -d && docker compose logs -f`
> Vagy `docker-compose up -d && docker-compose logs -f`
### Leállítás
A konténer és hozzá tartozó network leállítása a következővel érhető el:
```bash
docker compose down
```
> *Bizonyos operációs rendszereken `docker-compose down`*
### Linux - *sudo* probléma
Néha Linux alatt - verziótól függően - gyakori probléma az, hogy minden docker és docker compose process *root* alatt fut. Ezért ilyenkör a következő parancsokkat érdemes használni:
```bash
# Indítás:
sudo docker compose up -d
# Logok:
sudo docker compose logs -f
# Indítás - logokkal:
sudo docker compose up -d && sudo docker compose logs -f
# Leállítás:
sudo docker compose down
```
Illetve a *Docker Compose* verziójától függően ugyan ez vonatkozik:
```bash
# Indítás:
sudo docker-compose up -d
# Logok:
sudo docker-compose logs -f
# Indítás - logokkal:
sudo docker-compose up -d && sudo docker-compose logs -f
# Leállítás:
sudo docker-compose down
```
### Windows
A Docker Dekstopot telepítve egyből lejön a `docker compose` parancs, amit cmd-ből, vagy PowerShell-ből tudunk használni, ugyan úgy, mint Linux alatt.
> #### Fontos!
> Fontos, hogy a cmd-t és a PowerShellt is ***adminisztrátorként*** futtassuk!