heo-jae-won@home:~$

  • meeting-room-reservation

    考慮する場合の数:開始時間が終了時間以降にならないようにする 会議室の予約に基本的に必要な条件を自分で考えて実装することになりました。 最初に考えたのは、開始時間が終了時間以降にならないようにすることです。 最初に活用したのは、java.timeパッケージのZonedDateTimeクラス クラスに属するメソッドのisBefore(), isAfter()でした。 しかし、これだけでは不十分で、isBefore()とisAfter()というメソッドでは、会議が終わる時間に合わせて登録する場合、重複とみなされました。 15:00に終わったら15:00開始で登録することがほとんどの場合だったので、isBeforeやisAfterメソッドは使うことができませんでした。 //inputStartDateTime: ユーザーが選択した会議開始時間 //inputEndDateTime: ユーザーが選択した会議終了時間 boolean previousThaninputEndDateTime = inputStartDateTime.atZone(ZoneId.of("Asia/Seoul")) .isBefore(inputEndDateTime.atZone(ZoneId.of("Asia/Seoul"))); compareToに変更し、15:00に終わったら15:00に始まってもエラーに見なさないようにしました。 //inputStartDateTime: ユーザーが選択した会議開始時間 //inputEndDateTime: ユーザーが選択した会議終了時間 public void insertEvent(MeetingReqDto meetingReqDto) throws Exception { boolean previousThaninputEndDateTime = inputStartDateTime.atZone(ZoneId.of("Asia/Seoul")) .compareTo(inputEndDateTime.atZone(ZoneId.of("Asia/Seoul"))) < 0; if (!previousThaninputEndDateTime) { throw new BizException(ErrorEnum.CALENDAR_END_BEFORE_START); } } 考慮する場合の数:スケジュールが重ならないようにする 次の課題は、スケジュールが重複しないようにすることでした。 考えても考えても明確なアルゴリズムが浮かばなかったです。 まずは全てのスケジュールが必要なのではなく、開始時間付近の2つのスケジュールがわかればよいという結論に至りました。 したがって、ユーザが要求した開始時刻の前後に1つずつスケジュールを照会する。 //inputStartDateTime:...

  • teenager-card-issuing

    ジックナンバー脱皮 if文で値を受け取って条件に合わせて分岐処理する場合、下記のような形になります。 if (payload.responseCode =='0') { //logic openFailLayer(); } else if(payload.responseCode == '1') { //logic location.href = '/success'; } else { //logic openFailLayer(); } マジックナンバーはメンテナンス性を損なうので、明示的にします。 const IDENTITY_NOT_AUTHENTICATED = '0'; const IDENTITY_AUTHENTICATED = '1'; const IDENTITY_NOT_OWNED = '2'; if (payload.responseCode === IDENTITY_NOT_AUTHENTICATED) { //logic openFailLayer(); } else if (payload.responseCode === IDENTITY_AUTHENTICATED)...

  • pet-card maker program

    CSRからSSR環境への移行 importの文法は基本的にnode_modulesからインポートする文法です。 node_modulesフォルダがあれば、つまり、一度だけnpm installが行われていれば、外部ネットワーク・内部ネットワークを問いません。 ただ、node.jsがインストールされていないと最初にinstallをすることができないのですが、閉じたネットワーク環境ではnode.jsをインストールすることができませんでした。 そのため、script srcに切り替える必要があり、そのためには外部からscript jsをダウンロードして持ち込む必要があります。 https://www.jsdelivr.com/package/npm/fabric ---cdn download https://cdnjs.com/ ---cdn 元のCSR環境では下記のように各機能が全部分離されている状態でした。 callする順番は気をつけなければなりません。親関数が呼び出された後、子関数が活性化される子関数が存在します。 従って、canvasが最初で、次にtextを活性化させ、次にfontを活性化させる順番です。 import initCanvas from "./function/initCanvas"; import initText from "./function/initText.js"; import initFont from "./function/initFont"; . . . const init = () => { initCanvas.call(this); initText.call(this); initFont.call(this); . . }; export default init; 以下はSSRに切り替えたものです。CSRと同じように最初に実行されるべきものから呼び出します。 各機能別に分離されている関数は全部一箇所にまとめた形ですが、これは顧客の要求でした。 OOPのように各責任ごとにファイルを分離せず、一つのファイルにまとめてほしいと要請されました。 OOPの原則に反することですが、要求通りに実装することが優先だったので、そのように実装しました。...