group dashboard init

This commit is contained in:
hay-kot 2021-03-12 22:44:44 -08:00
commit 1605c41431
9 changed files with 41 additions and 18 deletions

View file

@ -3,7 +3,7 @@ from fastapi import FastAPI
from fastapi.logger import logger from fastapi.logger import logger
# import utils.startup as startup # import utils.startup as startup
from core.config import APP_VERSION, PORT, SECRET, docs_url, redoc_url from core.config import APP_VERSION, PORT, docs_url, redoc_url
from db.db_setup import sql_exists from db.db_setup import sql_exists
from db.init_db import init_db from db.init_db import init_db
from routes import ( from routes import (

View file

@ -22,7 +22,7 @@ class Group(SqlAlchemyBase, BaseMixins):
mealplans = orm.relationship( mealplans = orm.relationship(
"MealPlanModel", back_populates="group", single_parent=True "MealPlanModel", back_populates="group", single_parent=True
) )
mealplan_categories = orm.relationship( categories = orm.relationship(
"Category", secondary=group2categories, single_parent=True "Category", secondary=group2categories, single_parent=True
) )
@ -47,7 +47,7 @@ class Group(SqlAlchemyBase, BaseMixins):
) -> None: ) -> None:
self.name = name self.name = name
self.categories = [ self.categories = [
Category.create_if_not_exist(session=session, name=cat.get("name")) Category.get_ref(session=session, slug=cat.get("slug"))
for cat in categories for cat in categories
] ]
@ -58,7 +58,7 @@ class Group(SqlAlchemyBase, BaseMixins):
def update(self, session: Session, *args, **kwargs): def update(self, session: Session, *args, **kwargs):
self._sql_remove_list(session, [WebhookURLModel], self.id) self._sql_remove_list(session, [WebhookURLModel], self.id)
self.__init__(*args, **kwargs) self.__init__(session=session, *args, **kwargs)
@staticmethod @staticmethod
def create_if_not_exist(session, name: str = DEFAULT_GROUP): def create_if_not_exist(session, name: str = DEFAULT_GROUP):

View file

@ -45,6 +45,10 @@ class Category(SqlAlchemyBase):
self.name = name.strip() self.name = name.strip()
self.slug = slugify(name) self.slug = slugify(name)
@staticmethod
def get_ref(session, slug: str):
return session.query(Category).filter(Category.slug == slug).one()
@staticmethod @staticmethod
def create_if_not_exist(session, name: str = None): def create_if_not_exist(session, name: str = None):
test_slug = slugify(name) test_slug = slugify(name)

View file

@ -30,7 +30,7 @@ class SiteSettings(SqlAlchemyBase, BaseMixins):
self.cards_per_section = cards_per_section self.cards_per_section = cards_per_section
self.show_recent = show_recent self.show_recent = show_recent
self.categories = [ self.categories = [
Category.create_if_not_exist(session=session, name=cat.get("name")) Category.get_ref(session=session, name=cat.get("slug"))
for cat in categories for cat in categories
] ]

View file

@ -14,7 +14,7 @@ class SiteThemeModel(SqlAlchemyBase):
def update(self, session=None, name: str = None, colors: dict = None) -> dict: def update(self, session=None, name: str = None, colors: dict = None) -> dict:
self.colors.update(**colors) self.colors.update(**colors)
return self.dict() return self
class ThemeColorsModel(SqlAlchemyBase): class ThemeColorsModel(SqlAlchemyBase):

View file

@ -3,7 +3,7 @@ from db.db_setup import generate_session
from fastapi import APIRouter, Depends from fastapi import APIRouter, Depends
from routes.deps import manager from routes.deps import manager
from schema.snackbar import SnackResponse from schema.snackbar import SnackResponse
from schema.user import GroupBase, GroupInDB from schema.user import GroupBase, GroupInDB, UpdateGroup, UserInDB
from sqlalchemy.orm.session import Session from sqlalchemy.orm.session import Session
router = APIRouter(prefix="/api/groups", tags=["Groups"]) router = APIRouter(prefix="/api/groups", tags=["Groups"])
@ -19,6 +19,17 @@ async def get_all_groups(
return db.groups.get_all(session) return db.groups.get_all(session)
@router.get("/self", response_model=GroupInDB)
async def get_current_user_group(
current_user=Depends(manager),
session: Session = Depends(generate_session),
):
""" Returns the Group Data for the Current User """
current_user: UserInDB
return db.groups.get(session, current_user.group, "name")
@router.post("") @router.post("")
async def create_group( async def create_group(
group_data: GroupBase, group_data: GroupBase,
@ -27,21 +38,24 @@ async def create_group(
): ):
""" Creates a Group in the Database """ """ Creates a Group in the Database """
try:
db.groups.create(session, group_data.dict()) db.groups.create(session, group_data.dict())
return SnackResponse.success("User Group Created", {"created": True})
return except:
return SnackResponse.error("User Group Creation Failed")
@router.put("/{id}") @router.put("/{id}")
async def update_group_data( async def update_group_data(
id: int, id: int,
group_data: GroupInDB, group_data: UpdateGroup,
current_user=Depends(manager), current_user=Depends(manager),
session: Session = Depends(generate_session), session: Session = Depends(generate_session),
): ):
""" Updates a User Group """ """ Updates a User Group """
db.groups.update(session, id, group_data.dict())
return db.groups.update(session, id, group_data.dict()) return SnackResponse.success("Group Settings Updated")
@router.delete("/{id}") @router.delete("/{id}")

View file

@ -1,5 +1,6 @@
import shutil import shutil
from datetime import timedelta from datetime import timedelta
from os import access
from core.config import USER_DIR from core.config import USER_DIR
from core.security import get_password_hash, verify_password from core.security import get_password_hash, verify_password
@ -65,6 +66,7 @@ async def update_user(
session: Session = Depends(generate_session), session: Session = Depends(generate_session),
): ):
access_token = None
if current_user.id == id or current_user.admin: if current_user.id == id or current_user.admin:
updated_user: UserInDB = db.users.update(session, id, new_data.dict()) updated_user: UserInDB = db.users.update(session, id, new_data.dict())
email = updated_user.email email = updated_user.email

View file

@ -73,16 +73,19 @@ class UserInDB(UserOut):
orm_mode = True orm_mode = True
class GroupInDB(GroupBase): class UpdateGroup(GroupBase):
id: int id: int
name: str name: str
users: Optional[list[UserOut]]
mealplans: Optional[list[MealPlanInDB]]
categories: Optional[list[CategoryBase]] = [] categories: Optional[list[CategoryBase]] = []
webhook_urls: list[str] = [] webhook_urls: list[str] = []
webhook_time: str = "00:00" webhook_time: str = "00:00"
webhook_enable: bool = False webhook_enable: bool
class GroupInDB(UpdateGroup):
users: Optional[list[UserOut]]
mealplans: Optional[list[MealPlanInDB]]
class Config: class Config:
orm_mode = True orm_mode = True

View file

@ -70,13 +70,13 @@ class ExportDatabase:
if self.templates: if self.templates:
self._export_template(recipe) self._export_template(recipe)
def _export_template(self, recipe_data: dict): def _export_template(self, recipe_data: Recipe):
for template_path in self.templates: for template_path in self.templates:
with open(template_path, "r") as f: with open(template_path, "r") as f:
template = Template(f.read()) template = Template(f.read())
filename = recipe_data.get("name") + template_path.suffix filename = recipe_data.name + template_path.suffix
out_file = self.templates_dir.joinpath(filename) out_file = self.templates_dir.joinpath(filename)
content = template.render(recipe=recipe_data) content = template.render(recipe=recipe_data)