Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions modal_backend/routes/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from modal_backend import __version__
from modal_backend.routes.note_type import notetype
from modal_backend.routes.notes import note
from modal_backend.routes.services import service
from modal_backend.settings import get_settings


Expand Down Expand Up @@ -36,3 +37,4 @@

app.include_router(note)
app.include_router(notetype)
app.include_router(service)
37 changes: 37 additions & 0 deletions modal_backend/routes/services.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from auth_lib.fastapi import UnionAuth
from fastapi import APIRouter, Depends
from fastapi_sqlalchemy import db

from modal_backend.schemas.models import ServiceGet, ServicePost
from modal_backend.settings import Settings, get_settings
from modal_backend.utils.services import ServiceManager


settings: Settings = get_settings()
service = APIRouter(prefix="/service", tags=["Service"])


@service.get("", response_model=list[ServiceGet])
async def get_services(
user=Depends(UnionAuth()),
) -> list[ServiceGet]:
"""
Получить все сервисы.
В случае несуществующего id ошибка ObjectNotFound
"""
services = await ServiceManager.get_services(db)
return [ServiceGet.model_validate(service) for service in services]


@service.post("", response_model=ServiceGet)
async def create_service(
service_info: ServicePost,
user=Depends(UnionAuth(scopes=["modal.service.create"])),
) -> ServiceGet:
"""
Создает новый сервис.

Права: `["modal.service.create"]`
"""
new_service = await ServiceManager.create_service(db, **service_info.model_dump())
return ServiceGet.model_validate(new_service)
11 changes: 11 additions & 0 deletions modal_backend/schemas/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,17 @@ class NoteTypeGet(Base):
name: str


class ServiceGet(Base):
id: int
service_id: int
name: str
Comment thread
ArtemBratyashin marked this conversation as resolved.


class ServicePost(Base):
service_id: int
name: str
Comment thread
ArtemBratyashin marked this conversation as resolved.


class NotificationGet(Base):
id: int
type_id: int
Expand Down
20 changes: 19 additions & 1 deletion modal_backend/utils/services.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from requests import Session

from modal_backend.exceptions import AlreadyExists, ObjectNotFound
from modal_backend.models.db import ModalStatus, Note, NoteType
from modal_backend.models.db import ModalStatus, Note, NoteType, Service
from modal_backend.schemas.models import NoteTypePost, NotificationPost


Expand Down Expand Up @@ -46,3 +46,21 @@ async def create_note_type(cls, db: Session, note_type: NoteTypePost) -> NoteTyp
raise AlreadyExists(NoteType, type_id)
new_note_type = NoteType.create(session=db.session, **data)
return new_note_type


class ServiceManager:
"""
Сервис для работы с логикой Service и базой данных
"""

@classmethod
async def get_services(cls, db: Session):
return Service.query(session=db.session).all()

@classmethod
async def create_service(cls, db: Session, service_id: int, name: str):
service = Service.query(session=db.session).filter(Service.service_id == service_id).first()
if service:
raise AlreadyExists(Service, service_id)
new_service = Service.create(session=db.session, service_id=service_id, name=name)
return new_service
Loading