2019-10-23 21:09:51 +02:00
|
|
|
'''
|
|
|
|
|
AJAX hooks for the website.
|
|
|
|
|
|
|
|
|
|
Warning: this is not the public API.
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
from flask import Blueprint, jsonify
|
2019-11-25 09:39:33 +01:00
|
|
|
from .models import User, Message, MessageUpvote
|
2019-10-23 21:09:51 +02:00
|
|
|
from .utils import locations, get_current_user, is_username
|
2019-11-25 09:39:33 +01:00
|
|
|
import datetime
|
2019-10-23 21:09:51 +02:00
|
|
|
|
|
|
|
|
bp = Blueprint('ajax', __name__, url_prefix='/ajax')
|
|
|
|
|
|
|
|
|
|
@bp.route('/username_availability/<username>')
|
|
|
|
|
def username_availability(username):
|
|
|
|
|
current = get_current_user()
|
|
|
|
|
if current:
|
|
|
|
|
current = current.username
|
|
|
|
|
else:
|
|
|
|
|
current = None
|
|
|
|
|
is_valid = is_username(username)
|
|
|
|
|
if is_valid:
|
|
|
|
|
try:
|
|
|
|
|
user = User.get(User.username == username)
|
|
|
|
|
is_available = current == user.username
|
|
|
|
|
except User.DoesNotExist:
|
|
|
|
|
is_available = True
|
|
|
|
|
else:
|
|
|
|
|
is_available = False
|
|
|
|
|
return jsonify({'is_valid':is_valid, 'is_available':is_available, 'status':'ok'})
|
|
|
|
|
|
|
|
|
|
@bp.route('/location_search/<name>')
|
|
|
|
|
def location_search(name):
|
|
|
|
|
results = []
|
|
|
|
|
for key, value in locations.items():
|
|
|
|
|
if value.lower().startswith(name.lower()):
|
|
|
|
|
results.append({'value': key, 'display': value})
|
|
|
|
|
return jsonify({'results': results})
|
2019-11-25 09:39:33 +01:00
|
|
|
|
|
|
|
|
@bp.route('/score/<int:id>/toggle', methods=['POST'])
|
|
|
|
|
def score_toggle(id):
|
|
|
|
|
user = get_current_user()
|
|
|
|
|
message = Message[id]
|
|
|
|
|
upvoted_by_self = (MessageUpvote
|
|
|
|
|
.select()
|
|
|
|
|
.where((MessageUpvote.message == message) & (MessageUpvote.user == user))
|
|
|
|
|
.exists())
|
|
|
|
|
if upvoted_by_self:
|
|
|
|
|
(MessageUpvote
|
|
|
|
|
.delete()
|
|
|
|
|
.where(
|
|
|
|
|
(MessageUpvote.message == message) &
|
|
|
|
|
(MessageUpvote.user == user))
|
|
|
|
|
.execute()
|
|
|
|
|
)
|
|
|
|
|
else:
|
|
|
|
|
MessageUpvote.create(
|
|
|
|
|
message=message,
|
|
|
|
|
user=user,
|
|
|
|
|
created_date=datetime.datetime.now()
|
|
|
|
|
)
|
|
|
|
|
return jsonify({
|
|
|
|
|
"score": message.score,
|
|
|
|
|
"status": "ok"
|
|
|
|
|
})
|