Skip to content

Commit 09168fe

Browse files
author
whitekernel
committed
[ADD] collab: war-room-summary doc kind — resolve+flush against WarRoom.description, war-room ACL gated, tracks activity
1 parent cbe05ac commit 09168fe

1 file changed

Lines changed: 29 additions & 1 deletion

File tree

source/app/business/collab.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
from app.models.cases import Cases
4646
from app.models.collab import CollabDoc
4747
from app.models.models import Notes
48+
from app.models.war_rooms import WarRoom
4849
from app.models.war_rooms import WarRoomNote
4950
from app.models.war_rooms import WarRoomSitRep
5051

@@ -70,7 +71,7 @@ class DocResolutionError(Exception):
7071
# Doc kinds we recognise. Any doc_name whose prefix isn't in this map is
7172
# rejected up-front — keeps the socket handler from spawning arbitrary
7273
# rooms based on client input.
73-
_DOC_KINDS = {'note', 'case-summary', 'war-room-note', 'sitrep'}
74+
_DOC_KINDS = {'note', 'case-summary', 'war-room-note', 'war-room-summary', 'sitrep'}
7475

7576

7677
def _parse_doc_name(doc_name):
@@ -169,6 +170,23 @@ def resolve_doc(doc_name, user_id):
169170
'can_write': write_level is not None,
170171
'current_content': wrn.content}
171172

173+
if kind == 'war-room-summary':
174+
room = WarRoom.query.filter_by(war_room_id=obj_id).first()
175+
if room is None:
176+
return {'kind': kind, 'id': obj_id, 'exists': False,
177+
'can_read': False, 'can_write': False,
178+
'current_content': None}
179+
write_level = _war_room_access_check(
180+
user_id, room.war_room_id, [WarRoomAccessLevel.full_access],
181+
)
182+
read_level = write_level or _war_room_access_check(
183+
user_id, room.war_room_id, [WarRoomAccessLevel.read_only],
184+
)
185+
return {'kind': kind, 'id': obj_id, 'exists': True,
186+
'can_read': read_level is not None,
187+
'can_write': write_level is not None,
188+
'current_content': room.description}
189+
172190
if kind == 'sitrep':
173191
sit = WarRoomSitRep.query.filter_by(sitrep_id=obj_id).first()
174192
if sit is None:
@@ -372,6 +390,16 @@ def flush_to_source(doc_name):
372390
war_room_id=wrn.war_room_id)
373391
return
374392

393+
if kind == 'war-room-summary':
394+
room = WarRoom.query.filter_by(war_room_id=obj_id).first()
395+
if room is None or room.description == new_content:
396+
return
397+
room.description = new_content
398+
db.session.commit()
399+
track_activity(f'updated war room summary',
400+
war_room_id=room.war_room_id)
401+
return
402+
375403
if kind == 'sitrep':
376404
sit = WarRoomSitRep.query.filter_by(sitrep_id=obj_id).first()
377405
# Never flush into a published sitrep — the ACL layer already

0 commit comments

Comments
 (0)