4545from app .models .cases import Cases
4646from app .models .collab import CollabDoc
4747from app .models .models import Notes
48+ from app .models .war_rooms import WarRoom
4849from app .models .war_rooms import WarRoomNote
4950from 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
7677def _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