aboutsummaryrefslogtreecommitdiff
path: root/api/api.py
blob: f26e96fc633753afbbe7a31b77684a0fe67f12ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from http import HTTPStatus
from flask import Flask, Response, config, json, jsonify, request, request_started
from dotenv import dotenv_values
from pymongo import MongoClient
from bson.json_util import dumps
from bson import ObjectId
from uuid import uuid4

config = dotenv_values(".env")

app = Flask(__name__)

mongoclient = MongoClient(config["DB_URI"])
db = mongoclient[config["DB_NAME"]]
print("Connected to MongoDB database")

@app.route('/api/message')
def get_messages():
    messages = dumps(list(db["message"].find(limit=100)))
    return messages

@app.route('/api/new_message', methods=['POST'])
def new_message():
    position = list(json.loads(request.form['position']))
    message = request.form['message']
    token = request.form['token']
    user = db['user'].find_one({'token': token})
    if user is not None:
        db["message"].insert_one({'position': position, 'message': message, 'userId': user['_id']})
        return Response(status=HTTPStatus.NO_CONTENT)
    else:
        return Response(status=HTTPStatus.BAD_REQUEST)

@app.route('/api/gen_token')
def gen_token():
    token = str(uuid4())
    db["user"].insert_one({'token': token})
    return { 'token': token }

@app.route('/api/remove_message', methods=['DELETE'])
def remove_message():
    token = request.form['token']
    message_id = ObjectId(request.form['message_id'])
    user = db['user'].find_one({'token':token})
    if user is not None:
        message = db['message'].find_one({'_id': message_id})
        if message is not None:
            if message['userId'] == user['_id']:
                db['message'].delete_one({'_id':message_id})
                return Response(status=HTTPStatus.NO_CONTENT)
            else:
                return Response(status=HTTPStatus.UNAUTHORIZED)
        else:
            return Response(status=HTTPStatus.BAD_REQUEST)
    else:
        return Response(status=HTTPStatus.BAD_REQUEST)

@app.route('/api/edit_message', methods=['PUT'])
def edit_message():
    token = request.form['token']
    message_id = ObjectId(request.form['message_id'])
    user = db['user'].find_one({'token':token})
    new_message = request.form['message']
    if user is not None and new_message is not None:
        message = db['message'].find_one({'_id': message_id})
        if message is not None:
            if message['userId'] == user['_id']:
                db['message'].update_one({'_id':message_id}, {'$set': { 'message': new_message }})
                return Response(status=HTTPStatus.NO_CONTENT)
            else:
                return Response(status=HTTPStatus.UNAUTHORIZED)
        else:
            return Response(status=HTTPStatus.BAD_REQUEST)
    else:
        return Response(status=HTTPStatus.BAD_REQUEST)