diff --git a/.env b/.env index c494749..c2f225e 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ -DB_NAME=school_interface_db -DB_USER=db_username -DB_PASSWORD=db_password -SECRET_KEY=django_project_secret_key +DB_NAME = 'iitb' +DB_USER = 'root' +DB_PASSWORD = '12Athmikha@' +SECRET_KEY = django_project_secret_key diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..457f44d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.analysis.typeCheckingMode": "basic" +} \ No newline at end of file diff --git a/accounts.json b/accounts.json new file mode 100644 index 0000000..e014108 --- /dev/null +++ b/accounts.json @@ -0,0 +1 @@ +[{"model": "accounts.user", "pk": 112, "fields": {"password": "ab", "last_login": "2023-03-03T15:30:45Z", "is_superuser": true, "username": "athmikha", "is_staff": true, "is_active": true, "date_joined": "2023-03-03T15:30:45Z", "email": "ath@gmail.com", "first_name": "athmika", "last_name": "cds", "phone": "9876543023", "groups": [], "user_permissions": []}}, {"model": "accounts.user", "pk": 113, "fields": {"password": "ab", "last_login": "2023-03-03T15:30:45Z", "is_superuser": true, "username": "barath", "is_staff": true, "is_active": true, "date_joined": "2023-03-03T15:30:45Z", "email": "bat@gmail.com", "first_name": "athmika", "last_name": "cds", "phone": "9876543023", "groups": [], "user_permissions": []}}, {"model": "accounts.location", "pk": 1, "fields": {"address": "cbe", "state": 1, "district": 1, "city": 1, "pincode": "cbe", "updated": "2023-03-03"}}, {"model": "accounts.profile", "pk": 1, "fields": {"user": 112, "dob": "2023-02-02", "gender": "f", "location": 1, "updated": "2023-03-03"}}, {"model": "accounts.organisation", "pk": 112, "fields": {"added_by": 112, "name_of_association": "Association Name", "date_of_association": "2022-01-01", "type": "NGO", "updated": "2023-03-03", "is_active": true, "location": 1}}, {"model": "accounts.school", "pk": 1, "fields": {"added_by": 112, "name_of_association": "kendriya vidyalaya 10", "date_of_association": "2023-02-02", "type": "Central Government Funded", "organisation": 112, "updated": "2023-03-03", "is_active": true, "location": 1}}, {"model": "accounts.teacher", "pk": 112, "fields": {"profile": 1, "school": 1, "unique_id": "20230202"}}, {"model": "accounts.parent", "pk": 113, "fields": {}}, {"model": "accounts.condition", "pk": 1, "fields": {"sender": 5, "receiver": 7, "single_msg": true, "bulk_msg": false}}, {"model": "accounts.messagetype", "pk": 1, "fields": {"messagetype": "single"}}, {"model": "accounts.message", "pk": 1, "fields": {"message": "Hello ", "sender": 112, "sender_role": 5, "receiver": 113, "receiver_role": 7, "message_type": 1}}, {"model": "accounts.message", "pk": 2, "fields": {"message": "Hello ", "sender": 112, "sender_role": 5, "receiver": 113, "receiver_role": 7, "message_type": 1}}, {"model": "accounts.message", "pk": 3, "fields": {"message": "Hello ", "sender": 112, "sender_role": 5, "receiver": 113, "receiver_role": 7, "message_type": 1}}, {"model": "accounts.message", "pk": 4, "fields": {"message": "Hello ", "sender": 112, "sender_role": 5, "receiver": 113, "receiver_role": 7, "message_type": 1}}, {"model": "accounts.message", "pk": 5, "fields": {"message": "Hello janthuuu ", "sender": 112, "sender_role": 5, "receiver": 113, "receiver_role": 7, "message_type": 1}}] \ No newline at end of file diff --git a/accounts/migrations/0001_initial.py b/accounts/migrations/0001_initial.py index f6420ba..c950045 100644 --- a/accounts/migrations/0001_initial.py +++ b/accounts/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.1 on 2023-05-25 12:14 +# Generated by Django 4.2.1 on 2023-08-31 15:35 from django.conf import settings import django.contrib.auth.models @@ -35,7 +35,6 @@ class Migration(migrations.Migration): ('last_name', models.CharField(max_length=150, verbose_name='last name')), ('phone', models.CharField(max_length=20, validators=[django.core.validators.RegexValidator(message='Enter a valid phone/mobile number', regex='^\\+?[0-9]+-?[0-9]{6,}$')])), ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')), - ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')), ], options={ 'verbose_name': 'user', @@ -58,6 +57,13 @@ class Migration(migrations.Migration): ('state', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='common.state')), ], ), + migrations.CreateModel( + name='MessageType', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('messagetype', models.CharField(choices=[('Single Message', 'Single Message'), ('Bulk Message', 'Bulk Message')], max_length=100)), + ], + ), migrations.CreateModel( name='Organisation', fields=[ @@ -133,6 +139,28 @@ class Migration(migrations.Migration): 'ordering': ['date_of_payment'], }, ), + migrations.CreateModel( + name='Message', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('message', models.CharField(max_length=500)), + ('message_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='message_type', to='accounts.messagetype')), + ('receiver', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='received_messages', to=settings.AUTH_USER_MODEL)), + ('receiver_role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='receiver_role', to='auth.group')), + ('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sent_messages', to=settings.AUTH_USER_MODEL)), + ('sender_role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sender_role', to='auth.group')), + ], + ), + migrations.AddField( + model_name='user', + name='location', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='accounts.location'), + ), + migrations.AddField( + model_name='user', + name='user_permissions', + field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions'), + ), migrations.CreateModel( name='TrainingTeam', fields=[ @@ -170,7 +198,7 @@ class Migration(migrations.Migration): fields=[ ('user_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL)), ('unique_id', models.CharField(max_length=50)), - ('current_class', models.IntegerField(choices=[(1, 'Class 1'), (2, 'Class 2'), (3, 'Class 3'), (4, 'Class 4'), (5, 'Class 5'), (6, 'Class 6'), (7, 'Class 7'), (8, 'Class 8'), (9, 'Class 9'), (10, 'Class 10')])), + ('current_class', models.IntegerField(choices=[(1, 'Class 1'), (2, 'Class 2'), (3, 'Class 3'), (4, 'Class 4'), (5, 'Class 5'), (6, 'Class 6'), (7, 'Class 7'), (8, 'Class 8'), (9, 'Class 9'), (10, 'Class 10'), (11, 'Class 11'), (12, 'Class 12')])), ('division', models.CharField(max_length=50)), ('_parent', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='children', to='accounts.parent')), ('_teacher', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='students', to='accounts.teacher')), @@ -203,11 +231,24 @@ class Migration(migrations.Migration): ('objects', django.contrib.auth.models.UserManager()), ], ), + migrations.CreateModel( + name='Condition', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('single_msg', models.BooleanField(default=False)), + ('bulk_msg', models.BooleanField(default=False)), + ('receiver', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='receiver', to='auth.group')), + ('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sender', to='auth.group')), + ], + options={ + 'unique_together': {('sender', 'receiver')}, + }, + ), migrations.CreateModel( name='ClassCoordinator', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('classVal', models.IntegerField(choices=[(1, 'Class 1'), (2, 'Class 2'), (3, 'Class 3'), (4, 'Class 4'), (5, 'Class 5'), (6, 'Class 6'), (7, 'Class 7'), (8, 'Class 8'), (9, 'Class 9'), (10, 'Class 10')])), + ('classVal', models.IntegerField(choices=[(1, 'Class 1'), (2, 'Class 2'), (3, 'Class 3'), (4, 'Class 4'), (5, 'Class 5'), (6, 'Class 6'), (7, 'Class 7'), (8, 'Class 8'), (9, 'Class 9'), (10, 'Class 10'), (11, 'Class 11'), (12, 'Class 12')])), ('teacher', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='accounts.teacher')), ], options={ diff --git a/accounts/migrations/0002_alter_classcoordinator_classval_and_more.py b/accounts/migrations/0002_alter_classcoordinator_classval_and_more.py deleted file mode 100644 index d76b9e2..0000000 --- a/accounts/migrations/0002_alter_classcoordinator_classval_and_more.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-20 05:37 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='classcoordinator', - name='classVal', - field=models.IntegerField(choices=[(1, 'Class 1'), (2, 'Class 2'), (3, 'Class 3'), (4, 'Class 4'), (5, 'Class 5'), (6, 'Class 6'), (7, 'Class 7'), (8, 'Class 8'), (9, 'Class 9'), (10, 'Class 10'), (11, 'Class 11'), (12, 'Class 12')]), - ), - migrations.AlterField( - model_name='student', - name='current_class', - field=models.IntegerField(choices=[(1, 'Class 1'), (2, 'Class 2'), (3, 'Class 3'), (4, 'Class 4'), (5, 'Class 5'), (6, 'Class 6'), (7, 'Class 7'), (8, 'Class 8'), (9, 'Class 9'), (10, 'Class 10'), (11, 'Class 11'), (12, 'Class 12')]), - ), - ] diff --git a/accounts/migrations/0004_alter_location_pincode_alter_user_email_and_more.py b/accounts/migrations/0002_alter_location_pincode_alter_user_email_and_more.py similarity index 89% rename from accounts/migrations/0004_alter_location_pincode_alter_user_email_and_more.py rename to accounts/migrations/0002_alter_location_pincode_alter_user_email_and_more.py index f8223b6..21b2d24 100644 --- a/accounts/migrations/0004_alter_location_pincode_alter_user_email_and_more.py +++ b/accounts/migrations/0002_alter_location_pincode_alter_user_email_and_more.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.1 on 2023-07-10 06:41 +# Generated by Django 4.2.1 on 2023-12-06 07:33 import django.core.validators from django.db import migrations, models @@ -7,7 +7,7 @@ class Migration(migrations.Migration): dependencies = [ - ('accounts', '0003_messagetype_message_condition'), + ('accounts', '0001_initial'), ] operations = [ diff --git a/accounts/migrations/0003_messagetype_message_condition.py b/accounts/migrations/0003_messagetype_message_condition.py deleted file mode 100644 index 8db6f79..0000000 --- a/accounts/migrations/0003_messagetype_message_condition.py +++ /dev/null @@ -1,48 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-23 11:57 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), - ('accounts', '0002_alter_classcoordinator_classval_and_more'), - ] - - operations = [ - migrations.CreateModel( - name='MessageType', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('messagetype', models.CharField(choices=[('Single Message', 'Single Message'), ('Bulk Message', 'Bulk Message')], max_length=100)), - ], - ), - migrations.CreateModel( - name='Message', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('message', models.CharField(max_length=500)), - ('message_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='message_type', to='accounts.messagetype')), - ('receiver', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='received_messages', to=settings.AUTH_USER_MODEL)), - ('receiver_role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='receiver_role', to='auth.group')), - ('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sent_messages', to=settings.AUTH_USER_MODEL)), - ('sender_role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sender_role', to='auth.group')), - ], - ), - migrations.CreateModel( - name='Condition', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('single_msg', models.BooleanField(default=False)), - ('bulk_msg', models.BooleanField(default=False)), - ('receiver', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='receiver', to='auth.group')), - ('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sender', to='auth.group')), - ], - options={ - 'unique_together': {('sender', 'receiver')}, - }, - ), - ] diff --git a/accounts/models.py b/accounts/models.py index c0e78c0..250a13b 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -3,23 +3,12 @@ from django.core.validators import RegexValidator from django.utils.translation import gettext_lazy as _ from django.contrib.auth.models import Group - from common.models import State, District, City, Language MAX_CLASS = 12 CLASS_CHOICES = [(i, f"Class {i}") for i in range(1, MAX_CLASS+1)] -class User(AbstractUser): - phone_regex = RegexValidator(regex=r'^(\+[1-9][0-9]*-)?[1-9][0-9]{6,}$', - message='Enter a valid phone/mobile number') - - email = models.EmailField(unique=True, null=True) - first_name = models.CharField(_("first name"), max_length=150, blank=False, - null=False) - last_name = models.CharField(_("last name"), max_length=150, blank=False, - null=False) - phone = models.CharField(max_length=20, null=True, validators=[phone_regex]) class Location(models.Model): @@ -40,6 +29,18 @@ def __str__(self) -> str: return (f"{self.address}, {self.city}, {self.district}, {self.state} - " f"{self.pincode}") +class User(AbstractUser): + phone_regex = RegexValidator(regex=r'^(\+[1-9][0-9]*-)?[1-9][0-9]{6,}$', + message='Enter a valid phone/mobile number') + + email = models.EmailField(unique=True, null=True) + first_name = models.CharField(_("first name"), max_length=150, blank=False, + null=False) + last_name = models.CharField(_("last name"), max_length=150, blank=False, + null=False) + phone = models.CharField(max_length=20, null=True, validators=[phone_regex]) + location = models.ForeignKey(Location,on_delete=models.PROTECT) + class Profile(models.Model): """ diff --git a/accounts/serializers/common_serializers.py b/accounts/serializers/common_serializers.py index 34e5aad..21474e1 100644 --- a/accounts/serializers/common_serializers.py +++ b/accounts/serializers/common_serializers.py @@ -68,3 +68,4 @@ class ConditionSerializer(serializers.ModelSerializer): class Meta: model = Condition fields = '__all__' + diff --git a/accounts/tests.py b/accounts/tests.py index 71c98ab..d319bdd 100644 --- a/accounts/tests.py +++ b/accounts/tests.py @@ -1,37 +1,32 @@ # from django.urls import reverse from rest_framework.test import APITestCase +from rest_framework import status from common.models import State, District, City from django.contrib.auth.models import Group -from rest_framework import status -from datetime import date -from accounts.models import User, Message, MessageType, \ - Condition, Teacher, Profile, Location, School, Parent +from django.urls import reverse +from common.models import State,District,City +from django.test import TestCase +from rest_framework.test import APIClient +from datetime import date +from accounts.models import User, Message, MessageType, Condition, Teacher, Profile, Location, School, Parent -class AccountsTest(APITestCase): +'''class AccountsTest(APITestCase): def setUp(self): s = State.objects.create(id=1, name='Maharashtra') District.objects.create(id=1, name='Mumbai', state=s) City.objects.create(id=1, name='Mumbai', state=s) - User.objects.create( - username='user2', - email='parent1@example.com', - password='password1', - first_name='Johne', - last_name='Doev', - phone='+1234567892' - ) + User.objects.create(id=1, username="ankitamk", email="ankitamk@gmail.com", + password="Root@123") self.post_data = { "user": { - "username": "user3", - "email": "user3@example.com", - "password": "password1", - "first_name": "Johne", - "last_name": "Doev", - "phone": "+1234567892" + "first_name": "Aditi", + "last_name": "P", + "email": "aditip3@gmail.com", + "username": "aditip3@gmail.com", + "password": "Admin@1234" }, "profile": { - "user": "user", "dob": "1991-06-05", "gender": "F", "phone": "9810150191", @@ -65,33 +60,29 @@ def setUp(self): def test_create_user(self): """ - Ensure we can create a new Training Team user. - """ + #Ensure we can create a new Training Team user. +""" response = self.client.post(self.create_user_url, self.post_data, format='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) def test_create_organisation(self): """ - Ensure we can create a new Organisation. - """ + #Ensure we can create a new Organisation. +""" response = self.client.post(self.create_org_url, self.org_data, format='json') - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - - -class MessageWithinCommunity1(APITestCase): + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + class MessageWithinCommunity1(APITestCase): def setUp(self): sender_group = Group.objects.create(name='teacher') - - receiver_group = Group.objects.create(name='parent') - + receiver_group = Group.objects.create(name='parent') state_ = State.objects.create(id=1, name='Maharashtra') - district = District.objects.create(id=1, name='Mumbai', state=state_) city = City.objects.create(id=1, name='Mumbai', state=state_) # Create a Location instance - locat = Location.objects.create( + l = Location.objects.create( address='lorem ipsum', state=state_, district=district, @@ -101,70 +92,53 @@ def setUp(self): # Create a User instance teacher_user = User.objects.create( - username='user1', + username='athmikha', email='teacher1@example.com', password='password', first_name='John', last_name='Doe', phone='+1234567890' ) - - # Create a Profile instance + + # Create a Profile instance and associate it with the User and Location instances teacher_profile = Profile.objects.create( user=teacher_user, dob='1991-06-05', gender='F', - location=locat + location=l ) - - # Create a School instance + school = School.objects.create( added_by=teacher_user, name_of_association='kendriya vidyalaya 10', date_of_association=date(2023, 6, 27), type='Central Government Funded', - organisation=None, - location=locat, - ) - - # Create a Teacher instance - sender = Teacher( - user_ptr=teacher_user, - school=school, - profile=teacher_profile, - unique_id='12345' + organisation=None, # If applicable, replace with the appropriate Organisation instance + location=l, ) + + sender = Teacher(user_ptr=teacher_user,school=school,profile=teacher_profile,unique_id='12345') sender.save_base(raw=True) - - # Create a User instance + q=Teacher.objects.all() + parent_user = User.objects.create( - username='user2', + username='janthuu', email='parent1@example.com', password='password1', first_name='Johne', last_name='Doev', phone='+1234567892' ) - + # Create a Parent instance and associate it with the User instance receiver = Parent( user_ptr=parent_user ) receiver.save_base(raw=True) - - # Create a Message Type instance message_type = MessageType.objects.create(messagetype='Single Message') message_type = MessageType.objects.create(messagetype='Bulk Message') - - # Create a Condition instance - Condition.objects.create( - sender=sender_group, - receiver=receiver_group, - single_msg=1, - bulk_msg=1 - ) - - # Create a Message instance + + Condition.objects.create(sender=sender_group, receiver=receiver_group,single_msg=1,bulk_msg=1) Message.objects.create( message='Test message', sender=sender, @@ -178,15 +152,39 @@ def setUp(self): def test_get_with_valid_data(self): # Test the 'get' method with valid data request_data = { - - "sender_role": "teacher", - "sender": "user1", - "msg_recv": ["user2"], - "message": "Hello user2 ", - "msg_type": "Single Message", - "rec_role": "parent" - - } + + "sender_role" : "teacher", + "sender" : "athmikha", + "msg_recv" : ["janthuu"], + "message" : "Hello janthuuu ", + "msg_type" : "Single Message", + "rec_role" : "parent" + + } + self.url = 'http://127.0.0.1:8000/accounts/message-list' response = self.client.post(self.url, data=request_data, format='json', follow=True) + self.assertEqual(response.status_code, 200)''' + +class LocationMatchTestCase(TestCase): + def setUp(self): + state_ = State.objects.create(id=1, name='Maharashtra') + state1_ = State.objects.create(id=2, name='tamil nadu') + district = District.objects.create(id=1, name='Mumbai', state=state_) + city = City.objects.create(id=1, name='Mumbai', state=state_) + self.location1 = Location.objects.create(address='Address 1', state=state_, district=district, city=city, pincode='123456') + self.location2 = Location.objects.create(address='Address 2', state=state1_, district=district, city=city, pincode='654321') + self.user1 = User.objects.create(username='user1', first_name='Johne', last_name='Doev', email='user1@example.com', phone='1234567890',location_id=self.location1.id) + self.user2 = User.objects.create(username='athmikha', first_name='athmikha',last_name='cds', email='ath2@example.com', phone='9876543210',location_id=self.location2.id) + + + + def test_match_location_view(self): + request_data = { + "user1": self.user1.id, + "user2": self.user2.id + } + url = 'http://127.0.0.1:8000/accounts/match/' + response = self.client.post(url, data=request_data, format='json') self.assertEqual(response.status_code, 200) + self.assertContains(response, 'matched') diff --git a/accounts/urls.py b/accounts/urls.py index 3d8033c..1d37311 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -4,7 +4,7 @@ from accounts.api.user_api import CentralCoordinatorViewset, SchoolCoordinatorViewset, \ TeacherViewset, ParentViewset from rest_framework import routers -from .views import LogoutView, MessageWithinCommunity +from .views import LogoutView, MessageWithinCommunity, Match app_name = "accounts" router = routers.DefaultRouter(trailing_slash=False) @@ -24,4 +24,7 @@ path('', include(router.urls)), path('logout/', LogoutView.as_view(), name='logout'), path('message-list', MessageWithinCommunity.as_view(), name='message-list'), + path('match/', Match.as_view(), name='match') + + ] diff --git a/accounts/utility.py b/accounts/utility.py index 2478131..500ab55 100644 --- a/accounts/utility.py +++ b/accounts/utility.py @@ -41,3 +41,13 @@ class CustomPasswordValidator(UserAttributeSimilarityValidator): def validate(self, password, user=None, dob=None): super().validate(password, user) validate_user_password_constraints(password, dob) + + +class InputValue(): + def get(self): + msg_recv = ["barath"] + message = "Hello" + msg_type = "single" + rec_role = "parent" + + return msg_recv, rec_role, message, msg_type diff --git a/accounts/views.py b/accounts/views.py index 8602f38..558493a 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -1,4 +1,5 @@ # from django.shortcuts import render +from fuzzywuzzy import fuzz from rest_framework.views import APIView from rest_framework.permissions import IsAuthenticated from django.http import HttpResponse @@ -25,7 +26,6 @@ def post(self, request): class MessageWithinCommunity(APIView): def post(self, request): - senderRole = request.data.get('sender_role') senderName = request.data.get('sender') recvName = request.data.get('msg_recv', []) @@ -38,26 +38,115 @@ def post(self, request): s = Group.objects.get(name=senderRole) r = Group.objects.get(name=recvRole) m = MessageType.objects.get(messagetype=msgtype) - matching_rows = Condition.objects.get(sender=s, receiver=r) - if msgtype == 'Single Message' and matching_rows.single_msg: - pass - elif msgtype == 'Bulk Message' and matching_rows.bulk_msg: + elif msgtype == 'Bulk Message' and matching_rows.bulk_msg: pass - else: + else: print("not a valid combination") - for i in range(0, len(recvName)): - ide = User.objects.get(username=recvName[i]) - if hasattr(ide, recvRole): - message = Message( - receiver=ide, sender=x, sender_role=s, - receiver_role=r, message=message_, message_type=m - ) - message.save() - else: - print('not the role') + for i in range(0, len(recvName)): + ide = User.objects.get(username=recvName[i]) + if hasattr(ide, recvRole): + message = Message( + receiver=ide, sender=x, sender_role=s, + receiver_role=r, message=message_, message_type=m + ) + message.save() + else: + print('not the role') else: print('Not a valid sender!!') response = HttpResponse("Message Part") return response + + +def partial(original,comparison): + a1=fuzz.partial_ratio(original, comparison) + return a1/100 + +def tokenratio(original,comparison): + original=original + comparison=comparison + + a2=fuzz.token_sort_ratio(original,comparison) + return a2/100 + +def exact_match(original,comparison): + + if original == comparison: + return 1 + return 0 + +def match_location(n,e): + q1=n.location + q2=e.location + s1=q1.address + s2=q2.address + a1=tokenratio(s1,s2) + c1=q1.city.name + c2=q2.city.name + d1=q1.district.name + d2=q2.district.name + st1=q1.state.name + st2=q2.state.name + a2=exact_match(c1,c2) + a3=exact_match(d1,d2) + a4=exact_match(st1,st2) + af=a2*a3*a4*a1 + return af + + +def match_name(original,comparison): + + a3=tokenratio(original,comparison) + return a3 +def match_usernamename(original,comparison): + + a3=tokenratio(original,comparison) + return a3 + +def match_email(original,comparison): + a4=partial(original,comparison) + return a4 + +def match_phone(original,comparison): + a5=exact_match(original,comparison) + return a5 + +def Match_user(u1,u2): + u1name='' + u2name='' + u1name=u1.first_name+u1.last_name + u2name=u2.first_name+u2.last_name + l=match_location(u1,u2) + n=match_name(u1name,u2name) + e=match_email(u1.email,u2.email) + p=match_phone(u1.phone,u2.phone) + u=match_usernamename(u1.username,u2.username) + nm=n*e + np=n*p + ln=l*n*0.8 + ue=u*e + maxi=max(nm,np,ln,ue) + + return(maxi) + +class Match (APIView): + def post(self, request): + user1 = request.data.get('user1') + user2 = request.data.get('user2') + try: + u1=User.objects.get(id=user1) + u2=User.objects.get(id=user2) + r=Match_user(u1,u2) + + if(r>0.5): + print("Matched!",r) + return HttpResponse("matched") + else: + print("not Match",r) + return HttpResponse("not matched") + except User.DoesNotExist: + print("\n\n\n User not found! \n\n\n") + + diff --git a/config.py b/config.py deleted file mode 100644 index 51c64dd..0000000 --- a/config.py +++ /dev/null @@ -1 +0,0 @@ -DEBUG = True diff --git a/requirements.txt b/requirements.txt index 771a667..98ddf39 100644 Binary files a/requirements.txt and b/requirements.txt differ