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=& desc=& # OPTIONAL img=& # OPTIONAL votes=[ { "name": "", "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=&vote_id=&voter_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/', '/votings//') api.add_resource(Vote, '/vote', '/vote/') app.run(host='0.0.0.0', port=5000)