feat: add course lookup and moderated ratings#62
Conversation
|
The direction is useful: this removes the release-embedded GitHub write token and gives ratings/comments explicit ownership, moderation, reporting, and deletion contracts. I found two reliability issues worth fixing before this lands:
Useful launch review angles after those fixes: verify the deployed reverse-proxy trust topology so installation issuance is keyed by the real client rather than one shared Docker peer, and explicitly document the deletion/recovery path when secure storage is reset and an installation loses ownership of a published comment. The validation jobs and the Linux/Web builds are green at review time; the remaining platform artifact builds were still running. Concrete next step: fix the two cases above, add the focused regression tests, then rerun the suite and finish the proxy/identity launch decisions already called out in the PR description. These are change-request-level reliability issues; the overall architecture looks reasonable. |
Summary
Course lookup and identity
Flutter calls
POST /v1/courses/searchon the ratings service. The service forwards only the search text to the public StudyPlanner catalog, validates and bounds the response, caches up to 64 searches for five minutes, and returns a server-issued rating ID based on the normalized course number. Only registered catalog results can receive ratings; the database enforces one rating per installation/course.Ratings intentionally aggregate the same course number across semesters. They are pseudonymous community ratings, not verified enrollment reviews.
Security and privacy
Validation
ruff format --check feedback_serviceruff check feedback_servicepytest -q feedback_service/tests(18 passed)dart format lib testdart analyze(no issues)git diff --checkThe ARM runtime cannot execute Flutter's x64 widget-test engine, so GitHub Actions provides the full Flutter/widget verification. Docker is not installed in the runtime, so the Compose launch was not executed locally.
Deployment follow-up
Before public launch, choose the HTTPS host, exact CORS origins, moderation owner/response expectations, privacy notice, retention periods, backup destination/expiry, and secret rotation process. Schema v1 belonged to the abandoned agent/service-rating prototype and is deliberately refused rather than relabeled as course feedback; prerelease volumes must be backed up and recreated.
Closes #61