fix(product, dashboard): manual cleanup of uploaded images (#10254)

* manual cleanup

* add changeset

* remove thumbnail on deletion
This commit is contained in:
Kasper Fabricius Kristensen
2024-11-25 11:44:22 +01:00
committed by GitHub
parent df8369028e
commit c28d0db164
4 changed files with 24 additions and 2 deletions

View File

@@ -0,0 +1,6 @@
---
"@medusajs/dashboard": patch
"@medusajs/product": patch
---
fix(product,dashboard): Avoid duplicating images

View File

@@ -132,8 +132,8 @@ export const EditProductMediaForm = ({ product }: ProductMediaViewProps) => {
await mutateAsync(
{
images: withUpdatedUrls.map((file) => ({ url: file.url })),
thumbnail: thumbnail,
images: withUpdatedUrls.map((file) => ({ url: file.url, id: file.id })),
thumbnail: thumbnail || null,
},
{
onSuccess: () => {

View File

@@ -19,6 +19,12 @@ export class Migration20241122120331 extends Migration {
where pi.image_id = i.id;
`);
// Delete orphaned images
this.addSql(`
delete from "image"
where product_id is null;
`);
this.addSql('alter table if exists "image" alter column "product_id" set not null;');
this.addSql('alter table if exists "image" add constraint "image_product_id_foreign" foreign key ("product_id") references "product" ("id") on update cascade on delete cascade;');
this.addSql('drop table if exists "product_images" cascade;');

View File

@@ -1690,6 +1690,16 @@ export default class ProductModuleService
sharedContext
)
upsertedProduct.images = productImages
await this.productImageService_.delete(
{
product_id: upsertedProduct.id,
id: {
$nin: productImages.map(({ id }) => id),
},
},
sharedContext
)
} else {
await this.productImageService_.delete(
{ product_id: upsertedProduct.id },