mirror of
https://github.com/lemeow125/DRF_Template.git
synced 2025-06-29 00:25:44 +08:00
Overhauled entire project config, added notifications, email templates, optimized stripe subscriptions, redis caching, and webdriver utilities
This commit is contained in:
parent
7cbe8fd720
commit
99dfcef67b
84 changed files with 4300 additions and 867 deletions
107
backend/user_groups/signals.py
Normal file
107
backend/user_groups/signals.py
Normal file
|
@ -0,0 +1,107 @@
|
|||
from subscriptions.models import SubscriptionPlan
|
||||
from accounts.models import CustomUser
|
||||
from .models import UserGroup
|
||||
from subscriptions.tasks import get_user_group_subscription
|
||||
from django.db.models.signals import m2m_changed, post_migrate
|
||||
from django.dispatch import receiver
|
||||
from config.settings import STRIPE_SECRET_KEY, ROOT_DIR
|
||||
import os
|
||||
import json
|
||||
import stripe
|
||||
stripe.api_key = STRIPE_SECRET_KEY
|
||||
|
||||
|
||||
@receiver(m2m_changed, sender=UserGroup.managers.through)
|
||||
def update_group_managers(sender, instance, action, **kwargs):
|
||||
# When adding new managers to a UserGroup, associate them with it
|
||||
if action == 'post_add':
|
||||
# Get the newly added managers
|
||||
new_managers = kwargs.get('pk_set', set())
|
||||
for manager in new_managers:
|
||||
# Retrieve the member
|
||||
USER = CustomUser.objects.get(pk=manager)
|
||||
if not USER.user_group:
|
||||
# Update their group assiociation
|
||||
USER.user_group = instance
|
||||
USER.save()
|
||||
if USER not in instance.members.all():
|
||||
instance.members.add(USER)
|
||||
# When removing managers from a UserGroup, remove their association with it
|
||||
elif action == 'post_remove':
|
||||
for manager in kwargs['pk_set']:
|
||||
# Retrieve the manager
|
||||
USER = CustomUser.objects.get(pk=manager)
|
||||
if USER not in instance.members.all():
|
||||
USER.user_group = None
|
||||
USER.save()
|
||||
|
||||
|
||||
@receiver(m2m_changed, sender=UserGroup.members.through)
|
||||
def update_group_members(sender, instance, action, **kwargs):
|
||||
# When adding new members to a UserGroup, associate them with it
|
||||
if action == 'post_add':
|
||||
# Get the newly added members
|
||||
new_members = kwargs.get('pk_set', set())
|
||||
for member in new_members:
|
||||
# Retrieve the member
|
||||
USER = CustomUser.objects.get(pk=member)
|
||||
if not USER.user_group:
|
||||
# Update their group assiociation
|
||||
USER.user_group = instance
|
||||
USER.save()
|
||||
# When removing members from a UserGroup, remove their association with it
|
||||
elif action == 'post_remove':
|
||||
for client in kwargs['pk_set']:
|
||||
USER = CustomUser.objects.get(pk=client)
|
||||
if USER not in instance.members.all() and USER not in instance.managers.all():
|
||||
USER.user_group = None
|
||||
USER.save()
|
||||
# Update usage records
|
||||
SUBSCRIPTION_GROUP = get_user_group_subscription(instance.id)
|
||||
if SUBSCRIPTION_GROUP:
|
||||
try:
|
||||
print(f"Updating usage record for UserGroup {instance.name}")
|
||||
# Update usage for members
|
||||
SUBSCRIPTION_ITEM = SUBSCRIPTION_GROUP.subscription
|
||||
stripe.SubscriptionItem.create_usage_record(
|
||||
SUBSCRIPTION_ITEM.stripe_id,
|
||||
quantity=len(instance.members.all()),
|
||||
action="set"
|
||||
)
|
||||
except:
|
||||
print(
|
||||
f'Warning: Unable to update usage record for SubscriptionGroup ID:{instance.id}')
|
||||
|
||||
|
||||
@receiver(post_migrate)
|
||||
def create_groups(sender, **kwargs):
|
||||
if sender.name == "agencies":
|
||||
with open(os.path.join(ROOT_DIR, 'seed_data.json'), "r") as f:
|
||||
seed_data = json.loads(f.read())
|
||||
for user_group in seed_data['user_groups']:
|
||||
OWNER = CustomUser.objects.filter(
|
||||
email=user_group['owner']).first()
|
||||
USER_GROUP, CREATED = UserGroup.objects.get_or_create(
|
||||
owner=OWNER,
|
||||
agency_name=user_group['name'],
|
||||
)
|
||||
if CREATED:
|
||||
print(f"Created UserGroup {USER_GROUP.agency_name}")
|
||||
|
||||
# Add managers
|
||||
USERS = CustomUser.objects.filter(
|
||||
email__in=user_group['managers'])
|
||||
for USER in USERS:
|
||||
if USER not in USER_GROUP.managers.all():
|
||||
print(
|
||||
f"Adding User {USER.full_name} as manager to UserGroup {USER_GROUP.agency_name}")
|
||||
USER_GROUP.managers.add(USER)
|
||||
# Add members
|
||||
USERS = CustomUser.objects.filter(
|
||||
email__in=user_group['members'])
|
||||
for USER in USERS:
|
||||
if USER not in USER_GROUP.members.all():
|
||||
print(
|
||||
f"Adding User {USER.full_name} as member to UserGroup {USER_GROUP.agency_name}")
|
||||
USER_GROUP.clients.add(USER)
|
||||
USER_GROUP.save()
|
Loading…
Add table
Add a link
Reference in a new issue