PR #260 · pramaan-io/pramaan-functions · merged 2026-06-05
sequenceDiagram autonumber participant client as Client participant router as Router participant service as Service participant db as DB client->>router: POST /app/forums router->>service: create_forum service->>service: resolve current user service->>service: trim + dup check service->>db: insert row service-->>client: ForumView service->>service: PATCH: omit vs null service->>service: DELETE: reference check
| Method | in → out | what it does |
|---|---|---|
_current_user_id | (session) → UUID | |
_key_for_name | (name) → str | |
_find_duplicate_name | (session, firm_id, name, excluding_forum_id) → Forum | None |
src/domains/forum/service.py+259 −3Owns create/update/delete for firm forums — duplicate-name checks, reference checks, and the 403/409 error paths.
| new method | signature |
|---|---|
_current_user_id | (session) → UUID |
_key_for_name | (name) → str |
_find_duplicate_name | (session, firm_id, name, excluding_forum_id) → Forum | None |
_get_visible_forum | (session, forum_id) → Forum |
_get_editable_firm_forum | (session, forum_id, firm_id) → Forum |
_raise_if_name_conflict | (session, firm_id, name, excluding_forum_id) → None |
_is_referenced | (session, forum_id, firm_id) → bool |
create_forum | (session, payload) → ForumView |
update_forum | (session, forum_id, payload) → ForumView |
delete_forum | (session, forum_id) → None |
Defines the request DTOs and the source enum — name and description get trimmed, description is capped at 512 characters.
| new class | signature |
|---|---|
ForumSource | (class) |
ForumCreateRequest | (class) |
_trim_name | (value) → str | None |
_trim_description | (value) → str | None |
ForumUpdateRequest | (class) |
name : str | Nonedescription : str | Noneavailability : ForumAvailability | Nonesource : ForumSourcefirm_id : UUID | NoneExposes POST/PATCH/DELETE for /app/forums, wiring the new service methods to the FastAPI surface.
| new method | signature |
|---|---|
create_forum | (req, db, _) → ForumView |
update_forum | (forum_id, req, db, _) → ForumView |
delete_forum | (forum_id, db, _) → Response |
Adds a nullable description text column to business.forums, keyed as the 0072 Alembic migration.
| new method | signature |
|---|---|
upgrade | () → None |
downgrade | () → None |
revision : strdown_revision : str | Sequence[str] | Nonebranch_labels : str | Sequence[str] | Nonedepends_on : str | Sequence[str] | NoneAdds the optional description column onto the Forum ORM entity so it can be persisted and read back.
description : str | None