<h3>プロジェクト詳細</h3>
<p>受託案件としてインフルエンサー向けクラウドファンディングのWebアプリ開発に携わりました。
インフルエンサーやライバーがイベントを行う際に資金を募りたいときに利用するWebサービスです。
支援を募集したいインフルエンサーはクラファンプロジェクトを立ち上げ、ユーザーから支援を募り、支援の見返りとしてグッズやライブチケットなどを支援者に贈ります。
<br>プロジェクト詳細画面から、リターンの閲覧及び購入、プロジェクトの活動報告や応援コメント等を閲覧が出来ます。</p>
<font color="red">※ベータ版としてリリースしています。</font>
<h3>課題</h3>
<p>
クラファンの問題点として、支援を募るプロジェクトの資金が目標金額に達成しない際、支援したユーザーへ返金する必要があります。(上記のアイドル向けクラファンは目標金額達成の有無に関わらず、プロジェクトを実行する仕様です。)
その為、ユーザーが支援する際に一旦決済を仮売上とし、プロジェクトが目標金額達成時のみ、仮売上を実売上にする必要がありました。<br>
しかし、当時は決済代行サービスとしてStripeを使用しており、仮売上として計上しておける期間が非常に短いという問題点がありました。
</p>
<h3>取り組み</h3>
<p>
そこで、クラファンプロジェクトを支援する期間(仮売上として計上しておける期間)を長く設ける必要があります。
そこで、決済手数料が安く、仮売上の期間が長い決済代行サービスを調査したところGMO PAYMENTが良いと考え、採用する事になりました。
最終的にはStripeだけでなく、GMO PAYMENTの決済機能のレビューも担当しました。
</p>
<h3>工夫した点</h3>
<p>
決済機能は確実に欠陥がない様に実装する必要がありますので、レビューの際には何度もコードを見直し、何時間もかけてデバッグしました。エラーハンドリングや決済を敢えて失敗させた際のDB状況等を確認し、バグを確実に洗い出しました。
</p>
<h3>実装箇所及び機能</h3>
<ul>
【TOP画面】
<li>並べ替え機能(ランダム、支援額ランキング、新規プロジェクト順)</li>
<li>支援総額と支援人数(同じユーザーが2度購入しても1回で算出)の算出ロジック作成</li>
<li>プロジェクトをコンポーネント化(コンポーネントクラスも実装)</li>
<li>非同期処理を用いたお気に入り登録処理</li>
<br>【プロジェクト作成画面】
<li>非同期処理を用いたプロジェクト作成フォームの登録、更新処理</li>
<li>カレンダーライブラリの修正(プロジェクト掲載開始日を選択すると、掲載終了日を60日後までしか設定できない様にする)</li>
<br>【インフルエンサー用プロジェクト詳細】
<li>インフルエンサーが閲覧、返信するユーザーからの応援コメント画面</li>
<li>インフルエンサーが投稿する活動報告画面</li>
<br>【管理画面】
<li>プロジェクトのCRUD処理を実装(コントローラーを作成)</li>
<li>リターンのCRUD処理を実装(コントローラーを作成)</li>
<li>応援コメントのCRUD処理を実装(コントローラーを作成)</li>
<li>活動報告のCRUD処理を実装(コントローラーを作成)</li>
<li>タグ管理画面</li>
<li>プロジェクトプレビューの実装</li>
<br>【DB関連】
<li>ダミーデータの作成(stateを用いたFactoryファイルの作成、Seeder)</li>
<li>カラム追加、削除、ユニークキー、外部制約キーの設定</li>
<br>【テストコード】
<li>各コントローラーのFeatureテスト</li>
<li>メール送信機能のテストコードを実装</li>
<br>【その他】
<li>インフルエンサーのプロジェクト編集画面に不正アクセスされないようにPolicy制約を実装</li>
<li>レスポンシブ対応(CSS)</li>
<li>DB登録・更新時における例外処理</li>
<li>Carbonを用いた時間関連の処理</li>
<li>Hash化、暗号化</li>
<li>session</li>
<li>非同期処理(jqueryのAjax, axiosメソッド, async, await)</li>
</ul>
<h3>実装はしていないが理解している部分</h3>
プルリクエストのレビューはしていましたので、実装していないもののある程度理解している箇所を下記に記します。
<ul>
<li>PayPay, Pay.JP, Stripe, GMOペイメントの決済機能</li>
<li>configへルパ関数</li>
<li>Facade</li>
<li>Traits(ソフトデリートや共通した処理で使用しました)</li>
<li>メール、通知(Mailable, Notification)、バッチ処理(schedule)</li>
</ul>
<h3>お客様との打ち合わせ</h3>
毎週お客様との打ち合わせを行なっており、下記の内容を実施しています。
<li>要件の確認</li>
<li>システム保守の修正依頼の聞き取り、修正後の報告</li>
<li>打ち合わせ後のタスク作成</li>
<li>見積書の提出</li>