The main customer need is to have an application that creates an efficient classroom schedule which for each course section, assigns a time, a room, and an instructor, while satisfying a range of constraints. These constraints include room capacity, instructor availability, teaching style requirements, and course conflicts. The system also needs to consider instructor preferences, such as desired teaching times and course preferences, in order to maximize their satisfaction. The application provides a solution by providing an easy to understand interface which allows the user to upload data, preferences and constraints as csv files. It then automatically generates a schedule that meets both hard constraints and soft preferences, while minimizing wasted classroom space and balancing instructor workloads. The application will have additional features such as the ability to manually override schedules and see detailed schedule views, as well as export the generated schedules for easy sharing.
The key stakeholder for this application is the Associate Department Head, who is responsible for creating the teaching schedule before every semester. The secondary stakeholders are the Instructors and Students, who benefit indirectly from having flexible course schedules. The application integrates all scheduling requirements into one platform, allowing for streamlined data input, constraint satisfaction, and schedule optimization, while being scalable for future adjustments.
- App : https://faculty-teaching-assignment-31f5f9c405bc.herokuapp.com
- Code Climate Report: https://codeclimate.com/github/tamu-edu-students/Faculty-Teaching-Assignment
- Team Working agreement : https://github.com/tamu-edu-students/Faculty-Teaching-Assignment/blob/documentation/documentation/Fall2024/Team%20Working%20Agreement.md
- Sprint Documentation:
- Sprint 1:
- Goal: Setup and understand the project, get client data and enable user login and authentication
- Sprint Plan
- Retrospective
- Sprint 2:
- Goal: Have a raw views for all the data upload.
- Sprint Plan
- Retrospective
- Sprint 3:
- Goal: Implement algorithm on actual data provided by the client
- Sprint Plan
- Sprint 1:
- Heroku Account: Sign up for a Heroku account.
- Heroku CLI: Download and install the Heroku CLI.
- GitHub Repository: Ensure your Rails application is committed and pushed to a GitHub repository.
- Rails and Ruby: Check that you have Ruby and Rails installed locally to set up the app.
- OAuth Configuration: Ensure you have Google OAuth API keys
If you're setting up the project locally, clone the repository:
git clone https://github.com/tamu-edu-students/Faculty-Teaching-Assignment.git
cd Faculty-Teaching-Assignment
Run bundle install
to install all required dependencies.
bundle install
Setup your Google OAuth Rails Credentials using Google Developer Console. For a more detailed explantion, see Setup Google OAuth on Google's End and Add OAuth ID and Secret to Rails Credentials.
If steps are followed correctly you would have your RAILS_MASTER_KEY
in config/master.key
. NEVER EVER COMMIT THIS TO GIT.
Run database migrations and set up the database:
rails db:create
rails db:migrate
rails db:seed # If there are any seed files
rails server # To run locally
-
Add a
Procfile
: Create a file namedProcfile
in the root directory with the following line:web: bundle exec puma -C config/puma.rb
-
Add the Heroku Postgres Add-on: Heroku uses PostgreSQL as the default database for Rails apps. Check your
Gemfile
for thepg
gem. -
Environment Variables: Use
dotenv
for local testing and set variables on Heroku using the CLI.
-
Login to Heroku:
heroku login
-
Create a New Heroku App:
heroku create <YOUR_APP_NAME> # Optionally specify an app name
-
Add Heroku as a Git Remote:
git remote add heroku https://git.heroku.com/<YOUR_APP_NAME>.git
-
Push to Heroku:
git push heroku main
-
Run Database Migrations on Heroku:
heroku run rails db:migrate
Add the Heroku domain as an authorized redirect URI to your Google OAuth. Example:
https://<YOUR_APP_NAME>.herokuapp.com/auth/<PROVIDER>/callback
Set environment variables on Heroku for any API keys, secrets, or configuration variables, you will have to setup your Google Authentication key :
If you have used RAILS_MASTER_KEY
to encrypt
heroku config:set RAILS_MASTER_KEY=<YOUR_MASTER_KEY>
If the above steps do not work, see Deploy to Heroku for OmniAuth documentation.