diff --git a/codedigger/codedigger/settings.py b/codedigger/codedigger/settings.py index 9f14e22..d370ded 100644 --- a/codedigger/codedigger/settings.py +++ b/codedigger/codedigger/settings.py @@ -56,6 +56,7 @@ 'codechef', 'atcoder', 'uva', + 'team', #Third Party 'rest_framework', diff --git a/codedigger/codedigger/urls.py b/codedigger/codedigger/urls.py index 59b952c..411897f 100644 --- a/codedigger/codedigger/urls.py +++ b/codedigger/codedigger/urls.py @@ -38,4 +38,5 @@ schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'), path('codechef/', include('codechef.urls')), + path('team/', include('team.urls')), ] diff --git a/codedigger/team/__init__.py b/codedigger/team/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/codedigger/team/admin.py b/codedigger/team/admin.py new file mode 100644 index 0000000..88b36a4 --- /dev/null +++ b/codedigger/team/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin +from .models import Team + +# Register your models here. +admin.site.register(Team) \ No newline at end of file diff --git a/codedigger/team/apps.py b/codedigger/team/apps.py new file mode 100644 index 0000000..f77284e --- /dev/null +++ b/codedigger/team/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class TeamConfig(AppConfig): + name = 'team' diff --git a/codedigger/team/migrations/0001_initial.py b/codedigger/team/migrations/0001_initial.py new file mode 100644 index 0000000..1495c1b --- /dev/null +++ b/codedigger/team/migrations/0001_initial.py @@ -0,0 +1,45 @@ +# Generated by Django 3.1.4 on 2022-01-22 13:50 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Team', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('invite_code', models.CharField(max_length=50, unique=True)), + ('created_at', models.DateField(auto_now=True)), + ], + ), + migrations.CreateModel( + name='TeamMembers', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('is_invited', models.BooleanField(choices=[(True, 'Invited'), (False, 'Joined')])), + ('team_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='Team_Id', to='team.team')), + ('user_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='team_users', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.AddField( + model_name='team', + name='members', + field=models.ManyToManyField(related_name='members', through='team.TeamMembers', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='team', + name='owner', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='owner', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/codedigger/team/migrations/__init__.py b/codedigger/team/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/codedigger/team/models.py b/codedigger/team/models.py new file mode 100644 index 0000000..962ca11 --- /dev/null +++ b/codedigger/team/models.py @@ -0,0 +1,30 @@ +from django.db import models +from django.db.models.deletion import CASCADE +from user.models import User +# Create your models here. +class Team(models.Model): + name=models.CharField(max_length=100,blank=False) + invite_code=models.CharField(max_length=50,unique=True,blank=False) + owner=models.ForeignKey(User, + default=1, + on_delete=models.CASCADE, + related_name="owner") + created_at=models.DateField(auto_now=True) + members=models.ManyToManyField(User, + through='teamMembers', + through_fields=('team_id','user_id'), + related_name='members') + + def __str__(self) -> str: + return self.Team_name + +class TeamMembers(models.Model): + status=((True,'Invited'),(False,'Joined')) + team_id=models.ForeignKey(Team, + on_delete=models.CASCADE, + related_name="Team_Id") + user_id=models.ForeignKey(User, + on_delete=models.CASCADE, + related_name='team_users') + is_invited=models.BooleanField(choices=status) + \ No newline at end of file diff --git a/codedigger/team/serilaizers.py b/codedigger/team/serilaizers.py new file mode 100644 index 0000000..62f0f38 --- /dev/null +++ b/codedigger/team/serilaizers.py @@ -0,0 +1,16 @@ +from rest_framework import serializers +from .models import Team +import string,random,datetime +from django.db import models +class TeamSerializers(serializers.ModelSerializer): +# user=User. + def create(self, validated_data): + return Team.objects.create( + name=validated_data['Team_name'], + created_at=datetime.date.today(), + Invitation_code=''.join(random.choices(string.ascii_uppercase + string.digits+string.ascii_lowercase, k = 10)) + ) + # team_object.save() + class Meta: + model=Team + feilds=['Team_name'] \ No newline at end of file diff --git a/codedigger/team/tests.py b/codedigger/team/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/codedigger/team/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/codedigger/team/urls.py b/codedigger/team/urls.py new file mode 100644 index 0000000..975a76d --- /dev/null +++ b/codedigger/team/urls.py @@ -0,0 +1,6 @@ +from django.urls import path +from .views import RegisterTeam,TeamGetView +urlpatterns = [ + path('register/', RegisterTeam.as_view(), name="register"), + path('userteams/',TeamGetView.as_view(),name='get_teams') +] \ No newline at end of file diff --git a/codedigger/team/views.py b/codedigger/team/views.py new file mode 100644 index 0000000..7df2ebc --- /dev/null +++ b/codedigger/team/views.py @@ -0,0 +1,46 @@ +import http +# from telnetlib import STATUS +# from urllib import request +# from django.shortcuts import HttpResponse +from rest_framework import generics,status +from rest_framework.response import Response +from user.models import User +from user.response import response +from .serilaizers import TeamSerializers +from .models import Team,TeamMembers +import datetime,random,string +# Create your views here. +class RegisterTeam(generics.GenericAPIView): + seriliazer_class=TeamSerializers + def post(self,request): + team_data=request.data + + # serializers=self.seriliazer_class(data=team_data) + + # if serializers.is_valid(): + # serializers.save() + # return response(serializers) + # else: + # return Response(status=status.HTTP_400_BAD_REQUEST) + temp=''.join(random.choices(string.ascii_uppercase + string.digits+string.ascii_lowercase, k = 10)) + team_object=Team.objects.create( + name=team_data['name'], + owner=request.user, + created_at=datetime.date.today(), + invite_code=temp + ) + team_object.save() + team_member=TeamMembers.objects.create( + user_id=request.user, + team_id=team.objects.filter(invite_code__exact=temp).team_id + ) + team_member.save() + return response(team_data) + +class TeamGetView(generics.ListAPIView): + def get(self,request,user_id): + Teams=TeamMembers.objects.filter(user_Id__exact=user_id) + user_team=[Team.objects.filter(id__exact=team.Team_id) for team in Teams] + return response(user_team) + +