def user_req(): """Функция обработки стандартных запросов связанных с пользователями. :return: Ответ сервера. """ if request.method == 'GET': resp_data = { 'login': current_user.login, 'email': current_user.email, 'name': current_user.name, 'surname': current_user.surname, } return get_response(200, True, '', info=resp_data) if request.method == 'PUT': try: req_data = UserUpdateData.parse_raw(request.data) except ValueError as error: return get_response(400, False, 'Проверьте правильность запроса', data=error.errors()) if req_data.name: current_user.name = req_data.name if req_data.surname: current_user.surname = req_data.surname if req_data.email: current_user.email = req_data.email db.session.commit() return get_response(200, True, '')
def registration(): """Запрос регистрации новых пользователей в системе. :return: Ответ сервера, содержащий JWT токен нового пользователя при успешном запросе. """ try: req_data = RegData.parse_raw(request.data) except ValueError as error: return get_response(400, False, 'Проверьте правильность запроса', data=error.errors()) if User.query.filter_by(login=req_data.login).first(): return get_response(400, False, 'Пользователь с таким логином уже существует') if User.query.filter_by(email=req_data.email).first(): return get_response(400, False, 'Пользователь с такой почтой уже существует') new_user = User() new_user.login = req_data.login new_user.password = generate_password_hash(req_data.password, method='sha256') new_user.email = req_data.email new_user.name = req_data.name new_user.surname = req_data.surname db.session.add(new_user) db.session.commit() return get_response(200, False, '', token=new_user.get_token())
def registration(): try: req_data = RegData.parse_raw(request.data) except ValueError as error: return get_response(400, False, 'Проверьте правильность запроса', data=error.errors()) if User.query.filter_by(telegram_id=req_data.telegram_id).first(): return get_response(400, False, 'Пользователь уже существует') new_user = User(name=req_data.name, telegram_id=req_data.telegram_id) db.session.add(new_user) db.session.commit() return get_response(400, False, '', user_id=new_user.id)
def keywords_news(): telegram_id = request.headers.get('Authorization') user = User.query.filter_by(telegram_id=telegram_id).first() if not user: return get_response(403, False, 'Пользователь не найден') user_keywords_names = '' for keyword in user.keywords: user_keywords_names += keyword.name + ' OR ' if not user_keywords_names: return get_response(400, False, 'У вас ещё нет ключевых слов!') user_keywords_names = user_keywords_names[:-4] news_list = news_api.get_top_headlines( q=user_keywords_names)['articles'][:10] return get_response(200, True, '', news_list=news_list)
def categories_news(): telegram_id = request.headers.get('Authorization') user = User.query.filter_by(telegram_id=telegram_id).first() if not user: return get_response(403, False, 'Пользователь не найден') user_cats_id = '' for cat in user.categories: user_cats_id += cat.news_api_id + ',' if not user_cats_id: return get_response(400, False, 'Вы ещё не подписались ни на один канал!') user_cats_id = user_cats_id[:-1] news_list = news_api.get_top_headlines( sources=user_cats_id)['articles'][:10] return get_response(200, True, '', news_list=news_list)
def login(): """Запрос авторизации пользователя в системе. :return: Ответ сервера, содержащий JWT токен пользователя при успешном запросе. """ try: req_data = LoginData.parse_raw(request.data) except ValueError as error: return get_response(400, False, 'Проверьте правильность запроса', data=error.errors()) user = User.query.filter_by(login=req_data.login).first() if not user or not check_password_hash(user.password, req_data.password): return get_response(400, False, 'Неверный логин и/или пароль!') return get_response(200, True, '', token=user.get_token())
def change_password(): """Функция обработки запроса смены пароля. :return: Ответ сервера. """ try: req_data = ChangePasswordData.parse_raw(request.data) except ValueError as error: return get_response(400, False, 'Проверьте правильность запроса', data=error.errors()) if not check_password_hash(current_user.password, req_data.old_password): return get_response(403, False, 'Старый пароль неверен') current_user.password = generate_password_hash(req_data.new_password) db.session.commit() return get_response(200, True, '')
def get_links(): links_info = [{ 'serv_name': short_link.name, 'url': short_link.full_link.url, 'description': short_link.description, 'type': short_link.type, 'click_count': short_link.click_count, } for short_link in current_user.short_links] return get_response(200, True, '', info=links_info)
def link_statistic(): """Функция выдачи статистики ссылки за определенный период времени. :return: Ответ сервера. """ try: req_data = LinkStatisticData.parse_raw(request.data) except ValueError as error: return get_response(400, False, 'Неккоректный запрос', data=error.errors()) short_link = ShortLink.query.filter_by(name=req_data.name, user=current_user).first() if not short_link: return get_response(400, False, 'Ссылка не найдена') info = short_link.get_statistic(req_data.datetime_start, req_data.datetime_end) return get_response(200, True, '', info=info)
def link(link_name): """Функция обработки стандартных запросов связанных с ссылками. :param link_name: имя ссылки. :return: Ответ сервера. """ if request.method == 'GET': short_link = ShortLink.query.filter_by(name=link_name).first() if not short_link: return get_response(400, False, 'Ссылка не найдена') if short_link.type == LinkTypes.ONLY_AUTH.value and not current_user: return get_response( 403, False, 'Ссылка доступна только авторизованным пользователям') if short_link.type == LinkTypes.PERSONAL.value and current_user != short_link.user: return get_response(403, False, 'Ссылка недоступна') if short_link.user: short_link.add_new_click() return get_response(200, True, '', url=short_link.full_link.url) if request.method == 'POST': if link_name != 'add': return get_response(404, False, 'Запрос отсутствует') try: req_data = LinkCreateData.parse_raw(request.data) except ValueError as error: return get_response(400, False, 'Проверьте правильность запроса', data=error.errors()) full_link = FullLink.get_or_create(req_data.url) if not current_user: short_link = ShortLink.get_or_create(None, full_link, LinkTypes.PUBLIC.value) return get_response(200, True, '', link_name=short_link.name) if ShortLink.query.filter_by(user=current_user, full_link=full_link).first(): return get_response(400, False, 'У вас уже создана ссылка для данного сайта') short_link = ShortLink.get_or_create( current_user, full_link, req_data.type, name=req_data.name, description=req_data.description, ) print(short_link) return get_response(200, True, '', link_name=short_link.name) if request.method == 'PUT': if not current_user: return get_response(401, False, 'UNAUTHORIZED') short_link = ShortLink.query.filter_by(name=link_name, user=current_user).first() if not short_link: return get_response(400, False, 'Ссылка не найдена') try: req_data = LinkUpdateData.parse_raw(request.data) except ValueError as error: return get_response(400, False, 'Проверьте правильность запроса', data=error.errors()) if req_data.name: short_link.name = req_data.name if req_data.description: short_link.description = req_data.description if req_data.type: short_link.type = req_data.type db.session.commit() return get_response(200, True, '') if request.method == 'DELETE': print(link_name) if not current_user: return get_response(401, False, 'UNAUTHORIZED') short_link = ShortLink.query.filter_by(name=link_name, user=current_user).first() print(short_link) if not short_link: return get_response(400, False, 'Ссылка не найдена') db.session.delete(short_link) db.session.commit() return get_response(200, True, '')