Commit Graph

46 Commits

Author SHA1 Message Date
Jakub Zych
996b4d1542 Management API: POST/DELETE /materials/{id}/files (attach.Store, 50 MB, 20 files), DELETE /materials/{id} removes files; download keeps the file name 2026-10-17 17:53:22 +02:00
Jakub Zych
584d15257c Sylabusy: PDF-y w public/sylabusy, typ application/pdf w serwerze statycznym 2026-10-17 12:06:24 +02:00
Jakub Zych
76f559b6d9 build: rebuild the student app (multi-line course descriptions) 2026-10-17 12:01:15 +02:00
Jakub Zych
ebd9117f8c feat: lecturer on class sessions and in the session course ref
The schedule showed a lecturer only where the session notes named one
(Globalizacja), so the student plan had nobody under the other courses.
The session JSON now carries the course lecturer in its course ref and an
optional per-session lecturer (new nullable column, admin field, seed key)
for courses shared between two people. The student app shows the
session's own lecturer or, failing that, the course's.
2026-10-17 11:20:11 +02:00
Jakub Zych
d2096e2128 feat(manage): GET and PUT /api/v1/bm/materials/{id}
The management API could only upsert a material on its title and course,
so a renamed note became a second material. PUT /materials/{id} applies the
same body to one material (422 when the new title and course belong to
another one), GET /materials/{id} shows a draft or published material with
its public files, and the upsert, update and validation share one path.
The README documents the management API.
2026-10-16 20:40:47 +02:00
Jakub Zych
2a8cdac282 public: slide counter in the public deck toolbar 2026-10-16 00:44:06 +02:00
Jakub Zych
b32668029c build: rebuild the student app (deadline card padding) 2026-10-15 23:23:16 +02:00
Jakub Zych
67e04b3101 build: rebuild the student app (deck themes, scheme switch) 2026-10-13 10:18:10 +02:00
Jakub Zych
b86cbbcd2d build: rebuild the student app (pwa) 2026-10-09 02:47:29 +02:00
Jakub Zych
a406a514d3 build: rebuild the student app (title-slide notes, pilot key order) 2026-10-09 02:31:53 +02:00
Jakub Zych
9aa620f975 build: rebuild the student app (phone remote review fixes) 2026-10-08 18:53:25 +02:00
Jakub Zych
5563e080cf fix: stop throttling the realtime subscribe proxy
Centrifugo calls the proxy from 127.0.0.1 for every client, so the
per-IP fallback put every subscribe into one bucket that any token
holder could exhaust. Throttle only the token route, per user.
2026-10-08 18:47:20 +02:00
Jakub Zych
2365bf6df9 build: rebuild the student app (phone remote layout) 2026-10-08 18:26:12 +02:00
Jakub Zych
e0a60e0f35 build: rebuild the student app (phone remote) 2026-10-08 18:14:15 +02:00
Jakub Zych
a740373b0e feat: wire the lighthouse realtime service
- Boot builds the realtime service and installs the user lookup
- the Centrifugo driver ships with the app; config keeps the null driver
- token and subscribe-proxy routes mount only with golem15.presentations,
  the token route behind presentations.realtime-owner
- jz.bm.realtime per-user throttle bucket and websockets:health
2026-10-08 17:53:54 +02:00
Jakub Zych
4b36eb940d build: rebuild the student app (speaker clock fix) 2026-10-08 14:01:00 +02:00
Jakub Zych
977b380f70 fix: stop prev-slide focus outline from slicing the deck 2026-10-06 23:45:21 +02:00
Jakub Zych
904c7b07d5 fix: pin dark lecture tokens in the deck viewer 2026-10-06 23:37:15 +02:00
Jakub Zych
8aefdab027 fix: follow system dark scheme in the deck viewer 2026-10-06 23:29:46 +02:00
Jakub Zych
30c424c814 build: rebuild presentation viewer 2026-10-06 22:42:04 +02:00
Jakub Zych
3f4829a6f2 feat(02-03): bundle the speaker clock and images
- Private toolbar and clock stay in the speaker chunk
- Speaker image fetches are not part of the public view
2026-10-06 19:36:03 +02:00
Jakub Zych
febf74c6c9 feat(02-03): bundle the owner list and speaker route
- The shell includes Moje prezentacje and the bare speaker tab
- Speaker copy stays in its own chunk, off the public deck
2026-10-06 19:20:10 +02:00
Jakub Zych
2eb9dfccd2 feat(02-02): bundle the public toolbar and reading layout
- rebuild the visitor assets with local fonts
- drop the previous hashed bundles replaced by this build
2026-10-06 18:46:46 +02:00
Jakub Zych
913fddb36b feat(02-02): bundle the public deck without external fonts
- Rebuild the embedded student app with self-hosted font files
- Drop the previous hashed assets replaced by this build
2026-10-06 18:35:49 +02:00
Jakub Zych
30df20c48d feat(02-01): gate the public presentation path
- 404 /_presentations before the SPA shell
- serve /prezentacje/{slugHash} only when presentations is active
- rebuild the embedded student app
2026-10-06 18:14:24 +02:00
Jakub Zych
9986df32a4 test(02-01): add failing test for the presentations prefix
- /_presentations must be a plain 404, not the SPA shell
- A router without the presentations plugin has no public document route
2026-10-06 18:05:09 +02:00
Jakub Zych
840935d22d refactor: drop the quiz import and the golem15.quizzes dependency
golem15.quizzes now serves its own import at /api/v1/quizzes/import behind
the same shared API token.
2026-10-04 23:15:01 +02:00
Jakub Zych
97000dcd1e feat: add the management API behind the shared golem15.user API token
Serve /api/v1/bm (seed, quiz import, materials, courses, me) behind
user.api_token, user.scope and user.permission. jz.bm now requires
golem15.quizzes for the quiz import.
2026-10-04 23:11:21 +02:00
Jakub Zych
71b848a376 Adopt SummerCMS v0.1.1 admin features
Datepickers on native time.Time / lagoon.Date fields, file uploads on
materials, readings and class sessions managed from the course form
(course_id made nullable).
2026-10-03 06:03:34 +02:00
Jakub Zych
ac2e2ddd7b build: add the calendar feed section to the profile 2026-10-02 17:42:16 +02:00
Jakub Zych
57e4ff7cea docs: document the calendar feed routes and jz.bm.public_url 2026-10-02 17:38:48 +02:00
Jakub Zych
b39f627fe3 test: cover the ICS writer and the calendar feed routes 2026-10-02 17:38:48 +02:00
Jakub Zych
90247a460d feat: serve a subscribable ICS calendar feed 2026-10-02 17:38:48 +02:00
Jakub Zych
bccb747171 feat: add the calendar feed model and migration 2026-10-02 17:38:48 +02:00
Jakub Zych
28f68d002f feat: add --prune and a rolled-back --dry-run to bm:seed 2026-10-02 17:28:07 +02:00
Jakub Zych
e8411adac3 build: redirect the old /quiz address to the review quiz 2026-10-02 15:30:00 +02:00
Jakub Zych
7110b1ab12 build: reveal quiz answers locally 2026-10-02 14:45:16 +02:00
Jakub Zych
860120d9cf build: add the student app build output 2026-10-02 14:43:02 +02:00
Jakub Zych
21107e9804 feat: serve the student app from the plugin 2026-10-02 14:43:02 +02:00
Jakub Zych
5106239c97 docs: add the plugin README
Overview, features, the API reference with every route and response
shape, admin screens, configuration, the bm:seed file format,
dependencies and testing.
2026-10-02 14:27:01 +02:00
Jakub Zych
7889621b69 test: add Postgres integration tests
Testcontainers Postgres, a fresh database per test, skipped under
-short: migrations up and down, schema constraints, bm:seed idempotency
and rollback, every API route through the real jwt.auth guard, and admin
saves through the admin API.
2026-10-02 14:27:01 +02:00
Jakub Zych
ce901d5f26 feat: add the bm:seed command
Validates a whole JSON file (course keys, meeting numbers, values, dates)
and upserts meetings, courses, class sessions, deadlines and readings in
one transaction, matched on their natural identity. Prints a created,
updated and unchanged summary; --dry-run only validates. Ships a small
example fixture with made-up data.
2026-10-02 14:26:43 +02:00
Jakub Zych
98cabfd51d feat: add the student API under /_bm/api/v1
Dashboard, courses with counters, schedule, meetings, deadlines,
readings with per-user progress (mark and unmark) and paginated
published materials with tags and files, behind golem15.user's
jwt.auth. Responses are built field by field with Warsaw RFC 3339
timestamps; bad query parameters answer 422 in Laravel's shape.
2026-10-02 14:26:34 +02:00
Jakub Zych
577fa14d3d feat: add admin screens, permissions and navigation
Seven admin controllers in a "Studia BM" navigation group, guarded by
jz.bm.access_courses, jz.bm.access_schedule and jz.bm.access_materials,
with Polish and English labels. Date and time fields are checked by the
models before a save and answered as 422 on the field.
2026-10-02 14:26:26 +02:00
Jakub Zych
1046237771 feat: add the study data models and schema migrations
Courses, meetings, class sessions, deadlines, readings with per-user
progress, materials with tags and file attachments. Timestamps are
stored in UTC and held as Europe/Warsaw text so the admin text inputs
can write them.
2026-10-02 14:26:08 +02:00
Jakub Zych
cfdc6862bc chore: scaffold the plugin with summer make:plugin 2026-10-02 13:57:17 +02:00