From 40eca361e6bb26fbd7461b803e99ad995cd98729 Mon Sep 17 00:00:00 2001
From: Julien FumeyY <julien.fumey@pasteur.fr>
Date: Thu, 24 Apr 2025 11:08:25 +0200
Subject: [PATCH] add user fk + session fk to simulatorjob at creation

---
 ...er_simulatorjob_owning_session_and_more.py | 50 +++++++++++++++++++
 src/InSillyCloWeb/assemblies/models.py        | 14 ++++++
 src/InSillyCloWeb/assemblies/wizard_views.py  |  3 ++
 3 files changed, 67 insertions(+)
 create mode 100644 src/InSillyCloWeb/assemblies/migrations/0010_simulatorjob_owner_simulatorjob_owning_session_and_more.py

diff --git a/src/InSillyCloWeb/assemblies/migrations/0010_simulatorjob_owner_simulatorjob_owning_session_and_more.py b/src/InSillyCloWeb/assemblies/migrations/0010_simulatorjob_owner_simulatorjob_owning_session_and_more.py
new file mode 100644
index 0000000..d6d96f9
--- /dev/null
+++ b/src/InSillyCloWeb/assemblies/migrations/0010_simulatorjob_owner_simulatorjob_owning_session_and_more.py
@@ -0,0 +1,50 @@
+# Generated by Django 5.1.4 on 2025-04-24 08:47
+
+import assemblies.models
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('assemblies', '0009_simulatorjob_primers_file'),
+        ('sessions', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='simulatorjob',
+            name='owner',
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name='jobs',
+                to=settings.AUTH_USER_MODEL,
+            ),
+        ),
+        migrations.AddField(
+            model_name='simulatorjob',
+            name='owning_session',
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name='jobs',
+                to='sessions.session',
+            ),
+        ),
+        migrations.AlterField(
+            model_name='simulatorjob',
+            name='primers_file',
+            field=models.FileField(
+                blank=True,
+                help_text='A CSV file where the header is "primerId;sequence".\nNote that the separator is ";".',
+                null=True,
+                upload_to=assemblies.models.job_dependant_primers_file_upload_to,
+                verbose_name='Primers file',
+            ),
+        ),
+    ]
diff --git a/src/InSillyCloWeb/assemblies/models.py b/src/InSillyCloWeb/assemblies/models.py
index b9d424c..b9a8003 100644
--- a/src/InSillyCloWeb/assemblies/models.py
+++ b/src/InSillyCloWeb/assemblies/models.py
@@ -321,6 +321,20 @@ class SimulatorJob(models.Model):
         verbose_name="Restriction enzyme",
         help_text="Enzyme used to produce digestion gel",
     )
+    owner = models.ForeignKey(
+        User,
+        on_delete=models.CASCADE,
+        related_name='jobs',
+        null=True,
+        blank=True,
+    )
+    owning_session = models.ForeignKey(
+        Session,
+        on_delete=models.CASCADE,
+        related_name='jobs',
+        null=True,
+        blank=True,
+    )
 
     #########################################################################
     # Function and methods
diff --git a/src/InSillyCloWeb/assemblies/wizard_views.py b/src/InSillyCloWeb/assemblies/wizard_views.py
index e84ff12..c0c3012 100644
--- a/src/InSillyCloWeb/assemblies/wizard_views.py
+++ b/src/InSillyCloWeb/assemblies/wizard_views.py
@@ -101,6 +101,9 @@ class AssemblySimulatorNotProtected(wizard_views.NamedUrlSessionWizardView):
     def done(self, form_list, form_dict=None, **kwargs):
 
         sjob = SimulatorJob.objects.create()
+        if self.request.user.is_authenticated:
+            sjob.owner = self.request.user
+        sjob.owning_session = Session.objects.get(session_key=self.request.session.session_key)
         sjob.save()
 
         sjob.add_design_to_dir(
-- 
GitLab