From c0f48eae12be5b51d5273cce7e94e2187dfc37c7 Mon Sep 17 00:00:00 2001 From: Data-Name-ID Date: Sun, 31 Mar 2024 22:07:33 +0300 Subject: [PATCH] [feat] team view & [fix] cors --- backend/project/config/settings.py | 6 +-- backend/project/config/urls.py | 2 + .../0002_alter_notification_content.py | 18 ++++++++ .../project/teams/migrations/0001_initial.py | 45 +++++++++++++++++++ backend/project/teams/models.py | 5 +-- backend/project/teams/views.py | 14 ++++-- 6 files changed, 79 insertions(+), 11 deletions(-) create mode 100644 backend/project/notifications/migrations/0002_alter_notification_content.py create mode 100644 backend/project/teams/migrations/0001_initial.py diff --git a/backend/project/config/settings.py b/backend/project/config/settings.py index d249569..f8f5b42 100755 --- a/backend/project/config/settings.py +++ b/backend/project/config/settings.py @@ -54,6 +54,7 @@ INSTALLED_APPS = [ # project apps "users.apps.UsersConfig", "notifications.apps.NotificationsConfig", + "teams.apps.TeamsConfig", ] MIDDLEWARE = [ @@ -155,7 +156,4 @@ REST_FRAMEWORK = { if DEBUG and not (TESTING or MIGRATING): register_debug_toolbar() -CORS_ALLOWED_ORIGINS = [ - "http://158.160.56.239:8080", - "http://158.160.56.239:3000", -] +CORS_ORIGIN_ALLOW_ALL = True diff --git a/backend/project/config/urls.py b/backend/project/config/urls.py index 0e46697..ea0a506 100755 --- a/backend/project/config/urls.py +++ b/backend/project/config/urls.py @@ -8,9 +8,11 @@ from drf_yasg import openapi from drf_yasg.views import get_schema_view from rest_framework import permissions, routers from users.views import UserViewSet +from teams.views import TeamsViewSet router = routers.DefaultRouter() router.register("users", UserViewSet) +router.register("teams", TeamsViewSet) schema_view = get_schema_view( openapi.Info(title="SkillHub API", default_version="v1"), diff --git a/backend/project/notifications/migrations/0002_alter_notification_content.py b/backend/project/notifications/migrations/0002_alter_notification_content.py new file mode 100644 index 0000000..0bdbb42 --- /dev/null +++ b/backend/project/notifications/migrations/0002_alter_notification_content.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.11 on 2024-03-31 19:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('notifications', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='notification', + name='content', + field=models.TextField(verbose_name='содержание'), + ), + ] diff --git a/backend/project/teams/migrations/0001_initial.py b/backend/project/teams/migrations/0001_initial.py new file mode 100644 index 0000000..47871cd --- /dev/null +++ b/backend/project/teams/migrations/0001_initial.py @@ -0,0 +1,45 @@ +# Generated by Django 4.2.11 on 2024-03-31 19:06 + +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('users', '0002_rename_technologies_user_skills'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Vacancy', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, verbose_name='название вакансии')), + ('start_date', models.DateField(blank=True, null=True, verbose_name='дата начала диапазона возраста участников')), + ('end_date', models.DateField(blank=True, null=True, verbose_name='дата конец диапазона возраста участников')), + ('skills', models.ManyToManyField(blank=True, to='users.skill', verbose_name='Технологии')), + ('specialization', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='users.specialization', verbose_name='специализация')), + ], + ), + migrations.CreateModel( + name='Team', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.TextField(verbose_name='описание команды')), + ('name', models.CharField(max_length=255, verbose_name='название команды')), + ('avatar', models.ImageField(blank=True, upload_to='teams_avatars', verbose_name='аватарка')), + ('count_of_members', models.IntegerField(null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxLengthValidator(5)], verbose_name='количество участников')), + ('country', models.CharField(blank=True, max_length=255, verbose_name='страна')), + ('city', models.CharField(blank=True, max_length=255, verbose_name='город')), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='teams', to=settings.AUTH_USER_MODEL)), + ('members', models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='участники')), + ('vacancies', models.ManyToManyField(to='teams.vacancy', verbose_name='вакансии')), + ], + ), + ] diff --git a/backend/project/teams/models.py b/backend/project/teams/models.py index f1f72d7..2d906b4 100644 --- a/backend/project/teams/models.py +++ b/backend/project/teams/models.py @@ -48,15 +48,11 @@ class Team(models.Model): members = models.ManyToManyField( users.models.User, - blank=True, - unique=True, verbose_name="участники", ) vacancies = models.ManyToManyField( Vacancy, - blank=True, - unique=True, verbose_name="вакансии", ) @@ -90,6 +86,7 @@ class Team(models.Model): author = models.ForeignKey( users.models.User, on_delete=models.CASCADE, + related_name="teams", ) def __str__(self): diff --git a/backend/project/teams/views.py b/backend/project/teams/views.py index 2020407..b5cfe1b 100644 --- a/backend/project/teams/views.py +++ b/backend/project/teams/views.py @@ -1,12 +1,12 @@ -from backend.project.users.models import User +from users.models import User from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView from teams.models import Team - +from rest_framework.viewsets import ModelViewSet from teams.serializers import TeamSerializer - +from rest_framework.permissions import IsAuthenticated class AddUserToTeam(APIView): def post(self, request, team_id, user_id): # noqa: ARG002 @@ -25,3 +25,11 @@ class AddUserToTeam(APIView): team.members.add(user) team_serializer = TeamSerializer(team) return Response(team_serializer.data, status=status.HTTP_200_OK) + + +class TeamsViewSet(ModelViewSet): + http_method_names = ("get",) + + queryset = Team.objects.all() + serializer_class = TeamSerializer + permission_classes = [IsAuthenticated]