###### tags: `Qrest` # Qrest Wiki Customer ## ファイル構造 ``` . ├ components │ ├ common // 共通 │ │ ├ menu │ │ │ ├ logoutBtn.tsx │ │ │ ├ menu.tsx │ │ │ ├ menuItem.tsx │ │ │ └ menuLinkItem.tsx │ │ ├ logo.tsx │ │ └ pageWrapper.tsx │ ├ shopDetail // 店舗詳細&メニュー一覧画面 │ │ └ menuCard.tsx │ └ shopList // 店舗一覧画面 │   └ shopCard.tsx ├ contexts │ ├ AuthProvider.tsx │ └ ThemeProvider.tsx ├ firebase │ ├ firebase.ts │ ├ Menu.ts // メニューのJSON構造 │ └ shop.ts // 店舗のJSON構造 ├ pages │ ├ [event_id] │ │ ├ [shop_id] │ │ │ └ [menu_id].tsx // メニュー詳細画面 │ │ └ [shop_id].tsx // 店舗詳細&メニュー一覧画面 │ ├ [event_id].tsx // 店舗一覧画面 │ └ _app.tsx ├ public │ └ favicon.ico └ styles   ├ common   │ ├ menu.module.scss   │ └ pageWrapper.module.scss   ├ menuDetail // メニュー詳細画面   │ └ menuDetail.module.scss   ├ shopDetail // 店舗詳細&メニュー一覧画面   │ ├ menuCard.module.scss   │ └ shopDetail.module.scss   ├ shopList // 店舗一覧画面   │ ├ index.module.scss   │ └ shopCard.module.scss   ├ _variables.scss   └ globals.css ``` ## URL | 画面名 | URL | 説明 | | --- | --- | --- | | 店舗一覧 | /[event_id] | event_id: イベント識別コード | | 店舗詳細 | /[event_id]/[shop_id] | event_id: イベント識別コード<br>shop_id: 店舗識別コード | | 商品詳細 | /[event_id]/[shop_id]/[food_id] | event_id: イベント識別コード<br>shop_id: 店舗識別コード<br>food_id: 商品識別コード | ## テーマカラー | テーマ | メイン | アクセント | | --- | --- | --- | | red | #ffffff | #cb2e27 | | green | #ffffff | #487c35 | | yellow | #404040 | #f7d441 | ## エラー識別番号 文章が長くHackMDでは見にくかったためスプレッドシートに移動しました。 [モバイルエラー一覧](https://docs.google.com/spreadsheets/d/1V_ondlt7fMHpyDePO1_EdW4UgoYW1vikH4tXtI5Ozr8/edit?usp=sharing) ## 仕様 ### 個数 カートに入れれる上限数は一商品あたり5つまで。 商品詳細画面では1から5が選択可能。 カート画面で商品を0にしたら商品は消える。 ## メモ ### ディレクトリ構造を作るサイト [codogue.com](https://codogue.com/asciitree/) 元になるテキスト ``` . components common // 共通 menu logoutBtn.tsx menu.tsx menuItem.tsx menuLinkItem.tsx logo.tsx pageWrapper.tsx shopDetail // 店舗詳細&メニュー一覧画面 menuCard.tsx shopList // 店舗一覧画面 shopCard.tsx contexts AuthProvider.tsx ThemeProvider.tsx firebase firebase.ts Menu.ts // メニューのJSON構造 shop.ts // 店舗のJSON構造 pages [event_id] [shop_id] [menu_id].tsx // メニュー詳細画面 [shop_id].tsx // 店舗詳細&メニュー一覧画面 [event_id].tsx // 店舗一覧画面 _app.tsx public favicon.ico styles common menu.module.scss pageWrapper.module.scss menuDetail // メニュー詳細画面 menuDetail.module.scss shopDetail // 店舗詳細&メニュー一覧画面 menuCard.module.scss shopDetail.module.scss shopList // 店舗一覧画面 index.module.scss shopCard.module.scss _variables.scss globals.css ``` ## クラス図 ``` mermaid classDiagram class AuthProvider { +loggedIn } class ThemeProvider { +selectTheme +accentColor +mainColor +chageTheme() } class firebase { } class PageWrapper { +return(children:Props) } class Menu { -isMenuOpen -menuOpenToggle() +return() } class MenuLinkItem { -lock -showAlert() } class MenuItem { -lock } class LogoutBtn { -toLoginPage() -logout() } class Logo { } class Index { -getServerSideProps() } class Card { +return(shop:CardProps) } class MenuLinkItemProps { <<type>> } PageWrapper o-- Logo PageWrapper o-- Menu Menu o-- MenuLinkItem Menu o-- MenuItem Menu o-- LogoutBtn Index o-- PageWrapper Index -- firebase LogoutBtn <|-- AuthProvider LogoutBtn <|-- ThemeProvider MenuItem <|-- AuthProvider MenuItem <|-- ThemeProvider MenuLinkItem <|-- AuthProvider MenuLinkItem <|-- ThemeProvider Menu <|-- ThemeProvider Index *-- Card ``` ```mermaid classDiagram class Index { +return(shops) -getServerSideProps(): 店舗情報の取得 } ``` <style> :root { --main: #00a960; --sub: #b8d200; } h2 { padding: 1rem 2rem; color: #fff; background-image: -webkit-gradient(linear, left top, right top, from(var(--main)), to(var(--sub))); background-image: -webkit-linear-gradient(left, var(--main) 0%, var(--sub) 100%); background-image: linear-gradient(to right, var(--main) 0%, var(--sub) 100%); } h3 { position: relative; padding: 1rem .5rem; } h3:after { position: absolute; bottom: 0; left: 0; width: 100%; height: 5px; content: ''; background-image: -webkit-gradient(linear, left top, right top, from(var(--main)), to(var(--sub))); background-image: -webkit-linear-gradient(left, var(--main) 0%, var(--sub) 100%); background-image: linear-gradient(to right, var(--main) 0%, var(--sub) 100%); } </style>