コード例 #1
0
def add_movie_to_favorite(user_id, movie_id):
    movie = Movie.query.get(movie_id)
    user = User.query.get(user_id)

    if movie is None or user is None: 
        return create_response(400, "Invalid request")

    favorite = Favorite.query.filter_by(
        user_id=user_id, movie_id=movie.id).first()

    if favorite is None:
        f = Favorite(user_id=user_id, movie_id=movie.id)
        db.session.add(f)

        logger = Logger(user_id=user_id, action_type_id=8, movie_id=movie_id)
        logger.create_log()
    else:
        db.session.delete(favorite)

        logger = Logger(user_id=user_id, action_type_id=9, movie_id=movie_id)
        logger.create_log()

    db.session.commit()

    return create_response(200, "Success")
コード例 #2
0
def auth_register():
    data = request.get_json()
    email = data.get("email", "")
    password = data.get("password", "")
    valid_email = re.search(
        "^(([^<>()[\]\\.,;:\s@“]+(\.[^<>()[\]\\.,;:\s@“]+)*)|(“.+“))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$",
        email)
    valid_password = len(password) >= 6 and len(password) <= 15

    if valid_password and valid_email:
        if not user_existed(email):
            u = User(email=email)
            u.hash_password(password)
            db.session.add(u)
            db.session.flush()
            db.session.commit()

            data = create_token(u)

            logger = Logger(user_id=u.id, action_type_id=1)
            logger.create_log()

            return create_response(201,
                                   "Create account successfully",
                                   data=data)
        else:
            return create_response(400, "Email is already taken")
    else:
        return create_response(400, "Request info is not valid")
コード例 #3
0
def actor_get_movies(id, page, user_id):
    page_size = app.config['PAGE_SIZE']
    user = User.query.get(user_id)

    if user is None:
        return create_response(400, 'Invalid request!')

    cast = Cast.query.get(id)

    movie_ids = CreditCasts.query\
        .filter_by(cast_id=id)\
        .paginate(page, page_size, error_out=False)

    total = CreditCasts.query.filter_by(cast_id=id).count()
    has_more = True if total > page * page_size else False

    movies = []

    for movie in movie_ids.items:
        res = get_movie(movie.movie_id, user_id)
        movies.append(res)

    response = {'name': cast.name, 'has_more': has_more, 'list': movies}

    return create_response(200, 'Success.', response)
コード例 #4
0
def movie_rating(id, user_id, rated):
    # query from request info
    movie = Movie.query.get(id)

    if movie is None:
        return create_response(400, "Movie is not exist")

    rating = Rating.query.filter_by(movie_id=movie.id, user_id=user_id).first()

    logger = Logger(user_id=user_id,
                    action_type_id=5,
                    movie_id=id,
                    rating=rated)
    logger.create_log()

    if rating is None:
        r = Rating(rating=rated, user_id=user_id, movie_id=movie.id)
        db.session.add(r)
    else:
        rating.rating = rated
        rating.timestamp = datetime.datetime.utcnow()
        db.session.add(rating)

    db.session.flush()

    new_rating = calc_rating(id)
    movie.rating = new_rating
    db.session.add(movie)

    db.session.commit()

    return create_response(200, "Rate film successfully")
コード例 #5
0
def movie_get_similar(id):
    movie = Movie.query.get(id)

    if movie is None:
        return create_response(400, 'Movie is not exist')

    movies = get_recommendations(movie.title)

    similars = []

    for index, row in movies.iterrows():
        movie_id = row['id']

        mov = Movie.query.get(movie_id)
        genres = Genre.query\
            .join(MovieGenres, MovieGenres.genre_id == Genre.id)\
            .filter(MovieGenres.movie_id == movie_id)\
            .limit(3).all()

        mov_genres = [gen.name for gen in genres]

        similars.append({
            'id': movie_id,
            'title': mov.title,
            'img': mov.poster_path,
            'rating': round(mov.rating, 1),
            'certification': mov.certification,
            'overview': mov.overview,
            'genres': mov_genres
        })

    return create_response(200, 'Get similar movie success', similars)
コード例 #6
0
def movie_get_review(id, user_id, page):
    movie = Movie.query.get(id)
    user = User.query.get(user_id)

    if movie is None or user is None:
        return create_response(400, 'Invalid request!')

    reviews = Review.query.order_by(Review.timestamp.desc()).paginate(
        page, app.config['PAGE_SIZE'], error_out=False)
    count = Review.query.filter_by(movie_id=id).count()
    user_rate = Rating.query.filter_by(user_id=user_id, movie_id=id).first()
    user_rating = user_rate.rating if user_rate is not None else 0

    if len(reviews.items) == 0:
        return create_response(
            200, 'Success.', {
                'total': 0,
                'has_more': False,
                'list': [],
                'avatar': movie.poster_path,
                'name': movie.title
            })

    review_list = []

    for review in reviews.items:
        rating = Rating.query\
            .filter(Rating.movie_id == id)\
            .filter(Rating.user_id == review.user_id)\
            .first()
        u = User.query.get(review.user_id)

        review_list.append({
            'headline': review.headline,
            'body': review.body,
            'timestamp': review.timestamp,
            'rating': rating.rating,
            'user': u.email
        })

    has_more = True if count > app.config['PAGE_SIZE'] * page else False

    response = {
        'total': count,
        'has_more': has_more,
        'list': review_list,
        'avatar': movie.poster_path,
        'title': movie.title,
        'release_date': movie.release_date,
        'runtime': movie.runtime,
        'certification': movie.certification,
        'user_rate': user_rating
    }
    return create_response(200, 'Success.', response)
コード例 #7
0
def movie_get_by_id(id, user_id):
    if not valid_user(user_id):
        return create_response(400, "Invalid user")

    if not valid_movie(id):
        return create_response(404, "Movie's not existed")

    res = get_movie(id, user_id)

    logger = Logger(user_id=user_id, action_type_id=4, movie_id=id)
    logger.create_log()

    mes = "Get movie's info with id = " + str(id) + " successfully."

    return create_response(200, mes, data=res)
コード例 #8
0
def get_popular_movies(user_id):
    page_size = app.config['PAGE_SIZE']

    # get trending now
    trendings = get_most_popular(user_id)
    trending_now = {'rowId': 3, 'title': 'Trending Now', 'list': trendings}

    return create_response(200, 'Success.', trending_now)
コード例 #9
0
def refresh(id, email):
    identity = Token(id, email).to_json()
    expires = datetime.timedelta(hours=1)
    res = {
        'token': create_access_token(identity=identity, expires_delta=expires)
    }

    return create_response(200, "Refreshed token", data=res)
コード例 #10
0
def remove_rating(id, user_id):
    # query from request info
    movie = Movie.query.get(id)

    if movie is None:
        return create_response(400, "Movie is not exist")

    rating = Rating.query.filter_by(movie_id=movie.id, user_id=user_id).first()

    if rating is not None:
        db.session.delete(rating)

        logger = Logger(user_id=user_id, action_type_id=6, movie_id=id)
        logger.create_log()

        db.session.commit()

    return create_response(200, "Delete movie's rating successfully")
コード例 #11
0
def get_user_review(id, user_id):
    # query from request info
    movie = Movie.query.get(id)
    user = User.query.get(user_id)

    if movie is None or user is None:
        return create_response(400, "Invalid request")

    review = Review.query.filter_by(movie_id=id, user_id=user_id).first()

    res = {}

    if review is not None:
        res = {"headline": review.headline, "body": review.body}
    else:
        res = {"headline": "", "body": ""}

    return create_response(200, "Success", data=res)
コード例 #12
0
def genre_get_movies(id, page, user_id):
    page_size = app.config['PAGE_SIZE']
    user = User.query.get(user_id)

    if user is None:
        return create_response(400, 'Invalid request!')

    if id == 0:
        movie_ids = Movie.query.order_by(Movie.rating.desc(),
                                         Movie.vote_average.desc()).paginate(
                                             page, page_size, error_out=False)

        total = Movie.query.count()
        has_more = True if total > page * page_size else False

        movies = []

        for movie in movie_ids.items:
            res = get_movie(movie.id, user_id)
            movies.append(res)

        response = {'has_more': has_more, 'list': movies}
        return create_response(200, 'Success.', response)
    elif id > 0:
        movie_ids = MovieGenres.query\
            .join(Movie, Movie.id == MovieGenres.movie_id)\
            .filter(MovieGenres.genre_id == id)\
            .order_by(Movie.rating.desc(), Movie.vote_average.desc())\
            .paginate(page, page_size, error_out=False)

        total = MovieGenres.query\
            .join(Movie, Movie.id == MovieGenres.movie_id)\
            .filter(MovieGenres.genre_id == id)\
            .order_by(Movie.rating.desc(), Movie.vote_average.desc()).count()
        has_more = True if total > page * page_size else False

        movies = []

        for movie in movie_ids.items:
            res = get_movie(movie.movie_id, user_id)
            movies.append(res)

        response = {'has_more': has_more, 'list': movies}
        return create_response(200, 'Success.', response)
コード例 #13
0
def recommend(id):
    user = User.query.get(id)

    if user is None:
        return create_response(400, "Tài khoản không tồn tại")

    recommends = Recommend.query.filter_by(user_id=id).all()

    if recommends is None:
        return create_response(200, "Lấy danh sách thành công", [])

    response = []

    for rec in recommends:
        data = get_movie_by_id(rec.movie_id, id)

        response.append(data)

    return create_response(200, "Lấy danh sách thành công", data=response)
コード例 #14
0
def auth_login():
    data = request.get_json()
    email = data.get("email", "")
    password = data.get("password", "")

    user = User.query.filter_by(email=email).first()

    if user is None:
        return create_response(401, "Email or password is not correct")
    else:
        if user.check_password(password):
            data = create_token(user)

            logger = Logger(user_id=user.id, action_type_id=2)
            logger.create_log()

            return create_response(200, "Login successfully", data=data)
        else:
            return create_response(401, "Email or password is not correct")
コード例 #15
0
def get_top_rated_movies(user_id):
    page_size = app.config['PAGE_SIZE']

    # get top rated movies
    list_top_rated = Movie.query.order_by(Movie.rating.desc()).paginate(
        1, page_size, error_out=False)
    top_rateds = []
    for movie in list_top_rated.items:
        res = get_movie(movie.id, user_id)
        top_rateds.append(res)
    top_rated = {'rowId': 2, 'title': 'Top Rated', 'list': top_rateds}
    return create_response(200, 'Success.', top_rated)
コード例 #16
0
def get_favorite_movies(user_id):
    user = User.query.get(user_id)
    page_size = app.config['PAGE_SIZE']
    page = 1

    if user is None:
        return create_response(400, "Invalid request")

    favorites = Favorite.query.filter_by(
        user_id=user_id).paginate(page, page_size, error_out=False)
    count = Favorite.query.filter_by(user_id=user_id).count()

    response = []

    for favorite in favorites.items:
        res = get_movie(favorite.movie_id, user_id)
        response.append(res)

    has_more = True if count > page_size * page else False

    return create_response(200, 'Success.', { 'has_more': has_more, 'list': response })
コード例 #17
0
def user_review(user_id, id, headline, body, rated):
    # query from request info
    movie = Movie.query.get(id)

    if movie is None:
        return create_response(400, "Movie is not exist")

    review = Review.query.filter_by(movie_id=movie.id, user_id=user_id).first()

    if review is not None:
        review.headline = headline
        review.body = body
        db.session.add(review)
    else:
        r = Review(headline=headline,
                   body=body,
                   user_id=user_id,
                   movie_id=movie.id)
        db.session.add(r)

    rating = Rating.query.filter_by(movie_id=movie.id, user_id=user_id).first()

    if rating is None:
        r = Rating(rating=rated, user_id=user_id, movie_id=movie.id)
        db.session.add(r)
    else:
        rating.rating = rated
        rating.timestamp = datetime.datetime.utcnow()
        db.session.add(rating)

    logger = Logger(user_id=user_id,
                    action_type_id=7,
                    movie_id=id,
                    headline=headline,
                    body=body)
    logger.create_log()

    db.session.commit()
    return create_response(200, "Update review for movie successfully")
コード例 #18
0
def search_movie(key, page, searchType, short, user_id):
    newKey = unidecode(key)

    response = {'query': key}

    if searchType == 'All' or searchType == 'Titles':
        movies = query_movie(newKey, page, short, user_id)
        response['title'] = movies

    if searchType == 'Celebs' or searchType == 'All':
        casts = query_cast(newKey, page, short)
        response['celebs'] = casts

    return create_response(200, 'Success', data=response)
コード例 #19
0
def protected():
    id, email = get_authorization()
    return create_response(200, 'Token is valid', {'id': id, 'email': email})
コード例 #20
0
def get_all_genres():
    genres = Genre.query.all()
    response = [{'id': genre.id, 'name': genre.name} for genre in genres]

    return create_response(200, 'Success.', response)