local-instance: simulate a teacher, and run the files-storage consumer
`scripts/simulate-teacher.mjs` creates, edits and deletes what teachers create — course, room, topic, task, board, columns, cards, rich text, link, Etherpad pad, folder, files — so the MCP server can be exercised against content the real account has never held. It is the only thing here that writes to a Schulcloud and refuses any non-localhost address. `scripts/mcp-env.sh` points the server and CLI at the instance. Two gaps it exposed in the stack itself: The files-storage AMQP consumer is a separate entrypoint, and we were running only the HTTP one. Nothing was bound to the `files-storage` exchange, so `TaskService.delete` — which awaits deleteFilesOfParent over AMQP before touching the task — hung until the request timeout. Deleting any task or topic answered 408 with the entity still there. The demo data is dated 2017-2018 and the v3 endpoints filter on those dates, so a student saw no tasks at all. seed.sh now brings courses and homework into the present, which is the difference between a fixture that exercises the student-facing surface and one that looks empty. Teams turn out to be uncreatable through the API (the legacy service registers no `create`, v3 has no route), and a new board is unpublished and 403s for students, so the simulation adopts a seeded team and leaves one board a draft on purpose. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -134,6 +134,26 @@ services:
|
||||
ports: ["127.0.0.1:4444:4444"]
|
||||
restart: unless-stopped
|
||||
|
||||
file-storage-consumer:
|
||||
# The AMQP half of files-storage, and a separate entrypoint from the HTTP
|
||||
# one: only `files-storage-consumer.app` registers FilesStorageConsumer, so
|
||||
# running the HTTP app alone leaves the `files-storage` exchange with no
|
||||
# queue bound to it.
|
||||
#
|
||||
# The symptom is not a file problem. TaskService.delete awaits
|
||||
# deleteFilesOfParent over AMQP before touching the task, so with nothing
|
||||
# consuming, deleting a task or a topic hangs until the request timeout and
|
||||
# answers 408 REQUEST_TIMEOUT with the entity still there. Copying a course
|
||||
# goes the same way.
|
||||
image: quay.io/schulcloudverbund/file-storage:${SC_VERSION:-33.40}
|
||||
command: ["dist/apps/files-storage-consumer.app.js"]
|
||||
env_file: [env/shared.env, env/jwt.env, env/file-storage.env]
|
||||
depends_on:
|
||||
mongo: {condition: service_healthy}
|
||||
rabbitmq: {condition: service_healthy}
|
||||
minio: {condition: service_healthy}
|
||||
restart: unless-stopped
|
||||
|
||||
file-preview:
|
||||
# Generates thumbnails via ImageMagick, driven off RabbitMQ. Optional: with
|
||||
# it absent, files still upload and download, they just have no preview.
|
||||
|
||||
Reference in New Issue
Block a user