[feat] team view & [fix] cors
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"),
|
||||
|
||||
@@ -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='содержание'),
|
||||
),
|
||||
]
|
||||
@@ -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='вакансии')),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -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):
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user