From eb3befda1b1b0891957999da9de6f5e6578c1583 Mon Sep 17 00:00:00 2001 From: rifcrat Date: Sat, 2 May 2026 09:46:21 +0300 Subject: [PATCH 1/4] added delete handlers --- modal_backend/routes/groups.py | 16 ++++++++++++++-- modal_backend/routes/services.py | 14 +++++++++++++- modal_backend/utils/services.py | 17 ++++++++++++++++- 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/modal_backend/routes/groups.py b/modal_backend/routes/groups.py index ab823a9..680fd64 100644 --- a/modal_backend/routes/groups.py +++ b/modal_backend/routes/groups.py @@ -6,14 +6,14 @@ from modal_backend.schemas.models import GroupGet, GroupPost from modal_backend.settings import Settings, get_settings from modal_backend.utils.services import GroupService - +from modal_backend.schemas.base import StatusResponseModel settings: Settings = get_settings() group = APIRouter(prefix="/group", tags=["Group"]) @group.post("", response_model=GroupGet) -async def create_group(group: GroupPost, user=Depends(UnionAuth(scopes=["modal.group.create"]))) -> GroupGet: +async def create_group(group: GroupPost, user=Depends(UnionAuth(["modal.group.create"]))) -> GroupGet: """ Создает новую группу @@ -32,3 +32,15 @@ async def get_groups(user=Depends(UnionAuth())) -> list[GroupGet]: """ groups = Group.query(session=db.session).all() return [GroupGet.model_validate(group) for group in groups] + +@group.delete("/{id}", response_model=StatusResponseModel) +async def delete_group(id: int, user=Depends(UnionAuth(scopes=["modal.group.delete"]))): + """ + Удаляет группу из базы данных + + Scopes: `["modal.group.delete"]` + + Исключение **ObjectNotFound**, если `id` не найден + """ + del_group = await GroupService.delete_group(db, id) + return del_group diff --git a/modal_backend/routes/services.py b/modal_backend/routes/services.py index a1fb49e..c59e4f0 100644 --- a/modal_backend/routes/services.py +++ b/modal_backend/routes/services.py @@ -6,7 +6,7 @@ from modal_backend.schemas.models import ServiceGet, ServicePost from modal_backend.settings import Settings, get_settings from modal_backend.utils.services import ServiceManager - +from modal_backend.schemas.base import StatusResponseModel settings: Settings = get_settings() service = APIRouter(prefix="/service", tags=["Service"]) @@ -35,3 +35,15 @@ async def create_service( """ new_service = await ServiceManager.create_service(db, **service_info.model_dump()) return ServiceGet.model_validate(new_service) + +@service.delete("/{id}", response_model=StatusResponseModel) +async def delete_service(id: int, user=Depends(UnionAuth(scopes=["modal.service.delete"]))): + """ + Удаляет сервис из базы данных + + Scopes: `["modal.service.delete"]` + + Исключение **ObjectNotFound**, если `id` не найден + """ + del_service = await ServiceManager.delete_service(db, id) + return del_service \ No newline at end of file diff --git a/modal_backend/utils/services.py b/modal_backend/utils/services.py index d01d90d..b04232f 100644 --- a/modal_backend/utils/services.py +++ b/modal_backend/utils/services.py @@ -3,7 +3,7 @@ from modal_backend.exceptions import AlreadyExists, ObjectNotFound from modal_backend.models.db import Group, ModalStatus, Note, NoteType, Service from modal_backend.schemas.models import NoteTypePost, NotificationPost - +from modal_backend.schemas.base import StatusResponseModel class NoteService: """ @@ -61,6 +61,13 @@ async def create_service(cls, db: Session, service_id: int, name: str): new_service = Service.create(session=db.session, service_id=service_id, name=name) return new_service + @classmethod + async def delete_service(cls, db: Session, id: int): + check_service = Service.get(session=db.session, id=id) + if check_service is None: + raise ObjectNotFound(Service, id) + Service.delete(session=db.session, id=id) + return StatusResponseModel(status="Success", message="Service has been deleted", ru="Сервис был удален") class GroupService: """ @@ -74,3 +81,11 @@ async def create_group(cls, db: Session, group_id: int, name: str): raise AlreadyExists(Group, group_id) new_group = Group.create(session=db.session, group_id=group_id, name=name) return new_group + + @classmethod + async def delete_group(cls, db: Session, id: int): + check_group = Group.get(session=db.session, id=id) + if check_group is None: + raise ObjectNotFound(Group, id) + Group.delete(session=db.session, id=id) + return StatusResponseModel(status="Success", message="Group has been deleted", ru="Группа была удалена") \ No newline at end of file From b2be03897949f84109f5757fc609223f52691692 Mon Sep 17 00:00:00 2001 From: rifcrat Date: Sat, 2 May 2026 09:50:07 +0300 Subject: [PATCH 2/4] added delete handlers --- modal_backend/routes/groups.py | 4 +++- modal_backend/routes/services.py | 6 ++++-- modal_backend/utils/services.py | 8 +++++--- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/modal_backend/routes/groups.py b/modal_backend/routes/groups.py index 680fd64..877b2bc 100644 --- a/modal_backend/routes/groups.py +++ b/modal_backend/routes/groups.py @@ -3,10 +3,11 @@ from fastapi_sqlalchemy import db from modal_backend.models.db import Group +from modal_backend.schemas.base import StatusResponseModel from modal_backend.schemas.models import GroupGet, GroupPost from modal_backend.settings import Settings, get_settings from modal_backend.utils.services import GroupService -from modal_backend.schemas.base import StatusResponseModel + settings: Settings = get_settings() group = APIRouter(prefix="/group", tags=["Group"]) @@ -33,6 +34,7 @@ async def get_groups(user=Depends(UnionAuth())) -> list[GroupGet]: groups = Group.query(session=db.session).all() return [GroupGet.model_validate(group) for group in groups] + @group.delete("/{id}", response_model=StatusResponseModel) async def delete_group(id: int, user=Depends(UnionAuth(scopes=["modal.group.delete"]))): """ diff --git a/modal_backend/routes/services.py b/modal_backend/routes/services.py index c59e4f0..e1120cb 100644 --- a/modal_backend/routes/services.py +++ b/modal_backend/routes/services.py @@ -3,10 +3,11 @@ from fastapi_sqlalchemy import db from modal_backend.models.db import Service +from modal_backend.schemas.base import StatusResponseModel from modal_backend.schemas.models import ServiceGet, ServicePost from modal_backend.settings import Settings, get_settings from modal_backend.utils.services import ServiceManager -from modal_backend.schemas.base import StatusResponseModel + settings: Settings = get_settings() service = APIRouter(prefix="/service", tags=["Service"]) @@ -36,6 +37,7 @@ async def create_service( new_service = await ServiceManager.create_service(db, **service_info.model_dump()) return ServiceGet.model_validate(new_service) + @service.delete("/{id}", response_model=StatusResponseModel) async def delete_service(id: int, user=Depends(UnionAuth(scopes=["modal.service.delete"]))): """ @@ -46,4 +48,4 @@ async def delete_service(id: int, user=Depends(UnionAuth(scopes=["modal.service. Исключение **ObjectNotFound**, если `id` не найден """ del_service = await ServiceManager.delete_service(db, id) - return del_service \ No newline at end of file + return del_service diff --git a/modal_backend/utils/services.py b/modal_backend/utils/services.py index b04232f..ceb963f 100644 --- a/modal_backend/utils/services.py +++ b/modal_backend/utils/services.py @@ -2,8 +2,9 @@ from modal_backend.exceptions import AlreadyExists, ObjectNotFound from modal_backend.models.db import Group, ModalStatus, Note, NoteType, Service -from modal_backend.schemas.models import NoteTypePost, NotificationPost from modal_backend.schemas.base import StatusResponseModel +from modal_backend.schemas.models import NoteTypePost, NotificationPost + class NoteService: """ @@ -69,6 +70,7 @@ async def delete_service(cls, db: Session, id: int): Service.delete(session=db.session, id=id) return StatusResponseModel(status="Success", message="Service has been deleted", ru="Сервис был удален") + class GroupService: """ Сервис для работы с логикой Group и базой данных @@ -81,11 +83,11 @@ async def create_group(cls, db: Session, group_id: int, name: str): raise AlreadyExists(Group, group_id) new_group = Group.create(session=db.session, group_id=group_id, name=name) return new_group - + @classmethod async def delete_group(cls, db: Session, id: int): check_group = Group.get(session=db.session, id=id) if check_group is None: raise ObjectNotFound(Group, id) Group.delete(session=db.session, id=id) - return StatusResponseModel(status="Success", message="Group has been deleted", ru="Группа была удалена") \ No newline at end of file + return StatusResponseModel(status="Success", message="Group has been deleted", ru="Группа была удалена") From 6a0baa0ceb80315714552ca9764c1dd6b5e6e67a Mon Sep 17 00:00:00 2001 From: rifcrat Date: Sat, 2 May 2026 09:52:07 +0300 Subject: [PATCH 3/4] fix --- modal_backend/routes/groups.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modal_backend/routes/groups.py b/modal_backend/routes/groups.py index 877b2bc..5e9a5ee 100644 --- a/modal_backend/routes/groups.py +++ b/modal_backend/routes/groups.py @@ -14,7 +14,7 @@ @group.post("", response_model=GroupGet) -async def create_group(group: GroupPost, user=Depends(UnionAuth(["modal.group.create"]))) -> GroupGet: +async def create_group(group: GroupPost, user=Depends(UnionAuth(scopes=["modal.group.create"]))) -> GroupGet: """ Создает новую группу From 7736a7ec73512db2ebf8f652884342157b054d6c Mon Sep 17 00:00:00 2001 From: petrCher <88943157+petrCher@users.noreply.github.com> Date: Sat, 2 May 2026 11:21:27 +0300 Subject: [PATCH 4/4] fixes --- modal_backend/routes/groups.py | 5 ++--- modal_backend/routes/services.py | 5 ++--- modal_backend/utils/services.py | 16 ++++++++-------- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/modal_backend/routes/groups.py b/modal_backend/routes/groups.py index 5e9a5ee..6cededa 100644 --- a/modal_backend/routes/groups.py +++ b/modal_backend/routes/groups.py @@ -36,7 +36,7 @@ async def get_groups(user=Depends(UnionAuth())) -> list[GroupGet]: @group.delete("/{id}", response_model=StatusResponseModel) -async def delete_group(id: int, user=Depends(UnionAuth(scopes=["modal.group.delete"]))): +async def delete_group(id: int, user=Depends(UnionAuth(scopes=["modal.group.delete"]))) -> StatusResponseModel: """ Удаляет группу из базы данных @@ -44,5 +44,4 @@ async def delete_group(id: int, user=Depends(UnionAuth(scopes=["modal.group.dele Исключение **ObjectNotFound**, если `id` не найден """ - del_group = await GroupService.delete_group(db, id) - return del_group + return await GroupService.delete_group(db, id) diff --git a/modal_backend/routes/services.py b/modal_backend/routes/services.py index e1120cb..291f914 100644 --- a/modal_backend/routes/services.py +++ b/modal_backend/routes/services.py @@ -39,7 +39,7 @@ async def create_service( @service.delete("/{id}", response_model=StatusResponseModel) -async def delete_service(id: int, user=Depends(UnionAuth(scopes=["modal.service.delete"]))): +async def delete_service(id: int, user=Depends(UnionAuth(scopes=["modal.service.delete"]))) -> StatusResponseModel: """ Удаляет сервис из базы данных @@ -47,5 +47,4 @@ async def delete_service(id: int, user=Depends(UnionAuth(scopes=["modal.service. Исключение **ObjectNotFound**, если `id` не найден """ - del_service = await ServiceManager.delete_service(db, id) - return del_service + return await ServiceManager.delete_service(db, id) diff --git a/modal_backend/utils/services.py b/modal_backend/utils/services.py index ceb963f..e29eed5 100644 --- a/modal_backend/utils/services.py +++ b/modal_backend/utils/services.py @@ -64,11 +64,11 @@ async def create_service(cls, db: Session, service_id: int, name: str): @classmethod async def delete_service(cls, db: Session, id: int): - check_service = Service.get(session=db.session, id=id) - if check_service is None: - raise ObjectNotFound(Service, id) + Service.get(session=db.session, id=id) Service.delete(session=db.session, id=id) - return StatusResponseModel(status="Success", message="Service has been deleted", ru="Сервис был удален") + return StatusResponseModel( + status="Success", message="Service has been successfully deleted", ru="Сервис успешно удален" + ) class GroupService: @@ -86,8 +86,8 @@ async def create_group(cls, db: Session, group_id: int, name: str): @classmethod async def delete_group(cls, db: Session, id: int): - check_group = Group.get(session=db.session, id=id) - if check_group is None: - raise ObjectNotFound(Group, id) + Group.get(session=db.session, id=id) Group.delete(session=db.session, id=id) - return StatusResponseModel(status="Success", message="Group has been deleted", ru="Группа была удалена") + return StatusResponseModel( + status="Success", message="Group has been successfully deleted", ru="Группа успешно удалена" + )