diff --git a/services/backend/api/v1/router.py b/services/backend/api/v1/router.py index 105a246..a9ae8f6 100644 --- a/services/backend/api/v1/router.py +++ b/services/backend/api/v1/router.py @@ -10,6 +10,7 @@ from api.v1.review.auth import ReviewerAuth from api.v1.review.views import router as review_router from api.v1.user.views import router as user_router from api.v1.task.views import router as task_router +from api.v1.team.views import router as team_router router = NinjaAPI( title="DataRush API", @@ -43,6 +44,11 @@ router.add_router( task_router, auth=BearerAuth(), ) +router.add_router( + "team", + team_router, + auth=BearerAuth(), +) for exception, handler in handlers.exception_handlers: diff --git a/services/backend/api/v1/team/__init__.py b/services/backend/api/v1/team/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/services/backend/api/v1/team/schemas.py b/services/backend/api/v1/team/schemas.py new file mode 100644 index 0000000..defafdf --- /dev/null +++ b/services/backend/api/v1/team/schemas.py @@ -0,0 +1,15 @@ +from ninja import ModelSchema, Schema + +from apps.team.models import Team + + +class CreateTeamSchema(ModelSchema): + class Meta: + model = Team + fields = ("name", "members",) + + +class TeamSchemaOut(ModelSchema): + class Meta: + model = Team + fields = ("id", "name", "owner", "members", ) diff --git a/services/backend/api/v1/team/views.py b/services/backend/api/v1/team/views.py new file mode 100644 index 0000000..9b13f81 --- /dev/null +++ b/services/backend/api/v1/team/views.py @@ -0,0 +1,39 @@ +from http import HTTPStatus as status +from uuid import UUID + +from django.shortcuts import get_object_or_404 +from ninja import Router + +from apps.team.models import Team +from api.v1.team.schemas import TeamSchemaOut, CreateTeamSchema +from api.v1.schemas import UnauthorizedError, BadRequestError, NotFoundError + +router = Router() + + +@router.post( + "", + response={ + 201: TeamSchemaOut, + 400: BadRequestError, + 401: UnauthorizedError, + }, + description="Create team. Note: members array must have team members uuid, default can be empty" +) +def create_team(request, team_data: CreateTeamSchema) -> (int, TeamSchemaOut): + team = Team(name=team_data.name, owner=request.auth) + team.members.add(request.auth) + team.save() + return 201, team + + +@router.get( + "{team_id}", + response={ + 200: TeamSchemaOut, + 401: UnauthorizedError, + 404: NotFoundError, + } +) +def get_team(request, team_id: UUID) -> (int, TeamSchemaOut): + return get_object_or_404(Team, pk=team_id)