Group 2 Practice App Deliverable
Pre-releaseExecutive Summary
1.1 Introduction/Project Description
As group 2 of CMPE 352 course, our task is to design a learning platform where people can freely give courses and become a learner. For this purpose, we have lecturers and learners as users of our application. Additionally, many other features such as organizing events, filtering, searching courses, and rating lessons exist. We ought to implement a web application for this platform.
Before actual implementation of our project, we have a task to design a practice app to test our frontend and backend skills. We designed this application to have similar features and requirements. Each team member has a task to create at least two, GET and POST endpoints based on our needs, and implement a UI. In our application, we can view lessons, create events where learners of a lesson can get together in real life, search and filter lessons based on categories and ratings, rate a lesson. Our last task is to deploy the application using Docker and AWS systems.
1.2 Project Status
Over the whole term, we have worked on designing our application as stated in Milestone 1. We first decided on requirements, what features are required for our application and we split them into sections. When questions related to deciding requirements arised, we attended customer meetings to clarify. After that, we created mockups and scenarios for basic actions users are capable to do in our app. For detailing the plan of implementation, we created class-user-sequence diagrams. To observe our work done so far, we created project plans and RAM.
One of the most important research topics for our implementation was becoming skilled in Git and Github since we have many pull requests, issues and merges. As a team we developed our skills on using Git. Next step was determining on technologies we will use in our app. We had meetings and researches about finding the most optimal tools for our app and we choose Vue.js and Node.js frameworks. Finally, after researching Docker and AWS to deploy our app, we started implementing practice app.
As stated in 1.1 we made a job share for implementing required features. Every team member created issues for implementing endpoints first since we started from backend. After a endpoint is completed, we created PR’s for corresponding issues. Next step of finalizing endpoints was coding unit tests for each. After tests and manual tests from Postman all passed, each team member implemented a UI for the endpoints they are responsible. During this process, reviewing of each others work was a integral part. We stated the errors and necessities of each other’s work during implementation. Finally, we documented API and Milestone.
1.3 Basic Functionality of the Project
Our project’s aim was establishing a web application that has functionalities that eclipses with the work we have done until our previous milestone report 1. Since we have aimed to develop an online learning platform according to the project description provided, our practice application is developed to have some of the basic functionalities of the online learning platform we have planned throughout the semester.
Our practice application as mentioned above is a web application and provides a graphical user interface for users. A signup page welcomes users and they can sign up to our database by filling the required fields. Each user has a unique email and a hashed password stored in our database. A signed up user can log in to our application via the login page.
Since our practice application is some sort of a learning platform, there are three main components included alongside the user: lessons, categories, and events. Each user can create a lesson by providing required fields and then search for lessons available throughout the application. Each lesson belongs to a specific category, which can also be added to our application’s database by the users. To add a category, providing a valid category name is enough. Our application connects to Wikipedia’s public API to fetch category description and displays each category alongside its name in the categories page. Users can also filter the categories according to their names. When its category is added in our application, a user can create a lesson. Since each lesson has a category and a lecturer, which is the user who created it, a user can filter lessons by category and lecturers. According to their preferences a user can enroll to a lesson and rate it in the rating page. Rating page also provides users’ the opportunity to filter lessons according to their ratings.
For each lesson, a user can create an event that will occur in a specific location and on a specific date, by providing those fields alongside the title and the lesson ID of the lesson that the event belongs to. Each user can create an event for an existing lesson and upon creation our system assigns them as the host of the event. During creation, the user needs to provide a valid location and our application converts it to a valid full address via an API call to the Google Maps Geocoding API. Each user can view a lesson’s events alongside its specific event details that are specified during the creation and attend to an event. After a user attends an event, they can see the events they are attending in the attended events page.
To sum up, our application is a basic online learning platform that contains lessons under the section of categories and enables users to create and enroll to a lesson alongside creating and attending to an event about the lesson.
1.4 Challenges
First and foremost, all of us faced a big hurdle in learning all of the new ideas required to implement the practice app. Learning and implementing new concepts, libraries, and programming languages in which we had no prior expertise in a relatively short period of time was really tough, time-consuming, and mentally exhausting. Fortunately, we were able to aid and educate each other at all times by effectively employing communication technologies with some productive meetings.
The decision of which framework to utilize was the second big hurdle we faced throughout this milestone. Surprisingly, there was no structure with which we were all accustomed, so we decided to go with Node.js for the backend part. However, Node.js in general, the REST Framework, Dockerizaton, and AWS deployment all required research and practice. Experienced ones gave other members of our group instruction and a demo so they could feel comfortable working with the framework. Fortunately, we had almost no trouble dealing with the git related problems with the help of the Git PS lecture given to us prior to our starting point. Nonetheless, Problems we had faced using external APIs were another issue.
Finally, yet importantly, we had some issues while implementing the frontend part which we designed to present our work and functions in a visually appealing manner with a lot of time spent fixing bugs and learning new concepts of vue.js, the progressive javascript framework. Aside from the technological problems, another challenge for us was the increase in the workload per group member as the number of group members decreased from 11 to 9 as the term proceeded given that we were initially allocated as a group of eleven.
In general, the issues originated from the fact that the subjects and tools were all new to us, and we had to step outside of our comfort zones to learn new things and struggle. We solved all of these issues quickly by working together and tackling the obstacles collectively. The ultimate outcome was very satisfying for all of us, but we had to work very hard to get there.