Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 41 additions & 1 deletion src/apps/profiles/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
from datetime import timedelta
from django.utils.timezone import now
from celery_config import app

from django.contrib.auth import get_user_model
from profiles.models import DeletedUser
from competitions.models import Competition, Submission

logger = logging.getLogger()

Expand All @@ -26,3 +27,42 @@ def clean_deleted_users():
logger.info(
"Task clean_deleted_users Completed. Duration = {:.3f} seconds".format(elapsed_time)
)


@app.task(queue="site-worker")
def clean_non_activated_users():
try:
starting_time = time.process_time()
logger.info("Task clean_non_activated_users Started")

# Get User model
User = get_user_model()

# Calculate the threshold date (3 days ago)
three_days_ago = now() - timedelta(days=3)

# Filter users who are inactive, not deleted and created more than 3 days ago
users_to_delete = User.objects.filter(
is_active=False,
is_deleted=False,
date_joined__lt=three_days_ago
)

# Exclude users who have created any competitions or made submissions
users_to_delete = users_to_delete.exclude(
id__in=Competition.objects.values_list('created_by_id', flat=True)
).exclude(
id__in=Submission.objects.values_list('owner_id', flat=True)
)

# Delete users
deleted_count, _ = users_to_delete.delete()

logger.info(f"Deleted {deleted_count} non activated users from User table.")

elapsed_time = time.process_time() - starting_time
logger.info(
"Task clean_non_activated_users Completed. Duration = {:.3f} seconds".format(elapsed_time)
)
except Exception as e:
logger.exception(f"Failed to clean non-activated users\n{e}")
4 changes: 4 additions & 0 deletions src/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,10 @@
'task': 'profiles.tasks.clean_deleted_users',
'schedule': timedelta(days=1), # Run every 24 hours
},
'clean_non_activated_users': {
'task': 'profiles.tasks.clean_non_activated_users',
'schedule': timedelta(days=1), # Run every 24 hours
},
}
CELERY_TIMEZONE = 'UTC'
CELERY_WORKER_PREFETCH_MULTIPLIER = 1
Expand Down