# Kosár / Fizetés API

[vissza az API indexhez](./index.md)

## Kosár tartalmának lekérdezése

`GET /api/cart` - private api

```json
{
  "status": {
    "hasAbortableItems": <bool>, // ha ez false, akkor az "abort" gomb legyen disabled
    "canBeCleared": <bool>, // ha ez false, akkor legyen a "clear cart" gomb disabled
    "hasPayableItems": <bool> // ha ez false, akkor legyen a "pay with wallet" gomb disabled
  },
  "total": {
    // a kosárban található értékek összegzése valutánként
    "USD": 22,
    ...
  },
  "onephotocart": [
    {
      "commerceinfo": {
        "commerceid": 750,
        "amount": 1, // fizetendő összeg, nem darabszám!
        "currency": "USD",
        "type": 5,
        "status": 1,
        "typeText": "onephoto",
        "statusText": "in cart",
        "isDeleted": false
      },
      "bigphoto": false,
      "whom_userid": 3258755,
      "photoid": 5236434
    },
    ...
  ],
  "photossectorcart": [
    {
      "commerceinfo": {
        "commerceid": 763,
        "amount": 2,
        "currency": "USD",
        "type": 4,
        "status": 1,
        "typeText": "sector photo",
        "statusText": "in cart",
        "isDeleted": false,
        "owner": 6564336
      },
      "photoid": 6981753,
      "sector": 3
    },
    ...
  ],
  "photocart": [
    {
      "commerceinfo": {
        "commerceid": 762,
        "amount": 2,
        "currency": "USD",
        "type": 2,
        "status": 1,
        "typeText": "service photo",
        "statusText": "in cart",
        "isDeleted": false,
        "owner": 6564336
      },
      "service": {
        "serviceid": 152,
        "userid": 6564336,
        "year": 2021,
        "month": 3,
        "day": 31,
        "active": 0,
        "created_at": "2021-03-25 14:45:47",
        "validFrom": "2021-03-31T00:00:00Z",
        "validTo": "2021-04-30T00:00:00Z",
        "isActive": false
      },
      "photoid": 2000001
    },
    ...
  ],
  "servicecart": [
     {
      "commerceinfo": {
        "commerceid": 751,
        "amount": 2,
        "currency": "USD",
        "type": 1,
        "status": 1,
        "typeText": "service",
        "statusText": "in cart",
        "isDeleted": false,
        "owner": 6564336
      },
      "date": 1619740800,
      "dateUTC": "2021-04-30T00:00:00Z"
    },
    ...
  ],
  "sectorcart": [
    {
      "commerceinfo": {
        "commerceid": 752,
        "amount": 2,
        "currency": "USD",
        "type": 3,
        "status": 1,
        "typeText": "sector",
        "statusText": "in cart",
        "isDeleted": false,
        "owner": 6564336
      },
      "sector": 2
    },
    ...
  ]
}
```

## Korábbi vásárlások kilistázása

`GET /api/cart/history` - private api

Kimenete megegyezik a kosár lekérdezésének (`/api/cart`) meghívásával.

## Kosár tartalmának kifizetése (developerpay)

`POST /api/cart/developer-pay` - private api

Futtat egy developerpay-t a belépett user-nek, válasznak pedig **200** (OK) jön vissza tartalom nélkül.

Minden fizetés után megpróbál aktivációt is csinálni a user-nek, így ha a követelmények megfelelőek voltak, akkor a user service aktiválva lesz.

## Kosár összes elemének törlése

`DELETE /api/cart` - private api

Töröl minden tételt a kosárból

Sima 200-as válasszal tér vissza

## Egy elem törlése a kosárból

`DELETE /api/cart/<commerceid>` - private api

Ha nem létező tételt próbálunk törölni a kosárból, akkor **404**-et (NOT FOUND) dob az oldal

Ha netán olyan tételt próbálnánk törölni, ami nem a saját user-ünk kosarába tartozik, akkor **401** (UNAUTHORIZED) jön vissza

Minden más esetben **200**-as válasz (OK) jön vissza

## Kosárba rakás

`PUT /api/cart` - private api

Ennek JSON-t kell küldeni (ContentType application/json).

```json
{
  "photocart": [ // service-hez tartozó képek
    {
      "serviceid": 141,
      "photosinfo": [
        2552159,
        4175412,
        5109885,
        1000002,
        2000001,
        3000003,
        4000002,
        5000003,
        6000003,
        7000003
      ]
    },
    ...
  ],
  "photossectorcart": [ // sector-hoz tartozó képek, vigyázz a 2 db S betűre!
    {
      "sector":2,
      "photosinfo":[
        9999605,
        7875190,
        4536801,
        2136006,
        250707,
        2000004,
        3000002,
        4000001,
        5000001,
        6000002
      ]
    }
  ],
  "subscriptioncart": <int>, // hány hónapnyi service-t akarsz megvenni
  "sectorcart": <int>, // sector, a soron következő sector száma
  "onephotocart": [ // külön megvásárolt képek
    {
      "photoid": 7205399,
      "bigpicture": false
    },
    ...
  ],
  ...
}
```

Ha valami hiba volt akár az egyik termék kosárba tételekor is, akkor az egész művelet eldobásra kerül, a kosár korábbi tartalma nem változik, a szerver **403** (FORBIDDEN) választ küld vissza.

Ha minden rendben volt, akkor a szerver **200**-zal (OK) tér vissza.

## Fizetési folyamat elkezdése

`POST /api/cart/start` - private api

Nem kell semmilyen infót küldeni body-ban.

Átbillenti az "in cart" (1)-es és "payment failed" (5)-ös státuszú elemeket a kosárban "ready to pay" (2)-es státuszúra.

Visszaküldi a kosár státuszt:

```json
{
  "hasAbortableItems": <bool>, // ha ez false, akkor az "abort" gomb legyen disabled
  "canBeCleared": <bool>, // ha ez false, akkor legyen a "clear cart" gomb disabled
  "hasPayableItems": <bool> // ha ez false, akkor legyen a "pay with wallet" gomb disabled
}
```

## Fizetés megszakítása

`POST /api/cart/abort` - private api

Átbillenti a "ready to pay" (2)-es státuszú elemeket a kosárban "in cart" (1)-es státuszúra. Ha a trongate-en valaki már elindította a fizetést (az elem státusza 3-as lett), akkor azt már nem lehet megszakítani.

Visszaküldi a kosár státuszt:

```json
{
  "hasAbortableItems": <bool>, // ha ez false, akkor az "abort" gomb legyen disabled
  "canBeCleared": <bool>, // ha ez false, akkor legyen a "clear cart" gomb disabled
  "hasPayableItems": <bool> // ha ez false, akkor legyen a "pay with wallet" gomb disabled
}
```
