mBaaSはスマートフォンアプリを作るのに最適です。そしてスマートフォンアプリは個人が楽しむゲームやチャットなどだけでなく、業務用途でも広がりを見せています。そこでmBaaSも業務システムを作るために使ってみましょう。
何回かに分けて、日報システムを作ってみます。他の業務システムへも応用はさほど難しくないでしょう。今回は前回のデータ閲覧に続いて、コメントを付ける機能を追加します。
今回のゴール
今回は前回作成した日報画面にコメント機能を追加します。日報を読んだ人が、褒めたりアドバイスするのに使えるイメージです。
コメントの処理
コメントフォームはテキストエリアを表示するだけです。コメントするボタンを押した時の処理は以下のようになります。
const report = app.reports.filter((report) => { return report.objectId === objectId; })[0]; const user = ncmb.User.getCurrentUser(); const Comment = ncmb.DataStore('Commnet'); const comment = new Comment; const acl = new ncmb.Acl(); acl .setRoleReadAccess(app.roleName, true) .setRoleReadAccess('admin', true) .setRoleWriteAccess('admin', true) .setUserReadAccess(user, true) .setUserWriteAccess(user, true); comment .set('reportId', report.objectId) .set('acl', acl) .addUnique('comments', { user: user.mailAddress, commnet: app.comment }) .update() .then((data) => { alert('コメントしました'); app.comment = null; })
コメントにおける権限は次のようになります。
- 管理者グループは読み書きが可能
- 同じ部署のユーザは読み書きが可能
コメントの取得
コメントは日報に紐付いています。そのため、リレーションを使えば日報を取得した際にまとめてコメントも取得できます。しかし、そのためには日報に対する書き込み権限が必要になります。
そのため、今回はコメントを別クラス(Commentクラス)にし、日報の objectId
をコメントに紐付けて保存するようにしました。また、コメントは同じ日報に対しては1データしか用意しません。コメント自体は配列で同じフィールド(commentsフィールド)に追加します。これによってデータ量が増えるのを防げるようになります。
mBaaSではこのように配列をうまく使うことでデータ取得の高速化やサイズの肥大化防止が可能になります。取得されたコメントは配列として得られますので、それをそのまま表示すればOKです。
最後に
mBaaSはスキーマレスのデータベースになっています。リレーショナルデータベースとは異なりますので、その特性に合わせた設計を行うのがお勧めです。特にネットワークを介している分、大量のデータを送受信するのは動作が遅くなるのにつながります。なるべく一つのデータにまとめられるのが良いでしょう。