Modifying Allowed Usage for a User
Badgeyay has been progressing in a very good pace. There are a lot of features being developed and modified in this project. One such feature that has been added is the increasing allowed usage of a user by an admin. What is Allowed Usage? Allowed usage is an integer associated with a particular user that determines the number of badges that a person can generate using a single email id. This will allow us to keep track of the number of badges being produced by a particular ID and all. Modifying the Allowed Usage This feature is basically an Admin feature, that will allow an admin to increase or decrease the allowed usage of a particular user. This will ensure that if incase a particular user has his/her usage finished, then by contacting the admin, he/she can get the usage refilled. Adding the functionality The functionality required us to to add two things A schema for modifying allowed user A route in backend to carry out the functionality So, Let us start by creating the schema class UserAllowedUsage(Schema): class Meta: type_ = 'user_allowed_usage' kwargs = {'id': '<id>'} id = fields.Str(required=True, dump_only=True) allowed_usage = fields.Str(required=True, dump_only=True) Once we have our schema created, then we can create a route to modify the allowed usage for a particular user. This route will be made accessible to the admin of Badgeyay. @router.route('/add_usage', methods=['POST']) def admin_add_usage(): try: data = request.get_json()['data'] print(data) except Exception: return ErrorResponse(JsonNotFound().message, 422, {'Content-Type': 'application/json'}).respond() uid = data['uid'] allowed_usage = data['allowed_usage'] user = User.getUser(user_id=uid) user.allowed_usage = user.allowed_usage + allowed_usage db.session.commit() return jsonify(UserAllowedUsage().dump(user).data) The add_usage route is given above. We can use this route to increase the usage of a particular user. Given below is an image that shows the API working. Resources The Pull Request for this issue : https://github.com/fossasia/badgeyay/pull/982 The Issue related to this blog : https://github.com/fossasia/badgeyay/issues/981 Read about adding routes Blueprint : http://flask.pocoo.org/docs/1.0/blueprints/ Read about Schemas : https://github.com/marshmallow-code/marshmallow-jsonapi
