diff --git a/server_side/api/voting_system/app.py b/server_side/api/voting_system/app.py index 45a18e1..828983a 100644 --- a/server_side/api/voting_system/app.py +++ b/server_side/api/voting_system/app.py @@ -1,46 +1,81 @@ +import os import ssl +import json -from flask import Flask -from flask_restful import Resource, Api, reqparse, abort - -from pymongo import MongoClient -from bson.objectid import ObjectId +from flask import Flask, send_from_directory +from flask_restful import Resource, Api, abort, reqparse app = Flask(__name__) api = Api(app) -client = MongoClient("mongodb+srv://mycity:mycity123@mycity-3v9y3.mongodb.net/test?retryWrites=true", ssl_cert_reqs=ssl.CERT_NONE) -db = client.voting_system -collection = db.votings +parser = reqparse.RequestParser() +parser.add_argument('name') +parser.add_argument('desc') +parser.add_argument('img') +parser.add_argument('votes') + +with open(os.path.join(app.root_path, 'votings.json'), 'r') as f: + votings_json = json.load(f) + votings = { + v['id']: v + for v in votings_json + } class Votings(Resource): def get(self): - votings = [ + voting = [ { - 'id' : str(doc['_id']), - 'name': doc['name'], - 'desc': doc['desc'], - 'img' : doc['img'] + 'id' : v['id'], + 'name': v['name'], + 'desc': v['desc'], + 'img' : v['img'] } - for doc in collection.find({}) + for k, v in votings.items() ] - return votings + return voting + + def post(self): + args = parser.parse_args() + voting_id = max(votings.keys()) + 1 + voting = { + 'id': voting_id, + 'name': args['name'], + 'desc': args['desc'], + 'img' : args['img'], + 'votes': [ + { + 'id': k, + 'name': vote['name'], + 'desc': vote['desc'], + 'votes': 0 + } + for k, vote in enumerate(json.loads(args['votes'])) + ] + } + + votings[voting_id] = voting + votings_json.append(voting) + with open(os.path.join(app.root_path, 'votings.json'), 'w') as f: + json.dump(votings_json, f, indent=4) + + return voting + -class Vote(Resource): +class Voting(Resource): def get(self, voting_id): try: - doc = collection.find_one({'_id': ObjectId(voting_id)}) - doc['_id'] = str(doc['_id']) - return { - k.replace('_id', 'id'): v - for k, v in doc.items() - } + return votings[voting_id] except: abort(404, error="Voting {} doesn't exist".format(voting_id)) -api.add_resource(Votings, '/votings') -api.add_resource(Vote, '/votings/') +api.add_resource(Votings, '/votings', '/votings/') +api.add_resource(Voting, '/votings/') + +@app.route('/img/') +def send_img(path): + return send_from_directory('images', path) if __name__ == '__main__': - app.run(debug=True) + app.run(host='0.0.0.0', port=5000, debug=True) +