· 5 years ago · Jun 12, 2020, 12:52 PM
1@app.route('/register', methods=['POST'])
2def register():
3 parser = reqparse.RequestParser()
4 parser.add_argument("login", required=True)
5 parser.add_argument("password", required=True)
6 parser.add_argument("name", required=True)
7 args = parser.parse_args()
8 session = db_session.create_session()
9 check_user = session.query(User).filter(User.login == args['login'].strip()).first()
10 if check_user:
11 return jsonify({'result': 'FAIL', 'message': 'user with this login already exists'})
12 user = User(
13 name=args['name'],
14 login=args['login'].strip(),
15 password=generate_password_hash(args['password'])
16 )
17 session.add(user)
18 session.commit()
19 return jsonify({'result': 'OK'})
20
21
22@app.route('/login', methods=['GET'])
23def login():
24 parser = reqparse.RequestParser()
25 parser.add_argument("login", required=True)
26 parser.add_argument("password", required=True)
27 args = parser.parse_args()
28 session = db_session.create_session()
29 user = session.query(User).filter(User.login == args['login'].strip()).first()
30 if user and user.check_password(args['password']):
31 return jsonify({'result': 'OK', 'message': {'api_key': user.generate_api_key()}})
32 return jsonify({'result': 'FAIL', 'message': 'invalid login or password'})
33
34
35@app.route('/vote_for_habit/<int:habit_id>', methods=['PUT'])
36def vote_for_habit(habit_id):
37 parser = reqparse.RequestParser()
38 parser.add_argument("vote_type", required=True, choices=("positive", "negative"))
39 parser.add_argument("api_key", required=True)
40 args = parser.parse_args()
41 session = db_session.create_session()
42 habit = session.query(Habit).get(habit_id)
43 user = User.get_by_api(args['api_key'])
44 if user is None:
45 abort(403, message='Invalid api key')
46 if habit.user_id == user.id:
47 return jsonify({'result': 'FAIL', 'message': 'cant vote on self habit'})
48 if habit.voted_users is not None:
49 already_voted = habit.voted_users.split(', ')
50 if str(user.id) in already_voted:
51 return jsonify({'result': 'FAIL', 'message': 'already voted on this habit'})
52 else:
53 habit.voted_users += f', {user.id}'
54 else:
55 habit.voted_users = str(user.id)
56 if args['vote_type'] == 'positive':
57 habit.reputation += 1
58 else:
59 habit.reputation -= 1
60 habit.votes += 1
61 session.commit()
62 return jsonify({'result': "OK"})
63
64
65@app.route('/habit_completed/<int:habit_id>', methods=['PUT'])
66def habit_completed(habit_id):
67 parser = reqparse.RequestParser()
68 parser.add_argument("api_key", required=True)
69 session = db_session.create_session()
70 args = parser.parse_args()
71 # weekday_today = str(datetime.datetime.today().weekday())
72 habit = session.query(Habit).filter(Habit.id == habit_id).first()
73 user = User.get_by_api(args['api_key'])
74 if habit is None:
75 abort(404, 'habit not found')
76 if user is None:
77 abort(403, 'Invalid api key')
78 if habit.user.api_key != args['api_key']:
79 abort(403, 'Invalid api key')
80 # if weekday_today not in habit.weekdays:
81 # return jsonify({'result': 'FAIL', 'message': 'This habit is not scheduled for today'})
82 user.change_data(rating=user.rating + habit_rating(len(habit.weekdays.split(', ')), habit.votes, habit.reputation))
83 return jsonify({'result': 'OK'})