Show market list
This commit is contained in:
parent
6cf1d4b918
commit
cdeb088a13
|
@ -26,3 +26,16 @@ func HandleIndex(sc context.ServerContext) echo.HandlerFunc {
|
||||||
return sc.Render(c, http.StatusOK, "index.html", data)
|
return sc.Render(c, http.StatusOK, "index.html", data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func HandleMarkets(sc context.ServerContext) echo.HandlerFunc {
|
||||||
|
return func(c echo.Context) error {
|
||||||
|
var (
|
||||||
|
markets []db.Market
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
if err = sc.Db.FetchActiveMarkets(&markets); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return c.JSON(http.StatusOK, markets)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -24,7 +24,6 @@ func mountMiddleware(e *echo.Echo, sc ServerContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func addFrontendRoutes(e *echo.Echo, sc ServerContext) {
|
func addFrontendRoutes(e *echo.Echo, sc ServerContext) {
|
||||||
GET(e, sc, "/", handler.HandleIndex)
|
|
||||||
GET(e, sc, "/user",
|
GET(e, sc, "/user",
|
||||||
handler.HandleUser,
|
handler.HandleUser,
|
||||||
middleware.SessionGuard)
|
middleware.SessionGuard)
|
||||||
|
@ -41,6 +40,7 @@ func addFrontendRoutes(e *echo.Echo, sc ServerContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func addBackendRoutes(e *echo.Echo, sc ServerContext) {
|
func addBackendRoutes(e *echo.Echo, sc ServerContext) {
|
||||||
|
GET(e, sc, "/api/markets", handler.HandleMarkets)
|
||||||
GET(e, sc, "/api/login", handler.HandleLogin)
|
GET(e, sc, "/api/login", handler.HandleLogin)
|
||||||
GET(e, sc, "/api/login/callback", handler.HandleLoginCallback)
|
GET(e, sc, "/api/login/callback", handler.HandleLoginCallback)
|
||||||
POST(e, sc, "/api/logout", handler.HandleLogout)
|
POST(e, sc, "/api/logout", handler.HandleLogout)
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
<template>
|
||||||
|
<ul>
|
||||||
|
<li class="my-3" v-for="market in markets" :key="market.Id">
|
||||||
|
<router-link :to="'/market/' + market.Id">{{ market.Description }}</router-link>
|
||||||
|
</li>
|
||||||
|
<button>+ create market</button>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
const markets = ref([])
|
||||||
|
|
||||||
|
const url = window.origin + '/api/markets'
|
||||||
|
|
||||||
|
// TODO only load markets once per session
|
||||||
|
await fetch(url).then(async r => {
|
||||||
|
const body = await r.json()
|
||||||
|
markets.value = body
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
a {
|
||||||
|
padding: 0 1em;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -20,21 +20,6 @@ nav {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
|
||||||
color: #8787a4;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
background: #8787A4;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.selected {
|
|
||||||
color: #ffffff;
|
|
||||||
background: #8787A4;
|
|
||||||
}
|
|
||||||
|
|
||||||
nav>a {
|
nav>a {
|
||||||
margin: 0 3px;
|
margin: 0 3px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,3 +12,18 @@ button:hover {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
background: #8787A4;
|
background: #8787A4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #8787a4;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #8787A4;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.selected {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #8787A4;
|
||||||
|
}
|
||||||
|
|
|
@ -11,6 +11,11 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- eslint-enable -->
|
<!-- eslint-enable -->
|
||||||
|
<Suspense>
|
||||||
|
<MarketList />
|
||||||
|
</Suspense>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script></script>
|
<script setup>
|
||||||
|
import MarketList from '@/components/MarketList'
|
||||||
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue