implemented member request feature for members app

This commit is contained in:
okalintu
2016-07-25 19:09:20 +03:00
parent a9988a03ee
commit dee921a694
5 changed files with 113 additions and 3 deletions
+38
View File
@@ -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
+25
View File
@@ -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')),
],
),
]
+13 -1
View File
@@ -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(" ")
}
+30 -2
View File
@@ -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"}')
+7
View File
@@ -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<idx>\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<idx>\d+)$', handle_mem_request),
]