feat(sprint7): Phase 2 — Info Board (Schwarzes Brett)

Backend:
- V13 Flyway migration: info_board_posts, post_attachments, post_read_status tables
- InfoBoardPost entity with category enum (EVENT, RULE, GENERAL, MAINTENANCE)
- PostAttachment entity (table created, upload deferred to later)
- PostReadStatus entity with composite key (post_id, member_id)
- InfoBoardPostRepository with paginated queries + unread count
- InfoBoardService: CRUD, pin/archive, mark-as-read, notification dispatch
- InfoBoardController: admin CRUD + portal read/unread endpoints
- Integration with NotificationService and AuditService

Frontend:
- info-board.ts service with React Query hooks for all endpoints
- Admin Info Board page at /info-board with create dialog, filters, pin/archive/delete
- Navigation: added 'Schwarzes Brett' to admin sidebar
- i18n: added infoBoard.* keys to de.json and en.json
- Fixed pre-existing prettier issues in notification-compose.ts
- Fixed BufferSource type issue in push-subscription.ts
This commit is contained in:
Patrick Plate
2026-06-13 19:41:20 +02:00
parent 706a6e257b
commit 4aa27cd4f9
53 changed files with 2724 additions and 28 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 63 KiB

+26 -25
View File
@@ -1,77 +1,78 @@
# CannaManage — Visual Tour (Sprint 4)
**Generated:** 2026-06-12
**Generated:** 2026-06-13
---
## Admin Login
| Dark Mode | Light Mode |
| -------------------------------------------------- | ---------------------------------------------------- |
| Dark Mode | Light Mode |
|-----------|------------|
| ![Admin Login Dark](screenshots/01-login-dark.png) | ![Admin Login Light](screenshots/01-login-light.png) |
## Member Portal Login
| Dark Mode | Light Mode |
| ----------------------------------------------------------------- | ------------------------------------------------------------------- |
| Dark Mode | Light Mode |
|-----------|------------|
| ![Member Portal Login Dark](screenshots/02-portal-login-dark.png) | ![Member Portal Login Light](screenshots/02-portal-login-light.png) |
## Club Dashboard (auth required)
| Dark Mode | Light Mode |
| ------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| Dark Mode | Light Mode |
|-----------|------------|
| ![Club Dashboard (auth required) Dark](screenshots/03-dashboard-dark.png) | ![Club Dashboard (auth required) Light](screenshots/03-dashboard-dark.png) |
## Member Management (auth required)
| Dark Mode | Light Mode |
| -------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| Dark Mode | Light Mode |
|-----------|------------|
| ![Member Management (auth required) Dark](screenshots/04-members-dark.png) | ![Member Management (auth required) Light](screenshots/04-members-dark.png) |
## Distribution History (auth required)
| Dark Mode | Light Mode |
| ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| Dark Mode | Light Mode |
|-----------|------------|
| ![Distribution History (auth required) Dark](screenshots/05-distributions-dark.png) | ![Distribution History (auth required) Light](screenshots/05-distributions-dark.png) |
## New Distribution (Multi-Step) (auth required)
| Dark Mode | Light Mode |
| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| Dark Mode | Light Mode |
|-----------|------------|
| ![New Distribution (Multi-Step) (auth required) Dark](screenshots/06-distribution-new-dark.png) | ![New Distribution (Multi-Step) (auth required) Light](screenshots/06-distribution-new-dark.png) |
## Stock & Batch Management (auth required)
| Dark Mode | Light Mode |
| ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| Dark Mode | Light Mode |
|-----------|------------|
| ![Stock & Batch Management (auth required) Dark](screenshots/07-stock-dark.png) | ![Stock & Batch Management (auth required) Light](screenshots/07-stock-dark.png) |
## Add New Batch (auth required)
| Dark Mode | Light Mode |
| ------------------------------------------------------------------------ | ------------------------------------------------------------------------- |
| Dark Mode | Light Mode |
|-----------|------------|
| ![Add New Batch (auth required) Dark](screenshots/08-stock-new-dark.png) | ![Add New Batch (auth required) Light](screenshots/08-stock-new-dark.png) |
## Compliance Reports (auth required)
| Dark Mode | Light Mode |
| --------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| Dark Mode | Light Mode |
|-----------|------------|
| ![Compliance Reports (auth required) Dark](screenshots/09-reports-dark.png) | ![Compliance Reports (auth required) Light](screenshots/09-reports-dark.png) |
## Member Quota Overview
| Dark Mode | Light Mode |
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| Dark Mode | Light Mode |
|-----------|------------|
| ![Member Quota Overview Dark](screenshots/10-portal-dashboard-dark.png) | ![Member Quota Overview Light](screenshots/10-portal-dashboard-light.png) |
## My Distribution History
| Dark Mode | Light Mode |
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| Dark Mode | Light Mode |
|-----------|------------|
| ![My Distribution History Dark](screenshots/11-portal-history-dark.png) | ![My Distribution History Light](screenshots/11-portal-history-light.png) |
## Profile & Settings
| Dark Mode | Light Mode |
| ------------------------------------------------------------------ | -------------------------------------------------------------------- |
| Dark Mode | Light Mode |
|-----------|------------|
| ![Profile & Settings Dark](screenshots/12-portal-profile-dark.png) | ![Profile & Settings Light](screenshots/12-portal-profile-light.png) |