You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2019/07/18 20:15:30 UTC

[airavata-django-portal] 01/02: AIRAVATA-3115 ApplicationPreferences model for favoriting apps

This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git

commit 6abf9ff5cdccbde7c1a345a2484ad4d2e2508340
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Tue Jul 16 12:13:15 2019 -0400

    AIRAVATA-3115 ApplicationPreferences model for favoriting apps
---
 .../apps/api/migrations/0003_auto_20190716_1549.py | 30 ++++++++++++++++++
 django_airavata/apps/api/models.py                 | 11 +++++++
 django_airavata/apps/api/serializers.py            |  9 ++++++
 django_airavata/apps/api/views.py                  | 36 ++++++++++++++++++++++
 4 files changed, 86 insertions(+)

diff --git a/django_airavata/apps/api/migrations/0003_auto_20190716_1549.py b/django_airavata/apps/api/migrations/0003_auto_20190716_1549.py
new file mode 100644
index 0000000..3840aab
--- /dev/null
+++ b/django_airavata/apps/api/migrations/0003_auto_20190716_1549.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.21 on 2019-07-16 15:49
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('django_airavata_api', '0002_auto_20190711_1438'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='ApplicationPreferences',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('username', models.CharField(max_length=64)),
+                ('application_id', models.CharField(max_length=64)),
+                ('favorite', models.BooleanField(default=False)),
+                ('workspace_preferences', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_airavata_api.WorkspacePreferences')),
+            ],
+        ),
+        migrations.AlterUniqueTogether(
+            name='applicationpreferences',
+            unique_together=set([('username', 'application_id')]),
+        ),
+    ]
diff --git a/django_airavata/apps/api/models.py b/django_airavata/apps/api/models.py
index fd44cca..33f6b01 100644
--- a/django_airavata/apps/api/models.py
+++ b/django_airavata/apps/api/models.py
@@ -11,6 +11,17 @@ class WorkspacePreferences(models.Model):
         return WorkspacePreferences(username=username)
 
 
+class ApplicationPreferences(models.Model):
+    username = models.CharField(max_length=64)
+    application_id = models.CharField(max_length=64)
+    favorite = models.BooleanField(default=False)
+    workspace_preferences = models.ForeignKey(WorkspacePreferences,
+                                              on_delete=models.CASCADE)
+
+    class Meta:
+        unique_together = (('username', 'application_id'),)
+
+
 class User_Notifications(models.Model):
     class Meta:
         unique_together = (('username', 'notification_id'),)
diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index e9e4ade..08fb723 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -848,7 +848,16 @@ class UserStoragePathSerializer(serializers.Serializer):
 
 
 # ModelSerializers
+class ApplicationPreferencesSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = models.ApplicationPreferences
+        exclude = ('id', 'username', 'workspace_preferences')
+
+
 class WorkspacePreferencesSerializer(serializers.ModelSerializer):
+    application_preferences = ApplicationPreferencesSerializer(
+        source="applicationpreferences_set", many=True)
+
     class Meta:
         model = models.WorkspacePreferences
         exclude = ('username',)
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index d24a562..096a294 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -563,6 +563,42 @@ class ApplicationModuleViewSet(APIBackedViewSet):
             app_deployments, many=True, context={'request': request})
         return Response(serializer.data)
 
+    @detail_route(methods=['post'])
+    def favorite(self, request, app_module_id):
+        helper = helpers.WorkspacePreferencesHelper()
+        workspace_preferences = helper.get(request)
+        try:
+            application_preferences = (
+                workspace_preferences.applicationpreferences_set.get(
+                    application_id=app_module_id))
+            application_preferences.favorite = True
+            application_preferences.save()
+        except ObjectDoesNotExist:
+            workspace_preferences.applicationpreferences_set.create(
+                username=request.user.username,
+                application_id=app_module_id,
+                favorite=True)
+
+        return HttpResponse(status=204)
+
+    @detail_route(methods=['post'])
+    def unfavorite(self, request, app_module_id):
+        helper = helpers.WorkspacePreferencesHelper()
+        workspace_preferences = helper.get(request)
+        try:
+            application_preferences = (
+                workspace_preferences.applicationpreferences_set.get(
+                    application_id=app_module_id))
+            application_preferences.favorite = False
+            application_preferences.save()
+        except ObjectDoesNotExist:
+            workspace_preferences.applicationpreferences_set.create(
+                username=request.user.username,
+                application_id=app_module_id,
+                favorite=False)
+
+        return HttpResponse(status=204)
+
     @list_route()
     def list_all(self, request, format=None):
         all_modules = self.request.airavata_client.getAllAppModules(