これから友人と企画・主催するイベントの知見と管理アプリを開発していくときに勉強になったことを、復習しやすくまたは記憶しやすくするために記録したいと思う。他の人の参考にもなればなおうれしいです。
まずアプリの全体の概要とアーキテクチャ、データベース設計を決めた
1. システム全体の概要
- ユーザー側: チケットを生成・取得し、QRコードをスキャンして利用します。
- ドリンク側: QRコードを読み取ってチケットの検証を行います。
- サーバー側: チケットの生成、保存、検証、QRコードの管理を行います。
2. アーキテクチャ
-
フロントエンド (TypeScript + フレームワーク例: React, Angular, Vue.js)
- チケット生成画面: ユーザーがチケットを生成するためのインターフェース。
- QRコード表示: 生成されたQRコードを表示する機能。
- QRコードスキャン機能: ドリンク側でQRコードを読み取るインターフェース。
-
バックエンド (Java Spring Boot)
-
APIサーバー:
- /generate-ticket: チケットを生成し、QRコードを作成するAPI。
- /validate-ticket: QRコードを読み取り、チケットの有効性を検証するAPI。
-
サービス層:
- チケット生成サービス: チケットのID生成、QRコード生成、MySQLへの保存。
- チケット検証サービス: QRコードを解析し、チケットの検証。
-
データベース層:
- MySQLでチケット情報を管理。例えば、ticketsテーブルにチケットID、有効期限、使用済みフラグなどを格納。
-
APIサーバー:
-
QRコード生成ライブラリ
- JavaでQRコードを生成するために、ZXingやQRCodeなどのライブラリを使用。
3. データベース設計
-
ticketsテーブル
- id: チケットID (主キー)
- code: QRコードでエンコードされたチケットコード
- expires_at: 有効期限
- is_used: チケットが使用済みかどうか
2. Spring Initializarでプロジェクトを作成し、eclipseで作業開始
Spring Initializarで作成したプロジェクトを見えやすいようにデスクトップにチケット管理アプリというフォルダを作成し、そこにダウンロードしたプロジェクトを移動させ、eclipseでインポートして作業開始できるようにした。
3. Gitでのローカルリポジトリ作成とGithubでのリモートリポジトリ作成またローカルとの接続
プロジェクトのルートディレクトリでgit initを行いリポジトリを初期化。
.gitignoreファイルを作成し、また設定も行った。
設定内容はJava、log、Eclipse-specificに関して行いgitで追跡しなくて良いファイルやディレクトリを指定した。
またGithubでリモートリポジトリを作成するのは成功したが、パスワードの代わりにアクセストークンの生成や、ライセンスの設定(今回はMIT)、リモートとの接続が難しかった。
特にリモートとの接続は、リモートがmainブランチなのに対してローカル上ではmasterであったり、origin配下にmainブランチではなくURIがそのまま貼ってあったり、pushするとnon-fast-forwardのエラーが出て、結局リモートのブランチでライセンスの設定をしてから行ったからローカルのブランチに無い変更がリモートにある状態になったので、ローカルリポジトリ名をmasterからmainに変更して、外部のターミナルからリポジトリのディレクトリに移動して、giit pull origin行った。その後、Gitリポジトリビューローカルのmainを選択してブランチへプッシュしてgit branch -rで確認した。
4. そのあと、各パッケージ・クラスを作成して、application.propertiesを設定しデータベース接続を設定した。(依存関係はSpring Initializarでのプロジェクト作成時にあらかたしてある)###
各パッケージの内容
・controller/:
APIエンドポイントを処理するクラスを配置。
TicketController.java
・service/:
ビジネスロジックを実装するクラスを配置。
例: TicketService.java
・model/:
データベースエンティティを表すクラスを配置。
例: Ticket.java(チケット情報のモデルクラス)
・repository/:
データベースとのやり取りを行うリポジトリインターフェースを配置。
例: TicketRepository.java
・exception/ (任意):
カスタム例外クラスを配置。
例: TicketNotFoundException.java(チケットが見つからなかった場合の例外
そして、MySQLサーバーの設定を行ってからapplication.propertiesの設定を行った。
少してこづったけど、MySQL@8.0と指定しながらやってあげれば行けた。
追記
まだまだまとまっていないため開発しながら隙間時間で頭と一緒に整理していこうと思いますので、温かい目でよろしくお願いいたします。初めての個人開発頑張ります。