---
# System prepended metadata

title: Qrest Wiki Firebase
tags: [Qrest]

---

###### tags: `Qrest`
# Qrest Wiki Firebase

## Cloud Functions
### addToCart
必要な情報をJSON形式で受け取りFirestoreに作成・変更を行う。


#### Request
URL : https://us-central1-qrest-7a7c0.cloudfunctions.net/addToCart
Method : POST
Header: Content-Type: application/json
Body : JSON
```json=
{
    "uid" : "uid",
    "event_id" : "event_id",
    "shop_id" : "shop_id",
    "menu_id" : "menu_id",
    "count" : 1
} 
```

#### Response
とりあえず成功時だけ平文で返してます。どんなエラーが今後発生するかがわからないので、試しながら失敗時・成功時を書いていきます。

**成功** : Success


### cartTotalCalc
カートの中のメニューの作成・更新をトリガーに店舗合計・カート合計を計算します。

#### Request
Firestore トリガーの為、ありません。

#### Response 
Firestpre トリガーの為、ありません。


## Firestore
* [] ・・・ コレクション
* {} ・・・ ドキュメント

#### 改良版データ構造
```json=
- events(event_id) [
    - shops(shop_id) [
        - code:num(UXのための管理番号)
        - name:str
        - desc:str
        - img:str(CloudStorageのパスを置いてます)
        - space:str
        - group:str
        - sales:num <==売り上げ
        - menus(menu_id) [
            - name:str
            - desc:str
            - price:num(単価)
            - img:str
            - soldout:bool
        ]
        - orders(order_id) [
            - complete:bool //trueなら会計済み
            - seat:str
            - total:num(小計)
            - time:timestamp <= 増えた
            - menus(menu_id) [
                - name:str
                - count:num
                - price:num(単価)
            ]
        ]
    ]
]

- codes(code) [ // 6桁の番号code
    - path: documentPath // events/event_id/shops/shop_id
    - staff(uid) [
        - type: num // 8「superadmin」 4「admin」 2「op」 1「unable」
    ]
]

- users(uid) [
    - events(event_id) [
        - orders(order_id) [
            - ordered:bool //trueなら注文済み
            - complete:bool //trueなら会計済み
            - shop_id:str(shop_id)
            - seat:str
            - total:num(小計)
            - time:timestamp <= 増えた
            - menus(menu_id) [
                - name:str
                - count:num
                - price:num(単価)
            ]
        ]
    ]
] 

```





#### 旧データ構造（orderに欠陥があったので廃止）
``` json
- event [
    - eventid*{
        - name:string
        - carts[
            - uid*{
                - total(支払い合計):number
                - stores(レストランのID)* [
                    - name*:string
                    - total(店舗合計):number
                    - menus(メニューのID)* [
                        - name*:string
                        - count*:number
                        - price(単価):number
                    ] 
                ]
            }
        ]
        - schedule[
            - scheduleid*{
                - start:timestamp
                - end:timestamp
            }
        ]
        - store[
            - storeid*{
                - name:string
                - desc:string
                - image:string
                - class:string
                - space:string
                - menu[
                    - menuid*{
                        - name:string
                        - price:number
                        - desc:string
                        - image:string
                        - soldout:boolean
                    }
                ]
            }
        ]
    }
]
```

<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%);
}

h4::before {
    content: "★";
    color: var(--main);
    margin-right: 8px;
}

</style>

