예제 #1
0
    def put(self, target):
        """
        修改指定用户频道
        """
        user_id = g.user_id
        json_parser = RequestParser()
        json_parser.add_argument('seq',
                                 type=inputs.positive,
                                 required=True,
                                 location='json')
        args = json_parser.parse_args()

        exist = cache_channel.AllChannelsCache.exists(target)
        if not exist:
            return {'message': 'Invalid channel id.'}, 400

        query = insert(UserChannel).values(user_id=user_id,
                                           channel_id=target,
                                           sequence=args.seq) \
            .on_duplicate_key_update(sequence=args.seq, is_deleted=False)
        db.session.execute(query)

        db.session.commit()

        # 清除缓存
        cache_channel.UserChannelsCache(user_id).clear()

        return {'id': target, 'seq': args.seq}, 201
예제 #2
0
    def put(self):
        """
        修改用户频道,重置
        """
        try:
            channel_list = self._parse_channel_list()
        except ValueError as e:
            return {'message': '{}'.format(e)}, 400

        user_id = g.user_id

        # Update user's all previous channels to be deleted.
        UserChannel.query.filter_by(user_id=user_id, is_deleted=False).update(
            {'is_deleted': True})

        for channel in channel_list:
            query = insert(UserChannel).values(user_id=user_id,
                                               channel_id=channel['id'],
                                               sequence=channel['seq'])\
                .on_duplicate_key_update(sequence=channel['seq'], is_deleted=False)
            db.session.execute(query)

        db.session.commit()

        # 清除缓存
        cache_channel.UserChannelsCache(user_id).clear()

        return {'channels': channel_list}, 201
예제 #3
0
    def post(self):
        """
        编辑用户频道,首次
        """
        try:
            channel_list = self._parse_channel_list()
        except ValueError as e:
            return {'message': '{}'.format(e)}, 400

        user_id = g.user_id
        try:
            for channel in channel_list:
                new_channel = UserChannel(user_id=user_id,
                                          channel_id=channel['id'],
                                          sequence=channel['seq'])
                db.session.add(new_channel)
            db.session.commit()
        except IntegrityError:
            db.session.rollback()
            return {'message': 'Some conflict user channels occurred.'}, 409

        # 清除缓存
        cache_channel.UserChannelsCache(user_id).clear()

        return {'channels': channel_list}, 201
예제 #4
0
    def delete(self, target):
        """
        删除指定用户频道
        """
        user_id = g.user_id
        UserChannel.query.filter_by(user_id=user_id, channel_id=target).update({'is_deleted': True})
        db.session.commit()

        # 清除缓存
        cache_channel.UserChannelsCache(user_id).clear()

        return {'message': 'OK'}, 204
예제 #5
0
    def delete(self):
        """
        批量删除用户频道
        """
        json_parser = RequestParser()
        json_parser.add_argument('channels', action='append', type=inputs.positive, required=True, location='json')
        args = json_parser.parse_args()
        channel_id_li = args.channels
        user_id = g.user_id

        # Using synchronize_session=False when update many objects to
        # indicate that Sqlalchemy does not need to trace new data.
        UserChannel.query.filter(UserChannel.user_id == user_id, UserChannel.channel_id.in_(channel_id_li))\
            .update({'is_deleted': True}, synchronize_session=False)
        db.session.commit()

        # 清除缓存
        cache_channel.UserChannelsCache(user_id).clear()

        return {'message': 'OK'}, 204
예제 #6
0
    def get(self):
        """
        获取用户频道
        """
        user_id = g.user_id
        if user_id:
            channels = cache_channel.UserChannelsCache(user_id).get()

            reco_channel = self._get_reco_channel()
            if reco_channel:
                channels.insert(0, reco_channel)
            return {'channels': channels}

        else:
            # Return default channels
            default_channels = cache_channel.UserDefaultChannelsCache.get()

            reco_channel = self._get_reco_channel()
            if reco_channel:
                default_channels.insert(0, reco_channel)

            return {'channels': default_channels}
예제 #7
0
    def patch(self):
        """
        修改用户频道,部分
        """
        try:
            channel_list = self._parse_channel_list()
        except ValueError as e:
            return {'message': '{}'.format(e)}, 400

        user_id = g.user_id

        for channel in channel_list:
            query = insert(UserChannel).values(user_id=user_id,
                                               channel_id=channel['id'],
                                               sequence=channel['seq'])\
                .on_duplicate_key_update(sequence=channel['seq'], is_deleted=False)
            db.session.execute(query)

        db.session.commit()

        # 清除缓存
        cache_channel.UserChannelsCache(user_id).clear()

        return {'channels': channel_list}, 201