コンテンツにスキップ

00 教材管理システム

あなたは優秀なJavaのエンジニアです。システムの設計とコーディングを段階的にお願いします。 各段階ごとに指示を出します。1段階がOKになるまでは2段階目に進まないでください。以降も同様です。 1段階:要件の定義と、データを中心とした基本設計をします。テーブル定義(物理名を記載した表形式)をしてください。機能一覧、管理画面とユーザ画面の一覧(表示項目、入力項目)を定義します。システム構成を決定します 2段階:ER図、DDL、ディレクトリ構成を出力してください。(src/main/java/com/sup/study 配下、src/main/resources/templates 配下、src/main/resources/static 配下の構成を考えてリストアップしてください) 3段階:サーバ側のコードを生成してください。(src/main/java/com/sup/study 配下) 4段階:ビュー側のコードを生成してください。(src/main/resources/templates 配下、src/main/resources/static 配下)

要件

教材管理システムを構築します。 ユースケースとして、管理者、教師、メンター、受講者がいます。 教師は、コンテンツを提供する人です。作成者には教師の名前が入ります。 教師は、自身のアカウントでコンテンツを作成し、できたら保存か申請ができます。申請を出すと管理者承認し、公開となります。 公開されたコンテンツは受講者が受講できます。 メンターは、受講者の質問対応や学習計画のフォローをする人です。今回のシステム内には機能としては登場しないかもしれませんが、将来的に追加する可能性があります。

教材構成

コース > セクション > サブセクション > サブサブセクション > ... > レッスン

コースには複数のセクションがあります。 セクションにレッスンを紐づけます。 セクションは親子構造にして、階層を設計上は無限にできるようにします。

レッスンにはコンテンツを1つ以上紐づけます。 コンテンツには、名称、概要、コンテンツタイプ、作成者、ステータス(下書き、審査中、公開待ち、公開中)、公開日時などは共通で管理します。コンテンツタイプは、ビデオ、テキスト、クイズ(選択式問題)、ファイルなどの分類をします。 ビデオコンテンツは、youtubeやVimeoのリンクを指定する方法と、Cloudflare R2で独自に構築する方法で、ブラウザ内でのストリーミング配信にしたいです。名称、概要、ビデオ種別、ビデオID、ビデオURLは含めてください。

テキストコンテンツは、名称、概要、本文を含めてください。本文をプレーンテキストか、マークダウン形式で入力し、表示の際にはデザインされたHTML形式で表示されるようにしたいです。

クイズコンテンツは、クイズカテゴリ、名称、問題文と選択肢があり、複数の選択肢から正解を選び正解を判定するようにしたいです。基本的には4択式で1つが正解を考えいますが、6択から正解を2つを選ぶような問題も作れるように汎用的な構造にしたいです。

ファイルコンテンツは、名称、概要、ファイル種別を含めてください。PDF、zip、txt、オフィス形式のファイルなどをタイトルと説明付きで登録し、ダウンロードが可能なようにしたいです。

役割と使用技術

Java、Spring、JPA、MyBatis、MySQL、SpringSecurity、Thymeleafを効率的に利用したいです。 以下をベースに設計してください。

クラス 役割 使用技術
Entity テーブル1件を表す。登録・更新・削除を担当 JPA
Repository Entityに対するCRUDを担当 Spring Data JPA
Mapper JOIN・集計・検索などのSQLを担当 MyBatis
DTO 画面表示やAPIレスポンス用のデータ 共通
Form 入力値の受け取りとバリデーション Spring MVC
SearchCondition 検索条件の受け渡し MyBatis
Service ビジネスロジックを実装し、JPAとMyBatisを組み合わせる Spring

まずは、1段階をお願いします。