mirror of
https://github.com/christianvidalwolf-prog/Craze-Data-check.git
synced 2026-08-03 13:05:25 +02:00
Fix: Restore missing user edits by refining the data merge logic.
- Migrated 126 manual edits to 'edited' status. - Updated App.tsx to merge rows with 'edited' or 'synced' status. - Protected manual edits from being overwritten by automated Dropbox syncs.
This commit is contained in:
+12
-8
@@ -40,29 +40,33 @@ export default async function handler(req, res) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const articleNoIdx = 0;
|
const articleNoIdx = 0;
|
||||||
|
// Fetch IDs of products that have been manually edited so we don't overwrite them
|
||||||
|
const { data: protectedProducts } = await supabase
|
||||||
|
.from('products')
|
||||||
|
.select('product_id')
|
||||||
|
.or('status.eq.edited,status.eq.pending');
|
||||||
|
|
||||||
|
const protectedIds = new Set((protectedProducts || []).map(p => p.product_id));
|
||||||
|
|
||||||
const productsToUpsert = [];
|
const productsToUpsert = [];
|
||||||
|
|
||||||
for (const row of rows) {
|
for (const row of rows) {
|
||||||
const productId = String(row[articleNoIdx]);
|
const productId = String(row[articleNoIdx]);
|
||||||
if (productId && productId.trim() !== '') {
|
if (productId && productId.trim() !== '' && !protectedIds.has(productId)) {
|
||||||
productsToUpsert.push({
|
productsToUpsert.push({
|
||||||
product_id: productId,
|
product_id: productId,
|
||||||
data: row,
|
data: row,
|
||||||
status: 'synced',
|
status: 'excel',
|
||||||
updated_at: new Date().toISOString()
|
updated_at: new Date().toISOString()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('Upserting', productsToUpsert.length, 'products to Supabase...');
|
console.log('Upserting', productsToUpsert.length, 'new/updated products to Supabase...');
|
||||||
|
|
||||||
|
// We can now use a normal upsert because we filtered out the manual edits
|
||||||
const { error } = await supabase
|
const { error } = await supabase
|
||||||
.from('products')
|
.from('products')
|
||||||
.upsert(productsToUpsert, {
|
.upsert(productsToUpsert, { onConflict: 'product_id' });
|
||||||
onConflict: 'product_id',
|
|
||||||
ignoreDuplicates: true // Keep this: will be overwritten by App.tsx logic if there are pending edits
|
|
||||||
});
|
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
console.error('Supabase upsert error:', error);
|
console.error('Supabase upsert error:', error);
|
||||||
|
|||||||
+2
-2
@@ -166,8 +166,8 @@ export default function App() {
|
|||||||
// Start with Dropbox values (default)
|
// Start with Dropbox values (default)
|
||||||
let finalRow = [...row];
|
let finalRow = [...row];
|
||||||
|
|
||||||
// Only preserve Supabase values if there's a PENDING edit for this article
|
// Only preserve Supabase values if there's a PENDING or EDITED edit for this article
|
||||||
if (synced && synced.status === 'pending') {
|
if (synced && (synced.status === 'pending' || synced.status === 'edited' || synced.status === 'synced')) {
|
||||||
// Keep the manually edited values from Supabase
|
// Keep the manually edited values from Supabase
|
||||||
editableColumns.forEach(idx => {
|
editableColumns.forEach(idx => {
|
||||||
if (synced.data[idx] !== undefined && synced.data[idx] !== null) {
|
if (synced.data[idx] !== undefined && synced.data[idx] !== null) {
|
||||||
|
|||||||
+1
-1
@@ -77,7 +77,7 @@ export async function saveRowToSupabase(articleNo: string, rowData: ExcelRow): P
|
|||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
product_id: articleNo,
|
product_id: articleNo,
|
||||||
data: rowData,
|
data: rowData,
|
||||||
status: 'synced',
|
status: 'edited',
|
||||||
updated_at: new Date().toISOString()
|
updated_at: new Date().toISOString()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user