Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

69 Commits

Folders and files

Repository files navigation

注文管理システム

概要

高校の文化祭で実際に運用した注文管理システムです。 「注文のために並ぶ時間」と「調理を待つ時間」を分離することで回転率を向上させ、 出店した飲食店の中で売上No.1を達成しました。

お客様がタブレットから注文すると注文番号が発行され、キッチン側にリアルタイムで 通知が届く仕組みになっています。

ブランチ構成

ブランチ 内容
legacy 文化祭当日に実際に運用していたコード
master 技術力向上後にリファクタリングしたバージョン

技術スタック

領域 技術
フロントエンド TypeScript
バックエンド Node.js (Express)
データベース MySQL
インフラ Raspberry Pi 5 (オンプレミス)
通信 REST API / WebSocket

システム構成

  • 注文画面(顧客向け): タブレットから注文を確定 → REST API経由でDBに保存 → 注文番号を発行
  • 注文確認画面(キッチン向け): WebSocketでリアルタイム受信
  • 売上確認画面(運営向け): 時間帯別の売上金額を表示
  • インフラ: 学校所有のRaspberry Pi 5上にDocker環境を構築し、校内Wi-Fi経由で各端末からアクセス

設計上の判断

REST API と WebSocket の使い分け 注文画面は一回限りの操作でありサーバーからの常時通知が不要なため REST API を採用。 キッチン確認画面は新着注文を即座に把握する必要があるため、ポーリング遅延を避けて WebSocket によるサーバープッシュを採用しました。

運用での学び

本番運用中、DB接続上限エラー(too many connections)により注文フローが約5分間停止しました。 原因はDB接続をクローズする処理の欠落による接続リークでした。 ログから原因を特定・復旧させると同時に、口頭での注文受付に切り替えて現場運営を止めない 対応を取りました。この経験からリソース管理と負荷テストの重要性を学び、 masterブランチではこの問題を修正しています。

必須環境

  • Docker Engine

初期設定

プロジェクトのルートディレクトリに .env ファイルを作成し、以下を記載してください。

ROOT_PASSWORD=<強力なパスワード>

起動

# 起動
docker compose up -d

# 終了
docker compose down

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages