aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pysite/views/main/jams/team.py42
-rw-r--r--templates/main/jams/teams_list.html30
-rw-r--r--templates/main/navigation.html6
3 files changed, 78 insertions, 0 deletions
diff --git a/pysite/views/main/jams/team.py b/pysite/views/main/jams/team.py
new file mode 100644
index 00000000..8cc2a8c2
--- /dev/null
+++ b/pysite/views/main/jams/team.py
@@ -0,0 +1,42 @@
+from pysite.base_route import RouteView
+from pysite.mixins import OAuthMixin, DBMixin
+
+
+class JamsTeamView(RouteView, DBMixin, OAuthMixin):
+ path = "/jams/teams"
+ name = "jams.teams_list"
+
+ def get(self):
+ # list teams a user is (or was) a part of
+ if not self.user_data:
+ return self.redirect_login()
+
+ query = self.db.query("code_jam_teams").filter(
+ lambda team: team["members"].contains(self.user_data["user_id"])
+ ).merge(
+ lambda team: {
+ "members":
+ self.db.query("users")
+ .filter(lambda user: team["members"].contains(user["user_id"]))
+ .coerce_to("array")
+ }
+ )
+ teams = self.db.run(query)
+
+ entries = []
+
+ for team in teams:
+ # find the jam for this team
+ query = self.db.query("code_jams").filter(
+ lambda jam: jam["teams"].contains(team["id"])
+ )
+ jam = self.db.run(query).next()
+ entries.append({
+ "team": team,
+ "jam": jam
+ })
+
+ return self.render(
+ "main/jams/teams_list.html",
+ entries=entries
+ )
diff --git a/templates/main/jams/teams_list.html b/templates/main/jams/teams_list.html
new file mode 100644
index 00000000..68000baf
--- /dev/null
+++ b/templates/main/jams/teams_list.html
@@ -0,0 +1,30 @@
+{% extends "main/base.html" %}
+{% block title %}Code Jams | My Teams{% endblock %}
+{% block og_title %}Code Jams | My Teams{% endblock %}
+
+{% block content %}
+ <div class="uk-section">
+ <div class="uk-container uk-container-small">
+ <h1 class="uk-header uk-article-title uk-heading-divider">
+ Code Jams: My Teams
+ </h1>
+ <br>
+
+ {% if entries %}
+ {% for entry in entries %}
+ <div>
+ <h3>Code Jam #{{ entry.jam.number }}: Team <strong>{{ entry.team.name }}</strong></h3>
+ <strong>Team Members</strong>
+ <ul>
+ {% for member in entry.team.members %}
+ <li>{{ member.username }}#{{ member.discriminator }}</li>
+ {% endfor %}
+ </ul>
+ </div>
+ {% endfor %}
+ {% else %}
+ <p>You are not part of any team.</p>
+ {% endif %}
+ </div>
+ </div>
+{% endblock %}
diff --git a/templates/main/navigation.html b/templates/main/navigation.html
index cd5b967f..c60fa19d 100644
--- a/templates/main/navigation.html
+++ b/templates/main/navigation.html
@@ -143,6 +143,12 @@
<li><a href="{{ url_for('main.jams.profile') }}">My Profile</a></li>
{% endif %}
+ {% if current_page == "main.jams.teams_list" %}
+ <li class="uk-active"><a href="{{ url_for('main.jams.teams_list') }}">My Teams</a></li>
+ {% else %}
+ <li><a href="{{ url_for('main.jams.teams_list') }}">My Teams</a></li>
+ {% endif %}
+
<li class="uk-nav-divider"></li>
{% if current_page.startswith("main.about.privacy") %}