add record-related endpoints

This commit is contained in:
ІО-23 Шмуляр Олег 2024-10-28 20:10:04 +02:00
parent e6954e5710
commit 1ad5a7587b
Signed by: hasslesstech
GPG Key ID: 09745A46126DDD4C
2 changed files with 131 additions and 0 deletions

View File

@ -1,5 +1,6 @@
from flask import Flask, request from flask import Flask, request
import time import time
import json
from app.local_db import LocalDB from app.local_db import LocalDB
app = Flask(__name__) app = Flask(__name__)
@ -94,3 +95,58 @@ def ep_category_delete():
return category, 404 return category, 404
else: else:
return {}, 403 return {}, 403
@app.route("/record/<record_id>", methods = ["GET"])
def ep_record_get(record_id):
r = ldb.get_record(record_id)
if 'uuid' in r:
return r
else:
return r, 404
@app.route("/record", methods = ["GET"])
def ep_record_get_filtered():
options = {}
if 'user_id' in request.json:
options['user_id'] = request.json['user_id']
if 'cat_id' in request.json:
options['cat_id'] = request.json['cat_id']
if len(list(options.keys())) == 0:
return [], 400
r = ldb.filter_records(options)
return json.dumps(r)
@app.route("/record/<record_id>", methods = ["DELETE"])
def ep_record_del(record_id):
r = ldb.del_record(record_id)
if 'uuid' in r:
return r
else:
return r, 404
@app.route("/record", methods = ["POST"])
def ep_record_post():
body = request.json
if 'user_id' not in body:
return {}, 400
if 'cat_id' not in body:
return {}, 400
if 'amount' not in body:
return {}, 400
r = ldb.add_record(body['user_id'], body['cat_id'], body['amount'])
if 'uuid' in r:
return r
else:
return r, 403

View File

@ -1,4 +1,5 @@
import uuid import uuid
import time
class LocalDB: class LocalDB:
def __init__(self): def __init__(self):
@ -85,3 +86,77 @@ class LocalDB:
} }
else: else:
return {} return {}
def get_record(self, uid):
if uid in self.records:
r = self.records[uid]
return {
'uuid': uid,
'user_id': r['user_id'],
'cat_id': r['cat_id'],
'date': r['date'],
'amount': r['amount']
}
else:
return {}
def filter_records(self, filters):
results = []
for k, v in self.records.items():
if 'user_id' in filters and v['user_id'] != filters['user_id']:
continue
if 'cat_id' in filters and v['cat_id'] != filters['cat_id']:
continue
results.append({
'uuid': k,
'user_id': v['user_id'],
'cat_id': v['cat_id'],
'date': v['date'],
'amount': v['amount']
})
return results
def add_record(self, user_id, cat_id, amount):
if user_id not in self.users:
return {}
if cat_id not in self.categories:
return {}
new_uuid = uuid.uuid4().hex
self.records[new_uuid] = {
'user_id': user_id,
'cat_id': cat_id,
'date': time.time(),
'amount': amount
}
return {
'uuid': new_uuid,
'user_id': user_id,
'cat_id': cat_id,
'date': time.time(),
'amount': amount
}
def del_record(self, uid):
if uid in self.records:
r = self.records[uid]
del self.records[uid]
return {
'uuid': uid,
'user_id': r['user_id'],
'cat_id': r['cat_id'],
'date': r['date'],
'amount': r['amount']
}
else:
return {}