• 雑な生き方を丁寧に記すブログ

プログラミング奮闘備忘録

前にちょっと触れたが、受講中のプログラミングスクールは既にテキスト学習を終えて佳境に入っている。テキストに沿って作成したWebアプリケーションを自分なりに機能拡張していこうという段階。

Webアプリケーションは日報管理システムと言う体になっていて、簡単に言うと、社員がそれぞれ記入した日報を閲覧するためのサイト。今ある機能としては、ログイン機能、社員の登録/表示/編集/削除機能、日報の登録/表示/編集機能のみのシンプルなもの。

手始めとして、今回はここに「いいね」機能を追加する。具体的に言うと、社員が自分以外の社員の日報に「いいね!」のリアクションをできるようにして、その「いいね!」の数を表示させるようにしたい。

頑張るぞい!

1 データベースの修正

まず、いいね数を保存するデータベースが必要。現状のデータベースにあるテーブルは社員を管理するemployeeテーブルと、日報を管理するreportテーブルの2つだが、今回はreportテーブルに新しいカラムを追加してそこで管理させる。

現状のreportテーブルはこんな感じ。いいね数が管理できない。

既存のテーブルにカラムを追加するには、ALTER TABLE ADD文を使えばいいとメンターに助言を頂いたので、それを試してみる。(参考:https://www.dbonline.jp/mysql/table/index18.html#section3

like_countという名前のカラムをreportテーブルに追加する。数値で管理したいのでINT型、NULLは認めず、初期値は0。

ALTER TABLE reports ADD like_count INT NOT NULL DEFAULT 0

この後にFIRSTとかAFTER colmn_nameと指示すれば、任意の場所に挿入できるらしいが、今回は特にこだわらないのでそのまま。その場合、自動で最後尾に追加されるみたい。

like_countが一番下に追加された

無事、カラムが追加された。やったね!念のため、reportテーブルを表示させて既存のデータがどうなってるか確認してみる。

表示がずれて見にくいが、ちゃんと各オブジェクトの最後に初期値の0が追加されてる。あとは、データベースとやりとりするJava側のreportモデルも修正する。

これで、アプリケーション側でオブジェクト追加した時にもlike_countが反映されるはず。

2 ビューの修正

とりあえずアプリケーションでいいね数がちゃんと表示されるか確かめたい。現状の日報一覧表示画面はこんな感じ。

「タイトル」と「操作」の間に「いいね!」の列を作って、そこにいいねされた数を表示させたい。このへんは単なるHTMLコードの話なのであまりややこしくない。

表にいいねの項目を追加〜
追加後

無事、いいね!列が追加できた。初期値の0も表示されている。しかし・・・なんか、「操作」列の横幅が減って中身が改行されたせいで、一行一行の縦幅が広がっちゃったな・・・。CSSコードで修正できるんだろうけど、あまり詳しくないので今はとりあえず放置しておこ。

3 コントローラー修正

今回は、各日報の詳細表示画面から「いいね!」できるようにする。まずいいねボタンの設置から。自分の日報に「いいね!」されまくると困るので、ログインユーザーと違うユーザーの日報を見てる時だけボタンが表示されるようにif文で分岐させる。ボタンを押すと、該当の日報のreport_idをパラメータとして飛ばすようにする。

パラメータを受け取る側のJavaサーブレットだが、今回はReportLikeServeltを新規で作ることにした。なんかもっとスマートな方法もありそうだが、これが一番簡単そうだし、既存のコードをかき乱したくなかったので・・・。

ReportLikeServlet.java内の処理文

受け取ったreport_idを元に、データベースからReportのオブジェクトを取得(変数 r)。rの現在のいいね数をデータベースから取得(変数i)。iに+1を可算。新たなiの値をデータベースにコミット。そして自動で一覧表示のページへリダイレクトさせる。ついでに「○○さんの日報にいいね!しました」という内容のフラッシュメッセージも表示されるようにした。今回のプログラミングらしいところと言えばここぐらいのもんだ。大した内容じゃないけど。

というわけでドキドキ動作確認。

詳細ページのBefore
いいねボタンが追加されてる

いいね!ボタンを押してみると

ちゃんとリダイレクトしました。フラッシュメッセージも出てる。

いいね!数もちゃんと1増えてる。やったね!

というわけで、これでいいね機能の拡張は完了!大した内容ではないが結構疲れた・・・。はしょってるけど途中の動作確認で10回くらいエラー出してる。(スペルミス含む)もちろん、実用的な面でいうとこのいいね機能も完璧じゃない。例えば、1つの日報につきいいねは1人一回とか、いいねを取り消すみたいな機能をつけようとしたら、誰がどの日報にいいねしたかをデータベースに保存しなきゃないので今回みたいに単純じゃない。新しく「いいね!」のテーブルから新規作成しなきゃないかも。

とりあえず、今日は限界なのでもう寝る。お疲れっした。

コメント一覧

Bent Plate2020年8月28日 11:46 PM / 返信

This info is priceless. When can I find out more?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です