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 @@
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 + $_$;