diff --git a/api/api.go b/api/api.go index 26b806b..ea584af 100644 --- a/api/api.go +++ b/api/api.go @@ -1,6 +1,8 @@ package api import ( + "net/http" + "github.com/Fluffy-Bean/TastyBites/front" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" @@ -16,11 +18,17 @@ func Serve(c Config) { if c.Logging { r.Use(middleware.Logger()) + r.Use(middleware.CORS()) } r.Use(middleware.Recover()) r.StaticFS("/", front.DistDir) + api := r.Group("/api") + api.GET("/items", func(e echo.Context) error { + return e.JSON(http.StatusOK, sampleData) + }) + r.HideBanner = true r.Logger.Fatal(r.Start(c.Host)) } diff --git a/api/testData.go b/api/testData.go new file mode 100644 index 0000000..7b2557a --- /dev/null +++ b/api/testData.go @@ -0,0 +1,59 @@ +package api + +type menuItem struct { + Name string `json:"name"` + Price float32 `json:"price"` + Labels []string `json:"labels"` + Image string `json:"image"` +} + +var sampleData = []menuItem{ + { + Name: "Bar of Soap", + Price: 69.99, + Labels: []string{"vegan", "spicy"}, + }, + { + Name: "Sock", + Price: 21, + Labels: []string{"vegan", "fish", "nut", "spicy"}, + }, + { + Name: "Brick", + Price: 0, + Labels: []string{"spicy"}, + }, + { + Name: "Toast", + Price: 4382749832743, + Labels: []string{"gluten"}, + }, + { + Name: "water", + Price: 1, + Labels: []string{"fish"}, + }, + { + Name: "half eaten mouldy bread", + Price: -9999, + Labels: []string{"nut"}, + }, + { + Name: "GwaGwa", + Price: 69, + Labels: []string{"nut"}, + Image: "/dab.jpg", + }, + { + Name: "Hogermellon", + Price: 1111, + Labels: []string{"fish"}, + Image: "/wathog.jpg", + }, + { + Name: "Blue HOGGGGG", + Price: 0, + Labels: []string{"nut", "gluten", "spicy"}, + Image: "/sonichog.jpg", + }, +} diff --git a/front/src/lib/APIDEV.js b/front/src/lib/api.js similarity index 59% rename from front/src/lib/APIDEV.js rename to front/src/lib/api.js index 241cbd3..f507e62 100644 --- a/front/src/lib/APIDEV.js +++ b/front/src/lib/api.js @@ -1,7 +1,14 @@ import Items from '%/lib/testData.js'; -export function getPopularToday() { - return Items; +export async function getPopularToday() { + const res = await fetch("/api/items") + const data = res.json() + + if (res.ok) { + return data + } else { + throw new Error("Failed to fetch popular today") + } } export function getMenuItems() { diff --git a/front/src/pages/PageIndex.svelte b/front/src/pages/PageIndex.svelte index 2879b67..e5ee40d 100644 --- a/front/src/pages/PageIndex.svelte +++ b/front/src/pages/PageIndex.svelte @@ -3,7 +3,7 @@ import { link } from 'svelte-spa-router'; import { ArrowUpRight } from "phosphor-svelte"; import { map, tileLayer, marker } from 'leaflet'; - import { getPopularToday } from "%/lib/APIDEV.js"; + import { getPopularToday } from "%/lib/api.js"; import AnnouncementBanner from "%/pages/elements/AnnouncementBanner.svelte"; import MenuList from "%/pages/elements/MenuList.svelte"; @@ -18,7 +18,8 @@ {maxZoom: 19, attribution: '© OpenStreetMap'} ).addTo(Map); marker([50.82304922105467, -0.432780150496344]).addTo(Map); - }) + + }); @@ -86,7 +87,13 @@

Popular Today

- +{#await items} +

Loading...

+{:then items} + +{:catch error} +

Failed to get todays specials!

+{/await} See All
diff --git a/front/src/pages/PageMenu.svelte b/front/src/pages/PageMenu.svelte index 4c9f608..2ee38cf 100644 --- a/front/src/pages/PageMenu.svelte +++ b/front/src/pages/PageMenu.svelte @@ -2,7 +2,7 @@ import { ArrowClockwise } from "phosphor-svelte"; import MenuList from "%/pages/elements/MenuList.svelte"; import DropDown from "%/components/DropDown.svelte"; - import { getMenuItems } from "%/lib/APIDEV.js"; + import { getMenuItems } from "%/lib/api.js"; let items = getMenuItems();