Skip to content

Commit

Permalink
Create team
Browse files Browse the repository at this point in the history
  • Loading branch information
anirudhprabhakaran3 committed Dec 15, 2023
1 parent 6c41fbe commit 0a6380c
Show file tree
Hide file tree
Showing 7 changed files with 211 additions and 6 deletions.
4 changes: 4 additions & 0 deletions corpus/embedathon/admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
from django.contrib import admin
from embedathon.models import EmbedathonUser
from embedathon.models import Invite
from embedathon.models import Team

# Register your models here.

admin.site.register(EmbedathonUser)
admin.site.register(Team)
admin.site.register(Invite)
7 changes: 7 additions & 0 deletions corpus/embedathon/forms.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from embedathon.models import EmbedathonUser
from embedathon.models import Team

from corpus.forms import CorpusModelForm

Expand All @@ -16,3 +17,9 @@ class Meta:
"ieee_membership_no",
"cass_member",
]


class TeamCreationForm(CorpusModelForm):
class Meta:
model = Team
fields = ["team_name"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Generated by Django 4.2.4 on 2023-12-11 13:19
import django.db.models.deletion
from django.conf import settings
from django.db import migrations
from django.db import models


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("embedathon", "0001_initial"),
]

operations = [
migrations.CreateModel(
name="Team",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("team_name", models.CharField(max_length=200)),
(
"team_leader",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="leader",
to=settings.AUTH_USER_MODEL,
),
),
],
),
migrations.CreateModel(
name="Invite",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("invite_email", models.EmailField(max_length=254)),
(
"inviting_team",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="invite_to_team",
to="embedathon.team",
),
),
],
),
migrations.AddField(
model_name="embedathonuser",
name="team",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="team",
to="embedathon.team",
),
),
]
23 changes: 23 additions & 0 deletions corpus/embedathon/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,29 @@ class EmbedathonUser(models.Model):
ieee_member = models.BooleanField(default=False)
ieee_membership_no = models.BigIntegerField(blank=True, null=True)
cass_member = models.BooleanField(default=False)
team = models.ForeignKey(
"Team", on_delete=models.CASCADE, related_name="team", blank=True, null=True
)

def __str__(self):
return self.user.__str__()


class Team(models.Model):
team_name = models.CharField(max_length=200, blank=False, null=False)
team_leader = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="leader"
)

def __str__(self):
return self.team_name


class Invite(models.Model):
inviting_team = models.ForeignKey(
Team, on_delete=models.CASCADE, related_name="invite_to_team"
)
invite_email = models.EmailField(blank=False, null=False)

def __str__(self):
return self.invite_email
1 change: 1 addition & 0 deletions corpus/embedathon/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
urlpatterns = [
path("", views.index, name="embedathon_index"),
path("register", views.register, name="embedathon_register"),
path("create_team", views.create_team, name="embedathon_create_team"),
]
45 changes: 44 additions & 1 deletion corpus/embedathon/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
from django.shortcuts import redirect
from django.shortcuts import render
from embedathon.forms import EmbedathonForm
from embedathon.forms import TeamCreationForm
from embedathon.models import EmbedathonUser
from embedathon.models import Invite

from corpus.decorators import module_enabled

Expand All @@ -18,13 +20,33 @@
@login_required
@module_enabled(module_name="embedathon")
def index(request):
args = {}
try:
embedathon_user = EmbedathonUser.objects.get(user=request.user)
args["embedathon_user"] = embedathon_user
except EmbedathonUser.DoesNotExist:
messages.error(request, "Please register for Embedathon first!")
return redirect("embedathon_register")

args = {"embedathon_user": embedathon_user}
# Check if user is part of a team.
if embedathon_user.team is not None:
args["in_team"] = True

team = embedathon_user.team
members = EmbedathonUser.objects.filter(team=team)
invites = Invite.objects.filter(invite_email=embedathon_user.user.email)

args["team"] = team
args["members"] = members
args["invites"] = invites

if team.team_leader == embedathon_user:
args["is_leader"] = True
else:
args["is_leader"] = False
else:
args["in_team"] = False
args["team_creation_form"] = TeamCreationForm()

return render(request, "embedathon/index.html", args)

Expand Down Expand Up @@ -71,3 +93,24 @@ def register(request):
args = {"form": form}

return render(request, "embedathon/register.html", args)


@login_required
@module_enabled(module_name="embedathon")
def create_team(request):
if request.method == "POST":
form = TeamCreationForm(request.POST)
if form.is_valid():
team = form.save(commit=False)
team.team_leader = request.user
team.save()

embedathon_user = EmbedathonUser.objects.get(user=request.user)
embedathon_user.team = team
embedathon_user.save()

messages.success(request, "Team created successfully!")
return redirect("embedathon_index")
else:
messages.error(request, "Illegal Request")
return redirect("embedathon_index")
64 changes: 59 additions & 5 deletions corpus/templates/embedathon/index.html
Original file line number Diff line number Diff line change
@@ -1,11 +1,65 @@
{% extends 'base.html' %}

{% block title %}
Embedathon
Embedathon
{% endblock %}

{% block content %}
<div class="prose w-2/3 mx-auto my-10">
<h1>Welcome to Embedathon!</h1>
</div>
{% endblock %}
<div class="prose w-2/3 mx-auto my-10">
<h1>Welcome to Embedathon!</h1>
<div class="grid gap-4 sm:grid-cols-1 md:grid-cols-2">
<div>
<div class="card">
<div class="card-body">
{% if in_team %}
<h2>You are already in a team.</h2>
{% else %}
<div>
<h3>Current Invites</h3>
{% if invites %}
<ul>
{% for invite in invites %}
<li>
<a href="#">
{{ invite.team.name }}
</a>
</li>
{% endfor %}
</ul>
{% else %}
<p>You have no invites.</p>
{% endif %}
</div>
<div class="flex flex-col w-full">
<div class="divider divider-primary">OR</div>
</div>
<div>
<h3>Create a team</h3>
<form method="post" action="{% url 'embedathon_create_team' %}">
{% csrf_token %}

<div class="w-full my-2">
<label for="{{ team_creation_form.team_name.id_for_label }}">Team Name</label>
{{ team_creation_form.team_name }}
{% if team_creation_form.team_name.errors %}
<div class="my-1">
<div role="alert" class="alert alert-error">
{{ team_creation_form.team_name.errors }}
</div>
</div>
{% endif %}
</div>

<div class="card-actions mt-5">
<button class="btn btn-primary btn-block">Create Team</button>
</div>
</form>
</div>
{% endif %}
</div>
</div>
</div>
<div></div>
</div>
</div>
{% endblock %}

0 comments on commit 0a6380c

Please sign in to comment.