Skip to content

Commit b543901

Browse files
authored
[core] Snapfish integration (#30)
1 parent fb5182a commit b543901

File tree

8 files changed

+1813
-947
lines changed

8 files changed

+1813
-947
lines changed

core/data/design-request.ts

Lines changed: 114 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const occasions = [
4343
'year-in-review'
4444
] as const
4545
export const styles = {
46+
//shutterfly styles
4647
1005: {slug: 'modern-black-sfly'},
4748
1101: {slug: 'bon-voyage-sfly'},
4849
1103: {slug: 'fun-in-the-sun-sfly'},
@@ -213,9 +214,120 @@ export const styles = {
213214
6098: {slug: 'black-and-white-rustic-sfly'},
214215
6099: {slug: 'bright-color-pop-sfly'},
215216
6159: {slug: 'grateful-for-you-sfly'},
216-
6156: {slug: 'europe-mementos-sfly'}
217+
6156: {slug: 'europe-mementos-sfly'},
218+
//snapfish styles
219+
be5f79d7525f4717844db77a2f1b5e50: {slug: 'abstract-baby-first-year-snap'},
220+
'519bf5f2b6734103a9a359469be4961b': {slug: 'album-snap'},
221+
'029a2ebd65b448bf93753c813b7b7363': {slug: 'all-about-love-snap'},
222+
'16d0d436594b4171bd9688876a85c9c1': {slug: 'alphabet-book-snap'},
223+
'5b95e1d678584558b2c3397ab996da7b': {slug: 'always-and-forever-snap'},
224+
a2c088e32541429ba8e5e15d09991264: {slug: 'art-of-travel-snap'},
225+
'0ddec2b965094c8ea03d669e771ff1a6': {slug: 'autumn-snapshots-snap'},
226+
'339699fedd3743f69c5b05587fbfd41a': {slug: 'baby-boy-first-year-snap'},
227+
'091f9a6a83c349b2a9732177d89f8664': {slug: 'baby-girl-first-year-snap'},
228+
e768ec11406545809ca9598be3bda88c: {slug: 'best-dad-ever-snap'},
229+
'0c55a3eb5cc6414c9f2570886132d331': {slug: 'best-year-ever-snap'},
230+
'9c49df50d76b4789834ca7abaabe2bc6': {slug: 'bold-shapes-snap'},
231+
fd7cf7c4dc244705ad391334d76f7229: {slug: 'bold-type-snap'},
232+
'363ceab4906b47a09dd287f53dc1d30f': {slug: 'botanicals-snap'},
233+
e47017576d0e451180ff4591d2aee2fa: {slug: 'celebrating-grandma-snap'},
234+
d9743da5f46843aab84b1f90ff776ee0: {slug: 'celebrating-mum-snap'},
235+
'13039c15c81b4e50af5e39cd99f4e274': {slug: 'chalkboard-snap'},
236+
'0c98757783874104a488a1a88747344d': {slug: 'childs-yearbook-snap'},
237+
'5b0d80d6ca164919b7ee558c0bc2537b': {slug: 'classic-fathers-snap'},
238+
eb734aa7c87a4db1ac9695e935f13489: {slug: 'colour-block-rainbow-snap'},
239+
'7ed9132a96484ed2b200cf30e73cf049': {slug: 'contemporary-travel-snap'},
240+
'3e15106389764a3cb2b6a6c29c065993': {slug: 'contemporary-wedding-snap'},
241+
'47f9e28d811842a5870c74bb4c6b3608': {slug: 'design-your-own-snap'},
242+
bef3d3bc49f3476aa6f39ad073294a04: {slug: 'destination-stamps-snap'},
243+
'496138703d5346bd9678a2fa487b54fd': {slug: 'dip-dye-snap'},
244+
'303773eee9934e8ba9f676b339c84d39': {slug: 'earth-tones-snap'},
245+
'02c52e4cdccd40b0b99cf2215a6b8fe1': {slug: 'elegant-florals-snap'},
246+
c59f05e866344332b2953199fd2972fa: {slug: 'everyday-happiness-snap'},
247+
'5a2d025aaa3746b2b047daa6206ba8ad': {slug: 'family-chalkboard-snap'},
248+
'1c8784e76020435d88ddab7bc8d72cae': {slug: 'family-farmhouse-snap'},
249+
'1735277701d6483e9934074f25053f3a': {slug: 'family-memories-snap'},
250+
'9c35a7f890204c38adb4255571377114': {slug: 'family-yearbook-snap'},
251+
'9c946c20f0dc45adb3f85735690f3395': {slug: 'favourite-things-snap'},
252+
c216373996d945c186cc6db5a53e10b1: {slug: 'framed-full-photo-snap'},
253+
'6f7cd5c4e4e247f2bdf7c44ace0fdad5': {slug: 'fresh-cookbook-snap'},
254+
'7eae47a7cbd743d4a47ca94f7a6b87a7': {slug: 'full-and-multi-square-photo-snap'},
255+
ac7a649cbd27433c9d0b405f34ff29f5: {slug: 'full-photo-snap'},
256+
'3aa989376bc5414eb2a35f2cb930f57c': {slug: 'full-photo-snap'},
257+
d86767aacb4f464892702ed3ffac1a98: {slug: 'fun-dots-snap'},
258+
c5d1654a989d4f2f87594e486239e77b: {slug: 'geometric-lines-snap'},
259+
'73e54769af5f4943a8403c6a5e38f5fb': {slug: 'golden-graduation-snap'},
260+
'7d15aef8b54d41ee82a99d327d571020': {slug: 'graduation-memories-snap'},
261+
'46594aace0ca42b1bdd086d1b8ac0ad4': {slug: 'guest-book-snap'},
262+
'77c78fbe2b4b4c7fb37e34a9515912d2': {slug: 'hearts-for-mum-snap'},
263+
'659893fcc6c24fef9ea1a3a8ccf2539e': {slug: 'hello-baby-snap'},
264+
'0f1182fcc18c428fb7c3d80c5a637c3b': {slug: 'hello-baby-boy-snap'},
265+
'54b7a8ca59774060835fdd48653dba9a': {slug: 'hello-baby-girl-snap'},
266+
'2d56caccc29a40b5bd16334937de0083': {slug: 'i-love-my-cat-snap'},
267+
'3c12993b18ff473fa6fc7f695bd64180': {slug: 'i-love-my-dog-snap'},
268+
c4393a1da2e54ca4ab9a3ec0aeb682e4: {slug: 'lets-celebrate-snap'},
269+
ee9fd665523c41078a65c5389896d0ab: {slug: 'love-lives-here-snap'},
270+
b84d0171dbb748e1ab2fb535fd318830: {slug: 'love-story-snap'},
271+
'4d61b18d992c4d8eb33a331e4201ae05': {slug: 'magical-memories-snap'},
272+
bdbe9158b33343c6ae11217fde9c8a57: {slug: 'milestone-memories-snap'},
273+
'790a78454af94287b2a84c2324d6956e': {slug: 'modern-graduation-snap'},
274+
'4211083b4bad4fee87e04dd65e5fed5d': {slug: 'modern-highlights-snap'},
275+
'47bb41bb9e174657aa0c48ec140ed2c8': {slug: 'modern-rustic-snap'},
276+
bac69bcc341c445d9c5c81f04231c685: {slug: 'my-family-snap'},
277+
'2d561db2b849457f8f830c2e977ced6c': {slug: 'my-graduation-snap'},
278+
e2727f32f9e248a3a7fd02f50cf493ab: {slug: 'natural-blues-snap'},
279+
'85005f9b9c1c4a4485508c52465b7110': {slug: 'nautical-summer-snap'},
280+
df1eded2d6e24c81a9e9bd66567b39f0: {slug: 'organic-patterns-snap'},
281+
bfdc9b325b1a4471a948eccb7c76fd2e: {slug: 'organic-shapes-snap'},
282+
'7cb42c74e4704c08a51f0930703fff34': {slug: 'our-wedding-guests-snap'},
283+
c88a62c1e3584591b278fe0ccfe3b02b: {slug: 'over-the-moon-snap'},
284+
'2a682e5b38d64f77b7c1b6c0a8a06670': {slug: 'painterly-patterns-snap'},
285+
'5eddabc29f704c66ba03deff870f2c18': {slug: 'precious-experiences-snap'},
286+
'18f048f0a07f40c09495fdc3830f7228': {slug: 'reflections-on-our-year-snap'},
287+
f2fd5fd83bbb4e9ebf3af33ba4589561: {slug: 'roadtrip-snap'},
288+
'31ed7e06afb347f2a302ba35267c8a0a': {slug: 'rustic-chic-snap'},
289+
'17e8062b9ed749ba8428cbb3924e719d': {slug: 'rustic-family-snapshots-snap'},
290+
'7573b1a594e8405295adfcf145c5322a': {slug: 'serene-memories-snap'},
291+
acc3ac3b7e724c288a849b471616e373: {slug: 'simple-snap'},
292+
ddb203e3ae0443209ada75135e13a63e: {slug: 'simple-family-moments-snap'},
293+
bdee0a45e5144156b88621238cd31bbe: {slug: 'simply-love-snap'},
294+
dc0d15f9aa474bd89c49e6da49bb3cc5: {slug: 'sketched-botanicals-snap'},
295+
'55cebda93e1c4f52b07d824a57f8677b': {slug: 'smitten-snap'},
296+
'2172f706eedf4c36a3fba10a0fe5448d': {slug: 'snow-days-snap'},
297+
'0964a6d8e0234df7ad7df8e56c33ff2b': {slug: 'solid-brights-snap'},
298+
e47b1860677e45909de56915a350a84e: {slug: 'studio-snap'},
299+
'0b8fcc5f30cb4649bb4d8ea9cf35578c': {slug: 'studio-multi-snap'},
300+
'2972e73653da4dc5805853e22717f1ee': {slug: 'summer-snapshots-snap'},
301+
f292a52aff774e698fe26dc61a7a3f71: {slug: 'team-spirit-snap'},
302+
b9192bf9df6b4984b29f4731b5f0bb63: {slug: 'ten-things-i-love-snap'},
303+
d2dd8fe6e2e44c78935206323ee89af1: {slug: 'travel-maps-snap'},
304+
'61f74eec39ff425b85e4f1c7e9e15ef6': {slug: 'travel-memories-snap'},
305+
'148b777f385c4df2bc1b4900a4208e82': {slug: 'travel-stamps-snap'},
306+
'77550e4c36b34454bac2ae9c4d9d2bd1': {slug: 'tropical-beach-escape-snap'},
307+
'6aac0d2309744e9ea8fd4621f8213dbd': {slug: 'unfurgettable-kitty-snap'},
308+
f5ef0aaddd294a0ba37ebc76012858ff: {slug: 'vibrant-memories-snap'},
309+
'73966e2885a544ed9ba8e0a314a6528c': {slug: 'vintage-birthday-memories-snap'},
310+
'33242c4285024ccfafc57d72a7292ea9': {slug: 'warm-neutrals-snap'},
311+
'605f06522caa449ba93b7c5fa4d8e54b': {slug: 'warmest-memories-snap'},
312+
c154e4664672441fa640f1ddff883db1: {slug: 'watercolour-memories-snap'},
313+
'86024d3f1def489495cc7525d8232bea': {slug: 'watercolour-sketchbook-snap'},
314+
f52d1dd24f9c49ae82d8f70449fe40b7: {slug: 'watercolour-wonders-snap'},
315+
'1cbbd20a3a4542f38d2f9932016c4584': {slug: 'watercolours-snap'},
316+
fdf4b31ea3434b03a5c3ddaab1579084: {slug: 'wedding-studio-snap'},
317+
'1b104c3a036e4825bd60a5c7ceac4e66': {slug: 'winter-magic-snap'},
318+
'03f332e3b2b947ebae73b67a9a22b6f4': {slug: 'winter-sparkle-snap'},
319+
'97f70f6cdb5244a08d45772cccfa2788': {slug: 'year-of-memories-snap'}
217320
}
218-
export const bookSizes = ['8x8', '10x10', '12x12', '8x11', '11x8', '11x14'] as const
321+
export const bookSizes = [
322+
'5x7',
323+
'6x6',
324+
'8x8',
325+
'10x10',
326+
'12x12',
327+
'8x11',
328+
'11x8',
329+
'11x14'
330+
] as const
219331
export const coverTypes = ['sc', 'hc', 'pl'] as const
220332
export const pageTypes = ['sp', 'sl', 'dl'] as const
221333
export const imageDensities = ['low', 'medium', 'high'] as const

core/models/book.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import {getStyleIdBySlug, snakeCaseObjectKeysToCamelCase} from '../utils/toolbox
2525
import {z} from 'zod'
2626

2727
export type BookReport = {
28-
error: 'timeout'|'design'
28+
error: 'timeout' | 'design'
2929
step: string
3030
}
3131

@@ -82,6 +82,7 @@ export const bookPropsSchema = z.object({
8282
title: z.string(),
8383
subtitle: z.string().optional(),
8484
design_request: bookDesignRequestSchema,
85+
sku: z.string().optional(),
8586
state: z.enum(states).optional(),
8687
guid: z.string().optional(),
8788
cancelled_at: z.string().optional(),
@@ -97,6 +98,7 @@ export class Book {
9798
revision?: number
9899
subtitle?: string
99100
design_request: BookDesignRequest
101+
sku?: string
100102
state?: State
101103
guid?: string
102104
cancelled_at?: string
@@ -108,6 +110,7 @@ export class Book {
108110
this.title = props.title
109111
this.subtitle = props.subtitle
110112
this.design_request = new BookDesignRequest(props.design_request)
113+
this.sku = props.sku
111114
this.state = props.state
112115
this.guid = props.guid
113116
this.cancelled_at = props.cancelled_at

core/models/design-request/index.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export type DesignRequestProps = {
5050
state?: State
5151
occasion?: Occasion
5252
style?: Style
53+
sku?: string
5354
bookSize?: BookSize
5455
coverType?: CoverType
5556
pageType?: PageType
@@ -74,6 +75,7 @@ export class DesignRequest {
7475
subtitle?: string
7576
occasion: Occasion
7677
style: Style
78+
sku?: string
7779
bookSize: BookSize
7880
coverType: CoverType
7981
pageType: PageType
@@ -99,6 +101,7 @@ export class DesignRequest {
99101
this.subtitle = designRequestProps?.subtitle
100102
this.occasion = designRequestProps?.occasion || occasions[0]
101103
this.style = designRequestProps?.style || (parseInt(Object.keys(styles)[0]) as Style)
104+
this.sku = designRequestProps?.sku
102105
this.bookSize = designRequestProps?.bookSize || bookSizes[0]
103106
this.coverType = designRequestProps?.coverType || coverTypes[0]
104107
this.pageType = designRequestProps?.pageType || pageTypes[0]
@@ -123,7 +126,8 @@ export class DesignRequest {
123126
await this.client.engineAPI.designOptions.retrieve(
124127
this.bookSize,
125128
imageCount || this.images.length,
126-
this.imageFilteringLevel
129+
this.imageFilteringLevel,
130+
this.sku
127131
)
128132
)
129133
)
@@ -249,6 +253,7 @@ export class DesignRequest {
249253
title: designRequest.title,
250254
subtitle: designRequest.subtitle,
251255
design_request: bookDesignRequest,
256+
sku: designRequest.sku,
252257
state: designRequest.state,
253258
user_id: designRequest.userId
254259
})

core/models/engine-api/endpoints/design-options.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,13 @@ export class DesignOptionsEndpoints {
99
bindThisToFunctions(this)
1010
}
1111

12-
retrieve(
13-
bookSize: BookSize,
14-
imageCount: number,
15-
imageFilteringLevel: ImageFilteringLevel
16-
) {
12+
retrieve(bookSize: BookSize, imageCount: number, imageFilteringLevel: ImageFilteringLevel, sku?: string) {
1713
return handleAsyncFunction(async () => {
1814
const res = await this.engineAPI.fetcher.call({
1915
// eslint-disable-next-line max-len
20-
path: `/v1/designoptions/booksize/${bookSize}/imagecount/${imageCount}/imagefilteringlevel/${imageFilteringLevel}`
16+
path: `/v1/designoptions/booksize/${bookSize}/imagecount/${imageCount}/imagefilteringlevel/${imageFilteringLevel}${sku ? `?sku=${sku}` : ''}`
2117
})
2218
return designOptionsServerSchema.parse(res)
2319
})
2420
}
25-
2621
}

core/tests/factories/book.factory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export function bookFactory(props?: BookFactoryProps) {
3737
design_request: {
3838
occasion: props?.design_request?.occasion || faker.helpers.arrayElement(occasions),
3939
style: props?.design_request?.style ||
40-
styles[parseInt(faker.helpers.arrayElement(Object.keys(styles))) as Style].slug,
40+
styles[faker.helpers.arrayElement(Object.keys(styles)) as Style].slug,
4141
book_size: props?.design_request?.book_size || faker.helpers.arrayElement(bookSizes),
4242
cover_type: props?.design_request?.cover_type || faker.helpers.arrayElement(coverTypes),
4343
page_type: props?.design_request?.page_type || faker.helpers.arrayElement(pageTypes),

core/utils/toolbox.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,11 @@ export function cleanJSON(obj: unknown) {
101101
return JSON.parse(JSON.stringify(obj))
102102
}
103103

104-
export function getStyleIdBySlug(slug: string): number | undefined {
104+
export function getStyleIdBySlug(slug: string): string | undefined {
105105
for (const id in styles) {
106106
const style = styles[id as unknown as keyof typeof styles]
107107
if (style.slug === slug) {
108-
return parseInt(id)
108+
return id
109109
}
110110
}
111111
return undefined

0 commit comments

Comments
 (0)