gongxiangp2/scripts/fixtures/desktop-native-migration-evidence.mjs

17 lines
2.4 KiB
JavaScript

export function desktopNativeEvidence() {
const tasks = 'desktop_creation_tasks'
const fields = { id:'text',project_id:'text',owner_id:'text',payload:'jsonb',status:'text',dispatched:'boolean',revision:'integer',lease_session_id:'text',lease_hash:'text',lease_mode:'text',lease_until:'timestamp with time zone',created_at:'timestamp with time zone',updated_at:'timestamp with time zone' }
const columns = Object.entries(fields).map(([column,type])=>({table_name:tasks,column_name:column,data_type:type,is_nullable:column.startsWith('lease_')?'YES':'NO',column_default:column==='dispatched'?'false':column==='revision'?'1':['created_at','updated_at'].includes(column)?'now()':null}))
for (const table_name of ['desktop_workspace_projects','detail_generator_projects']) columns.push({table_name,column_name:'deleted_at',data_type:'timestamp with time zone',is_nullable:'YES',column_default:null})
const indexes = [
[tasks,'desktop_creation_tasks_owner_status_idx',['owner_id','status']],
[tasks,'desktop_creation_tasks_project_idx',['owner_id','project_id','created_at']],
['desktop_workspace_projects','desktop_workspace_projects_deleted_idx',['owner_id','deleted_at']],
].map(([tablename,indexname,columns])=>({tablename,indexname,columns,indisunique:false,indisprimary:false,indisvalid:true,indisready:true,access_method:'btree',predicate:'',indexdef:`CREATE INDEX ${indexname} ON public.${tablename} USING btree (${columns.join(', ')})`}))
const constraints = [['project_id','desktop_workspace_projects','c'],['owner_id','users','c'],['lease_session_id','desktop_client_sessions','n']].map(([column,referenced_table,delete_action])=>({tablename:tasks,constraint_name:`${tasks}_${column}_fkey`,contype:'f',convalidated:true,columns:[column],referenced_table,referenced_columns:['id'],delete_action}))
constraints.push({tablename:tasks,constraint_name:`${tasks}_pkey`,contype:'p',convalidated:true,columns:['id']})
constraints.push({tablename:tasks,constraint_name:`${tasks}_status_check`,contype:'c',convalidated:true,columns:['status'],expression:"status = ANY (ARRAY['queued'::text, 'running'::text, 'received'::text, 'succeeded'::text, 'failed'::text, 'unknown'::text, 'cancelled'::text])"})
constraints.push({tablename:tasks,constraint_name:`${tasks}_lease_mode_check`,contype:'c',convalidated:true,columns:['lease_mode'],expression:"lease_mode = ANY (ARRAY['execute'::text, 'recover'::text])"})
return {columns,indexes,constraints}
}