feat: backend implementation for media manager v2 (WIP - Undeployed)

This commit is contained in:
Ben Miller
2025-12-28 08:13:27 -07:00
parent a9cb63fd67
commit 6e1222cec9
11 changed files with 763 additions and 189 deletions

View File

@ -42,6 +42,7 @@ export class ShopifyMediaService implements IShopifyMediaService {
mutation productCreateMedia($media: [CreateMediaInput!]!, $productId: ID!) {
productCreateMedia(media: $media, productId: $productId) {
media {
id
alt
mediaContentType
status
@ -68,4 +69,79 @@ export class ShopifyMediaService implements IShopifyMediaService {
const response = this.shop.shopifyGraphQLAPI(payload)
return response.content.data.productCreateMedia
}
getProductMedia(productId: string): any[] {
const query = /* GraphQL */ `
query getProductMedia($productId: ID!) {
product(id: $productId) {
media(first: 250) {
edges {
node {
id
alt
mediaContentType
preview {
image {
originalSrc
}
}
}
}
}
}
}
`
const variables = { productId }
const payload = {
query: formatGqlForJSON(query),
variables: variables
}
const response = this.shop.shopifyGraphQLAPI(payload)
if (!response.content.data.product) return []
return response.content.data.product.media.edges.map((edge: any) => edge.node)
}
productDeleteMedia(productId: string, mediaId: string): any {
const query = /* GraphQL */ `
mutation productDeleteMedia($mediaId: ID!, $productId: ID!) {
productDeleteMedia(mediaId: $mediaId, productId: $productId) {
deletedMediaId
userErrors {
field
message
}
}
}
`
const variables = { productId, mediaId }
const payload = {
query: formatGqlForJSON(query),
variables: variables
}
const response = this.shop.shopifyGraphQLAPI(payload)
return response.content.data.productDeleteMedia
}
productReorderMedia(productId: string, moves: any[]): any {
const query = /* GraphQL */ `
mutation productReorderMedia($id: ID!, $moves: [MoveInput!]!) {
productReorderMedia(id: $id, moves: $moves) {
job {
id
done
}
userErrors {
field
message
}
}
}
`
const variables = { id: productId, moves }
const payload = {
query: formatGqlForJSON(query),
variables: variables
}
const response = this.shop.shopifyGraphQLAPI(payload)
return response.content.data.productReorderMedia
}
}