Elixir/Phoenixでウェブサービスを作っている22

Done:

  • ブラウザ
    • this.props.childrenを上書きしてるので修正
      • children -> descendants
    • ItemTreeComponentに与えるprops見直し
      • goal_tree全体は含まない
      • ツリー全体に関わる処理はsubscribe()でやる
    • JsonPath入れる
      • やめ。insertなどできるモデルを導入。
    • 木構造を扱うライブラリの調査
    • joaonuno/tree-model-jsパッケージの導入。
      • できた
    • r7kamura/key-stringパッケージの導入。
      • できた
    • keydown event処理をItemTreeComponentからdispatchするようにした
      • ItemTreeComponentに持ってる方がおかしいので、どっかもっと上の方のコンポーネントで処理した方が良いかも
    • handleEvent()をItemTreeComponentからGoalAppComponentに移した

Todo:

  • ブラウザ
    • #wrapの高さがセクションの倍数になるように動的に変更
    • ツリー全体を展開する
    • 上下移動(要素の有無を見る)
      • jk
    • 右移動(要素の有無を見る)
      • h
    • 左移動(要素の有無を見る)
      • l
    • new/create
      • n: 新規、enterで作成
    • edit/update
      • e: 編集、enterで更新
    • delete
      • X: 削除
    • copy/cut/paste
      • c: 単体コピー
      • C: サブツリー全体をコピー
      • x: カット
      • v: 下にペースト
      • V: 上にペースト
    • status切り替え
      • f: forward
      • b: back
      • q: close
    • タブ
      • システムメニュー
        • サインイン/サインアウト
      • ユーザーメニュー
        • アクティビティ
          • ユーザー/グループ...
    • オフライン対応
      • すごく欲しいがやらない
      • 当初想定より簡単にできるかも
  • サーバ
    • Activity(activities)
      • id
      • goal_id
      • user_id
      • backup(json)
      • diff(json)
    • Status(statuses)
      • id
      • name
      • position
      • enable
      • ユーザー定義
        • デフォルト
          • 0: todo
          • 1: doing
          • 2: done
          • -1: close
          • done/closeは特別にしたいな……
        • 面倒くさいなこれ。固定にしよっかな
    • Group(groups)
      • 1ユーザー1グループ作る?
      • id
      • name
    • Membership(memberships)
      • user_id
      • group_id
      • pending
    • 操作権限チェックを入れる
    • ルート操作の防止を入れる
  • /goals/:idを/goals/:hash_digestにする
  • User.nickにunique属性つける
  • check_descendants!でArgumentErrorにしてるところを独自例外に変える
  • on_delete: :delete_allと再帰クエリでどっちが速いか調べる

Memo:

Programming Phoenix: Productive; Reliable; Fast

Programming Phoenix: Productive; Reliable; Fast