# Blog API

[vissza az API indexhez](./index.md)

## Közös elemek

`<utc time>`

```json
"2021-03-01T00:00:00.000000Z"
```

`<userData>`

```json
{
  "id": <int>,
  "avatarimage": <string>,
  "bannerimage": <string|null>,
  "blogname": <string>,
  "aboutme": <string>, // bemutatkozás, amit a profilban lehet kitölteni
  "memberSince": <utc time>, // mikor csatlakozott a user az oldalhoz
  "isBlockedByUs": <bool>, // letiltottuk-e mi magunk a felhasználót, akinek az adatait nézzük
  "isBlockingUs": <bool>, // a felhasznál letiltott-e minket (nem tudunk neki küldeni üzenetet ilyenkor)
  "numberOfFollowers": <int>, // hányan követik a felhasználót
  "areWeAmongTheFollowers": <bool> // a felhasználót követjük-e mi magunk is?
}
```

## Saját idővonalunk lekérése, saját és mások posztjainak lekérése

`GET /api/blog/timeline` - private api - saját idővonalunk

`GET /api/blog/posts` - private api - saját posztjaink

`GET /api/blog/posts/<userid>` - private api - mások posztjai

`GET /guestapi/blog/posts/<userid>` - public api - mások posztjai

Lekéri a blogbejegyzéseket

Paraméterek:

`limit` - limitáljuk a visszaadott találatok mennyiségét; alapból 10 a limit, 0-ra állítva nincs limit

`offset` - hanyadik elemtől kérjük a találatokat (lapozásnál: offset = (oldalszám - 1) \* limit, ahol oldalszám 1-es indexű)

```json
{
  "totalCount": 4,
  "blogOwner": <userData>,
  "blogPosts": [
    {
      "id": 43,
      "lastModified": "2021-01-14T13:04:22Z",
      "user": <userData>,
      "stats": {
        "numberOfLikes": 0,
        "isAmongLikers": false, // szereplünk-e mi magunk a posztot like-oló személyek között
        "numberOfComments": 2
      },
      "photo": {
        "id": 6204394,
        "src": "http://photogram/photos/watermark/5fe065c30be9f_8261806.jpg",
        "description": "íme a kiskutyám"
      }
    },
    ...
  ]
}
```

## Saját követőink és akiket mi követünk

`GET /api/blog/followers` - private api

`GET /api/blog/following` - private api

```json
[
  {
    "link": "http://photogram/user/5902535",
    "avatarimage": "http://photogram/assets/users/5fd1fee299d77_bdjZLA.jpg",
    "userid": 5902535,
    "name": "Yanka",
    "photos": 9,
    "likes": 7
  },
  ...
]
```

## Blogbejegyzés létrehozása

`POST /api/blog` - private api

> photoid - <int>
>
> description - <string>

Válasz:

```json
{
  "id": 45,
  "lastModified": "2021-02-04T13:45:14Z",
  "user": <userData>,
  "stats": {
    "numberOfLikes": 0,
    "isAmongLikers": false,
    "numberOfComments": 0
  },
  "photo": {
    "id": "6204394",
    "src": "http://photogram/photos/watermark/5fe065c30be9f_8261806.jpg",
    "description": "API-n keresztül hoztam létre!"
  }
}
```

## Egy blogbejegyzéshez tartozó kommentek lekérdezése

`GET /api/blog/<blogPostId>/comments` - private api

`GET /guestapi/blog/<blogPostId>/comments` - public api

```json
[
  {
    "id": <int>,
    "user": <userData>,
    "canDelete": <bool>,
    "comment": <string>,
    "modified": <string, Y-m-dTH:i:sZ>
  },
  ...
]
```

Paraméterek:

`limit` - limitáljuk a visszaadott találatok mennyiségét; alapból 10 a limit, 0-ra állítva nincs limit

`offset` - hanyadik elemtől kérjük a találatokat (lapozásnál: offset = (oldalszám - 1) \* limit, ahol oldalszám 1-es indexű)

## Blogbejegyzéshez hozzászólás írása

`POST /api/blog/<blogPostId>/comment` - private api

Létrehoz egy új hozzászólást egy blogbejegyzés alá

> comment: <string>

Sikeres hívás esetén az új hozzászólás adatai jelennek meg.

```json
[
 "id": <int>,
  "user": <userData>,
  "canDelete": <bool>, // ha saját posztunk alatt van, vagy a miénk a komment, akkor true
  "comment": <string>,
  "modified": <string, Y-m-dTH:i:sZ>
]
```

## hozzászólás törlése

`DELETE /api/blog/comment/<commentid>` - private api

Töröl egy kommentet

Ha sikerült a hívás, akkor a szerver válasza **200** (OK), érdemi tartalmat nem küld

> DELETE /api/blog/comment/34

## Like-olás és annak visszavonása

`POST /api/blog/<blogPostId>/like` - private api

`POST /api/blog/<blogPostId>/unlike` - private api

Ha nem létező blogpost-ra hivatkozunk, akkor **404**-et (NOT FOUND) dob

Sikeres válasz esetén a blogbejegyzéshez tartozó like-ok számával tér vissza:

```json
{
  "likes": 12,
  "amongLikers": true
}
```

## Lekérjük az alap Photogram Blog-hoz tartozó user ID-ját

`GET /api/blog/photogram-blog-user-id` - private api

Ez egy sima számot fog visszaadni, a Photogram blog mögötti user ID-ját (korábban 7000000)

## Blog bejegyzés törlése

`DELETE /api/blog/<int:blogPostId` - private api

Töröl egy blogbejegyzést

Ha már nem található a blogbejegyzés, akkor 404-et ad vissza a végpont

Ha létezik a bejegyzés, de más tulajdona, akkor 401 a válasz + hibaüzenet

Ha minden oké, akkor 200-as válasz jön üres objektummal
