From dee921a69422294d92580e587434ebb933bde057 Mon Sep 17 00:00:00 2001 From: okalintu Date: Mon, 25 Jul 2016 19:09:20 +0300 Subject: [PATCH] implemented member request feature for members app --- examples/members.txt | 38 ++++++++++++++++++++++++ members/migrations/0003_memberrequest.py | 25 ++++++++++++++++ members/models.py | 14 ++++++++- members/views.py | 32 ++++++++++++++++++-- sikweb/urls.py | 7 +++++ 5 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 members/migrations/0003_memberrequest.py diff --git a/examples/members.txt b/examples/members.txt index b78c6f7..67eb1ee 100644 --- a/examples/members.txt +++ b/examples/members.txt @@ -50,3 +50,41 @@ POST /members/api/member (gets newly created item (with id) as response) DELETE /members/api/member/:id +// get all pending member requests +GET /members/api/requests + +[ + { + "submitted": "2016-07-25 15:58:22.103187+00:00", + "id": 1, + "member": { + "id": 69, + "AYY": false, + "email": "asd@asd.asd", + "first_name": "reg", + "POR": "", + "jas": false, + "last_name": "uest" + } + }, + { + "submitted": "2016-07-25 15:59:06.069821+00:00", + "id": 2, + "member": { + "id": 70, + "AYY": false, + "email": "asd@asd.asd", + "first_name": "re", + "POR": "", + "jas": false, + "last_name": "guest" + } + } +] +//accept member request (== delete request but leave member) + +POST /members/api/request/:id + +//reject member request (== delete request and delete member) + +DELETE /members/api/request/:id diff --git a/members/migrations/0003_memberrequest.py b/members/migrations/0003_memberrequest.py new file mode 100644 index 0000000..4cc05d1 --- /dev/null +++ b/members/migrations/0003_memberrequest.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-07-25 15:57 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('members', '0002_auto_20160530_1642'), + ] + + operations = [ + migrations.CreateModel( + name='MemberRequest', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('submitted', models.DateTimeField(default=django.utils.timezone.now)), + ('member', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='members.Member')), + ], + ), + ] diff --git a/members/models.py b/members/models.py index 9af8097..436a73d 100644 --- a/members/models.py +++ b/members/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.utils import timezone class Member(models.Model): ''' @@ -27,7 +28,7 @@ class Member(models.Model): def create_from_dict(cls,d): mbr = cls() mbr.update_from_dict(d) - return mbr.get_dict() + return mbr def update_from_dict(self,d): dmap = { @@ -47,3 +48,14 @@ class Member(models.Model): def __str__(self): return "{} {}".format(first_name, last_name) + +class MemberRequest(models.Model): + member = models.ForeignKey(Member) + submitted = models.DateTimeField(default=timezone.now) + + def get_dict(self): + return { + 'id': self.id, + 'member': self.member.get_dict(), + 'submitted': self.submitted.isoformat(" ") + } diff --git a/members/views.py b/members/views.py index 3cc7c49..7d60d18 100644 --- a/members/views.py +++ b/members/views.py @@ -1,7 +1,7 @@ from django.shortcuts import render, get_object_or_404 from django.http import HttpResponse, HttpResponseBadRequest from django.core.exceptions import ValidationError -from members.models import Member +from members.models import Member, MemberRequest import json def index(request, *args, **kwargs): @@ -49,6 +49,34 @@ def member(request,*args, **kwargs): try: data = json.loads(request.body.decode("utf-8")) memdict = Member.create_from_dict(data) - return HttpResponse(json.dumps(memdict)) + return HttpResponse(json.dumps(mem.get_dict())) except ValueError: return HttpResponseBadRequest('{"error" : "Invalid parameters supplied"}') + +def member_requests(request, *args, **kwargs): + reqs = list(map(lambda r: r.get_dict(),MemberRequest.objects.all())) + return HttpResponse(json.dumps(reqs)) + +def new_member_request(request, *args, **kwargs): + try: + data = json.loads(request.body.decode("utf-8")) + mem = Member.create_from_dict(data) + req = MemberRequest.objects.create(member=mem) + return HttpResponse(json.dumps(mem.get_dict())) + except ValueError: + return HttpResponseBadRequest('{"error" : "Invalid parameters supplied"}') + +def handle_mem_request(request, idx, *args, **kwargs): + try: + req = MemberRequest.objects.get(pk=idx) + except MemberRequest.DoesNotExist: + resp = HttpResponse('{"error":"object not found"}') + resp.status_code = 404 + return resp + + if request.method == 'DELETE': + req.member.delete() + else: # method == POST because other aren't allowed here + req.delete() + return HttpResponse('{"status":"success"}') + diff --git a/sikweb/urls.py b/sikweb/urls.py index e084089..dee74ef 100644 --- a/sikweb/urls.py +++ b/sikweb/urls.py @@ -19,6 +19,9 @@ from django.contrib import admin from members.views import index as mindex from members.views import members as mems from members.views import member as mem +from members.views import handle_mem_request +from members.views import new_member_request +from members.views import member_requests urlpatterns = [ @@ -27,4 +30,8 @@ urlpatterns = [ url(r'^members/api/members$', mems), url(r'^members/api/member/(?P\d+)$', mem), url(r'^members/api/member/$', mem), + url(r'^members/api/member/$', mem), + url(r'^members/api/requests$', member_requests), + url(r'^members/api/request$', new_member_request), + url(r'^members/api/request/(?P\d+)$', handle_mem_request), ]