diff --git a/tildes/tildes/templates/intercooler/invite_code.jinja2 b/tildes/tildes/templates/intercooler/invite_code.jinja2
index dd81f1f..78ddfef 100644
--- a/tildes/tildes/templates/intercooler/invite_code.jinja2
+++ b/tildes/tildes/templates/intercooler/invite_code.jinja2
@@ -1,12 +1,21 @@
-
-
-{% if num_remaining > 0 %}
- Generate new code ({{ num_remaining }} left)
-{% endif %}
+
+ {% if num_remaining > 0 %}
+
Generate new code ({{ num_remaining }} left)
+ {% else %}
+
You don't currently have any invite codes available.
+ {% endif %}
+ {% if codes %}
+
You have the following invite codes active that have not been used yet:
+ {% for code in codes %}
+
+ {% endfor %}
+ {% endif %}
+
\ No newline at end of file
diff --git a/tildes/tildes/templates/invite.jinja2 b/tildes/tildes/templates/invite.jinja2
index 7ae3d49..c065b35 100644
--- a/tildes/tildes/templates/invite.jinja2
+++ b/tildes/tildes/templates/invite.jinja2
@@ -17,23 +17,25 @@
-{% if codes %}
- You have the following invite codes active that have not been used yet:
- {% for code in codes %}
-
- {% endfor %}
-{% endif %}
-
-{% if request.user.invite_codes_remaining > 0 %}
- Generate new code ({{ request.user.invite_codes_remaining }} left)
-{% else %}
- You don't currently have any invite codes available.
-{% endif %}
+
+ {% if request.user.invite_codes_remaining > 0 %}
+
Generate new code ({{ request.user.invite_codes_remaining }} left)
+ {% else %}
+
You don't currently have any invite codes available.
+ {% endif %}
+ {% if codes %}
+
You have the following invite codes active that have not been used yet:
+ {% for code in codes %}
+
+ {% endfor %}
+ {% endif %}
+
{% endblock %}
diff --git a/tildes/tildes/views/api/web/user.py b/tildes/tildes/views/api/web/user.py
index 49d0f87..651917c 100644
--- a/tildes/tildes/views/api/web/user.py
+++ b/tildes/tildes/views/api/web/user.py
@@ -171,13 +171,25 @@ def get_invite_code(request: Request) -> dict:
except IntegrityError:
savepoint.rollback()
+ codes = (
+ request.query(UserInviteCode)
+ .filter(
+ UserInviteCode.user_id == request.user.user_id,
+ UserInviteCode.invitee_id == None, # noqa
+ )
+ .order_by(
+ UserInviteCode.created_time.desc()
+ )
+ .all()
+ )
+
# doing an atomic decrement on request.user.invite_codes_remaining is going
# to make it unusable as an integer in the template, so store the expected
# value after the decrement first, to be able to use that instead
num_remaining = request.user.invite_codes_remaining - 1
request.user.invite_codes_remaining = User.invite_codes_remaining - 1
- return {'code': code, 'num_remaining': num_remaining}
+ return {'codes': codes, 'num_remaining': num_remaining}
@ic_view_config(
diff --git a/tildes/tildes/views/user.py b/tildes/tildes/views/user.py
index 7627861..c4f30bd 100644
--- a/tildes/tildes/views/user.py
+++ b/tildes/tildes/views/user.py
@@ -83,6 +83,9 @@ def get_invite(request: Request) -> dict:
UserInviteCode.user_id == request.user.user_id,
UserInviteCode.invitee_id == None, # noqa
)
+ .order_by(
+ UserInviteCode.created_time.desc()
+ )
.all()
)