PROJECT PROPOSAL

Introduction

The main purpose of this report is to present a detailed description of the system, state functional and non-functional requirements, and limitations of the system of Codebank. Furthermore, the report discusses why/how a database is going to be used as a part of the system.

Project Description

CodeBank will be created to facilitate programming practice, contests and job interviews. CodeBank will allow users to improve their programming skills by practicing programming and system design questions. It will also have problem discussions and Editor-sponsored or Company-sponsored programming contests. Companies will be able to initiate challenges in an attempt to lure the skilled programmers. The application won’t limit itself to Programming Challenges only, System Design challenges and Non Coding Question forums will also take place.

Our project will focus on the ability of the programmers and companies to submit and receive solution entries. The motive is to provide and facilitate storage of questions and entries. The contests and challenges will be of two types: open or closed. Any individual will be able to participate in open contests and challenges. However, only invited participants will be able to take part in closed contests or challenges. In addition to this, the content organizers will be able to decide if the participants should be able to see the entries of other participants after the completion of a contest or challenge.

CodeBank will have an inbuilt text editor to ease the users’ ability to enter their solutions. We will also store the details regarding user inactivity during the programming challenge. The users will be able to enter a picture (.jpeg file) for the System Design challenges.

Discussion

Why do we need to use a database?

The Code Base system needs a database for multiple reasons. First of all, we need to store information about registered users, companies, and editors. Considering data may include personal information we should be careful about safety issues, using a database is more secure than storing that information in a spreadsheet. Furthermore, considering our functional requirements we should store and manage a large amount of data including coding contest questions, results, answer of users, discussion content, and so on accurately and efficiently, and without using a database this would not be possible. Besides, a well-designed database can provide consistency, atomicity, and isolation considering there will be concurrent processes on data on a daily basis such as searching, sorting, and modifying therefore ensuring integrity in the database holds a great deal of importance.

How do we use the database?

The database will be mainly used according to the users, companies, and editors' activities with the help of queries. Most of the processes will require concurrent access to the database and some of those require an update, delete, and creation of new entities. For instance, when a company creates a new coding contest a new entity is added to the coding contest table or if the user wants to change her username the specific user entity will be updated. On the other hand, we will use a database for establishing relations between our entities. For instance, every time a user solves one of the coding challenges a new relation entity will be created between the user and a specific coding challenge, and that relation includes the score and other data that the related company or the user itself can retrieve later.

Requirements

Functional Requirements

  • Create Coding Contest/ Coding Challenge/ Non Coding Question: Editors and Companies will be able to start Coding Contests, Challenges and Non Coding Questions. They can choose to make these Activities Invite Only, meaning they can choose which User can participate in them.
  • Terminate Coding Contest/ Coding Challenge/ Non Coding Question:Editors and Companies will be able to close any Activity using this functionality.
  • Participate:The User (invited ones if the Activity is Invite Only) will be able to participate in the Activities: Coding Contest, Coding Challenge and Non Coding Questions.
  • See Profile: The User and Company can visit and view the profiles of each User. Information like the user’s social media account, contest history, name, number of questions solved, their CV etc. will be displayed.
  • Ask Non Coding Question: A User can enter a problem for other users to practice their problem-solving skills, or seek an answer for a challenging question.
  • Invite Users: Any User will be able to invite their friends to join the website social media like Facebook, WhatsApp, Gmail, et cetera.
  • Invite Friends: Any User will be able to invite their friends to join the website social media like Facebook, WhatsApp, Gmail, et cetera.
  • Rate Company: Companies available on the website can be rated by the User. The User can also leave comments as feedback.
  • Search Problem Category: The User will be able to search for Coding Challenge or Non Coding Question Categories such as “Python Coding Questions” or “Data Structures”. The User can thus also see the number of posts in each category as well as the views each category has.
  • Add Category: Editors and Companies can create new Coding Challenge or Non Coding Question Categories.
  • Interview: A User can take part in an Interview conducted by a Company. The Interview can contain any of the three Activities: Coding Contest, Coding Challenge and Non Coding Questions. The Interview will also store the information on whether the User is hired or not by the Company after it has been conducted.
  • Hire User: A company can Hire a User using the website.
  • Approval of Answers to Non Coding Questions: The Answers to Non Coding Questions has the data of which Users have posted an Answer as well as the Editor’s mark. Any Editor can Approve of an Answer if they believe it is correct. If a Correct Answer to a question exists and is approved by an Editor, it will be given an Editor’s Mark and be closed(terminated).

Non-functional Requirements

  • Performance: The system will be mainly used for online coding contests therefore the system should minimize the waiting process for users to retrieve the question and send their answers. The response time of the system should be low as can be.
  • Scalability: Companies, users, and editors use the system concurrently and that means concurrent access to the database and some of those require an update, delete, and creation of new entities. The system should be scalable enough to meet the performance requirements under that workload.
  • Capacity: We should store a large amount of data considering our functional requirements including coding contest questions, results, answers of users, discussion contexts, and so on.
  • Reliability: Considering companies may use this system for interview purposes it is crucial that the system will be reliable considering critical failures can affect users' careers in an unwanted way.
  • Security: The system will store information about each registered user, company, and editor. Considering that data may include personal information we should be careful about safety issues, therefore security is an important non-functional requirement for our system.

Requirements

We will use SQL, Spring, JavaScript, React.js, CSS, and HTML to implement our project. Spring and SQL will be used to implement the backend of the project, and JavaScript, React.js, CSS, and HTML will be used for the frontend. We will use the MySQL database as the DBMS.

Limitations

  • Users can attend the same code challenge at most 3 times unless the company sets specific constraints for that challenge.
  • Users must wait at least one day to attend the same code contest that he or they attended before.
  • The user must complete the code challenge, code contest or question within the time duration set for it.
  • Users can not attend any activity after the due date has passed.
  • Even if any user deletes their account their scores on the specific code challenge are kept.