api start

This commit is contained in:
hay-kot 2021-03-27 17:35:06 -08:00
commit 77dd866431
5 changed files with 70 additions and 78 deletions

View file

@ -7,6 +7,8 @@ const settingsURLs = {
siteSettings: `${settingsBase}`, siteSettings: `${settingsBase}`,
updateSiteSettings: `${settingsBase}`, updateSiteSettings: `${settingsBase}`,
testWebhooks: `${settingsBase}/webhooks/test`, testWebhooks: `${settingsBase}/webhooks/test`,
customPages: `${settingsBase}/custom-pages`,
customPage: id => `${settingsBase}/custom-pages/${id}`,
}; };
export default { export default {
@ -19,4 +21,19 @@ export default {
let response = await apiReq.put(settingsURLs.updateSiteSettings, body); let response = await apiReq.put(settingsURLs.updateSiteSettings, body);
return response.data; return response.data;
}, },
async getPages() {
let response = await apiReq.get(settingsURLs.customPages);
return response.data;
},
async deletePage(id) {
let response = await apiReq.delete(settingsURLs.customPage(id));
return response.data;
},
async updateAllPages(allPages) {
let response = await apiReq.put(settingsURLs.customPages, allPages);
return response;
},
}; };

View file

@ -9,13 +9,13 @@
</v-btn> </v-btn>
</span> </span>
</h2> </h2>
<v-row class="mt-1"> <draggable class="row mt-1" v-model="customPages">
<v-col <v-col
:sm="6" :sm="6"
:md="6" :md="6"
:lg="4" :lg="4"
:xl="3" :xl="3"
v-for="item in customPages" v-for="(item, index) in customPages"
:key="item + item.id" :key="item + item.id"
> >
<v-card> <v-card>
@ -23,7 +23,7 @@
<v-divider></v-divider> <v-divider></v-divider>
<v-card-text> <v-card-text>
Card Position: {{ item.position }} Card Position: {{ index }}
<div> <div>
<v-chip <v-chip
v-for="cat in item.categories" v-for="cat in item.categories"
@ -39,7 +39,7 @@
</v-card-text> </v-card-text>
<v-card-actions> <v-card-actions>
<v-btn text small color="error"> <v-btn text small color="error" @click="deletePage(item.id)">
Delete Delete
</v-btn> </v-btn>
<v-spacer> </v-spacer> <v-spacer> </v-spacer>
@ -49,88 +49,50 @@
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-col> </v-col>
</v-row> </draggable>
</v-card-text> </v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="success" @click="savePages">
Save
</v-btn>
</v-card-actions>
</v-card> </v-card>
</template> </template>
<script> <script>
import draggable from "vuedraggable";
import api from "@/api";
export default { export default {
components: {
draggable,
},
data() { data() {
return { return {
customPages: [ customPages: [],
{
id: 0,
name: "My Page Name",
slug: "my-page-name",
position: 0,
categories: [
{
id: 2,
slug: "brownie",
name: "brownie",
},
{
id: 3,
slug: "dessert",
name: "dessert",
},
{
id: 4,
slug: "drink",
name: "Drink",
},
],
},
{
id: 3,
name: "My Page Name 1",
slug: "my-page-name",
position: 1,
categories: [
{
id: 2,
slug: "brownie",
name: "brownie",
},
{
id: 3,
slug: "dessert",
name: "dessert",
},
{
id: 4,
slug: "drink",
name: "Drink",
},
],
},
{
id: 2,
name: "My Page Name 2",
slug: "my-page-name",
position: 2,
categories: [
{
id: 2,
slug: "brownie",
name: "brownie",
},
{
id: 3,
slug: "dessert",
name: "dessert",
},
{
id: 4,
slug: "drink",
name: "Drink",
},
],
},
],
}; };
}, },
async mounted() {
this.getPages();
},
methods: {
async getPages() {
this.customPages = await api.siteSettings.getPages();
},
async deletePage(id) {
await api.siteSettings.deletePage(id);
this.getPages();
},
async savePages() {
this.customPages.forEach((element, index) => {
element.position = index;
});
await api.siteSettings.updateAllPages(this.customPages);
this.getPages;
},
},
}; };
</script> </script>

View file

@ -50,6 +50,7 @@ export default {
removeCategory(index) { removeCategory(index) {
this.value.categories.splice(index, 1); this.value.categories.splice(index, 1);
}, },
}, },
}; };
</script> </script>

View file

@ -47,7 +47,7 @@ class CustomPage(SqlAlchemyBase, BaseMixins):
single_parent=True, single_parent=True,
) )
def __init__(self, session=None, name=None, slug=None, position=0, categories=[]) -> None: def __init__(self, session=None, name=None, slug=None, position=0, categories=[], *args, **kwargs) -> None:
self.name = name self.name = name
self.slug = slug self.slug = slug
self.position = position self.position = position

View file

@ -2,7 +2,7 @@ from fastapi import APIRouter, Depends
from mealie.db.database import db from mealie.db.database import db
from mealie.db.db_setup import generate_session from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user from mealie.routes.deps import get_current_user
from mealie.schema.settings import CustomPageBase from mealie.schema.settings import CustomPageBase, CustomPageOut
from mealie.schema.snackbar import SnackResponse from mealie.schema.snackbar import SnackResponse
from mealie.schema.user import UserInDB from mealie.schema.user import UserInDB
from sqlalchemy.orm.session import Session from sqlalchemy.orm.session import Session
@ -30,6 +30,18 @@ async def create_new_page(
return SnackResponse.success("New Page Created") return SnackResponse.success("New Page Created")
@router.put("")
async def update_multiple_pages(
pages: list[CustomPageOut],
session: Session = Depends(generate_session),
current_user: UserInDB = Depends(get_current_user),
):
""" Update multiple custom pages """
for page in pages:
db.custom_pages.update(session, page.id, page.dict())
return SnackResponse.success("Pages Updated")
@router.get("/{id}") @router.get("/{id}")
async def delete_custom_page( async def delete_custom_page(
id: int, id: int,