def post(self, request: Request, username: str, *args, **kwargs): user = self.get_user_or_404(username) name = request.data.get('name', None) if not name: raise errors.ResponseException(errors.MissingFieldsError(['name']), 403) current_group = models.FriendGroup.objects.filter(owner=user, name=name).first() if current_group: raise errors.ResponseException(errors.NameInUseError(['name']), 403) group_data = without(request.data, ['members']) group = serializers.FriendGroupSerializer(data=group_data) group.is_valid(raise_exception=True) group_record = group.save(owner=request.user) member_usernames = request.data.get('members', None) if member_usernames is not None: member_records = _update_members( lambda u: self.get_user_or_404(u, check=False), group_record, member_usernames ) members = [ serializers.RelatedUserSerializer(member).data for member in member_records ] return Response(dict(**group.data, **{'members': members}), status=201) else: return Response(group.data, status=201)
def get(self, request: Request, username: str, group_id: int, *args, **kwargs): user = self.get_user_or_404(username) group = get_object_or_404(models.FriendGroup, owner=user, id=group_id) members = models.FriendGroupMember.objects.filter(group=group) return Response([serializers.RelatedUserSerializer(record.member).data for record in members])
def put(self, request: Request, username: str, group_id: int, *args, **kwargs): user = self.get_user_or_404(username) group = get_object_or_404(models.FriendGroup, owner=user, id=group_id) member_usernames = request.data.get('usernames', []) members = _update_members(lambda u: self.get_user_or_404(u, check=False), group, member_usernames) return Response([ serializers.RelatedUserSerializer(member).data for member in members ])
def put(self, request: Request, username: str, *args, **kwargs): source_user = self.get_user_or_404(username) target_username = request.data.get('username', None) target_user = self.get_user_or_404(target_username, check=False) follow = models.Follow.objects.filter(follower=source_user, followee=target_user).first() if not follow: follow = models.Follow.objects.create(follower=source_user, followee=target_user) tasks.send_follow_email(follow, self.request.user) return Response([serializers.RelatedUserSerializer(target_user).data], status=200)
def put(self, request: Request, username: str, group_id: int, *args, **kwargs): user = self.get_user_or_404(username) current_group = get_object_or_404(models.FriendGroup, owner=user, pk=group_id) group_data = without(request.data, ['members']) group = serializers.FriendGroupSerializer(current_group, data=group_data) group.is_valid(raise_exception=True) group.save(owner=request.user) group_record = group.save(owner=request.user) member_usernames = request.data.get('members', None) if member_usernames is not None: member_records = _update_members( lambda u: self.get_user_or_404(u, check=False), group_record, member_usernames ) members = [ serializers.RelatedUserSerializer(member).data for member in member_records ] return Response(dict(**group.data, **{'members': members})) else: return Response(group.data)