From 3774f2ceb18cf64c5f0b6179522a58b1f0862b61 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Sat, 27 May 2017 17:58:08 +0000 Subject: [PATCH] Create UserInfo, Client, and Provider models to extend User --- caremyway/api/migrations/0001_initial.py | 28 +++++++++++++++ .../api/migrations/0002_auto_20170527_0338.py | 22 ++++++++++++ .../api/migrations/0003_auto_20170527_0439.py | 22 ++++++++++++ .../api/migrations/0004_client_provider.py | 34 +++++++++++++++++++ caremyway/api/models.py | 15 ++++++++ caremyway/api/serializers.py | 19 ++++++++--- caremyway/api/views.py | 23 +++++++------ caremyway/settings.py | 1 + caremyway/urls.py | 4 ++- 9 files changed, 151 insertions(+), 17 deletions(-) create mode 100644 caremyway/api/migrations/0001_initial.py create mode 100644 caremyway/api/migrations/0002_auto_20170527_0338.py create mode 100644 caremyway/api/migrations/0003_auto_20170527_0439.py create mode 100644 caremyway/api/migrations/0004_client_provider.py diff --git a/caremyway/api/migrations/0001_initial.py b/caremyway/api/migrations/0001_initial.py new file mode 100644 index 0000000..cb606ee --- /dev/null +++ b/caremyway/api/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.1 on 2017-05-27 02:53 +from __future__ import unicode_literals + +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='UserInfo', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('phone_number', models.CharField(blank=True, max_length=16, validators=[django.core.validators.RegexValidator(message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.", regex='^\\+?1?\\d{9,15}$')])), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/caremyway/api/migrations/0002_auto_20170527_0338.py b/caremyway/api/migrations/0002_auto_20170527_0338.py new file mode 100644 index 0000000..6ccc5f0 --- /dev/null +++ b/caremyway/api/migrations/0002_auto_20170527_0338.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.1 on 2017-05-27 03:38 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='userinfo', + name='user', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='user_info', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/caremyway/api/migrations/0003_auto_20170527_0439.py b/caremyway/api/migrations/0003_auto_20170527_0439.py new file mode 100644 index 0000000..96cff3f --- /dev/null +++ b/caremyway/api/migrations/0003_auto_20170527_0439.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.1 on 2017-05-27 04:39 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0002_auto_20170527_0338'), + ] + + operations = [ + migrations.AlterField( + model_name='userinfo', + name='user', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/caremyway/api/migrations/0004_client_provider.py b/caremyway/api/migrations/0004_client_provider.py new file mode 100644 index 0000000..49bc77e --- /dev/null +++ b/caremyway/api/migrations/0004_client_provider.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.1 on 2017-05-27 07:30 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('api', '0003_auto_20170527_0439'), + ] + + operations = [ + migrations.CreateModel( + name='Client', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('business_number', models.CharField(blank=True, max_length=16)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Provider', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('sin', models.CharField(blank=True, max_length=16)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/caremyway/api/models.py b/caremyway/api/models.py index 71a8362..05652b5 100644 --- a/caremyway/api/models.py +++ b/caremyway/api/models.py @@ -1,3 +1,18 @@ +from django.contrib.auth.models import User from django.db import models +from django.core.validators import RegexValidator # Create your models here. +class UserInfo(models.Model): + user = models.OneToOneField(User, on_delete=models.CASCADE) + phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.") + phone_number = models.CharField(validators=[phone_regex], max_length=16, blank=True) + +class Client(models.Model): + user = models.OneToOneField(User, on_delete=models.CASCADE) + business_number = models.CharField(max_length=16, blank=True) + +class Provider(models.Model): + user = models.OneToOneField(User, on_delete=models.CASCADE) + sin = models.CharField(max_length=16, blank=True) + diff --git a/caremyway/api/serializers.py b/caremyway/api/serializers.py index f25cdcd..3f74c66 100644 --- a/caremyway/api/serializers.py +++ b/caremyway/api/serializers.py @@ -1,14 +1,23 @@ from django.contrib.auth.models import User, Group from rest_framework import serializers - +from caremyway.api.models import UserInfo, Client, Provider class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User - fields = ('url', 'username', 'email', 'groups') + fields = ('url', 'username', 'first_name', 'last_name', 'email') + +class UserInfoSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = UserInfo + fields = ('url', 'user', 'phone_number') +class ClientSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Client + fields = ('url', 'user', 'business_number') -class GroupSerializer(serializers.HyperlinkedModelSerializer): +class ProviderSerializer(serializers.HyperlinkedModelSerializer): class Meta: - model = Group - fields = ('url', 'name') + model = Provider + fields = ('url', 'user', 'sin') diff --git a/caremyway/api/views.py b/caremyway/api/views.py index 5d2ef41..36b2255 100644 --- a/caremyway/api/views.py +++ b/caremyway/api/views.py @@ -2,21 +2,22 @@ from django.shortcuts import render # Create your views here. from django.contrib.auth.models import User, Group +from caremyway.api.models import UserInfo, Client, Provider from rest_framework import viewsets -from caremyway.api.serializers import UserSerializer, GroupSerializer - +from caremyway.api.serializers import UserSerializer, UserInfoSerializer, ClientSerializer, ProviderSerializer class UserViewSet(viewsets.ModelViewSet): - """ - API endpoint that allows users to be viewed or edited. - """ queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer +class UserInfoViewSet(viewsets.ModelViewSet): + queryset = UserInfo.objects.all().order_by('-id') + serializer_class = UserInfoSerializer + +class ClientViewSet(viewsets.ModelViewSet): + queryset = Client.objects.all().order_by('-id') + serializer_class = ClientSerializer -class GroupViewSet(viewsets.ModelViewSet): - """ - API endpoint that allows groups to be viewed or edited. - """ - queryset = Group.objects.all() - serializer_class = GroupSerializer +class ProviderViewSet(viewsets.ModelViewSet): + queryset = Provider.objects.all().order_by('-id') + serializer_class = ProviderSerializer diff --git a/caremyway/settings.py b/caremyway/settings.py index 3458862..548a3a9 100644 --- a/caremyway/settings.py +++ b/caremyway/settings.py @@ -38,6 +38,7 @@ INSTALLED_APPS = [ 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', + 'caremyway.api', ] REST_FRAMEWORK = { diff --git a/caremyway/urls.py b/caremyway/urls.py index 376ef4b..faff30f 100644 --- a/caremyway/urls.py +++ b/caremyway/urls.py @@ -19,7 +19,9 @@ from caremyway.api import views router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) -router.register(r'groups', views.GroupViewSet) +router.register(r'userinfos', views.UserInfoViewSet) +router.register(r'clients', views.ClientViewSet) +router.register(r'providers', views.ProviderViewSet) # Wire up our API using automatic URL routing. # Additionally, we include login URLs for the browsable API.