# SECCAMP 2019 B1~3 Team B
- @progfay
- @Tenma_F
- @cedr1c
- @buuuuuun3939
---
# DB 設計
### Follow 関係
- Twitterの実装を調べてみた
- 結構複雑な構造を採用しているらしい
- そもそも DynamoDB とは仕様が違うので、今回は別の方法を考えてみる
---
- NoSQLの良さ
- KV Storeが高速
- filteringがある
- DBのテーブルとかも.ymlとかで準備できたら尚良い(今回は無し)
---
## Timelineでは、どんなデータを取得してくる?
- e.g. 最後に読んだところから、今までを読む
- e.g. 最新から100件を読む
---
- タイムライン表示
- 視点は 時間 or 件数 ? → 両方組み合わせて
- 時間: 最後に読み込まれた時間から、今までの投稿を持ってくる
- 件数: 規定バイト以下なら全て表示する(そういう機能がある)
- それを超えるはさらに古いものを「さらに表示」という扱いでparamsを提供しておく
- 表示されてる中で最も古い投稿のtimestampを次の上限分を取ってくる際に再利用
---
## 最低限しないといけないこと
- フロント
- follow 機能の追加
- timeline 表示機能の追加
- サーバー
- follow アクションに応じて `following` テーブルを更新
- `posts` テーブルから、 `timestamp` → `following` でfiltering
---
## `following` Table
| user_id | following |
| ------ | ------ |
| Text | `List<Text>` |
- 今回はフォローだけ分かれば良い
---
### `posts` Table
| uuid | timestamp | user_id | post |
| ------ | ------ | ------ | - |
| Text | Number | Text | Text |
---
## 進捗状況
- `/post` , `/follow` は実装ができた
- `/timeline` の実装が間に合わず、完成はできなかった :sob:
---
> REPORT RequestId: 47840d8f-ea3c-4080-b04a-0808f43b81ea Duration: 40.94 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 97 MB
- `following` 内の人でフィルターを掛けるやり方が分からなかった
```javascript
following.map(user => `contains (user_id, ${user})`).join(' OR '),
```
- 時間での範囲指定もできなかった
{"metaMigratedAt":"2023-06-14T23:24:33.433Z","metaMigratedFrom":"Content","title":"SECCAMP 2019 B1~3 Team B","breaks":true,"contributors":"[{\"id\":\"b5165fef-3cfb-442a-9c78-a5e144f1963e\",\"add\":2169,\"del\":1096},{\"id\":\"c11589e9-d36f-4d56-baf9-cc7ce4587053\",\"add\":448,\"del\":163},{\"id\":\"3e2f5c23-96c5-403c-9265-167987fbbbe8\",\"add\":22,\"del\":12}]"}