From 934c6f25d8a9cb805707dffe1e4e2b3dae58c1a2 Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Wed, 24 Jun 2026 10:19:13 +0200 Subject: [PATCH] WebUI module split; docs --- README.md | 40 +++++++++++++++++++++++++++++++++------- webui/src/module.ts | 9 ++++++++- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 138987f..ab55cbe 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,51 @@ # govoplan-files -GovOPlaN Files module. +GovOPlaN Files is the managed file module. It bundles backend storage APIs and the Files WebUI package so file features can be installed as one module. -This repository owns the Files module backend manifest, API router, schemas, storage service layer, SQLAlchemy model definitions, migration registration path, and Files WebUI source bundle. Runtime access to auth/session/settings and cross-module models is provided by govoplan-core and the installed module packages. +## Ownership -The WebUI bundle is exposed as the local npm package `@govoplan/files-webui` from `webui/`. It depends on `@govoplan/core-webui` for shared API/CSRF/auth helpers, core types, generic UI components and shell primitives. +This repository owns: + +- backend module manifest `files` +- file permissions such as `files:file:read`, `files:file:upload`, `files:file:download`, `files:file:organize`, and `files:file:delete` +- file-space, file metadata, share, upload, download, pattern matching, and transfer APIs +- SQLAlchemy file models and module migration registration +- WebUI package `@govoplan/files-webui` +- `/files` route and IconRail navigation contribution + +Core owns auth, tenants, RBAC evaluation, database/session primitives, CSRF/API helpers, and shell layout. ## Development -Install the backend module through the core development environment: +Install through the core environment: ```bash cd /mnt/DATA/git/govoplan-core ./.venv/bin/python -m pip install -r requirements-dev.txt ``` -Install the WebUI host dependencies from the core WebUI runner: +Run the WebUI from the core host: ```bash cd /mnt/DATA/git/govoplan-core/webui -PATH=/home/zemion/.nvm/versions/node/v22.22.3/bin:$PATH /home/zemion/.nvm/versions/node/v22.22.3/bin/npm install +PATH=/home/zemion/.nvm/versions/node/v22.22.3/bin:$PATH /home/zemion/.nvm/versions/node/v22.22.3/bin/npm run dev ``` -The backend module is registered through the `govoplan.modules` entry point `files`. +## Module integration + +Backend entry point: + +```toml +[project.entry-points."govoplan.modules"] +files = "govoplan_files.backend.manifest:get_manifest" +``` + +Frontend package: + +```text +@govoplan/files-webui +``` + +The campaign module can integrate with files when both modules are installed, for example for managed attachment selection and campaign file sharing. + +Platform RBAC and governance rules are documented in `govoplan-core/docs/`. diff --git a/webui/src/module.ts b/webui/src/module.ts index bd2b025..38a94d9 100644 --- a/webui/src/module.ts +++ b/webui/src/module.ts @@ -1,12 +1,19 @@ import { Folder } from "lucide-react"; +import { createElement, lazy } from "react"; import type { PlatformWebModule } from "@govoplan/core-webui"; +const FilesPage = lazy(() => import("./features/files/FilesPage")); + +const fileRead = ["files:file:read"]; export const filesModule: PlatformWebModule = { id: "files", label: "Files", version: "1.0.0", dependencies: ["access"], - navItems: [{ to: "/files", label: "Files", icon: Folder, anyOf: ["files:file:read"], order: 40 }] + navItems: [{ to: "/files", label: "Files", icon: Folder, anyOf: fileRead, order: 40 }], + routes: [ + { path: "/files", anyOf: fileRead, order: 40, render: ({ settings, auth }) => createElement(FilesPage, { settings, auth }) } + ] }; export default filesModule;