gongxiangp2/scripts/desktop-client-migration-fixture.mjs

14 lines
1.9 KiB
JavaScript

export function desktopEvidence(){
const fields={
desktop_client_grants:{id:'text',code_hash:'text',owner_id:'text',challenge:'text',redirect_uri:'text',expires_at:'timestamp with time zone',used_at:'timestamp with time zone'},
desktop_client_sessions:{id:'text',token_hash:'text',owner_id:'text',device_name:'text',expires_at:'timestamp with time zone',revoked_at:'timestamp with time zone'},
desktop_workspace_projects:{id:'text',owner_id:'text',source_web_id:'text',document:'jsonb',conversation:'jsonb',composer:'text',status:'text',revision:'integer'},
desktop_workspace_assets:{id:'text',project_id:'text',owner_id:'text',source:'text',sha256:'text',storage_key:'text',mime_type:'text',byte_size:'integer'},
}
const columns=Object.entries(fields).flatMap(([table,fields])=>Object.entries(fields).map(([column,type])=>({table_name:table,column_name:column,data_type:type,is_nullable:['used_at','revoked_at','source_web_id'].includes(column)?'YES':'NO'})))
const indexes=[['desktop_client_grants','code_hash',['code_hash']],['desktop_client_sessions','token_hash',['token_hash']],['desktop_workspace_projects','source_idx',['owner_id','source_web_id']],['desktop_workspace_assets','project_id_source',['project_id','source']]].map(([table,suffix,columns])=>({tablename:table,indexname:table+'_'+suffix+(suffix.endsWith('idx')?'':'_key'),indisunique:true,indisprimary:false,indisvalid:true,indisready:true,access_method:'btree',predicate:'',columns}))
const constraints=Object.keys(fields).map(table=>({tablename:table,constraint_name:table+'_owner_id_fkey',contype:'f',convalidated:true,columns:['owner_id'],referenced_table:'users',referenced_columns:['id']}))
constraints.push({tablename:'desktop_workspace_assets',constraint_name:'desktop_workspace_assets_project_id_fkey',contype:'f',convalidated:true,columns:['project_id'],referenced_table:'desktop_workspace_projects',referenced_columns:['id']})
return {columns,indexes,constraints}
}