[Intum](https://intum.pl/pomoc.md) / [Noe AI](https://intum.pl/pomoc/noe-ai.md)

# [Bazy danych](https://intum.pl/pomoc/noe-ai/bazy-danych.md) | [API](#api)

Bazy danych Noe to elastyczne bazy przechowujące dane w formacie JSON - bez migracji i bez czekania na programistę. Idealne jako zaplecze aplikacji Noe: apka zapisuje i czyta z bazy, a Ty widzisz wszystkie rekordy w panelu. Znajdziesz je w menu **Noe AI → Bazy danych**; przycisk **AI** obok listy pozwala zbudować lub zmienić bazę poleceniem tekstowym.

## Schemat definiujesz sam

Każda baza ma własny zestaw pól - dodajesz je w kreatorze schematu na formatce (albo edytujesz surowy JSON). Dostępne typy:

- **string** - krótki tekst
- **text** - dłuższy tekst
- **integer** - liczba całkowita
- **number** - liczba zmiennoprzecinkowa
- **boolean** - tak/nie
- **datetime** / **date** / **time** - data i czas

Pole możesz oznaczyć jako wymagane, a najczęściej wyszukiwane pola wskazać do indeksowania (do 3 tekstowych, 2 liczbowych i 2 datowych) - wyszukiwanie po nich jest wtedy szybkie nawet przy dużej liczbie rekordów.

## Rekordy

Zawartość bazy przeglądasz przyciskiem **Rekordy** na stronie bazy - każdy rekord ma też datę utworzenia i autora. Do szybkiego przeszukiwania służy **Search** (fraza, filtry po polach, sortowanie).

## Publiczne metody - baza jako zaplecze aplikacji

W polu **Metody publiczne** możesz wystawić wybrane operacje (lista, dodanie, edycja, usunięcie, wyszukiwanie) tak, żeby aplikacja Noe korzystała z nich wprost z przeglądarki, bez logowania i bez tokenów w kodzie. Masz przy tym pełną kontrolę po stronie serwera:

- **allowed_fields** - tylko wymienione pola przyjdą z aplikacji, reszta jest ignorowana
- **required_fields** - bez tych pól zapis się nie powiedzie
- **default_values** - wartości dopisywane automatycznie (np. status "nowy")
- **auto_fields** - pola wypełniane przez serwer: adres IP piszącego (`{ip}`), identyfikator przeglądarki (`{cookie_key}`), a dla zalogowanych też `{user_id}` i `{user_name}` - użytkownik aplikacji nie może ich podrobić
- **scope_by** - każdy widzi tylko swoje rekordy (np. po IP albo po identyfikatorze przeglądarki)

## Powiązanie z aplikacją

Bazę możesz przypiąć do aplikacji Noe (pole **Aplikacja** na formatce) - powiązanie widać potem na stronie bazy i na stronie aplikacji w sekcji "Powiązania". Jedną bazę może współdzielić kilka aplikacji.


---

## API

### Ogólne API

# Intum API

Dokumentacja API platformy [Intum](https://intum.pl) - system operacyjny firmy.

## Host

Host jest zawsze taki sam jak adres konta: `xxxx.intum.com` lub `xxx.intum.pl` (w zależności od ustawień konta)

## Autoryzacja

Wszystkie requesty API wymagają `api_token`:
- header: `Authorization: Bearer TOKEN`

Token możesz wygenerować w **Ustawienia Konta** → **Tokeny API**

# Bazy danych Noe — API

**Autoryzacja:** `Authorization: Bearer TOKEN`
**Content-Type:** `application/json`

## Endpoints bazy

| Metoda | Ścieżka | Opis |
|--------|---------|------|
| GET | `/noe/dbs.json` | Lista baz |
| GET | `/noe/dbs/:id.json` | Szczegóły bazy |
| POST | `/noe/dbs.json` | Utworzenie bazy |
| PATCH | `/noe/dbs/:id.json` | Aktualizacja bazy |
| DELETE | `/noe/dbs/:id.json` | Usunięcie bazy |
| GET | `/noe/dbs/:id/search.json` | Wyszukiwanie rekordów |

## Pola bazy

| Pole | Typ | Wymagane | Opis |
|------|-----|----------|------|
| `name` | string | tak | Nazwa bazy |
| `code` | string | tak | Kod unikalny (per konto) |
| `schema` | jsonb | tak | Definicja struktury danych |
| `public_methods` | jsonb | nie | Konfiguracja publicznych metod |

## Format schema

```json
{
  "fields": {
    "title": { "type": "string", "required": true },
    "done": { "type": "integer" },
    "created": { "type": "datetime" }
  },
  "indexes": {
    "idx_str_1": "title",
    "idx_int_1": "done",
    "idx_time_1": "created"
  }
}
```

Typy pól: `string`, `text`, `integer`, `number`, `boolean`, `datetime`, `date`, `time`

Indeksy: `idx_str_1`-`idx_str_3` (string), `idx_int_1`-`idx_int_2` (bigint), `idx_time_1`-`idx_time_2` (datetime)

## POST — Utworzenie bazy

```json
POST /noe/dbs.json

{
  "db": {
    "name": "Todo",
    "code": "todo",
    "schema": {
      "fields": {
        "title": { "type": "string", "required": true },
        "done": { "type": "integer" }
      },
      "indexes": {
        "idx_str_1": "title",
        "idx_int_1": "done"
      }
    }
  }
}
```

## Endpoints rekordów

| Metoda | Ścieżka | Opis |
|--------|---------|------|
| GET | `/noe/dbs/:db_id/records.json` | Lista rekordów |
| GET | `/noe/dbs/:db_id/records/:id.json` | Szczegóły rekordu |
| POST | `/noe/dbs/:db_id/records.json` | Utworzenie rekordu |
| PATCH | `/noe/dbs/:db_id/records/:id.json` | Aktualizacja rekordu |
| DELETE | `/noe/dbs/:db_id/records/:id.json` | Usunięcie rekordu |

## POST — Utworzenie rekordu

```json
POST /noe/dbs/todo/records.json

{
  "record": {
    "data": {
      "title": "Zadanie 1",
      "done": 0
    }
  }
}
```

## Publiczne metody (bez autoryzacji)

| Metoda | Ścieżka | Opis |
|--------|---------|------|
| POST | `/noe/db/:db_code/list` | Lista rekordów |
| POST | `/noe/db/:db_code/get` | Pobranie rekordu |
| POST | `/noe/db/:db_code/create` | Tworzenie rekordu |
| POST | `/noe/db/:db_code/update` | Aktualizacja rekordu |
| POST | `/noe/db/:db_code/delete` | Usunięcie rekordu |
| POST | `/noe/db/:db_code/search` | Wyszukiwanie |

## Konfiguracja public_methods

```json
{
  "list": { "scope_by": "user_ip" },
  "create": {
    "allowed_fields": ["title", "done"],
    "required_fields": ["title"],
    "default_values": { "done": 0 },
    "auto_fields": { "user_ip": "{ip}" }
  },
  "update": { "allowed_fields": ["title", "done"], "scope_by": "user_ip" },
  "delete": { "scope_by": "user_ip" }
}
```

Zmienne w `auto_fields`: `{ip}` — adres IP, `{cookie_key}` — token per przeglądarka (30 dni)

---

## Powiązane

- [Noe AI w Intum: Twoja sztuczna inteligencja na wyciągnięcie ręki](https://intum.pl/pomoc/noe-ai/noe-ai.md)
