Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: notification apis specification #16

Merged
merged 7 commits into from
Aug 30, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
283 changes: 283 additions & 0 deletions src/endpoint/notification.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,283 @@
# 通知API

## お知らせ(Announce)の種類

| 種類コード | 説明 |
| :--------: | :------------------: |
| `info` | 一般的なお知らせ |
| `warn` | ユーザー全体への警告 |

## 通知の種類

| 種類コード | 通知が発生する条件 |
| :---------------: | :--------------------------------------------: |
| `followed` | フォローされたとき |
| `followRequested` | フォローをリクエストされたとき |
| `followAccepted` | 自分が行ったフォローリクエストが承認されたとき |
| `mentioned` | メンションされたとき |
| `renoted` | リノートされたとき |
| `reacted` | リアクションされたとき |

### `followed` - フォローされた

取り得る`actor`の種類:

- `account`

```jsonc
{
"id": "20923084093774",
"type": "followed",
"actor": {
"type": "account",
"account": {
"id": "209384",
"name": "@[email protected]",
"nickname": "John Doe🌤",
"avatar": "https://cdn.example.com/johndoe/avatar"
}
},
"createdAt": "2024-08-01T00:00:00.000Z"
}
```

### `followRequested` - フォローをリクエストされた

取り得る`actor`の種類:

- `account`

```jsonc
{
"id": "20923084093774",
"type": "followRequested",
"actor": {
"type": "account",
"account": {
"id": "209384",
"name": "@[email protected]",
"nickname": "John Doe🌤",
"avatar": "https://cdn.example.com/johndoe/avatar"
}
},
"createdAt": "2024-08-01T00:00:00.000Z"
}
```

### `followAccepted` - (自分が行った)フォローリクエストが承認されたとき

取り得る`actor`の種類:

- `account`

```jsonc
{
"id": "20923084093774",
"type": "followAccepted",
"actor": {
"type": "account",
"account": {
"id": "209384",
"name": "@[email protected]",
"nickname": "John Doe🌤",
"avatar": "https://cdn.example.com/johndoe/avatar"
}
},
"createdAt": "2024-08-01T00:00:00.000Z"
}
```

### `mentioned` - メンションされた

取り得る`actor`の種類:

- `account`

```jsonc
{
"id": "20923084093774",
"type": "mentioned",
// 言及元ノートID
"noteId": "29847304533478",
"actor": {
"type": "account",
"account": {
"id": "209384",
"name": "@[email protected]",
"nickname": "John Doe🌤",
"avatar": "https://cdn.example.com/johndoe/avatar"
}
},
"createdAt": "2024-08-01T00:00:00.000Z"
}
```

### `renoted` - リノートされた

取り得る`actor`の種類:

- `account`

```jsonc
{
"id": "20923084093774",
"type": "renoted",
// リノートされたノートID
"noteId": "1032809844545437574",
// 投稿本文(CW指定の場合は空になる)
"content": "",
"actor": {
"type": "account",
"account": {
"id": "209384",
"name": "@[email protected]",
"nickname": "John Doe🌤",
"avatar": "https://cdn.example.com/johndoe/avatar"
}
},
"createdAt": "2024-08-01T00:00:00.000Z"
}
```

### `reacted` - リアクションされた

取り得る`actor`の種類:

- `account`

```jsonc
{
"id": "20923084093774",
"type": "reacted",
// リアクションされたノートのID
"noteId": "3094320840856",
// リアクションの内容
"content": "🐭",
"actor": {
"type": "account",
"account": {
"id": "209384",
"name": "@[email protected]",
"nickname": "John Doe🌤",
"avatar": "https://cdn.example.com/johndoe/avatar"
}
},
"createdAt": "2024-08-01T00:00:00.000Z"
}
```

#### `actor`について

通知を発生させた主体の種類

- `account`: (内部外部問わず) (ユーザー)アカウント
- botの場合も含む
- `system`: システム通知
- モデレーター等からの警告通知など

`account`:

```jsonc
{
"type": "account",
"account": {
// アカウントID
"id": "209384",
// アカウント名
"name": "@[email protected]",
// アカウントニックネーム
"nickname": "John Doe🌤",
// アバター画像のURL
"avatar": "https://cdn.example.com/johndoe/avatar"
}
}
```

`system`:

```jsonc
{
"type": "system",
"system": {
// ToDo
laminne marked this conversation as resolved.
Show resolved Hide resolved
}
}
```

## APIエンドポイント一覧

### `GET /notifications`

届いているすべての通知を取得します。

#### 入力

パスパラメータ:

- `limit`: number, 返す通知の最大数
- デフォルト: 30 / 最大: 50
- `after`: string(date), この日以降の通知を返します
- デフォルト: "1970-01-01"
- `include_read`: boolean, trueの時は既読の通知も返します
- デフォルト: false

#### 出力

- body: `application/json`

```jsonc
{
// インスタンス全体へのお知らせ
"announcements": [
{
"id": "308205359",
"title": "Service maintenance",
"description": "scheduled: 2024 Sep. 10 00:00 ~ 01:00(UTC)\nduring this period, all services will be unavailable.",
// お知らせの種類
"type": "info",
"createdAt": "2024-08-01T00:00:00.000Z",
// optional
"updatedAt": "2024-08-01T10:00:00.000Z",
// 既読か
"unread": false
}
],
// 自分宛ての通知
"notifications": [
{
"id": "20923084093774",
"type": "followed",
"actor": {
"type": "account",
"account": {
"id": "209384",
"name": "@[email protected]",
"nickname": "John Doe🌤",
"avatar": "https://cdn.example.com/johndoe/avatar"
}
},
"createdAt": "2024-08-01T00:00:00.000Z"
}
]
}
```

### `POST /notifications/{id}/read`

通知を既読にします

#### 入力

- パスパラメータ
- `id`: string
- 既読にする通知ID

- body: `application/json`

```jsonc
{}
```

#### 出力

**`204 No Content`** 通知を既読にしました。