アーキテクチャの概要
School_Libraryプロジェクトは、学校図書館(ACLC Library)の運営をデジタル化および自動化するために構築された、フル機能のモノリシックなウェブアプリケーションです。在庫のカタログ化、学生の予約管理、貸し出しの発行、罰金の査定など、図書館のロジスティクスのエンドツーエンドのライフサイクルを処理します。
- フレームワークとパターン: 堅牢なMVT(Model-View-Template)アーキテクチャ・パターンを使用してDjango 4.1.5上に構築されています。
- データベース戦略: 迅速なローカル開発にはSQLiteを使用し、本番環境にはPostgreSQL(
psycopg2-binary経由)を使用するように動的に構成されています。 - デプロイメント: アプリケーションはDockerと
docker-composeを使用して厳密にコンテナ化されており、Gunicorn WSGIサーバーを実行するPython 3.10環境と、AlpineベースのPostgreSQLデータベースをオーケストレーションします。
解決されたエンジニアリング課題
コンピュータビジョンによる自動カタログ化
何百冊もの本のデータを手動で入力することは非常に面倒で、エラーが発生しやすくなります。これを解決するため、bookscraperアプリ内にカスタムのバーコードスキャン・パイプラインを設計しました。本のバーコード画像をアップロードすると、システムはOpenCV、Pillow、およびpyzbarを使用してISBNをデコードします。その後、Google Books APIに動的にクエリを実行して、タイトル、著者、出版社、出版日、表紙のサムネイルなどの豊富なメタデータを取得し、データベースに自動的に事前入力します。
在庫管理における並行性
正確なコピー数を管理し、希少な本の二重予約を防ぐことは、重要な競合状態(レースコンディション)の問題です。LoanおよびBookモデルは、オーバーライドされたsave()メソッドとDjangoシグナルを活用して、在庫を厳密に管理します。貸し出しが発行または返却されると、システムは自動的にavailable_copiesを調整します。本の利用可能なコピー数がゼロになると、そのis_availableフラグが自動的にFalseに切り替わり、それ以上の予約試行を明示的にブロックし、同時アクセス時にはValidationErrorを発生させます。
自動通知ライフサイクル
司書の手動介入なしに学生に予約状況を知らせるために、構造化されたReservationモデルが状態(保留中、確認済み、アクティブ、キャンセル済み)を追跡します。状態が移行すると、Djangoに組み込まれたSMTPユーティリティを介してHTMLテンプレートのメールがトリガーされ、ユーザーに確認またはキャンセルを即座に警告します。
高度な検索とUX
SearchBooksListViewは、Django ORMのQオブジェクトを活用して、本のタイトル、著者、説明全体にわたる強力で多面的な検索を提供します。司書用バックエンドには、django-material-adminを利用してGoogleのマテリアルデザインを標準のDjango管理パネルに注入し、非技術者にも非常に洗練された使いやすいインターフェースを作成しました。
成果
このキャップストーン・プロジェクトは、従来のCRUDウェブアプリケーションと自動化ツール(OpenCV/API)を橋渡しして、現実世界のロジスティクスのボトルネックを解決する力強さを示しています。純粋な手動の紙ベースの図書館を、デジタル化された自動カタログ化システムへと変革しました。