GithubHelp home page GithubHelp logo

notion_app's Introduction

notion_api

notion_app's People

Contributors

maniizu3110 avatar

Watchers

 avatar

notion_app's Issues

Main issue

  • myBlockに対してblockと同じ種類のエンドポイントを作成する
  • 抽象化したブロックを作成して、blockとmyblockに対して同時に処理を行うエンドポイントを作成する
  • 時間の変更だけのmyBlockのエンドポイントだけが、独自の実装になる
  • フロントに表示するブロックは全て自分のデータベースから出力されるもの

クリーンな構造にしておくためのルール

  • フロントがブロックに対して変更できるのは時間だけ
  • フロントが表示できるのは自分のデータベースのブロックだけ
  • notionの情報はデータベースへの保存のためにしか参照されない
  • 同期ボタンを押すと時間はかかるがデータを更新してくれる(1日一回バッジ処理)

userにnotion integrationの情報を紐付ける

userにnotion integrationの情報を保存して配列で持っておいて、デフォルトを設定できるようにしておく。
デフォルト設定がされていれば自動で c.Set("user")と同時にそこに向けてブロックなどを取得できるようにする。

API処理と自分のDBでの処理をまとめる

どちらかで登録できてどちらかでエラーが発生した時など整合性が保てなくなることが予想されるので、どちらかでエラーが起きたらロールバックしてくれるようにする

認証機能の作成

JWT利用して認証サーバーを作成する

  • ユーザーを登録できるようにする
  • ユーザーを確認できるようにする
  • IDとパスワードがあれば画面遷移を可能にする
  • paseto作成
  • paseto認証機能作成

このアプリで解決する問題

課題

  • Notionがどの情報にどのタイミングで触れれば長期記憶になるのかを自動的にやってくれる
  • 検索

解決策

  • 自分でデータを持つことで、okを押したものに関しては自動的に判別して出してくれる。次に出る期間を設定したい時にはhoverしたところからokボタンを押すとその時間が来たら表示してくれる
  • 次に表示する時間をデータベースで保持するようにする
  • Notionのデータベースと同期する(手動と自動の2つ)

同期処理の順番

notionのアプリに存在するものを同期しようとした時に起きる問題
参照されないものがある。
notion側からだけ追加、編集処理をさせると、notion側で削除したものに対しては何も参照をしないので、自分のアプリにはずっと残り続けてしまうことになる。これをなんとかするために、自分のアプリ側からnotionにそれが存在しているかを見てやる必要がある。
1個ずつ検索するとAPI叩きに行きすぎてめちゃくちゃ時間かかると思うので(最初の段階ではそれでもいいと思うけど)、has_childrenとかを見て、リストで取得してきたりすることで処理速度上げたい。

  1. notion側から更新、編集を自動でする処理(idで検索かけて存在してればupdateして、していなければ作成する)
  2. 自分のDBに存在して、Notionで存在していないものを削除(まずは1つずつで検索して、後で効率良くなるようにアルゴリズム変更する必要あり)

GetChildrenの実装

現状IDで指定してもそのブロックの情報しか取得できていないので、子供の要素を取得できるようにする

ボタンを押したら同期してくれる処理の実装

  • 親要素だけを全て取得できるようにする。
  • toggle子要素がある場合には、それを取得して、親のIDを保持して保存

現状ブロックに対して削除のエンドポイントをnotionが提供してくれていないので、特定のブロックに対してNotion側に合わせるように自分のデータベースを更新する必要がある。

ログに出力するエラーとフロントに返すエラーを分ける

エラーがネストした時など、どのエラーメッセージを出すかや、何がログに残るかなどが整理されていないので、整理する

  • ログに出力するエラーの出し方を調べて実装
  • フロントに返すエラーの出し方を調べて実装

フロントに返すエラーに関しては今でもできてる気がするけど、errがネストしたときに細かいエラーまで表示してくれなくて何が起こってるのかわかりづらくなるので、エラーメッセージは無条件にログに出力するのが良さそう?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.