diff --git a/dusken/api/groupsbymember.py b/dusken/api/groupsbymember.py index e1d0aa5..0e658b2 100644 --- a/dusken/api/groupsbymember.py +++ b/dusken/api/groupsbymember.py @@ -61,27 +61,30 @@ class GroupsByMemberResource(Resource): obj.member_id = member_id obj.group_id = group_id - if member.groups.filter(id=group_id).count() == 0: - obj.is_member = False - else: + if self.__member_has_group(member, group): obj.is_member = True + else: + obj.is_member = False return obj def post_detail(self, request=None, **kwargs): """ - Creates a new relationship be. + Creates a new relationship between a member and a group. """ + member_id = int(kwargs['member_id']) + member = get_object_or_404(Member, pk=member_id) - keys = kwargs['pk'].split('/') - if len(keys) < 2: - raise ImmediateHttpResponse(HttpBadRequest()) + group_id = int(kwargs['group_id']) + group = get_object_or_404(Group, pk=group_id) - member_id = keys[0] - group_id = keys[1] + if self.__member_has_group(member, group): + # TODO: Check for a correct status code to return in this case. + return HttpCreated() + + member.groups.add(group) + member.save() - - print("Calling create function with parameters {0}".format(str(kwargs))) return HttpCreated() def obj_update(self, bundle, request=None, **kwargs): @@ -102,3 +105,6 @@ class GroupsByMemberResource(Resource): def rollback(self, bundles): logging.info("Someone tried to rollback, but I can't do that, man, I can't do that!") return + + def __member_has_group(self, member, group): + return member.groups.filter(id=group.id).count() != 0 diff --git a/dusken/api/member.py b/dusken/api/member.py index d251ac3..de45137 100644 --- a/dusken/api/member.py +++ b/dusken/api/member.py @@ -34,15 +34,15 @@ class MemberResource(ModelResource): def prepend_urls(self): return [ - url(r"^(?P%s)/(?P\d+)/groups/$" % (self._meta.resource_name), self.wrap_view("get_groups"), name="api_get_groups"), - url(r"^(?P%s)/(?P\d+)/groups/(?P\d+)/$" % (self._meta.resource_name), self.wrap_view("get_detail_groups"), name="api_get_detail_groups"), + url(r"^(?P%s)/(?P\d+)/groups/$" % (self._meta.resource_name), self.wrap_view("groups"), name="api_groups"), + url(r"^(?P%s)/(?P\d+)/groups/(?P\d+)/$" % (self._meta.resource_name), self.wrap_view("detail_groups"), name="api_detail_groups"), ] - def get_groups(self, request, **kwargs): + def groups(self, request, **kwargs): resource = GroupsByMemberResource() return resource.dispatch_list(request, **kwargs) - def get_detail_groups(self, request, **kwargs): + def detail_groups(self, request, **kwargs): resource = GroupsByMemberResource() return resource.dispatch_detail(request, **kwargs)