```python3.8 [Forwarded from Daniil Gubaydullin] @app.route('/register', methods=['POST']) def register(): parser = reqparse.RequestParser() parser.add_argument("login", required=True) parser.add_argument("password", required=True) parser.add_argument("name", required=True) args = parser.parse_args() session = db_session.create_session() check_user = session.query(User).filter(User.login == args['login'].strip()).first() if check_user: return jsonify({'result': 'FAIL', 'message': 'user with this login already exists'}) user = User( name=args['name'], login=args['login'].strip(), password=generate_password_hash(args['password']) ) session.add(user) session.commit() return jsonify({'result': 'OK'}) @app.route('/login', methods=['GET']) def login(): parser = reqparse.RequestParser() parser.add_argument("login", required=True) parser.add_argument("password", required=True) args = parser.parse_args() session = db_session.create_session() user = session.query(User).filter(User.login == args['login'].strip()).first() if user and user.check_password(args['password']): return jsonify({'result': 'OK', 'message': {'api_key': user.generate_api_key()}}) return jsonify({'result': 'FAIL', 'message': 'invalid login or password'}) @app.route('/vote_for_habit/<int:habit_id>', methods=['PUT']) def vote_for_habit(habit_id): parser = reqparse.RequestParser() parser.add_argument("vote_type", required=True, choices=("positive", "negative")) parser.add_argument("api_key", required=True) args = parser.parse_args() session = db_session.create_session() habit = session.query(Habit).get(habit_id) user = User.get_by_api(args['api_key']) if user is None: abort(403, message='Invalid api key') if habit.user_id == user.id: return jsonify({'result': 'FAIL', 'message': 'cant vote on self habit'}) if habit.voted_users is not None: already_voted = habit.voted_users.split(', ') if str(user.id) in already_voted: return jsonify({'result': 'FAIL', 'message': 'already voted on this habit'}) else: habit.voted_users += f', {user.id}' else: habit.voted_users = str(user.id) if args['vote_type'] == 'positive': habit.reputation += 1 else: habit.reputation -= 1 habit.votes += 1 session.commit() return jsonify({'result': "OK"}) @app.route('/habit_completed/<int:habit_id>', methods=['PUT']) def habit_completed(habit_id): parser = reqparse.RequestParser() parser.add_argument("api_key", required=True) session = db_session.create_session() args = parser.parse_args() # weekday_today = str(datetime.datetime.today().weekday()) habit = session.query(Habit).filter(Habit.id == habit_id).first() user = User.get_by_api(args['api_key']) if habit is None: abort(404, 'habit not found') if user is None: abort(403, 'Invalid api key') if habit.user.api_key != args['api_key']: abort(403, 'Invalid api key') # if weekday_today not in habit.weekdays: # return jsonify({'result': 'FAIL', 'message': 'This habit is not scheduled for today'}) user.change_data(rating=user.rating + habit_rating(len(habit.weekdays.split(', ')), habit.votes, habit.reputation)) return jsonify({'result': 'OK'}) ```