diff --git a/basket.go b/basket.go index a18111d..ed6178a 100644 --- a/basket.go +++ b/basket.go @@ -15,6 +15,7 @@ import ( ) const ( + DoesAuthKeyExist = `SELECT EXISTS(SELECT 1 FROM "user" WHERE "user".wii_id = $1 AND "user".auth_key IS NOT NULL)` QueryUserBasket = `SELECT "user".basket, "user".auth_key FROM "user" WHERE "user".wii_id = $1 LIMIT 1` QueryUserForOrder = `SELECT "user".basket, "user".price, "user".order_id FROM "user" WHERE "user".wii_id = $1 LIMIT 1` InsertAuthkey = `UPDATE "user" SET auth_key = $1 WHERE wii_id = $2` @@ -29,15 +30,15 @@ func authKey(r *Response) { } // First we query to determine if the user already has an auth key. If they do, reset the basket. - var _authKey string - row := pool.QueryRow(context.Background(), QueryUserBasket, r.request.Header.Get("X-WiiID")) - err = row.Scan(nil, &_authKey) + var authExists bool + row := pool.QueryRow(context.Background(), DoesAuthKeyExist, r.request.Header.Get("X-WiiID")) + err = row.Scan(&authExists) if err != nil { r.ReportError(err, http.StatusInternalServerError, nil) return } - if _authKey != "" { + if authExists { _, err = pool.Exec(context.Background(), ClearBasket, "", "", "[]", r.request.Header.Get("X-WiiID")) if err != nil { r.ReportError(err, http.StatusInternalServerError, nil) @@ -185,8 +186,8 @@ func basketAdd(r *Response) { func basketList(r *Response) { areaCode := r.request.URL.Query().Get("areaCode") - address := "132 Cornelius Parkway" - postalCode := "M6L2K5" + address := r.request.Header.Get("X-Address") + postalCode := r.request.Header.Get("X-Postalcode") var basketStr string row := pool.QueryRow(context.Background(), QueryUserBasket, r.request.Header.Get("X-WiiID")) diff --git a/dominos/country.go b/dominos/country.go index 8f5aaea..cced622 100644 --- a/dominos/country.go +++ b/dominos/country.go @@ -31,6 +31,10 @@ type Dominos struct { jsonResponse *map[string]any } +func (d *Dominos) JsonResponse() *map[string]any { + return d.jsonResponse +} + func NewDominos(db *pgxpool.Pool, r *http.Request) (*Dominos, error) { d := Dominos{} areaCode := r.URL.Query().Get("areaCode") diff --git a/dominos/dominos.go b/dominos/dominos.go index 015ec42..7045f91 100644 --- a/dominos/dominos.go +++ b/dominos/dominos.go @@ -32,6 +32,8 @@ func (d *Dominos) StoreLookup(zipCode, address string) ([]Store, error) { return nil, err } + d.jsonResponse = &jsonData + var stores []Store for i, storeData := range jsonData["Stores"].([]any) { if i == 5 { @@ -79,6 +81,8 @@ func (d *Dominos) AddressLookup(zipCode, address string) (*User, error) { return nil, err } + d.jsonResponse = &jsonData + if jsonData["Status"].(float64) != 0 && jsonData["Status"].(float64) != 1 { return nil, fmt.Errorf("domino's returned a status code of %.0f", jsonData["Status"].(float64)) } @@ -116,11 +120,12 @@ func (d *Dominos) GetStoreInfo(storeId string) (*Store, error) { return nil, err } + d.jsonResponse = &jsonData + information := "" if jsonData["LocationInfo"] != nil { information = jsonData["LocationInfo"].(string) } - address := wordwrap.WrapString(strings.Replace(jsonData["AddressDescription"].(string), "\n", " ", -1), 38) for i3, s := range strings.Split(address, "\n") { @@ -152,6 +157,7 @@ func (d *Dominos) GetStoreInfo(storeId string) (*Store, error) { func (d *Dominos) GetMenu(storeId string) ([]MenuCategory, error) { respChan := make(chan *http.Response) + fmt.Println(fmt.Sprintf("%s/power/store/%s/menu?lang=en&structured=true", d.apiURL, storeId)) go d.sendAsyncGET(fmt.Sprintf("%s/power/store/%s/menu?lang=en&structured=true", d.apiURL, storeId), respChan) storeResponse := <-respChan @@ -164,6 +170,8 @@ func (d *Dominos) GetMenu(storeId string) ([]MenuCategory, error) { return nil, err } + d.jsonResponse = &jsonData + var menus []MenuCategory for _, menuData := range jsonData["Categorization"].(map[string]any)["Food"].(map[string]any)["Categories"].([]any) { if menuData.(map[string]any)["Name"].(string) == "" { @@ -213,6 +221,8 @@ func (d *Dominos) GetItemList(storeId string, menuCode string) ([]Item, error) { return nil, err } + d.jsonResponse = &jsonData + var itemNames []string for _, menuData := range jsonData["Categorization"].(map[string]any)["Food"].(map[string]any)["Categories"].([]any) { // It is possible that in a past loop we already got the items. @@ -308,6 +318,8 @@ func (d *Dominos) GetFoodPrice(storeId string, itemId string) (string, error) { return "", err } + d.jsonResponse = &jsonData + return jsonData["Variants"].(map[string]any)[itemId].(map[string]any)["Price"].(string), nil } @@ -436,6 +448,8 @@ func (d *Dominos) AddItem(storeId, itemId, quantity string, extraToppings []Topp return nil, err } + d.jsonResponse = &jsonData + defaultToppings := jsonData["Variants"].(map[string]any)[itemId].(map[string]any)["Tags"].(map[string]any)["DefaultToppings"].(string) defaultSides := jsonData["Variants"].(map[string]any)[itemId].(map[string]any)["Tags"].(map[string]any)["DefaultSides"].(string) @@ -509,6 +523,8 @@ func (d *Dominos) GetItemPrice(storeId, itemID string) (string, string, error) { return "", "", err } + d.jsonResponse = &jsonData + return jsonData["Variants"].(map[string]any)[itemID].(map[string]any)["Name"].(string), jsonData["Variants"].(map[string]any)[itemID].(map[string]any)["Price"].(string), nil } @@ -572,6 +588,8 @@ func (d *Dominos) GetPrice(user *User) (*Basket, error) { return nil, err } + d.jsonResponse = &jsonData + payload["Order"].(map[string]any)["OrderID"] = jsonData["Order"].(map[string]any)["OrderID"].(string) data, err = json.Marshal(payload) if err != nil { @@ -592,6 +610,8 @@ func (d *Dominos) GetPrice(user *User) (*Basket, error) { return nil, err } + d.jsonResponse = &jsonData + // Finally, retrieve order price. payload["Order"].(map[string]any)["OrderID"] = jsonData["Order"].(map[string]any)["OrderID"].(string) payload["Order"].(map[string]any)["metaData"] = map[string]string{"orderFunnel": "payments"} @@ -614,6 +634,8 @@ func (d *Dominos) GetPrice(user *User) (*Basket, error) { return nil, err } + d.jsonResponse = &jsonData + if jsonData["Status"].(float64) != 0 && jsonData["Status"].(float64) != 1 { return nil, fmt.Errorf("domino's returned a status code of %.0f\nError: %s", jsonData["Status"].(float64), jsonData["StatusItems"].([]any)[0].(map[string]any)["Code"].(string)) } @@ -731,6 +753,8 @@ func (d *Dominos) PlaceOrder(info *User) error { return err } + d.jsonResponse = &jsonData + if jsonData["Status"].(float64) != 0 && jsonData["Status"].(float64) != 1 { return fmt.Errorf("domino's returned a status code of %.0f", jsonData["Status"].(float64)) } diff --git a/main_menu.go b/main_menu.go index ed7427e..6bc8ef2 100644 --- a/main_menu.go +++ b/main_menu.go @@ -33,7 +33,7 @@ func categoryList(r *Response) { return } - stores, err := dom.StoreLookup("M6L2K7", "132 Cornelius Parkway") + stores, err := dom.StoreLookup(r.request.Header.Get("X-Postalcode"), r.request.Header.Get("X-Address")) if err != nil { r.ReportError(err, http.StatusInternalServerError, dom.JsonResponse()) return @@ -52,7 +52,7 @@ func categoryList(r *Response) { ShopCode: CDATA{storeData.StoreID}, HomeCode: CDATA{1}, Name: CDATA{"Domino's Pizza"}, - Catchphrase: CDATA{"Nope"}, + Catchphrase: CDATA{storeData.Address}, MinPrice: CDATA{shopData.MinPrice}, Yoyaku: CDATA{1}, Activate: CDATA{"on"},