From ea378f19b15f474c1aeec910b98a32f07cd79d86 Mon Sep 17 00:00:00 2001 From: Sicherhaven Date: Wed, 25 Mar 2026 11:43:12 +0530 Subject: [PATCH] refactor: migrate users to PostgreSQL, remove SQLite secondary DB Users have been migrated from eventify-django SQLite to eventify-backend PostgreSQL. The temporary users_db workaround is no longer needed: - settings.py: removed users_db SQLite secondary database config - views.py: removed _user_db()/_user_qs() helpers; user views now query the default PostgreSQL directly with plain User.objects.filter() - docker-compose.yml: SQLite read-only volume mount removed All 27 users (25 non-superuser customers) now live in PostgreSQL. --- admin_api/views.py | 21 ++++----------------- eventify/settings.py | 13 ------------- 2 files changed, 4 insertions(+), 30 deletions(-) diff --git a/admin_api/views.py b/admin_api/views.py index 5f1674b..9ab4663 100644 --- a/admin_api/views.py +++ b/admin_api/views.py @@ -488,19 +488,6 @@ _USER_ROLE_MAP = { 'partner_staff': 'Partner', 'partner_customer': 'Partner', } -def _user_db(): - """Return the database alias that holds real user data. - Uses 'users_db' (SQLite from eventify-django) when mounted, else 'default'.""" - from django.conf import settings - return 'users_db' if 'users_db' in settings.DATABASES else 'default' - - -def _user_qs(User): - """Base queryset for end-user lookups: correct database, partner field deferred - (SQLite schema predates the partner_id column added in eventify-backend).""" - return User.objects.using(_user_db()).defer('partner') - - def _serialize_user(u): full_name = f'{u.first_name} {u.last_name}'.strip() or u.username role_key = u.role if u.role else ('customer' if getattr(u, 'is_customer', False) else 'staff') @@ -553,7 +540,7 @@ class UserMetricsView(APIView): today = timezone.now().date() week_ago = today - datetime.timedelta(days=7) # Customers = all non-superuser accounts (end users registered via mobile/web) - customer_qs = _user_qs(User).filter(is_superuser=False) + customer_qs = User.objects.filter(is_superuser=False) return Response({ 'total': customer_qs.count(), 'active': customer_qs.filter(is_active=True).count(), @@ -570,7 +557,7 @@ class UserListView(APIView): from django.db.models import Q User = get_user_model() # Customers = all non-superuser accounts (end users registered via mobile/web) - qs = _user_qs(User).filter(is_superuser=False) + qs = User.objects.filter(is_superuser=False) if s := request.GET.get('status'): if s == 'Active': qs = qs.filter(is_active=True) @@ -604,7 +591,7 @@ class UserDetailView(APIView): from django.contrib.auth import get_user_model from django.shortcuts import get_object_or_404 User = get_user_model() - u = get_object_or_404(_user_qs(User), pk=pk) + u = get_object_or_404(User, pk=pk) return Response(_serialize_user(u)) @@ -615,7 +602,7 @@ class UserStatusView(APIView): from django.contrib.auth import get_user_model from django.shortcuts import get_object_or_404 User = get_user_model() - u = get_object_or_404(_user_qs(User), pk=pk) + u = get_object_or_404(User, pk=pk) action = request.data.get('action') if action in ('suspend', 'ban'): u.is_active = False diff --git a/eventify/settings.py b/eventify/settings.py index 49f17cc..7a098ed 100644 --- a/eventify/settings.py +++ b/eventify/settings.py @@ -176,16 +176,3 @@ SIMPLE_JWT = { 'USER_ID_FIELD': 'id', 'USER_ID_CLAIM': 'user_id', } - -# --------------------------------------------------------------------------- -# Secondary read-only database: real user data from eventify-django SQLite -# Activated automatically when users_db.sqlite3 is mounted into the container -# --------------------------------------------------------------------------- -import os as _os -_sqlite_users = BASE_DIR / 'users_db.sqlite3' -if _os.path.exists(_sqlite_users): - DATABASES['users_db'] = { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': _sqlite_users, - 'OPTIONS': {'check_same_thread': False}, - }