diff --git a/files/classes/user.py b/files/classes/user.py index b38d0ea0c..1ed41084f 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -4,7 +4,7 @@ from typing import Union import re import pyotp -from sqlalchemy import Column, ForeignKey +from sqlalchemy import Column, ForeignKey, FetchedValue from sqlalchemy.orm import aliased, deferred, Query from sqlalchemy.sql import case, func, literal from sqlalchemy.sql.expression import not_, and_, or_ @@ -177,6 +177,8 @@ class User(Base): sub_mods = relationship("Mod", primaryjoin="User.id == Mod.user_id", lazy="raise") sub_exiles = relationship("Exile", primaryjoin="User.id == Exile.user_id", lazy="raise") + lifetime_donated = deferred(Column(Integer, server_default=FetchedValue())) + def __init__(self, **kwargs): if "password" in kwargs: diff --git a/files/templates/admin/patrons.html b/files/templates/admin/patrons.html index d050ff631..cb001dd61 100644 --- a/files/templates/admin/patrons.html +++ b/files/templates/admin/patrons.html @@ -7,6 +7,7 @@ # Name Tier + Lifetime Donated Truescore @@ -19,6 +20,7 @@ 2{{user.patron}} {% endif %} + {{user.lifetime_donated}} {{user.truescore}} {% endfor %} diff --git a/files/templates/userpage/banner.html b/files/templates/userpage/banner.html index a995c49b1..8b12046c5 100644 --- a/files/templates/userpage/banner.html +++ b/files/templates/userpage/banner.html @@ -226,6 +226,11 @@ {% if u.is_private %}

User has private mode enabled

{% endif %} + + {% if v and v.admin_level > PERMS['VIEW_PATRONS'] %} +

Lifetime Donated: ${{u.lifetime_donated}}

+ {% endif %} + {% if v and (v.admin_level >= PERMS['VIEW_ALTS'] or v.alt) %} {% if v.admin_level >= PERMS['USER_LINK'] %} {{alts|length}} Alt{{macros.plural(alts|length)}}: @@ -496,6 +501,11 @@ {% if u.is_private %}

User has private mode enabled

{% endif %} + + {% if v and v.admin_level > PERMS['VIEW_PATRONS'] %} +

Lifetime Donated: ${{u.lifetime_donated}}

+ {% endif %} + {% if v and (v.admin_level >= PERMS['VIEW_ALTS'] or v.alt) %} {% if v.admin_level >= PERMS['USER_LINK'] %} {{alts|length}} Alt{{macros.plural(alts|length)}}: diff --git a/migrations/20230511-add-lifetime-donated-column.sql b/migrations/20230511-add-lifetime-donated-column.sql new file mode 100644 index 000000000..bd0023497 --- /dev/null +++ b/migrations/20230511-add-lifetime-donated-column.sql @@ -0,0 +1,7 @@ +create function public.lifetime_donated(public.users) returns integer + language sql immutable strict + as $_$ + select sum(amount) + from transactions + where transactions.email = $1.email + $_$;