Skip to content

Commit

Permalink
Merge pull request #6 from IFRC-Alert-Hub/dev_subscription_refactor
Browse files Browse the repository at this point in the history
Support listSubscriptionByUserId and fix some minor problems
  • Loading branch information
yizhou-lee authored Jun 23, 2023
2 parents 2f9dd3b + cd5f20f commit e70db20
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 150 deletions.
4 changes: 1 addition & 3 deletions subscription_dir/admin.py
Original file line number Diff line number Diff line change
@@ -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)
30 changes: 7 additions & 23 deletions subscription_dir/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -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):
Expand All @@ -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')),
],
),
]

This file was deleted.

This file was deleted.

This file was deleted.

21 changes: 5 additions & 16 deletions subscription_dir/models.py
Original file line number Diff line number Diff line change
@@ -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")
57 changes: 24 additions & 33 deletions subscription_dir/schema.py
Original file line number Diff line number Diff line change
@@ -1,42 +1,28 @@
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)
subscribe_by = graphene.String(required=True)

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,
Expand All @@ -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)
Expand All @@ -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
Expand All @@ -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())
Expand All @@ -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)
Expand Down

0 comments on commit e70db20

Please sign in to comment.