From cd5f20f7bcffa7524440109a13fb955e835a0a28 Mon Sep 17 00:00:00 2001 From: Yuechen Chen Date: Fri, 23 Jun 2023 17:50:10 +0100 Subject: [PATCH] Support listSubscriptionByUserId and fix some minor problems based on discussion --- subscription_dir/admin.py | 4 +- subscription_dir/migrations/0001_initial.py | 30 +++------- ...2_alter_subscription_region_id_and_more.py | 24 -------- ..._region_id_subscription_region_and_more.py | 23 -------- ..._id_alter_subscription_id_alter_user_id.py | 28 --------- subscription_dir/models.py | 21 ++----- subscription_dir/schema.py | 57 ++++++++----------- 7 files changed, 37 insertions(+), 150 deletions(-) delete mode 100644 subscription_dir/migrations/0002_alter_subscription_region_id_and_more.py delete mode 100644 subscription_dir/migrations/0003_rename_region_id_subscription_region_and_more.py delete mode 100644 subscription_dir/migrations/0004_alter_region_id_alter_subscription_id_alter_user_id.py diff --git a/subscription_dir/admin.py b/subscription_dir/admin.py index 88b2eae..26ef851 100644 --- a/subscription_dir/admin.py +++ b/subscription_dir/admin.py @@ -1,7 +1,5 @@ from django.contrib import admin -from .models import User, Region, Subscription +from .models import Subscription # Register your models here. -admin.site.register(User) -admin.site.register(Region) admin.site.register(Subscription) diff --git a/subscription_dir/migrations/0001_initial.py b/subscription_dir/migrations/0001_initial.py index ed0d5e1..bf0ed11 100644 --- a/subscription_dir/migrations/0001_initial.py +++ b/subscription_dir/migrations/0001_initial.py @@ -1,7 +1,7 @@ -# Generated by Django 4.2.2 on 2023-06-22 15:47 +# Generated by Django 4.2.2 on 2023-06-23 16:26 +import django.contrib.postgres.fields from django.db import migrations, models -import django.db.models.deletion class Migration(migrations.Migration): @@ -12,32 +12,16 @@ class Migration(migrations.Migration): ] operations = [ - migrations.CreateModel( - name='Region', - fields=[ - ('id', models.IntegerField(default=0, primary_key=True, serialize=False)), - ('name', models.CharField(default='None')), - ('polygon', models.CharField(default='None')), - ], - ), - migrations.CreateModel( - name='User', - fields=[ - ('id', models.IntegerField(default=0, primary_key=True, serialize=False)), - ('email', models.EmailField(max_length=255, verbose_name='email')), - ('whatsapp_id', models.CharField(blank=True, max_length=255, null=True, verbose_name='whatsapp')), - ], - ), migrations.CreateModel( name='Subscription', fields=[ - ('id', models.IntegerField(default=0, primary_key=True, serialize=False)), + ('id', models.AutoField(primary_key=True, serialize=False)), + ('user_id', models.IntegerField(default=0, verbose_name='user_id')), + ('country_ids', django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(verbose_name='country_ids'), default=list, size=None)), ('category', models.CharField(default='', verbose_name='category')), - ('urgency', models.IntegerField(default='', verbose_name='urgency')), - ('severity', models.IntegerField(default='', verbose_name='severity')), + ('urgency', models.IntegerField(default=0, verbose_name='urgency')), + ('severity', models.IntegerField(default=0, verbose_name='severity')), ('subscribe_by', models.CharField(default='', verbose_name='subscribe_by')), - ('region_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='region_id', to='subscription_dir.region')), - ('user_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_id', to='subscription_dir.user')), ], ), ] diff --git a/subscription_dir/migrations/0002_alter_subscription_region_id_and_more.py b/subscription_dir/migrations/0002_alter_subscription_region_id_and_more.py deleted file mode 100644 index db0f971..0000000 --- a/subscription_dir/migrations/0002_alter_subscription_region_id_and_more.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 4.2.2 on 2023-06-22 16:24 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('subscription_dir', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='subscription', - name='region_id', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='region', to='subscription_dir.region'), - ), - migrations.AlterField( - model_name='subscription', - name='user_id', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user', to='subscription_dir.user'), - ), - ] diff --git a/subscription_dir/migrations/0003_rename_region_id_subscription_region_and_more.py b/subscription_dir/migrations/0003_rename_region_id_subscription_region_and_more.py deleted file mode 100644 index 5ba2d45..0000000 --- a/subscription_dir/migrations/0003_rename_region_id_subscription_region_and_more.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 4.2.2 on 2023-06-22 16:28 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('subscription_dir', '0002_alter_subscription_region_id_and_more'), - ] - - operations = [ - migrations.RenameField( - model_name='subscription', - old_name='region_id', - new_name='region', - ), - migrations.RenameField( - model_name='subscription', - old_name='user_id', - new_name='user', - ), - ] diff --git a/subscription_dir/migrations/0004_alter_region_id_alter_subscription_id_alter_user_id.py b/subscription_dir/migrations/0004_alter_region_id_alter_subscription_id_alter_user_id.py deleted file mode 100644 index f7bb5fb..0000000 --- a/subscription_dir/migrations/0004_alter_region_id_alter_subscription_id_alter_user_id.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 4.2.2 on 2023-06-22 16:47 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('subscription_dir', '0003_rename_region_id_subscription_region_and_more'), - ] - - operations = [ - migrations.AlterField( - model_name='region', - name='id', - field=models.AutoField(primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='subscription', - name='id', - field=models.AutoField(primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='user', - name='id', - field=models.AutoField(primary_key=True, serialize=False), - ), - ] diff --git a/subscription_dir/models.py b/subscription_dir/models.py index 292b39b..d509615 100644 --- a/subscription_dir/models.py +++ b/subscription_dir/models.py @@ -1,23 +1,12 @@ from django.db import models - - -class User(models.Model): - id = models.AutoField(primary_key=True) - email = models.EmailField(blank=False, max_length=255, verbose_name="email") - whatsapp_id = models.CharField(blank=True, null=True, max_length=255, verbose_name="whatsapp") - - -class Region(models.Model): - id = models.AutoField(primary_key=True) - name = models.CharField(default="None") - polygon = models.CharField(default="None") +from django.contrib.postgres.fields import ArrayField class Subscription(models.Model): id = models.AutoField(primary_key=True) - user = models.ForeignKey(User, related_name='user', on_delete=models.CASCADE) - region = models.ForeignKey(Region, related_name='region', on_delete=models.CASCADE) + user_id = models.IntegerField(default=0, verbose_name="user_id") + country_ids = ArrayField(models.IntegerField(verbose_name='country_ids'), default=list) category = models.CharField(default="", verbose_name="category") - urgency = models.IntegerField(default="", verbose_name="urgency") - severity = models.IntegerField(default="", verbose_name="severity") + urgency = models.IntegerField(default=0, verbose_name="urgency") + severity = models.IntegerField(default=0, verbose_name="severity") subscribe_by = models.CharField(default="", verbose_name="subscribe_by") diff --git a/subscription_dir/schema.py b/subscription_dir/schema.py index d6908b2..98f9e91 100644 --- a/subscription_dir/schema.py +++ b/subscription_dir/schema.py @@ -1,30 +1,18 @@ import graphene from graphene_django import DjangoObjectType -from .models import User, Region, Subscription - - -class UserType(DjangoObjectType): - class Meta: - model = User - field = ("id", "email", "whatsapp") - - -class RegionType(DjangoObjectType): - class Meta: - model = Region - field = ("id", "name", "polygon") +from .models import Subscription class SubscriptionType(DjangoObjectType): class Meta: model = Subscription - fields = ["id", "user", "region", "category", "urgency", "severity", "subscribe_by"] + fields = ["id", "user_id", "country_ids", "category", "urgency", "severity", "subscribe_by"] class CreateSubscription(graphene.Mutation): class Arguments: user_id = graphene.Int(required=True) - region_id = graphene.Int(required=True) + country_ids = graphene.List(graphene.Int) category = graphene.String(required=True) urgency = graphene.Int(required=True) severity = graphene.Int(required=True) @@ -32,11 +20,9 @@ class Arguments: subscription = graphene.Field(SubscriptionType) - def mutate(self, info, user_id, region_id, category, urgency, severity, subscribe_by): - user_object = User.objects.get(id=user_id) - region_object = Region.objects.get(id=region_id) - subscription = Subscription(user=user_object, - region=region_object, + def mutate(self, info, user_id, country_ids, category, urgency, severity, subscribe_by): + subscription = Subscription(user_id=user_id, + country_ids=country_ids, category=category, urgency=urgency, severity=severity, @@ -60,7 +46,7 @@ class UpdateSubscription(graphene.Mutation): class Arguments: subscription_id = graphene.Int(required=True) user_id = graphene.Int(required=True) - region_id = graphene.Int(required=True) + country_ids = graphene.List(graphene.Int) category = graphene.String(required=True) urgency = graphene.Int(required=True) severity = graphene.Int(required=True) @@ -69,10 +55,10 @@ class Arguments: subscription = graphene.Field(SubscriptionType) def mutate(self, info, - subscription_id, user_id, region_id, category, urgency, severity, subscribe_by): + subscription_id, user_id, country_ids, category, urgency, severity, subscribe_by): subscription = Subscription.objects.get(id=subscription_id) - subscription.user = User.objects.get(id=user_id) - subscription.region = Region.objects.get(id=region_id) + subscription.user_id = user_id + subscription.country_ids = country_ids subscription.category = category subscription.urgency = urgency subscription.severity = severity @@ -89,8 +75,10 @@ class Mutation(graphene.ObjectType): class Query(graphene.ObjectType): list_all_subscription = graphene.List(SubscriptionType) + list_subscription_by_user_id = graphene.List(SubscriptionType, + user_id=graphene.Int()) list_subscription = graphene.List(SubscriptionType, - region_id=graphene.Int(default_value=-1), + country_ids=graphene.List(graphene.Int), category=graphene.String(), urgency=graphene.Int(), severity=graphene.Int()) @@ -100,16 +88,19 @@ class Query(graphene.ObjectType): def resolve_list_all_subscription(self, info): return Subscription.objects.all() - def resolve_list_subscription(self, info, region_id, category, urgency, severity): - if region_id == -1: - return Subscription.objects.filter(category=category, - urgency__gte=urgency, + def resolve_list_subscription_by_user_id(self, info, user_id): + return Subscription.objects.filter(user_id=user_id) + + def resolve_list_subscription(self, info, country_ids, category, urgency, severity): + query_set = Subscription.objects.filter(urgency__gte=urgency, severity__gte=severity) - return Subscription.objects.filter(region_id=region_id, - category=category, - urgency__gte=urgency, - severity__gte=severity) + if len(country_ids) > 0: + query_set = query_set.filter(country_ids__contains=country_ids) + + if category != "": + query_set = query_set.filter(category=category) + return query_set def resolve_get_subscription(self, info, subscription_id): return Subscription.objects.get(id=subscription_id)