Skip to content

Commit 6eadb72

Browse files
committed
5.0.5γ
1 parent 1888dac commit 6eadb72

3 files changed

Lines changed: 42 additions & 16 deletions

File tree

src/classes/components/cloud/CloudController.ts

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,8 @@ class CloudController {
201201
if (!this._metadata?.Updated) return false
202202
if (!this._lastUploadedItemModified) return false
203203
if (this.Parent.SaveController?.IsDeleted && !this._metadata.Deleted) return false
204-
const localModified =
205-
this.Parent.SaveController.LastModified || this.Parent.SaveController.Created
204+
const sc = this.Parent.SaveController
205+
const localModified = sc?.LastModified || sc?.Created || 0
206206
return (
207207
this._lastUploadedItemModified >= this._metadata.ItemModified &&
208208
this._lastUploadedItemModified >= localModified
@@ -400,22 +400,44 @@ class CloudController {
400400
continue
401401
}
402402

403+
if (toRaw(item).SaveController?.IsDeleted && !item.CloudController._metadata?.Deleted) {
404+
const sc = toRaw(item).SaveController
405+
const deletedMeta: dbItemMeta = {
406+
...item.CloudController.Metadata.Serialize(),
407+
item_modified: sc.LastModified,
408+
deleted: sc.DeleteTime,
409+
}
410+
try {
411+
const res = await updateItem(deletedMeta, 'item')
412+
if (res.data) {
413+
item.CloudController.Metadata = { ...deletedMeta, ...res.data }
414+
}
415+
item.CloudController._lastUploadedItemModified = sc.LastModified
416+
toRaw(item).SaveController.saveSilent()
417+
} catch (e) {
418+
failures.push({ item, error: e })
419+
}
420+
continue
421+
}
422+
403423
if (!item.CloudController._lastFieldHashes) {
404424
const hasPriorSync = Object.keys(item.CloudController._fieldTs).length > 0
405425
const hasServerRecord = !!item.CloudController._metadata?.Updated
406426
if (hasPriorSync || hasServerRecord) {
407-
try {
408-
await item.CloudController.syncFromCloud()
409-
} catch (syncErr) {
410-
failures.push({ item, error: syncErr })
427+
if (!toRaw(item).SaveController?.IsDeleted) {
428+
try {
429+
await item.CloudController.syncFromCloud()
430+
} catch (syncErr) {
431+
failures.push({ item, error: syncErr })
432+
}
411433
}
412434
continue
413435
}
414436
}
415437

416438
const prepared = CloudController.prepareUpload(item)
417439
if (!prepared) {
418-
if (item.CloudController.serverVersionChanged) {
440+
if (item.CloudController.serverVersionChanged && !toRaw(item).SaveController?.IsDeleted) {
419441
try {
420442
await item.CloudController.syncFromCloud()
421443
} catch (syncErr) {
@@ -510,7 +532,7 @@ class CloudController {
510532
logger.error(`BatchUpdateCloud upload failed: ${task.item.Name}`, r.reason)
511533
failures.push({ item: task.item, error: r.reason })
512534
compensations.push(
513-
updateItem(task.previousMeta).catch(err =>
535+
updateItem(toRaw(task.item).SaveController?.IsDeleted ? task.meta : task.previousMeta).catch(err =>
514536
logger.warn(
515537
`BatchUpdateCloud: DynamoDB compensation failed for ${task.item.Name}`,
516538
err

src/user/store/RemoteItemStore.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
NotFoundError,
77
} from '@/io/apis/account'
88
import { CloudController } from '@/classes/components/cloud/CloudController'
9+
import { AuthStore } from './AuthStore'
910
import { UserMetadataStore } from './UserMetadataStore'
1011
import { CloudDataStore } from './CloudDataStore'
1112
import { NotificationStore } from './NotificationStore'
@@ -139,8 +140,8 @@ export const RemoteItemStore = defineStore('remoteItems', {
139140
if (item.deleted) continue
140141
const localItem = cloudDataStore.getLocalItem(item.sortkey)
141142
if (localItem) {
142-
const isOwnCloudItem = cloudDataStore.CloudItems.some(ci => ci.sortkey === item.sortkey)
143-
if (!isOwnCloudItem) {
143+
const isOwned = item.user_id === AuthStore().Cognito?.userId
144+
if (!isOwned) {
144145
toRaw(localItem).CloudController.Metadata = item
145146
}
146147
} else {
@@ -166,7 +167,7 @@ export const RemoteItemStore = defineStore('remoteItems', {
166167

167168
const codeToExpectedId = new Map<string, string>()
168169
for (const item of data) {
169-
codeToExpectedId.set(item.code, item.sortkey.split('_')[2])
170+
codeToExpectedId.set(item.code, item.sortkey.split('_').slice(2).join('_'))
170171
}
171172

172173
const { SyncStore } = await import('./SyncStore')

src/user/store/SyncStore.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { defineStore } from 'pinia'
2-
import { toRaw } from 'vue'
32
import { CloudController, DbItemMetadata } from '@/classes/components/cloud/CloudController'
43
import type { ICloudSyncable } from '@/classes/components/cloud/ICloudSyncable'
54
import { normalizeItemType } from '@/classes/components/cloud/ItemTypeMap'
@@ -48,15 +47,15 @@ export const SyncStore = defineStore('sync', {
4847
const localIds = new Set(this.AllLocalItems.map(y => y.ID))
4948
const raw = cdStore.CloudItems.filter(x => {
5049
if (x.deleted) return false
51-
const itemId = x.sortkey.split('_')[2]
50+
const itemId = x.sortkey.split('_').slice(2).join('_')
5251
return !localIds.has(itemId)
5352
})
5453

5554
return raw.map(x => ({
5655
raw: x,
5756
IsCloudOnly: true,
5857
Name: x.name,
59-
ID: x.sortkey.split('_')[2],
58+
ID: x.sortkey.split('_').slice(2).join('_'),
6059
ItemType: x.sortkey.split('_')[1],
6160
CloudController: {
6261
Metadata: new DbItemMetadata(x),
@@ -86,7 +85,7 @@ export const SyncStore = defineStore('sync', {
8685
const t = normalizeItemType(x.ItemType)
8786
if (t === 'encounterarchive') return false
8887
if (t === 'pilotsheet' && (x as any).Archived) {
89-
return cdStore.CloudItems.some(ci => ci.sortkey === x.CloudController.Metadata.SortKey)
88+
return !!x.CloudController.Metadata?.Updated
9089
}
9190
return cdStore.SyncItemTypes.includes(t)
9291
}).filter(x => !x.CloudController.isSynced)
@@ -285,7 +284,11 @@ export const SyncStore = defineStore('sync', {
285284
for (const [type, reg] of allRegistrations()) {
286285
if (type === 'campaign' || type === 'pilotgroup') continue
287286
for (const item of reg.getAll() as any[]) {
288-
if (item.SaveController?.IsDeleted && item.SaveController.DeleteTime < threshold) {
287+
if (
288+
item.SaveController?.IsDeleted &&
289+
item.SaveController.DeleteTime < threshold &&
290+
!!item.CloudController?.Metadata?.Deleted
291+
) {
289292
promises.push(
290293
reg.deleteLocal(item).then(() => {
291294
deleted.push(`Permanently Deleted ${type}: ${item.Name ?? item.Title ?? item.ID}`)

0 commit comments

Comments
 (0)