feat: multi tenancy support

This commit is contained in:
Herculino Trotta
2025-03-08 12:03:17 -03:00
parent c7d70a1748
commit 020dd74f80
79 changed files with 2401 additions and 399 deletions
+26 -11
View File
@@ -268,14 +268,17 @@ class ImportService:
category = TransactionCategory.objects.get(id=category_name)
else: # name
if getattr(category_mapping, "create", False):
category, _ = TransactionCategory.objects.get_or_create(
name=category_name
)
try:
category = TransactionCategory.objects.get(
name=category_name
)
except TransactionCategory.DoesNotExist:
category = TransactionCategory(name=category_name)
category.save()
else:
category = TransactionCategory.objects.filter(
name=category_name
).first()
if category:
data["category"] = category
self.import_run.categories.add(category)
@@ -325,9 +328,13 @@ class ImportService:
tag = TransactionTag.objects.filter(id=tag_name).first()
else: # name
if getattr(tags_mapping, "create", False):
tag, _ = TransactionTag.objects.get_or_create(
name=tag_name.strip()
)
try:
tag = TransactionTag.objects.get(
name=tag_name.strip()
)
except TransactionTag.DoesNotExist:
tag = TransactionTag(name=tag_name.strip())
tag.save()
else:
tag = TransactionTag.objects.filter(
name=tag_name.strip()
@@ -361,9 +368,13 @@ class ImportService:
).first()
else: # name
if getattr(entities_mapping, "create", False):
entity, _ = TransactionEntity.objects.get_or_create(
name=entity_name.strip()
)
try:
entity = TransactionEntity.objects.get(
name=entity_name.strip()
)
except TransactionEntity.DoesNotExist:
entity = TransactionEntity(name=entity_name.strip())
entity.save()
else:
entity = TransactionEntity.objects.filter(
name=entity_name.strip()
@@ -394,7 +405,11 @@ class ImportService:
def _create_account(self, data: Dict[str, Any]) -> Account:
if "group" in data:
group_name = data.pop("group")
group, _ = AccountGroup.objects.get_or_create(name=group_name)
try:
group = AccountGroup.objects.get(name=group_name)
except AccountGroup.DoesNotExist:
group = AccountGroup(name=group_name)
group.save()
data["group"] = group
# Handle currency references
+8 -1
View File
@@ -1,7 +1,9 @@
import logging
from django.contrib.auth import get_user_model
from procrastinate.contrib.django import app
from apps.common.middleware.thread_local import write_current_user, delete_current_user
from apps.import_app.models import ImportRun
from apps.import_app.services import ImportServiceV1
@@ -9,10 +11,15 @@ logger = logging.getLogger(__name__)
@app.task(name="process_import")
def process_import(import_run_id: int, file_path: str):
def process_import(import_run_id: int, file_path: str, user_id: int):
user = get_user_model().objects.get(id=user_id)
write_current_user(user)
try:
import_run = ImportRun.objects.get(id=import_run_id)
import_service = ImportServiceV1(import_run)
import_service.process_file(file_path)
delete_current_user()
except ImportRun.DoesNotExist:
delete_current_user()
raise ValueError(f"ImportRun with id {import_run_id} not found")
-1
View File
@@ -2,7 +2,6 @@ from django.urls import path
import apps.import_app.views as views
urlpatterns = [
path("import/", views.import_view, name="import"),
path(
"import/presets/",
views.import_presets_list,
+5 -14
View File
@@ -15,19 +15,6 @@ from apps.import_app.services import PresetService
from apps.import_app.tasks import process_import
def import_view(request):
import_profile = ImportProfile.objects.get(id=2)
shutil.copyfile(
"/usr/src/app/apps/import_app/teste2.csv", "/usr/src/app/temp/teste2.csv"
)
ir = ImportRun.objects.create(profile=import_profile, file_name="teste.csv")
process_import.defer(
import_run_id=ir.id,
file_path="/usr/src/app/temp/teste2.csv",
)
return HttpResponse("Hello, world. You're at the polls page.")
@login_required
@require_http_methods(["GET"])
def import_presets_list(request):
@@ -189,7 +176,11 @@ def import_run_add(request, profile_id):
import_run = ImportRun.objects.create(profile=profile, file_name=filename)
# Defer the procrastinate task
process_import.defer(import_run_id=import_run.id, file_path=file_path)
process_import.defer(
import_run_id=import_run.id,
file_path=file_path,
user_id=request.user.id,
)
messages.success(request, _("Import Run queued successfully"))