When we build a full scale production application, we make sure that everything is modeled correctly and accordingly to the need of the code. The code must be properly maintained as well as designed in such a way that it is less prone to errors and bugs.
Badgeyay is also targeting to be a full production application, and in order to achieve it we first need to re-factor the code and model it using a strong yet maintainable structure.
What is the current state of Badgeyay?
Currently Badgeyay is divided into two sub folders.
\badgeyay \frontend \backend . .
It is backed by two folders, viz backend and frontend. The ‘backend’ folder handles the API that the service is currently running. The ‘frontend’ folder houses the Ember based frontend logic of the application.
Improvements to Badgeyay Backend
We have worked on improving Backend for Badgeyay. Instead of traditional methods, i.e. current method, of API development; We employ a far better approach of using Flask Blueprint as a method of refactoring the API.
The new backend API resides inside the following structure.
\badgeyay \backend \blueprint \api
The API folder currently holds the new API being formatted from scratch using
- Flask Blueprint
- Flask Utilities like jsonify, response etc
The new structure of Badgeyay Backend will follow the following structure
api \config \controllers \helpers \models \utils db.py run.py
The folders and their use cases are given below
- Contain all the configuration files
- Configurations about URLs, PostgreSQL etc
- This will contain the controllers for our API
- Controllers will be the house to our routes for APIs
- Helpers folder will contain the files directly related to API
- Models folder contains the Schemas for PostgreSQL
- Classes like User etc will be stored in here
- Utils will contain the helper functions or classes
- This classes or functions are not directly connected to the APIs
- Main python file for Flask SQLAlchemy
- This is the main entry point.
- Running this file will run the entire Flask Blueprint API
How does it help?
- It helps in making the backend more solid.
- It helps in easy understanding of application with maintained workflow.
- Since we will be adding a variety of features during Google Summer of Code 2018 therefore we need to have a well structured API with well defined paths for every file being used inside it.
- It will help in easy maintaining for any maintainer on this project.
- Development of the API will be faster in this way, since everything is divided into sub parts therefore many people can work on many different possibilities on the same time.
Since this structure has been setup correctly in Badgeyay now, so we can work on adding separate routes and different functionalities can be added simultaneously.
It ensures faster development of the project.
- Badgeyay Repository : https://github.com/fossasia/badgeyay
- Pull Request for the same : https://github.com/fossasia/badgeyay/pull/675
- Issue for the same : https://github.com/fossasia/badgeyay/issues/627
- Read about Flask Blueprint : http://flask.pocoo.org/docs/0.12/blueprints/
- Introduction to Flask SQLAlchemy : http://flask-sqlalchemy.pocoo.org/
- A really good post for MVC beginners : https://realpython.com/the-model-view-controller-mvc-paradigm-summarized-with-legos/