mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-11-30 23:54:15 -05:00
* refactor(backend): ♻️ Refactor base class to be abstract and create a router factory method * feat(frontend): ✨ add group edit * refactor(backend): ✨ add group edit support Co-authored-by: hay-kot <hay-kot@pm.me>
75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
from fastapi import BackgroundTasks, Depends, HTTPException, status
|
|
from sqlalchemy.orm.session import Session
|
|
|
|
from mealie.core.dependencies import get_current_user
|
|
from mealie.db.database import db
|
|
from mealie.db.db_setup import generate_session
|
|
from mealie.routes.routers import AdminAPIRouter, UserAPIRouter
|
|
from mealie.schema.user import GroupBase, GroupInDB, PrivateUser, UpdateGroup
|
|
from mealie.services.events import create_group_event
|
|
|
|
admin_router = AdminAPIRouter(prefix="/groups", tags=["Groups: CRUD"])
|
|
user_router = UserAPIRouter(prefix="/groups", tags=["Groups: CRUD"])
|
|
|
|
|
|
@admin_router.get("", response_model=list[GroupInDB])
|
|
async def get_all_groups(
|
|
session: Session = Depends(generate_session),
|
|
):
|
|
""" Returns a list of all groups in the database """
|
|
|
|
return db.groups.get_all(session)
|
|
|
|
|
|
@admin_router.post("", status_code=status.HTTP_201_CREATED, response_model=GroupInDB)
|
|
async def create_group(
|
|
background_tasks: BackgroundTasks,
|
|
group_data: GroupBase,
|
|
session: Session = Depends(generate_session),
|
|
):
|
|
""" Creates a Group in the Database """
|
|
|
|
try:
|
|
new_group = db.groups.create(session, group_data.dict())
|
|
background_tasks.add_task(create_group_event, "Group Created", f"'{group_data.name}' created", session)
|
|
return new_group
|
|
except Exception:
|
|
raise HTTPException(status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
@admin_router.put("/{id}")
|
|
async def update_group_data(
|
|
id: int,
|
|
group_data: UpdateGroup,
|
|
session: Session = Depends(generate_session),
|
|
):
|
|
""" Updates a User Group """
|
|
db.groups.update(session, id, group_data.dict())
|
|
|
|
|
|
@admin_router.delete("/{id}")
|
|
async def delete_user_group(
|
|
background_tasks: BackgroundTasks,
|
|
id: int,
|
|
current_user: PrivateUser = Depends(get_current_user),
|
|
session: Session = Depends(generate_session),
|
|
):
|
|
""" Removes a user group from the database """
|
|
|
|
if id == 1:
|
|
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="DEFAULT_GROUP")
|
|
|
|
group: GroupInDB = db.groups.get(session, id)
|
|
|
|
if not group:
|
|
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="GROUP_NOT_FOUND")
|
|
|
|
if group.users != []:
|
|
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="GROUP_WITH_USERS")
|
|
|
|
background_tasks.add_task(
|
|
create_group_event, "Group Deleted", f"'{group.name}' deleted by {current_user.full_name}", session
|
|
)
|
|
|
|
db.groups.delete(session, id)
|