The service needs to be upgraded. It's running on a ruby stack that is no longer supported. The fronted app is served using rails webpacker, which is deprecated.
There were two choices, upgrade the app to use latest ruby and rails, or rewrite it. Unfortunately I don't feel comfortable enough with ruby to upgrade the service with confidence and fix all the breaks. I didn't want to do a rewrite but I feel it's necessary. ~I researched that it can still be hosted on Heroku using a docker container.~
Work tracking
I'm the most familiar with .NET as that's what I use at work. ASP.NET should be a good replacement for rails, with EntityFramework Core as the database ORM.
~But first I need to write tests against the existing service such that when doing the rewrite I can maintain a high degree of compatibility. This way I will also be able to highlight any hidden bugs.~
~See https://github.com/iqasport/referee_hub/tree/feature/dotnet-system-test~
Unfortunately due to time constraints the test suite has not been implemented.
UPDATE the rewrite has been started and got to a fairly stable point so the changes got merged into the main branch where further development continues.
The following items represent work done and remaining.
1️⃣ /2️⃣/3️⃣ - priority (1 - must have, 2 - important but after release, 3 - nice to have)
👤 - user facing feature
📦 - server feature
Identity
[x] User is able to create account, confirm email address
[x] User is able to sign in with password
[x] User is able to reset their password
[ ] User is able to change their email 2️⃣👤
Referee
[x] Referee can modify their bio
[x] Referee can set their NGB/team (bug - cannot unset)
[x] Referee can see their test attempts and results
[x] Referee can see available tests
[x] Referee can take a test
[x] Referee can pay for the HR certification
[x] Referee can copy their profile URL and share it with someone else
NGB Admin
[x] Admin can view the NGB details, player count, social media links and logo 1️⃣👤
[ ] Admin can edit the NGB details, player count, social media links and logo 2️⃣👤
[ ] Admin can invite another admin 2️⃣👤
[ ] Admin can import Team data 2️⃣👤
[x] Admin can edit Team data 2️⃣👤
[x] Admin can view their Teams 1️⃣👤
[x] Admin can view stats 1️⃣👤
[x] Admin can view their Referees 1️⃣👤
[x] Admin can export Referee/Team data 1️⃣👤
[x] Run monthly job to save NGB statistics 2️⃣📦
IQA Admin
[x] Admin can view NGBs and make modifications 2️⃣👤
[ ] Admin can create a new NGB 2️⃣👤
[ ] Admin can import NGB data 3️⃣👤
[x] Admin can view all Referees 2️⃣👤
[ ] Admin can create a Test 2️⃣👤
[ ] Admin can view and edit Test and questions 3️⃣👤
[ ] Admin can import/export test questions 2️⃣👤
[ ] Admin can view test statistics 3️⃣👤
[ ] Admin can grant/revoke Referee certification 2️⃣👤
[ ] Admin can grant access to HR payment for Referee 2️⃣👤
Hosting
[x] New service is hosted on AWS Beanstalk
[x] Service uses HTTPS to securely transport user data 1️⃣📦
[x] New domain is created with Cloudflare - hub.iqasport.org - which proxies traffic to the AWS server 1️⃣📦
[ ] Secure cookies are enforced 3️⃣📦
[x] Postgres database and Redis cache are set up on AWS and connected with the service 1️⃣📦
[x] CI/CD pipeline is configured to allow triggering service updates through GitHub 2️⃣📦
[x] Add Stripe public key to environment in CI build 1️⃣
[x] Previous domains redirect 302 to the new one 1️⃣📦
[x] OpenTelemetry integration
[ ] OpenTelemetry integration with AWS to track errors 3️⃣📦
[x] OpenTelemetry integration with Azure to track errors 1️⃣📦
Data migration
[x] Prepare script to perform export from postgres hosted on Heroku, import on AWS, apply initial EF migration manually 1️⃣ (#376)
[x] Ensure each NGB has a country code (short name) 1️⃣
Testing
[x] Blob storage for avatars 1️⃣👤
[x] Mailing using MailerSend 1️⃣📦
[x] Database 1️⃣📦
[x] Stripe using test secrets with test credit card 1️⃣👤
[x] Webhook Stripe integration requires testing after production deployment 1️⃣📦
Misc
[ ] Stripe webhook signature validation 2️⃣📦
[ ] Maintenance notifications 2️⃣👤
[x] Count down rather than count up when user is taking a test 2️⃣👤
Deadline ~April~ End of Summer 2023
Motivation
The service needs to be upgraded. It's running on a ruby stack that is no longer supported. The fronted app is served using rails webpacker, which is deprecated.
There were two choices, upgrade the app to use latest ruby and rails, or rewrite it. Unfortunately I don't feel comfortable enough with ruby to upgrade the service with confidence and fix all the breaks. I didn't want to do a rewrite but I feel it's necessary. ~I researched that it can still be hosted on Heroku using a docker container.~
Work tracking
I'm the most familiar with .NET as that's what I use at work. ASP.NET should be a good replacement for rails, with EntityFramework Core as the database ORM.
~But first I need to write tests against the existing service such that when doing the rewrite I can maintain a high degree of compatibility. This way I will also be able to highlight any hidden bugs.~ ~See https://github.com/iqasport/referee_hub/tree/feature/dotnet-system-test~ Unfortunately due to time constraints the test suite has not been implemented.
UPDATE the rewrite has been started and got to a fairly stable point so the changes got merged into the main branch where further development continues.
The following items represent work done and remaining. 1️⃣ /2️⃣/3️⃣ - priority (1 - must have, 2 - important but after release, 3 - nice to have) 👤 - user facing feature 📦 - server feature