暇人の寝室
技術系の記事や読書・アニメの感想などを投稿します。
プログラミング
前回はReact側の大まかな実装を紹介したが、今回はLaravel側を紹介する。
前回紹介したとおり、アプリ全体の流れは下記の通り。
Eloquentを利用せず自作モデルを作った。
これはSQLを直書きして、SQLに親しみを得るためである。
Eloquent自体は利用したことがあるのだが、SQLを意識せずに書くことが出来る反面、SQLの勉強にはならない。
また、モデル部分をあえて自身で実装することで、コードの共通化の練習がしたいという理由もある。
基本的にはクエリの発行のためのモデルへのアクセスが記述されている。
ただそれ以外に、連続日数の計算ロジックが含まれていたりする。
これはコントローラとしての役割以外のものであり、このままだとファットコントローラになっていく予感がある。
モデル側に実装するか、モデルとコントローラの間にサービスを挟むかしないとよろしくないと感じた。
一番外側の部分のみテストを書いたので、ほぼコントローラのテストとなっていると思う。
リクエストを行い、レスポンスが期待通りかをテストした。
工夫した点として、DateTimeImmutableのラッパーがある。
これはテスト時の日時をPHPUnit実行時に任意の日時に固定するためである。
<?php
namespace App\Utils;
class SystemClock {
public function now(){
return new \DateTimeImmutable();
}
public function getLastSunday(){
return new \DateTimeImmutable('last sunday');
}
}
Laravelのセッションを利用した。
今回API認証はセッションを用いて、ページログインしたユーザのみがアクセスできるようにした。
ただしデフォルトではroute/api.phpに記述したルートにはCookieは有効化されていないため、そのままではどうあがいても認証はなされない。
LaravelではトークンによるAPI認証が想定されているのだろう。
ServiceProviderにweb.phpと同じくCookieの有効化などの記述を追加することでAPIにもCookieを確認してセッションによる認証を行うことができる。
今回フロントのスタイリングにstyled-componentを利用したが、なんとなく見づらい。
SCSSを利用してCSSファイルとしての管理の方が扱いやすくて良い気がするので、その辺りを書き直そうと思う。
その他バグの改修や、利用しながら改善したい部分を改善していこうと思う。