@@ -190,10 +190,18 @@ function buildSubmissionFromContext({ project, user, status }) {
190190 status,
191191 source_project_status : project . status || null ,
192192 ship_kind : project . ship_kind || "initial" ,
193- airtable_record_id : status === YSWS_STATUS . approved ? project . ysws_record_id || null : null ,
193+ airtable_record_id : resolveAirtableRecordIdForSubmission ( project , status ) ,
194194 } ;
195195}
196196
197+ function resolveAirtableRecordIdForSubmission ( project , status ) {
198+ const linkedRecordId = project . ysws_record_id || null ;
199+ if ( status === YSWS_STATUS . approved || status === YSWS_STATUS . pendingReship ) {
200+ return linkedRecordId ;
201+ }
202+ return null ;
203+ }
204+
197205function buildFieldsFromSubmission ( submission ) {
198206 const fields = {
199207 [ F . codeUrl ] : submission . code_url || undefined ,
@@ -215,7 +223,9 @@ function buildFieldsFromSubmission(submission) {
215223 [ F . status ] : submission . status ,
216224 } ;
217225
218- if ( submission . reship_update ) {
226+ const isReshipSubmission =
227+ submission . ship_kind === "reship" || submission . status === YSWS_STATUS . pendingReship ;
228+ if ( isReshipSubmission && submission . reship_update ) {
219229 fields [ F . update ] = submission . reship_update ;
220230 }
221231
@@ -385,7 +395,33 @@ export async function deleteProjectSubmissionsFromYsws(projectId) {
385395 return { ok : true , deleted : result . rows . length } ;
386396}
387397
398+ async function resolveSubmissionAirtableRecordId ( submission ) {
399+ if ( submission . airtable_record_id ) return submission . airtable_record_id ;
400+
401+ const result = await pool . query (
402+ `
403+ SELECT airtable_record_id
404+ FROM ysws_project_submissions
405+ WHERE project_id = $1
406+ AND airtable_record_id IS NOT NULL
407+ AND status = ANY($2::text[])
408+ ORDER BY updated_at DESC
409+ LIMIT 1
410+ ` ,
411+ [ submission . project_id , [ YSWS_STATUS . approved , YSWS_STATUS . pending , YSWS_STATUS . pendingReship ] ]
412+ ) ;
413+
414+ return result . rows [ 0 ] ?. airtable_record_id || null ;
415+ }
416+
388417async function upsertLocalSubmission ( submission ) {
418+ if (
419+ ( submission . status === YSWS_STATUS . pendingReship || submission . status === YSWS_STATUS . approved ) &&
420+ ! submission . airtable_record_id
421+ ) {
422+ submission . airtable_record_id = await resolveSubmissionAirtableRecordId ( submission ) ;
423+ }
424+
389425 if ( submission . status === YSWS_STATUS . approved ) {
390426 const approvedResult = await pool . query (
391427 "SELECT * FROM ysws_project_submissions WHERE project_id = $1 AND status = $2" ,
0 commit comments