def change_favorite(user_id, favorite_id, favorite):
    """링크의 즐겨찾기 여부를 변경한다

    Args:

            user_id (str): 아이디
            favorite_id (str): 즐겨찾기에 추가할 링크 아이디
            favorite (bool): 변경할 즐겨찾기 값

    Returns:

            bool: 정상 변경일경우 True, 그 외는 False
    """
    collection = db.get_collection()

    result = collection.update_one(
        {
            'userID': user_id,
            '_id': ObjectId(favorite_id)
        }, {'$set': {
            'favorite': favorite
        }})

    if result.modified_count == 1: return True
    return False
def delete_tag_array(user_id, id_array):
    """태그들을 지운다

    Args:

            user_id (str): 아이디
            id_array (list): 링크 아이디 배열

    Returns:

            bool: 정상 삭제일경우 True, 그 외는 False
    """
    collection = db.get_collection()

    result = collection.update_many(
        {
            'userID': user_id,
            '_id': {
                '$in': list(map(ObjectId, id_array))
            }
        }, {'$unset': {
            'tagName': ''
        }})

    # 정상적으로 변경되었을경우 True 반환
    if result.modified_count == len(id_array): return True
    return False
def delete_tag(user_id, delete_id):
    """태그를 지운다

    Args:

            user_id (str): 아이디
            delete_id (str): 태그를 지울 링크 아이디

    Returns:

            bool: 정상 삭제일경우 True, 그 외는 False
    """
    collection = db.get_collection()

    result = collection.update_one(
        {
            'userID': user_id,
            '_id': ObjectId(delete_id)
        }, {'$unset': {
            'tagName': ''
        }})

    # 정상적으로 변경되었을경우 True 반환
    if result.modified_count == 1: return True
    return False
def change_tag_array(user_id, id_array, tag_name):
    """링크들의 태그를 변경한다

    Args:

            user_id (str): 아이디
            id_array (list): 태그를 변경할 링크 아이디 배열
            tag_name (str): 태그 이름

    Returns:

            bool: 정상 변경일경우 True, 그 외는 False
    """
    collection = db.get_collection()

    result = collection.update_many(
        {
            'userID': user_id,
            '_id': {
                '$in': list(map(ObjectId, id_array))
            }
        }, {'$set': {
            'tagName': tag_name
        }})

    if result.modified_count == len(id_array): return True
    return False
def change_favorite_array(user_id, favorite_id_array, favorite):
    """링크들의 즐겨찾기 여부를 변경한다
    
    Args:

            user_id (str): 아이디
            favorite_id_array (list): 즐겨찾기에 추가할 링크들 아이디
            favorite (bool): 변경할 즐겨찾기 값

    Returns:

            bool: 정상 변경일경우 True, 그 외는 False
    """
    collection = db.get_collection()

    result = collection.update_many(
        {
            'userID': user_id,
            '_id': {
                '$in': list(map(ObjectId, favorite_id_array))
            }
        }, {'$set': {
            'favorite': favorite
        }})

    if result.modified_count == len(favorite_id_array): return True
    return False
def unhide_link(user_id, unhide_id):
    """숨겨진 링크를 다시 보이게 변경한다

    Args:

            user_id (str): 아이디
            unhide_id (str): 다시 보이게 할 링크 아이디

    Returns:
        
            bool: 정상 변경일경우 True, 그 외는 False
    """
    collection = db.get_collection()

    result = collection.update_one(
        {
            'userID': user_id,
            '_id': ObjectId(unhide_id)
        }, {
            '$set': {
                'hide': False
            },
            '$unset': {
                'hideName': ''
            }
        })

    if result.modified_count == 1: return True
    return False
Ejemplo n.º 7
0
def upsert_user(email, payload):
    """유저에 대해 update와 insert를 동시에 수행한다

    Args:

            email (str): 저장할 혹은 갱신할 email
            payload (Obj): 갱신할 정보. { 'field': value } 형식으로 전달.
    """
    collection = db.get_collection("USERS")

    # 생성 시 기본값 설정
    now = datetime.now()
    defaults = {
        'banned': False,
        'lastLogin': now,
        'lastAccess': now,
        'created': now,
        'accessToken': "",
        'refreshToken': ""
    }
    for key in payload:
        if key in defaults: defaults.pop(key)

    # 기본설정할 것이 있을 때만 upsert
    if not defaults:
        collection.update_one({'email': email}, {'$set': payload})
    else:
        collection.update_one({'email': email}, {
            '$setOnInsert': {
                'banned': False,
                'created': datetime.now()
            },
            '$set': payload
        },
                              upsert=True)
def get_tag_list(user_id):
    collection = db.get_collection()

    result = collection.find({
        'userID':
        user_id,
        '$and': [{
            'tagName': {
                '$ne': None
            }
        }, {
            'tagName': {
                '$ne': ""
            }
        }],
        '$or': [{
            'hide': {
                '$exists': False
            }
        }, {
            'hide': False
        }]
    })

    if result is None: return None

    result = result.distinct('tagName')
    result.sort()
    return result
Ejemplo n.º 9
0
def get_url(url, target="short"):
    """DB에서 축약된 URL을 가져온다.

    Args:
        url (str): 원본 URL
        target (str): 검색할 URL (short | raw)

    Returns:
        str: 축약 URL
        None: DB에 없는 경우

    Raises:
        ValueError: target 인수값이 잘못된 경우
    """
    target = target.lower()
    if target not in ('short', 'raw'):
        raise ValueError('target 인수가 잘못되었습니다. short 또는 raw로 입력해주십시오.')

    collection = db.get_collection()

    if target == 'short':
        search_from = 'rawURL'
        search_for = 'shortURL'
    elif target == 'raw':
        search_from = 'shortURL'
        search_for = 'rawURL'

    res = collection.find_one({search_from: url})

    if res is None: return None
    return res[search_for]
def get_unhide_favorite_link_pagination(user_id, page=1, item_count=10):
    """아이디가 가진 즐겨찾기에 추가된 숨겨지지 않은 링크를 페이지대로 가져온다

    Args:
    
                user_id (str): 아이디
                page (int, optional): 페이지 번호. Defaults to 1.
                item_count (int, optional): 페이지 당 링크 갯수. Defaults to 10.

        Returns:

                pagination: 페이지네이션 데이터
        """
    collection = db.get_collection()

    res = collection.find({
        'userID':
        user_id,
        'favorite':
        True,
        '$or': [{
            'hide': {
                '$exists': False
            }
        }, {
            'hide': False
        }]
    })

    return pagination(res, [('makeDate', pymongo.DESCENDING)], page,
                      item_count)
def change_tag(user_id, change_id, tag_name):
    """링크의 태그를 변경한다

    Args:

            user_id (str): 아이디
            change_id (str): 태그를 변경할 링크 아이디
            tag_name (str): 태그 이름

    Returns:

            bool: 정상 변경일경우 True, 그 외는 False
    """
    collection = db.get_collection()

    result = collection.update_one(
        {
            'userID': user_id,
            '_id': ObjectId(change_id)
        }, {'$set': {
            'tagName': tag_name
        }})

    # 정상적으로 변경되었을경우 True 반환
    if result.matched_count == result.modified_count: return True
    return False
def unhide_link_array(user_id, unhide_id_array):
    """숨겨진 링크들을 다시 보이게 변경한다

    Args:

            user_id (str): 아이디
            unhide_id_array (list): 다시 보이게 할 링크들 아이디

    Returns:
    
            bool: 정상 변경일경우 True, 그 외는 False
    """
    collection = db.get_collection()

    result = collection.update_many(
        {
            'userID': user_id,
            '_id': {
                '$in': list(map(ObjectId, unhide_id_array))
            }
        }, {
            '$set': {
                'hide': False
            },
            '$unset': {
                'hideName': ''
            }
        })

    if result.modified_count == len(unhide_id_array): return True
    return False
def hide_link_array(user_id, hide_id_array, hide_name):
    """링크들을 특정 경로에 숨긴다

    Args:

            user_id (str): 아이디
            hide_id_array (list): 숨길 링크들 아이디
            hide_name (str): 숨김경로

    Returns:

            bool: 정상 변경일경우 True, 그 외는 False
    """
    collection = db.get_collection()

    result = collection.update_many(
        {
            'userID': user_id,
            '_id': {
                '$in': list(map(ObjectId, hide_id_array))
            }
        }, {'$set': {
            'hide': True,
            'hideName': hide_name
        }})

    if result.modified_count == len(hide_id_array): return True
    return False
def hide_link(user_id, hide_id, hide_name):
    """링크를 특정 경로에 숨긴다

    Args:

            user_id (str): 아이디
            hide_id (str): 링크 아이디
            hide_name (str): 숨김경로

    Returns:

            bool: 정상 변경일경우 True, 그 외는 False
    """
    collection = db.get_collection()

    result = collection.update_one(
        {
            'userID': user_id,
            '_id': ObjectId(hide_id)
        }, {'$set': {
            'hide': True,
            'hideName': hide_name
        }})

    if result.modified_count == 1: return True
    return False
def get_stats_info(short_url):
    """DB에서 해당 링크의 통계정보를 전부 가져온다.

    Args:
        short_url (str): 축약 링크
    Returns:
        dict: 찾은 통계 정보
        None: 통계 정보가 없는 경우 (클릭수 0)
    """
    collection = db.get_collection("STATS")

    return collection.find_one({ 'shortURL': short_url })
def upsert_stats(short_url, stats):
    """통계 정보를 업데이트한다.

    Args:
        short_url (str): 저장 또는 갱신할 축약 링크
        stats (dict): 반영할 통계 딕셔너리
    """
    collection = db.get_collection("STATS")

    collection.update_one({ 'shortURL': short_url }, {
        '$set': stats
    }, upsert=True)
def get_hidden_link_list(user_id, directory):
    collection = db.get_collection()

    result = collection.find({
        'userID': user_id,
        'hide': True,
        'hideName': directory
    })

    if result is None: return None

    return list(result)
Ejemplo n.º 18
0
def increase_id():
    """URL 생성에 사용될 ID(int)를 증가시킨다.

    Returns:
        bool: 성공/실패 = True/False
    """
    collection = db.get_collection('CONFIG')

    my_query = {'variable': 'unique_id'}  # variable 필드값이 unique_id
    new_value = {'$inc': {'value': 1}}  # value 필드를 1 증가

    res = collection.update_one(my_query, new_value)

    return res.modified_count > 0
Ejemplo n.º 19
0
def get_user_info(email):
    """사용자 정보를 전부 가져온다.

    Args:

            email (str): 이메일.

    Returns:

            pymongo.cursor.Cursor: 반환값과 연결된 cursor.
    """
    collection = db.get_collection("USERS")

    return collection.find_one({'email': email})
Ejemplo n.º 20
0
def get_unique_id():
    """URL 생성을 위한 고유 ID값을 가져온다.

    Returns:
        int: 고유 ID값
        None: 찾지 못한 경우
    """
    collection = db.get_collection('CONFIG')

    my_query = {'variable': 'unique_id'}  # 검색필드
    my_result = {'value': True}  # 결과필드

    res = collection.find_one(my_query, my_result)

    return res['value']
def get_link_pagination(user_id, page=1, item_count=10):
    """아이디가 가진 링크를 페이지대로 가져온다

    Args:

            user_id (str): 아이디
            page (int, optional): 페이지 번호. Defaults to 1.
            item_count (int, optional): 페이지 당 링크 갯수. Defaults to 10.

    Returns:

            pagination: 페이지네이션 데이터
    """
    collection = db.get_collection()

    res = collection.find({'userID': user_id})

    return pagination(res, [('makeDate', pymongo.DESCENDING)], page,
                      item_count)
def get_tagged_link_list(user_id, tag):
    collection = db.get_collection()

    result = collection.find({
        'userID':
        user_id,
        'tagName':
        tag,
        '$or': [{
            'hide': {
                '$exists': False
            }
        }, {
            'hide': False
        }]
    })

    if result is None: return None

    return list(result)
def delete_link(user_id, link_id):
    """링크를 삭제한다

    Args:

            user_id (str): 아이디
            link_id (str): 삭제할 링크 아이디

    Returns:

            bool: 정상 삭제일경우 True, 그 외는 False
    """
    collection = db.get_collection()

    result = collection.delete_one({
        '_id': ObjectId(link_id),
        'userID': user_id
    })

    # 정상적으로 삭제되었을경우 True 반환
    if result.deleted_count == 1: return True
    return False
def delete_link_array(user_id, id_array):
    """링크들을 삭제한다

    Args:

            user_id (str): 아이디
            id_array (list): 삭제할 링크 아이디 배열

    Returns:
        
            bool: 정상 삭제일경우 True, 그 외는 False
    """
    collection = db.get_collection()

    result = collection.delete_many({
        'userID': user_id,
        '_id': {
            '$in': list(map(ObjectId, id_array))
        }
    })

    if result.deleted_count == len(id_array): return True
    return False
def get_hide_name_list(user_id):
    """숨김경로 가져오기

    Args:

            user_id (str): 아이디

    Returns:

            list: 숨김경로들을 list로 가져온다. 없을경우 None.
    """
    collection = db.get_collection()

    # distinct는 list를 반환한다
    result = collection.find({
        'userID':
        user_id,
        'hide':
        True,
        '$and': [{
            'hideName': {
                '$ne': None
            }
        }, {
            'hideName': {
                '$ne': ""
            }
        }],
    })

    if result is None: return None

    # 정렬 후 반환
    result = result.distinct('hideName')
    result.sort()
    return result
Ejemplo n.º 26
0
def register_url(raw_url, user_id):
    """축약 링크를 등록한다.

    Args:
        short_url (str): 축약 URL
        user_id   (str): 유저 이메일

    Returns:
        str: DB에 등록된 축약 URL
        None: 저장에 실패한 경우
    """
    collection = db.get_collection()

    # 축약 URL 생성
    unique_id = get_unique_id()
    short_url = create_short_url(unique_id)

    # DB에 신규등록
    data = {
        'rawURL': raw_url,
        'shortURL': short_url,
        'pageTitle': get_page_title(raw_url),
        'userID': user_id,
        'makeDate': datetime.now(),
        'favorite': False
    }

    try:
        collection.insert_one(data)
    except Exception as e:
        # 저장에 실패한 경우 None 반환
        print(e)
        return None
    increase_id()

    return short_url