notion_app's Introduction
notion_app's People
notion_app's Issues
自分で持つブロックに対してdisplayTimeを処理できるようにする
logrusを使ってログを見やすくする
環境変数によってlogrusはログレベルを変更してやる。
MyBlockにUserIDを追加して、User側から呼び出せるようにする
Main issue
- myBlockに対してblockと同じ種類のエンドポイントを作成する
- 抽象化したブロックを作成して、blockとmyblockに対して同時に処理を行うエンドポイントを作成する
- 時間の変更だけのmyBlockのエンドポイントだけが、独自の実装になる
- フロントに表示するブロックは全て自分のデータベースから出力されるもの
クリーンな構造にしておくためのルール
- フロントがブロックに対して変更できるのは時間だけ
- フロントが表示できるのは自分のデータベースのブロックだけ
- notionの情報はデータベースへの保存のためにしか参照されない
- 同期ボタンを押すと時間はかかるがデータを更新してくれる(1日一回バッジ処理)
環境変数を読み込む方法を変更
起動時に一回だけ呼び出して保存されているようにしたい
DisplayTimeが現在の時間より前のBlockを取得するエンドポイントの作成
これはGetAllに対してWhereを追加できるようにするのが良い
userにnotion integrationの情報を紐付ける
userにnotion integrationの情報を保存して配列で持っておいて、デフォルトを設定できるようにしておく。
デフォルト設定がされていれば自動で c.Set("user")と同時にそこに向けてブロックなどを取得できるようにする。
API処理と自分のDBでの処理をまとめる
どちらかで登録できてどちらかでエラーが発生した時など整合性が保てなくなることが予想されるので、どちらかでエラーが起きたらロールバックしてくれるようにする
認証機能の作成
JWT利用して認証サーバーを作成する
- ユーザーを登録できるようにする
- ユーザーを確認できるようにする
- IDとパスワードがあれば画面遷移を可能にする
- paseto作成
- paseto認証機能作成
blockが持つ各要素のテーブルを作成して、外部キー制約で取り出せるようにする
モデルに対するバリデーションが反映されていない
`json:"user" gorm:"uniqueIndex" validate:"required" `
jsonしか機能していないようなので要修正
ブロックに関するAPI処理を全て実装する
よく使うメソッドは自動生成したい
sqlのファイルを出力する
cascadeや外部キー設定を見るためautomigrateからsql作成して出力したい
バッジ処理に関する詳細ログが欲しい
何が登録されたのかとか、通知して欲しいなあ
手元でnotion APIのpackageを作成する
まだこれ進行中なのでまだ足りない部分があったりして、ちょっと使いづらいので良い経験になりそうだし自分でパッケージを作ってみようかと思う
tokenをクライアントheaderのauthenticationに入れる
外部キー制約が問題なく機能しているかテストする
同期処理をバッジ処理にする
このアプリで解決する問題
課題
- Notionがどの情報にどのタイミングで触れれば長期記憶になるのかを自動的にやってくれる
- 検索
解決策
- 自分でデータを持つことで、okを押したものに関しては自動的に判別して出してくれる。次に出る期間を設定したい時にはhoverしたところからokボタンを押すとその時間が来たら表示してくれる
- 次に表示する時間をデータベースで保持するようにする
- Notionのデータベースと同期する(手動と自動の2つ)
PreloadでBlockに繋がる情報全部取得できる?
block->richtextblock->richtext->textとネストさせて取得するとパフォーマンスが悪そうなので繋がるものはgormのpreload利用して一括で取るか、直接sql打って取得するかするようにしたい
https://gorm.io/ja_JP/docs/preload.html#nested_preloading
formでpreloadできるらしいのでこれで親ブロックIDから繋げられる状態にしておく
マージテスト
revertを試すためのマージテスト
migrationに使うファイルは別で生成する
壊れた時などのためにもsqlファイルとして持てるようにしておきたい。
https://dev.to/techschoolguru/write-go-unit-tests-for-db-crud-with-random-data-53no
データベースをグラフ化する
後々わかりにくくならないためにツールを使ってグラフ化する
同期処理の順番
notionのアプリに存在するものを同期しようとした時に起きる問題
参照されないものがある。
notion側からだけ追加、編集処理をさせると、notion側で削除したものに対しては何も参照をしないので、自分のアプリにはずっと残り続けてしまうことになる。これをなんとかするために、自分のアプリ側からnotionにそれが存在しているかを見てやる必要がある。
1個ずつ検索するとAPI叩きに行きすぎてめちゃくちゃ時間かかると思うので(最初の段階ではそれでもいいと思うけど)、has_childrenとかを見て、リストで取得してきたりすることで処理速度上げたい。
- notion側から更新、編集を自動でする処理(idで検索かけて存在してればupdateして、していなければ作成する)
- 自分のDBに存在して、Notionで存在していないものを削除(まずは1つずつで検索して、後で効率良くなるようにアルゴリズム変更する必要あり)
クリーンアーキテクチャライクな構成に変更する
https://github.com/bxcodec/go-clean-arch
DIコンテナとかも導入してみたいので、層を分けて実装する
ローカル環境だったら認証なしのエンドポイントでテストできるようにしておく
有効期限がとても邪魔なので環境変数によって認証なしにしておきたい
データベース接続テスト
ひとまずローカルで正しく接続できてきるかをテスト
CRUDのテストかく
検索機能を作成する
DisplayTimeを変更するためのエンドポイントを作成
フロントから渡したtime.DurationをDIsplayTimeに追加して保存するエンドポイントの作成
Update用の抽象化したエンドポイントを作成する
userとmyBlockを紐付けて、user経由で取得できるようにする
自分のデータベースで管理するより良い方法
GetChildrenの実装
現状IDで指定してもそのブロックの情報しか取得できていないので、子供の要素を取得できるようにする
DockerとAWSを使ってデプロイする
block取得に関する部分のリファクタリング
ブロックにユーザー情報を追加して外部キー制約を追加
- ブロックにユーザー情報を追加
- 外部キー製薬の追加
- Userを呼び出すときに同時にブロックを呼び出せるようにしておく
開発環境でのエラーハンドリングの改善
- エラーメッセージはログに出力されていて欲しい
- デバッグモードが適切に設定できているのか
ボタンを押したら同期してくれる処理の実装
- 親要素だけを全て取得できるようにする。
- toggle子要素がある場合には、それを取得して、親のIDを保持して保存
現状ブロックに対して削除のエンドポイントをnotionが提供してくれていないので、特定のブロックに対してNotion側に合わせるように自分のデータベースを更新する必要がある。
認証が完了したときにuserをSetしてDIで呼び出せるようにしておく
ログに出力するエラーとフロントに返すエラーを分ける
エラーがネストした時など、どのエラーメッセージを出すかや、何がログに残るかなどが整理されていないので、整理する
- ログに出力するエラーの出し方を調べて実装
- フロントに返すエラーの出し方を調べて実装
フロントに返すエラーに関しては今でもできてる気がするけど、errがネストしたときに細かいエラーまで表示してくれなくて何が起こってるのかわかりづらくなるので、エラーメッセージは無条件にログに出力するのが良さそう?
フロントエンドのプロジェクトをデプロイする
vercelが簡単だし、頑張らなくても機能が便利そうで良さげ
ブロックIDを指定したときにその1つ下の階層のplainTextを全て取得
login処理のリファクタリング
NotionのAPIから取得したchildブロックを自分のデータベースに保存する
フロントエンドのプロジェクト開始する
使用技術は
next.js
redux toolkit
typescript
にする
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.