def create(): encrypted_user_id = None required = {"name": {'type': 'string', 'required': True}} validate = Utilities.validate(required, request.json) if validate is not None: return HttpResponse.error_response(validate) if g.user_id is not None: user_id = g.user_id else: user = userLogic.set_userId() user_id = user["user_id"] encrypted_user_id = user["encrypted_user_id"] name = str(request.json['name']).lower() new_category = Category(name, user_id) log_data = AuditLog(user_id, auditTypes.CATEGORY_CREATED) db.session.add(new_category) db.session.add(log_data) db.session.commit() response = category_schema.jsonify(new_category) if encrypted_user_id is not None: response.set_cookie("user_id", encrypted_user_id) return HttpResponse.success_response(response)
def read(id): category = Category.query.get(id) if not category: return HttpResponse.error_response({"error": "Category not found"}) response = category_schema.jsonify(category) return HttpResponse.success_response(response)
def read_all(): categories = Category.query.all() if not categories: return HttpResponse.error_response({"error": "No category found"}) result = categories_schema.dump(categories) response = result.data return HttpResponse.success_response(response)
def delete(id): category = Category.query.get(id) if not category: return HttpResponse.error_response({"error": "Category not found"}) db.session.delete(category) db.session.commit() response = category_schema.jsonify(category) return HttpResponse.success_response(response)
def delete(id): if not g.user_id: HttpResponse.success_response( {"error": "Please create the item first"}) user_id = g.user_id item = Item.query.filter_by(id=id, user_id=user_id).first() if not item: return HttpResponse.error_response({"error": "No item found"}) db.session.delete(item) log_data = AuditLog(user_id, auditTypes.ITEM_DELETED) db.session.add(log_data) db.session.commit() data = item_schema.jsonify(item) return HttpResponse.success_response(data)
def update(id): category = Category.query.get(id) if not category: return HttpResponse.error_response({"error": "Category not found"}) name = request.json['name'] category.name = name if name else category.name db.session.commit() response = category_schema.jsonify(category) return HttpResponse.success_response(response)
def get_logs(): if not g.user_id: return HttpResponse.error_response( {"error": "You haven't performed any actions yet."}, 404) user_id = g.user_id logs = AuditLog.query.filter_by(user_id=user_id).all() if not logs: return HttpResponse.error_response( {"error": "You haven't performed any actions yet."}, 404) result = audit_logs_schema.dump(logs) data = result.data return HttpResponse.success_response(data)
def get_items(id): if not g.user_id: return HttpResponse.error_response( {"error": "You haven't created any items in this category."}) user_id = g.user_id items = Item.query.filter_by(user_id=user_id, category_id=id).order_by(Item.rank).all() if not items: return HttpResponse.error_response( {"error": "You haven't created any items in this category."}) result = items_schema.dump(items) data = result.data return HttpResponse.success_response(data)
def update_ranking(id): if not g.user_id: return HttpResponse.error_response( {"error": "Please create items to be ranked"}) user_id = g.user_id required = {"items": {"required": True}} validate = Utilities.validate(required, request.json) if validate is not None: return HttpResponse.error_response(validate) items = request.json["items"] rank = 0 for item_id in items: try: int(item_id) except: return HttpResponse.error_response( {"error": "Please send the ids of the items as integers"}) item = Item.query.filter_by(id=item_id, user_id=user_id, category_id=id).first() if item: rank = rank + 1 item.rank = rank db.session.commit() log_data = AuditLog(user_id, auditTypes.RANKING_UPDATED) db.session.add(log_data) db.session.commit() items = Item.query.filter_by(user_id=user_id, category_id=id).order_by(Item.rank).all() result = items_schema.dump(items) return HttpResponse.success_response(result.data)
def update_item(id): if not g.user_id: return HttpResponse.error_response( {"error": "No matching product found."}) required = { "title": { "type": "string", "required": False }, "description": { "type": "string", "required": False }, "category_id": { "type": "integer", "required": False } } validate = Utilities.validate(required, request.json) if validate is not None: return HttpResponse.error_response(validate) user_id = g.user_id item = Item.query.filter_by(id=id, user_id=user_id).first() if not item: return HttpResponse.error_response({"error": "No matching item found"}) title = item.title description = item.description category_id = item.category_id rank = None if "title" in request.json: title = request.json["title"] if "description" in request.json: description = request.json["description"] if "category_id" in request.json and request.json[ "category_id"] != category_id: category = Category.query.filter_by( id=request.json["category_id"]).first() if not category: return HttpResponse.error_response( {"error": "category doesn't exist"}) category_id = request.json["category_id"] rank = Item.query.filter_by(user_id=user_id, category_id=category_id).count() + 1 item.title = title item.description = description item.category_id = category_id if rank is not None: item.rank = rank log_data = AuditLog(user_id, auditTypes.ITEM_UPDATED) db.session.add(log_data) db.session.commit() response = item_schema.jsonify(item) return HttpResponse.success_response(response)
def create(): required = { "title": { 'type': 'string', 'required': True }, "description": { 'type': 'string', 'required': False }, "category_id": { 'type': 'integer', 'required': True }, "meta": { 'required': False } } validate = Utilities.validate(required, request.json) if validate is not None: return HttpResponse.error_response(validate) title = request.json['title'] category_id = int(request.json['category_id']) description = None encrypted_user_id = None meta = None if "meta" in request.json: metadata = request.json["meta"] allowed_types = ["string", "integer", "date", "enum"] meta = Utilities.validate_meta(metadata, allowed_types) if "error" in meta: return HttpResponse.error_response(meta) if "description" in request.json: description = str(request.json["description"]) category = Category.query.filter_by(id=category_id).first() if not category: return HttpResponse.error_response({"error": "category doesn't exist"}) if g.user_id is not None: user_id = g.user_id else: user = userLogic.set_userId() user_id = user["user_id"] encrypted_user_id = user["encrypted_user_id"] rank = Item.query.filter_by(user_id=user_id, category_id=category_id).count() + 1 new_item = Item(user_id, title, description, rank, category_id, meta) log_data = AuditLog(user_id, auditTypes.ITEM_CREATED) db.session.add(new_item) db.session.add(log_data) db.session.commit() response = item_schema.jsonify(new_item) if encrypted_user_id: response.set_cookie("user_id", encrypted_user_id) return HttpResponse.success_response(response)