Introduction

For this project, we have been tasked with creating a student hub, campus connect, with students can collaborate with each other. They will also be able to share materials, join groups/communities, join meetings/events and post questions, ideas or tips.

Video Link:

https://youtu.be/h4UIJfnwO3k

Github link:

https://github.com/VC-ST10405508/Team404_CampusConnect_Hackathon.git

Live website link:

https://team404-campusconnect-hackathon.onrender.com

Our goal for this hackathon:

Our goal is to see how quickly we can create a large project with difficult architectures such as MVC with entity framework, dependency injection and hosting. We would also like to use this for our CV :D What our website does: Our website is a platform that allows students across the world to share their study materials, post ideas/tips/questions/other, create groups which allow students to chat through the group chat. See group announcements which are ONLY set by group owner. See group related events which are ONLY set by group owner but any group member can join. You have to be a group member to join. Authorization and authentication measures have been set in place to restrict non-users from accessing or force pushing to functions.

How it works:

Our website uses MVC to control (controller) how the data (view) is used and displayed (view). Repositories and interfaces with dependency injection are used to allow the controllers in MVC to cleanly interact with our entity framework system. The entity framework system uses the AppDbContext class to create tables for our serverless sqlite database. Through the SQL crud operations predefined and unique SQL crud operations that entity framework has to offer we were able to create a project that works with storing data and preventing the project from crashing. The project works through HttpGet and HttpPosts. We have to specifically state when we are doing an HttpPost. MVC assumes by default that you are referring to HttpGet if you don’t.

Challenges Faced:

Time constraint: We struggled a lot with time due to us having a university project, Prog7312_Part 1, due on the same day as this Hackathon. So we agreed to be done with the prog7312 project first since its technically more important. We ended up not implementing everything that we wanted due to this. Advanced Architecture structure: MVC + repositories + interfaces with dependencies injection + entity framework. This proved to be difficult to work around. Our biggest problem was trying to understand how to create relationships between the tables. We only successfully did this for groups. Where the groups would have group members, group events, group announcements, group chat – all of these had relationships with each other. Group members had a relationship directly with the specific group and users. Which allowed us to set group member roles and add an authorization level to announcement and event creation. With the limited time this faced a massive challenge as we had to make sure everything was working correctly.

Hosting: Our other biggest concern was hosting the website. We basically threw azure out the window since its expensive. Our next best option was render but this proved to be difficult as render doesn’t actually understand how ASP.Net works. So in order for it to work we ended up having to use docker to explain how our project works to render.

Technologies used:

Docker: as out last challenge faced mentions, we used docker to explain how our program works to render. Render: We used render as our hosting provider to host our website with a serverless database. Entity Framework: We used entity framework to explain how our models should interact with our database. However, we didn’t have a database so we used entity framework even further by importing entity framework sqlite database. Which basically created a database when you run the program based on your AppDbContext class. ASP.NET MVC C#: We used ASP.NET MVC to explain how our website should perceive the calls. For local testing this was perfect. As mentioned above when we used render, we had to use docker to explain how ASP.NET MVC works and communicates with the entity framework.

Members + Roles:

Kabelo Ntokozo Will Mndebele: Main UI developer, assisting backend developer and in charge of hosting the application Joshua Ponquett – Main backend developer, documentation specialist and GitHub setup.

Functional Requirements:

Login/sign-up: A user must be able to create an account and log into their account after its been created. Profile creation: Users should be able to customize their profile by adding information related to their degree, skills, sports, profile photo and an other section for any left out sections. Posting questions/ideas/tips: A forum where students can post questions/ideas/tips and get comments on their post. Joining groups or communities: Groups/communities can be created by students but will need to be approved by an admin before members can join the group/community. These groups/communities will have an announcement section where the group/community can make announcements. They will also have their own unique message page where students can chat or ask questions. Sharing study Material: A section where students/lectuers or admins can share study materials. This can be implemented through groups/communities or through a share study material page. A verification system to make sure these materials are safe would be nice. However some students don’t want to wait 3 to 5 days just for their document to be uploaded. For this reason a report button will be implemented instead. Report study Material: As mentioned above in the sharing study materials function, a button will be implemented which will allow students/lecturers to flag an inappropriate document. Admins will then check if these documents are safe or not and delete the post if they are deemed unsafe. Scheduling meetings: This will be done through events which students can join. If they join it they are essentially RSVPing for the event. They will no longer be able to join the event/meeting after a certain date. They will be able to remove their RSVP at any time as it is not easy to predict what the future will hold and sometimes something just pops up.

Non-functional Requirements:

Availability: Website must be hosted online and available 24/7 Compatibility: Website must load correctly on mobile and computer devices. Maintainability: The website will be written with MVC (model-view-controller), Entity Framework And Dependency Injection (repository + interface pattern) so that it can be easily updated and maintained. Scalability: Limited scalability since we are using built-in sqlite database for ease of hosting. This can easily be updated by changing the program.cs file. The addDbContext in program file would need to use a connection string to connect to an sql/nosql cloud server instead to make this project more scalable. Security: passwords are hashed before being stored in the database and unhashed after being stored. Authentication and authorization systems have been put into place to restrict visitors from posting and to restrict users from accessing admin pages. Rough ERD (Subject to change in actual project): Link for better view: https://drive.google.com/file/d/1WInvtsE2RU9FikPB8F0FtBKo3DV_mGH2/view

Considerations:

SQlite limitations: SQlite allows for many reads at the same time but doesn’t allow for many inserts at the same time. So essentially a queue system would need to be created for inserts. This would be a problem if the actual student hub went live. The database is fairly easy to change but it would still require a lot of consideration. Group/community announcements: Its currently restricted to where only the owner of the group can make announcements in the group/community. If this were to change you would need to add a joining table between the two to prevent a many to many relationships. Comments not implemented for posts: Current ERD does not consider comments from users on posts created by the user or other users

Built With

  • c#
  • entityframework
  • mvc
Share this project:

Updates