예제 #1
0
    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)
예제 #2
0
    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])
예제 #3
0
    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
        ])
예제 #4
0
    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)
예제 #5
0
    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)