Fix redis race condition

This commit is contained in:
Dominic Ferrando
2026-06-24 23:22:02 -04:00
parent 968afb5789
commit 51abbbc00c
3 changed files with 47 additions and 41 deletions
+11 -10
View File
@@ -6,21 +6,22 @@
const { data } = $props();
const synchronizer = $state({
isSyncing: false,
syncingIds: [] as number[],
isRunning: false,
printfulProductIds: [] as number[],
poll: async function () {
const res = (await (
await fetch(`${PUBLIC_API_URL}/products/sync`)
).json()) as any;
if (res.data) {
synchronizer.isSyncing = res.data.isSyncing;
synchronizer.syncingIds = res.data.syncingIds;
synchronizer.isRunning = res.data.isRunning;
synchronizer.printfulProductIds =
res.data.state.printfulProductIds;
}
},
startPolling: () => {
const intervalId = setInterval(async () => {
await synchronizer.poll();
if (!synchronizer.isSyncing) clearInterval(intervalId);
if (!synchronizer.isRunning) clearInterval(intervalId);
}, 100);
},
syncAll: async () => {
@@ -40,7 +41,7 @@
onMount(async () => {
await synchronizer.poll();
if (synchronizer.isSyncing) {
if (synchronizer.isRunning) {
synchronizer.startPolling();
}
});
@@ -59,11 +60,11 @@
<p>Loading...</p>
{:then printfulProducts}
<button
disabled={synchronizer.isSyncing}
disabled={synchronizer.isRunning}
onclick={() => synchronizer.syncAll()}
class="btn btn-xl mb-5"
>
{#if synchronizer.isSyncing}
{#if synchronizer.isRunning}
Syncing...
{:else}
Sync all
@@ -98,7 +99,7 @@
>
<td>
{#await isProductSynced(printfulProduct) then isSynced}
{#if synchronizer.syncingIds.includes(printfulProduct.id)}
{#if synchronizer.printfulProductIds.includes(printfulProduct.id)}
<div class="badge badge-warning">
Syncing...
</div>
@@ -115,7 +116,7 @@
</td>
<td>
<button
disabled={synchronizer.isSyncing}
disabled={synchronizer.isRunning}
onclick={() =>
synchronizer.sync(printfulProduct.id)}
class="btn"