add balance entity
Add respecting schema, model and adapt all endpoints to utilize it. Add two new endpoints for increasing and checking the balance.
This commit is contained in:
parent
32fd20b3ae
commit
bba801f2d2
107
app/__init__.py
107
app/__init__.py
|
@ -15,6 +15,7 @@ class UserModel(db.Model):
|
||||||
__tablename__ = "user"
|
__tablename__ = "user"
|
||||||
uuid = db.Column(db.String(32), unique=True, primary_key=True, nullable=False)
|
uuid = db.Column(db.String(32), unique=True, primary_key=True, nullable=False)
|
||||||
name = db.Column(db.String(64), nullable=False)
|
name = db.Column(db.String(64), nullable=False)
|
||||||
|
bal_uuid = db.Column(db.String(32), db.ForeignKey('balance.uuid'))
|
||||||
|
|
||||||
class CategoryModel(db.Model):
|
class CategoryModel(db.Model):
|
||||||
__tablename__ = "category"
|
__tablename__ = "category"
|
||||||
|
@ -29,9 +30,16 @@ class RecordModel(db.Model):
|
||||||
date = db.Column(db.Date)
|
date = db.Column(db.Date)
|
||||||
amount = db.Column(db.Integer)
|
amount = db.Column(db.Integer)
|
||||||
|
|
||||||
|
class BalanceModel(db.Model):
|
||||||
|
__tablename__ = "balance"
|
||||||
|
uuid = db.Column(db.String(32), primary_key=True, nullable=False)
|
||||||
|
value = db.Column(db.Integer, nullable=False)
|
||||||
|
|
||||||
|
|
||||||
class UserSchema(Schema):
|
class UserSchema(Schema):
|
||||||
uuid = fields.Str()
|
uuid = fields.Str()
|
||||||
name = fields.Str()
|
name = fields.Str()
|
||||||
|
bal_uuid = fields.Str()
|
||||||
|
|
||||||
class CategorySchema(Schema):
|
class CategorySchema(Schema):
|
||||||
uuid = fields.Str()
|
uuid = fields.Str()
|
||||||
|
@ -44,6 +52,10 @@ class RecordSchema(Schema):
|
||||||
date = fields.Date()
|
date = fields.Date()
|
||||||
amount = fields.Integer()
|
amount = fields.Integer()
|
||||||
|
|
||||||
|
class BalanceSchema(Schema):
|
||||||
|
uuid = fields.Str()
|
||||||
|
value = fields.Integer()
|
||||||
|
|
||||||
user_schema = UserSchema()
|
user_schema = UserSchema()
|
||||||
users_schema = UserSchema(many = True)
|
users_schema = UserSchema(many = True)
|
||||||
|
|
||||||
|
@ -53,6 +65,8 @@ categories_schema = CategorySchema(many = True)
|
||||||
record_schema = RecordSchema()
|
record_schema = RecordSchema()
|
||||||
records_schema = RecordSchema(many = True)
|
records_schema = RecordSchema(many = True)
|
||||||
|
|
||||||
|
balance_schema = BalanceSchema()
|
||||||
|
|
||||||
# "migration"
|
# "migration"
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
db.create_all()
|
db.create_all()
|
||||||
|
@ -69,6 +83,7 @@ def ep_reset():
|
||||||
db.session.query(RecordModel).delete()
|
db.session.query(RecordModel).delete()
|
||||||
db.session.query(CategoryModel).delete()
|
db.session.query(CategoryModel).delete()
|
||||||
db.session.query(UserModel).delete()
|
db.session.query(UserModel).delete()
|
||||||
|
db.session.query(BalanceModel).delete()
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return {}, 200
|
return {}, 200
|
||||||
|
|
||||||
|
@ -96,7 +111,9 @@ def ep_user_post():
|
||||||
if 'uuid' in body:
|
if 'uuid' in body:
|
||||||
return {}, 403
|
return {}, 403
|
||||||
|
|
||||||
|
b = BalanceModel(uuid=uuid.uuid4().hex, value=0)
|
||||||
body.update({'uuid': uuid.uuid4().hex})
|
body.update({'uuid': uuid.uuid4().hex})
|
||||||
|
body.update({'bal_uuid': b.uuid})
|
||||||
|
|
||||||
try:
|
try:
|
||||||
_ = user_schema.load(body)
|
_ = user_schema.load(body)
|
||||||
|
@ -106,6 +123,7 @@ def ep_user_post():
|
||||||
u = UserModel(**body)
|
u = UserModel(**body)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
db.session.add(b)
|
||||||
db.session.add(u)
|
db.session.add(u)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -124,8 +142,13 @@ def ep_user_delete(user_id):
|
||||||
if len(result) == 0:
|
if len(result) == 0:
|
||||||
return {}, 404
|
return {}, 404
|
||||||
|
|
||||||
db.session.query(UserModel).filter(UserModel.uuid == user_id).delete()
|
try:
|
||||||
db.session.commit()
|
db.session.query(UserModel).filter(UserModel.uuid == user_id).delete()
|
||||||
|
db.session.query(BalanceModel).filter(BalanceModel.uuid == result[0].bal_uuid).delete()
|
||||||
|
db.session.commit()
|
||||||
|
except Exception as e:
|
||||||
|
db.session.rollback()
|
||||||
|
return {}, 403
|
||||||
|
|
||||||
return user_schema.dumps(result[0]), 200
|
return user_schema.dumps(result[0]), 200
|
||||||
|
|
||||||
|
@ -188,8 +211,11 @@ def ep_category_delete():
|
||||||
if len(result) == 0:
|
if len(result) == 0:
|
||||||
return {}, 404
|
return {}, 404
|
||||||
|
|
||||||
db.session.query(CategoryModel).filter(CategoryModel.uuid == cat_id).delete()
|
try:
|
||||||
db.session.commit()
|
db.session.query(CategoryModel).filter(CategoryModel.uuid == cat_id).delete()
|
||||||
|
db.session.commit()
|
||||||
|
except Exception as e:
|
||||||
|
return {}, 403
|
||||||
|
|
||||||
return category_schema.dumps(result[0]), 200
|
return category_schema.dumps(result[0]), 200
|
||||||
|
|
||||||
|
@ -266,12 +292,25 @@ def ep_record_post():
|
||||||
|
|
||||||
try:
|
try:
|
||||||
_ = record_schema.load(body)
|
_ = record_schema.load(body)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return {}, 403
|
return {}, 403
|
||||||
|
|
||||||
r = RecordModel(**body)
|
r = RecordModel(**body)
|
||||||
|
|
||||||
|
b_id = db.session \
|
||||||
|
.query(UserModel) \
|
||||||
|
.filter(UserModel.uuid == body['user_uuid']) \
|
||||||
|
.all()[0] \
|
||||||
|
.bal_uuid
|
||||||
|
|
||||||
|
v = db.session \
|
||||||
|
.query(BalanceModel) \
|
||||||
|
.filter(BalanceModel.uuid == b_id) \
|
||||||
|
.all()[0] \
|
||||||
|
.value
|
||||||
|
|
||||||
|
BalanceModel.metadata.tables.get("balance").update().where(BalanceModel.metadata.tables.get("balance").c.uuid == b_id).values(value = v-body['amount'])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
db.session.add(r)
|
db.session.add(r)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
@ -279,4 +318,62 @@ def ep_record_post():
|
||||||
db.session.rollback()
|
db.session.rollback()
|
||||||
return {}, 403
|
return {}, 403
|
||||||
|
|
||||||
|
|
||||||
return jsonify(record_schema.load(body)), 200
|
return jsonify(record_schema.load(body)), 200
|
||||||
|
|
||||||
|
@app.route("/balance_up", methods = ["POST"])
|
||||||
|
def ep_balance_up():
|
||||||
|
body = request.json
|
||||||
|
|
||||||
|
if 'user_id' in body:
|
||||||
|
body.update({'user_uuid': body['user_id']})
|
||||||
|
del body['user_id']
|
||||||
|
|
||||||
|
if 'user_uuid' not in body:
|
||||||
|
return {}, 403
|
||||||
|
|
||||||
|
try:
|
||||||
|
b_id = db.session \
|
||||||
|
.query(UserModel) \
|
||||||
|
.filter(UserModel.uuid == body['user_uuid']) \
|
||||||
|
.all()[0] \
|
||||||
|
.bal_uuid
|
||||||
|
|
||||||
|
v = db.session \
|
||||||
|
.query(BalanceModel) \
|
||||||
|
.filter(BalanceModel.uuid == b_id) \
|
||||||
|
.all()[0] \
|
||||||
|
.value
|
||||||
|
|
||||||
|
BalanceModel.metadata.tables.get("balance").update().where(BalanceModel.metadata.tables.get("balance").c.uuid == b_id).values(value = v + body['amount'])
|
||||||
|
except Exception as e:
|
||||||
|
return {}, 403
|
||||||
|
|
||||||
|
return {}, 200
|
||||||
|
|
||||||
|
@app.route("/balance", methods = ["GET"])
|
||||||
|
def ep_balance_get():
|
||||||
|
body = request.json
|
||||||
|
|
||||||
|
if 'user_id' in body:
|
||||||
|
body.update({'user_uuid': body['user_id']})
|
||||||
|
del body['user_id']
|
||||||
|
|
||||||
|
if 'user_uuid' not in body:
|
||||||
|
return {}, 403
|
||||||
|
|
||||||
|
try:
|
||||||
|
b_id = db.session \
|
||||||
|
.query(UserModel) \
|
||||||
|
.filter(UserModel.uuid == body['user_uuid']) \
|
||||||
|
.all()[0] \
|
||||||
|
.bal_uuid
|
||||||
|
|
||||||
|
result = db.session.query(BalanceModel).filter(BalanceModel.uuid == b_id).all()
|
||||||
|
except Exception as e:
|
||||||
|
return {}, 403
|
||||||
|
|
||||||
|
if len(result) == 1:
|
||||||
|
return user_schema.dumps(result[0]), 200
|
||||||
|
else:
|
||||||
|
return {}, 404
|
||||||
|
|
Loading…
Reference in New Issue