import os
|
|
import copy
|
|
import json
|
|
|
|
from modules import utils
|
|
|
|
from flask import Flask, request,Response
|
|
from flask_restful import Resource, Api, abort
|
|
|
|
app = Flask(__name__)
|
|
api = Api(app)
|
|
db_path = os.path.join(app.root_path, 'databases', 'votings.json')
|
|
user_db = os.path.join(app.root_path, 'databases', 'users.json')
|
|
|
|
with open(db_path, 'r') as f:
|
|
votings = json.load(f)
|
|
|
|
with open(user_db, 'r') as f:
|
|
users = json.load(f)
|
|
|
|
class Votings(Resource):
|
|
def get(self):
|
|
|
|
voting = [
|
|
{
|
|
'id' : v['id'],
|
|
'name': v['name'],
|
|
'desc': v['desc'],
|
|
'img' : v['img']
|
|
}
|
|
for v in votings
|
|
]
|
|
|
|
resp = Response(json.dumps(voting))
|
|
resp.headers['Access-Control-Allow-Origin'] = '*'
|
|
|
|
return resp
|
|
|
|
def post(self):
|
|
"""
|
|
Example POST Data:
|
|
name=<voting_name>&
|
|
desc=<voting_desc>& # OPTIONAL
|
|
img=<voting_img>& # OPTIONAL
|
|
votes=[
|
|
{
|
|
"name": "<vote_name>",
|
|
"desc": "<vote_desc>" # OPTIONAL
|
|
},
|
|
(...)
|
|
]
|
|
|
|
"""
|
|
args = request.form
|
|
voting_id = len(votings) + 1
|
|
voting = {
|
|
'id': voting_id,
|
|
'name': args['name'],
|
|
'desc': args.get('desc'),
|
|
'img' : args.get('img'),
|
|
'voters': [],
|
|
'votes': [
|
|
{
|
|
'id' : k + 1,
|
|
'name': vote['name'],
|
|
'desc': vote.get('desc'),
|
|
'votes': 0
|
|
}
|
|
for k, vote in enumerate(json.loads(args['votes']))
|
|
]
|
|
}
|
|
|
|
votings.append(voting)
|
|
|
|
with open(db_path, 'w') as f:
|
|
json.dump(votings, f, indent=2)
|
|
|
|
return {'message': 'Success'}
|
|
|
|
|
|
class Voting(Resource):
|
|
def get(self, voting_id):
|
|
try:
|
|
voting = copy.deepcopy(votings[voting_id - 1])
|
|
del voting['voters']
|
|
resp = Response(json.dumps(voting))
|
|
resp.headers['Access-Control-Allow-Origin'] = '*'
|
|
|
|
return resp
|
|
except:
|
|
abort(404, error="Voting {} doesn't exist".format(voting_id))
|
|
|
|
class Vote(Resource):
|
|
def post(self):
|
|
"""
|
|
Example URL Query:
|
|
/vote?voting_id=<voting_id>&vote_id=<vote_id>&voter_id=<user_id>
|
|
"""
|
|
|
|
voter_id = request.form['voter_id']
|
|
voting_id = int(request.form['voting_id']) - 1
|
|
if utils.find_by_id(users.values(), voter_id):
|
|
if voter_id not in votings[voting_id]['voters']:
|
|
vote_id = int(request.form['vote_id'])
|
|
votings[voting_id]['votes'][str(vote_id)]['votes'] += 1
|
|
votings[voting_id]['voters'].append(voter_id)
|
|
with open(db_path, 'w') as f:
|
|
json.dump(votings, f, indent=2)
|
|
|
|
return {'message': 'Success'}
|
|
|
|
return {'error': 'Already voted'}
|
|
|
|
return {'error': 'User doesn\'t exists'}
|
|
|
|
if __name__ == '__main__':
|
|
api.add_resource(Votings, '/votings', '/votings/')
|
|
api.add_resource(Voting, '/votings/<int:voting_id>', '/votings/<int:voting_id>/')
|
|
api.add_resource(Vote, '/vote', '/vote/')
|
|
|
|
app.run(host='0.0.0.0', port=5000)
|