@@ -11,6 +11,7 @@ import {
1111 getFileForNodeInstanceIds ,
1212 loadRelations ,
1313 saveRelations ,
14+ type RelationsFile ,
1415} from "./relationsStore" ;
1516import type { RelationInstance } from "~/types" ;
1617import { getAvailableGroupIds } from "./importNodes" ;
@@ -270,15 +271,18 @@ export const publishNode = async ({
270271export const ensurePublishedRelationsAccuracy = async ( {
271272 client,
272273 context,
274+ plugin,
273275 allNodesById,
274- relationInstances ,
276+ relationInstancesData ,
275277} : {
276278 client : DGSupabaseClient ;
277279 context : SupabaseContext ;
280+ plugin : DiscourseGraphPlugin ;
278281 allNodesById : Record < string , DiscourseNodeInVault > ;
279- relationInstances : RelationInstance [ ] ;
282+ relationInstancesData : RelationsFile ;
280283} ) : Promise < void > => {
281284 const myGroups = await getAvailableGroupIds ( client ) ;
285+ const relationInstances = Object . values ( relationInstancesData . relations ) ;
282286 const syncedRelationIdsResult = await client
283287 . from ( "Concept" )
284288 . select ( "source_local_id" )
@@ -310,11 +314,13 @@ export const ensurePublishedRelationsAccuracy = async ({
310314 }
311315 }
312316 }
317+ let changed = false ;
313318 const missingPublishRecords : TablesInsert < "ResourceAccess" > [ ] = [ ] ;
314319 for ( const group of myGroups ) {
315320 const publishableRelations = relationInstances . filter (
316321 ( r ) =>
317322 ! r . importedFromRid &&
323+ syncedRelationIds . has ( r . id ) &&
318324 (
319325 ( allNodesById [ r . source ] ?. frontmatter ?. publishedToGroups as
320326 | string [ ]
@@ -369,11 +375,36 @@ export const ensurePublishedRelationsAccuracy = async ({
369375 . eq ( "space_id" , context . spaceId )
370376 . in ( "source_local_id" , [ ...extraPublishableIds ] ) ;
371377 if ( r . error ) console . error ( r . error ) ;
378+ else {
379+ for ( const id of extraPublishableIds ) {
380+ const rel = relationInstancesData . relations [ id ] ;
381+ const pos = ( rel ?. publishedToGroupId || [ ] ) . indexOf ( group ) ;
382+ if ( pos >= 0 ) {
383+ rel ! . publishedToGroupId ! . splice ( pos , 1 ) ;
384+ changed = true ;
385+ }
386+ }
387+ }
372388 }
373389 }
374390 if ( missingPublishRecords . length > 0 ) {
375391 const r = await client . from ( "ResourceAccess" ) . upsert ( missingPublishRecords ) ;
376392 if ( r . error ) console . error ( r . error ) ;
393+ else {
394+ for ( const record of missingPublishRecords ) {
395+ const rel = relationInstancesData . relations [ record . source_local_id ] ;
396+ const group = record . account_uid ;
397+ const pos = ( rel ?. publishedToGroupId || [ ] ) . indexOf ( group ) ;
398+ if ( rel && pos < 1 ) {
399+ if ( rel . publishedToGroupId === undefined ) rel . publishedToGroupId = [ ] ;
400+ rel . publishedToGroupId . push ( group ) ;
401+ changed = true ;
402+ }
403+ }
404+ }
405+ }
406+ if ( changed ) {
407+ await saveRelations ( plugin , relationInstancesData ) ;
377408 }
378409} ;
379410
0 commit comments