From 5016b0a55c6a5a0b3a9578d3b22175e2cee8365f Mon Sep 17 00:00:00 2001 From: peterpeterparker Date: Wed, 18 Sep 2019 20:04:42 +0200 Subject: [PATCH 1/2] feat(#341): publish content with api v2 --- .../events/deck/deck-events.handler.tsx | 36 +- studio/src/app/models/api/api.deck.tsx | 3 +- .../src/app/models/api/api.presentation.tsx | 4 + studio/src/app/models/api/api.slide.tsx | 1 - .../services/api/deck/api.deck.service.tsx | 161 --------- .../presentation/api.presentation.service.tsx | 71 ++++ .../services/api/slide/api.slide.service.tsx | 117 ------- .../editor/publish/publish.service.tsx | 318 +++++++----------- 8 files changed, 193 insertions(+), 518 deletions(-) create mode 100644 studio/src/app/models/api/api.presentation.tsx delete mode 100644 studio/src/app/services/api/deck/api.deck.service.tsx create mode 100644 studio/src/app/services/api/presentation/api.presentation.service.tsx delete mode 100644 studio/src/app/services/api/slide/api.slide.service.tsx diff --git a/studio/src/app/handlers/editor/events/deck/deck-events.handler.tsx b/studio/src/app/handlers/editor/events/deck/deck-events.handler.tsx index 74141eff4..6321fff7f 100644 --- a/studio/src/app/handlers/editor/events/deck/deck-events.handler.tsx +++ b/studio/src/app/handlers/editor/events/deck/deck-events.handler.tsx @@ -21,7 +21,6 @@ import {DeckEditorService} from '../../../../services/editor/deck/deck-editor.se import {AuthService} from '../../../../services/auth/auth.service'; import {DeckService} from '../../../../services/data/deck/deck.service'; import {SlideService} from '../../../../services/data/slide/slide.service'; -import {ApiSlideService} from '../../../../services/api/slide/api.slide.service'; export class DeckEventsHandler { @@ -43,8 +42,6 @@ export class DeckEventsHandler { private deckService: DeckService; private slideService: SlideService; - private apiSlideService: ApiSlideService; - constructor() { this.errorService = ErrorService.getInstance(); this.busyService = BusyService.getInstance(); @@ -55,8 +52,6 @@ export class DeckEventsHandler { this.deckService = DeckService.getInstance(); this.slideService = SlideService.getInstance(); - - this.apiSlideService = ApiSlideService.getInstance(); } init(el: HTMLElement): Promise { @@ -471,15 +466,12 @@ export class DeckEventsHandler { const slide: Slide = await this.slideService.get(deck.id, slideId); if (slide && slide.data) { - // 1. If needed, delete slide in the API - await this.deleteApiSlide(deck, slide); - - // TODO: no rush but ultimately maybe should we move step 2. and 3. below in a cloud function? + // TODO: no rush but ultimately maybe should we move step 1. and 2. below in a cloud function? - // 2. Delete the slide in Firestore + // 1. Delete the slide in Firestore await this.slideService.delete(deck.id, slideId); - // 3. Update list of slide in the deck (in Firestore) + // 2. Update list of slide in the deck (in Firestore) if (deck.data.slides && deck.data.slides.indexOf(slideId) > -1) { deck.data.slides.splice(deck.data.slides.indexOf(slideId), 1); @@ -503,28 +495,6 @@ export class DeckEventsHandler { }); } - private deleteApiSlide(deck: Deck, slide: Slide): Promise { - return new Promise(async (resolve, reject) => { - if (!deck.data.api_id || deck.data.api_id === undefined || deck.data.api_id === '') { - resolve(); - return; - } - - if (!slide.data.api_id || slide.data.api_id === undefined || slide.data.api_id === '') { - resolve(); - return; - } - - try { - await this.apiSlideService.delete(deck.data.api_id, slide.data.api_id); - - resolve(); - } catch (err) { - reject(err); - } - }); - } - private deleteSlideElement(): Promise { return new Promise(async (resolve) => { const deck: HTMLElement = this.el.querySelector('deckgo-deck'); diff --git a/studio/src/app/models/api/api.deck.tsx b/studio/src/app/models/api/api.deck.tsx index 73e156a0f..61a60d8ef 100644 --- a/studio/src/app/models/api/api.deck.tsx +++ b/studio/src/app/models/api/api.deck.tsx @@ -1,8 +1,9 @@ import {DeckAttributes} from '../data/deck'; +import {ApiSlide} from './api.slide'; export interface ApiDeck { id?: string; - slides: string[]; + slides: ApiSlide[]; name: string; owner_id: string; attributes?: DeckAttributes; diff --git a/studio/src/app/models/api/api.presentation.tsx b/studio/src/app/models/api/api.presentation.tsx new file mode 100644 index 000000000..43525b713 --- /dev/null +++ b/studio/src/app/models/api/api.presentation.tsx @@ -0,0 +1,4 @@ +export interface ApiPresentation { + id: string, + url: string; +} diff --git a/studio/src/app/models/api/api.slide.tsx b/studio/src/app/models/api/api.slide.tsx index a865294ce..860ce9605 100644 --- a/studio/src/app/models/api/api.slide.tsx +++ b/studio/src/app/models/api/api.slide.tsx @@ -1,7 +1,6 @@ import {SlideAttributes, SlideTemplate} from '../data/slide'; export interface ApiSlide { - id?: string; content?: string; template: SlideTemplate, attributes?: SlideAttributes; diff --git a/studio/src/app/services/api/deck/api.deck.service.tsx b/studio/src/app/services/api/deck/api.deck.service.tsx deleted file mode 100644 index cddeeed4c..000000000 --- a/studio/src/app/services/api/deck/api.deck.service.tsx +++ /dev/null @@ -1,161 +0,0 @@ -import {EnvironmentConfigService} from '../../core/environment/environment-config.service'; - -import {ApiDeck} from '../../../models/api/api.deck'; - -import {EnvironmentDeckDeckGoConfig} from '../../core/environment/environment-config'; - -import {AuthService} from '../../auth/auth.service'; - -interface DeckPublish { - url: string; -} - -export class ApiDeckService { - - private static instance: ApiDeckService; - - private authService: AuthService; - - private constructor() { - // Private constructor, singleton - this.authService = AuthService.getInstance(); - } - - static getInstance() { - if (!ApiDeckService.instance) { - ApiDeckService.instance = new ApiDeckService(); - } - return ApiDeckService.instance; - } - - post(deck: ApiDeck): Promise { - return this.query(deck, '/decks', 'POST'); - } - - put(deck: ApiDeck, bearer?: string): Promise { - return this.query(deck, `/decks/${deck.id}`, 'PUT', bearer); - } - - private query(deck: ApiDeck, context: string, method: string, bearer?: string): Promise { - return new Promise(async (resolve, reject) => { - try { - const config: EnvironmentDeckDeckGoConfig = EnvironmentConfigService.getInstance().get('deckdeckgo'); - - if (!bearer) { - bearer = await this.authService.getBearer(); - } - - const rawResponse: Response = await fetch(config.apiUrl + context, { - method: method, - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'Authorization': bearer - }, - body: JSON.stringify(deck) - }); - - if (!rawResponse || !rawResponse.ok) { - reject('Something went wrong while creating or updating the deck'); - return; - } - - const persistedDeck: ApiDeck = await rawResponse.json(); - - resolve(persistedDeck); - } catch (err) { - reject(err); - } - }); - } - - get(deckId: string, bearer?: string): Promise { - return new Promise(async (resolve, reject) => { - try { - const config: EnvironmentDeckDeckGoConfig = EnvironmentConfigService.getInstance().get('deckdeckgo'); - - if (!bearer) { - bearer = await this.authService.getBearer(); - } - - const rawResponse: Response = await fetch(config.apiUrl + `/decks/${deckId}`, { - method: 'GET', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'Authorization': bearer - } - }); - - if (!rawResponse || !rawResponse.ok) { - reject('Something went wrong while loading the deck'); - return; - } - - const deck: ApiDeck = await rawResponse.json(); - - resolve(deck); - } catch (err) { - reject(err); - } - }); - } - - getUserDecks(userId: string): Promise { - return new Promise(async (resolve, reject) => { - try { - const config: EnvironmentDeckDeckGoConfig = EnvironmentConfigService.getInstance().get('deckdeckgo'); - - const rawResponse: Response = await fetch(config.apiUrl + '/decks/?owner_id=' + userId, { - method: 'GET', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'Authorization': await this.authService.getBearer() - } - }); - - if (!rawResponse || !rawResponse.ok) { - reject('Something went wrong while creating or updating the deck'); - return; - } - - const persistedDecks: ApiDeck[] = await rawResponse.json(); - - resolve(persistedDecks); - } catch (err) { - reject(err); - } - }); - } - - publish(deck: ApiDeck): Promise { - return new Promise(async (resolve, reject) => { - try { - const config: EnvironmentDeckDeckGoConfig = EnvironmentConfigService.getInstance().get('deckdeckgo'); - - const bearer: string = await this.authService.getBearer(); - - const rawResponse: Response = await fetch(config.apiUrl + `/decks/${deck.id}/publish`, { - method: 'POST', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'Authorization': bearer - } - }); - - if (!rawResponse || !rawResponse.ok) { - reject('Something went wrong while publishing the deck'); - return; - } - const result: DeckPublish = await rawResponse.json(); - - resolve(result ? result.url : null); - } catch (err) { - reject(err); - } - }); - } -} - diff --git a/studio/src/app/services/api/presentation/api.presentation.service.tsx b/studio/src/app/services/api/presentation/api.presentation.service.tsx new file mode 100644 index 000000000..1be3d75c7 --- /dev/null +++ b/studio/src/app/services/api/presentation/api.presentation.service.tsx @@ -0,0 +1,71 @@ +import {EnvironmentConfigService} from '../../core/environment/environment-config.service'; + +import {ApiDeck} from '../../../models/api/api.deck'; + +import {EnvironmentDeckDeckGoConfig} from '../../core/environment/environment-config'; + +import {ApiPresentation} from '../../../models/api/api.presentation'; + +import {AuthService} from '../../auth/auth.service'; + +export class ApiPresentationService { + + private static instance: ApiPresentationService; + + private authService: AuthService; + + private constructor() { + // Private constructor, singleton + this.authService = AuthService.getInstance(); + } + + static getInstance() { + if (!ApiPresentationService.instance) { + ApiPresentationService.instance = new ApiPresentationService(); + } + return ApiPresentationService.instance; + } + + post(deck: ApiDeck): Promise { + return this.query(deck, '/presentations', 'POST'); + } + + put(deck: ApiDeck, bearer?: string): Promise { + return this.query(deck, `/presentations/${deck.id}`, 'PUT', bearer); + } + + private query(deck: ApiDeck, context: string, method: string, bearer?: string): Promise { + return new Promise(async (resolve, reject) => { + try { + const config: EnvironmentDeckDeckGoConfig = EnvironmentConfigService.getInstance().get('deckdeckgo'); + + if (!bearer) { + bearer = await this.authService.getBearer(); + } + + const rawResponse: Response = await fetch(config.apiUrl + context, { + method: method, + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Authorization': bearer + }, + body: JSON.stringify(deck) + }); + + if (!rawResponse || !rawResponse.ok) { + reject('Something went wrong while creating or updating the deck'); + return; + } + + const publishedPresentation: ApiPresentation = await rawResponse.json(); + + resolve(publishedPresentation); + } catch (err) { + reject(err); + } + }); + } + +} + diff --git a/studio/src/app/services/api/slide/api.slide.service.tsx b/studio/src/app/services/api/slide/api.slide.service.tsx deleted file mode 100644 index 7be6fcf45..000000000 --- a/studio/src/app/services/api/slide/api.slide.service.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import {ApiSlide} from '../../../models/api/api.slide'; - -import {EnvironmentDeckDeckGoConfig} from '../../core/environment/environment-config'; - -import {AuthService} from '../../auth/auth.service'; -import {EnvironmentConfigService} from '../../core/environment/environment-config.service'; - -export class ApiSlideService { - - private static instance: ApiSlideService; - - private authService: AuthService; - - private constructor() { - // Private constructor, singleton - this.authService = AuthService.getInstance(); - } - - static getInstance() { - if (!ApiSlideService.instance) { - ApiSlideService.instance = new ApiSlideService(); - } - return ApiSlideService.instance; - } - - - post(deckId: string, slide: ApiSlide): Promise { - return this.query(slide, `/decks/${deckId}/slides`, 'POST'); - } - - put(deckId: string, slide: ApiSlide): Promise { - return this.query(slide, `/decks/${deckId}/slides/${slide.id}`,'PUT'); - } - - delete(deckId: string, slide_id: string): Promise { - return new Promise(async (resolve, reject) => { - try { - const config: EnvironmentDeckDeckGoConfig = EnvironmentConfigService.getInstance().get('deckdeckgo'); - - const rawResponse: Response = await fetch(config.apiUrl + `/decks/${deckId}/slides/` + slide_id, { - method: 'DELETE', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'Authorization': await this.authService.getBearer() - } - }); - - if (!rawResponse || !rawResponse.ok) { - reject('Something went wrong while deleting the slide'); - return; - } - - resolve(); - } catch (err) { - reject(err); - } - }); - } - - private query(slide: ApiSlide, context: string, method: string): Promise { - return new Promise(async (resolve, reject) => { - try { - const config: EnvironmentDeckDeckGoConfig = EnvironmentConfigService.getInstance().get('deckdeckgo'); - - const rawResponse: Response = await fetch(config.apiUrl + context, { - method: method, - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'Authorization': await this.authService.getBearer() - }, - body: JSON.stringify(slide) - }); - - if (!rawResponse || !rawResponse.ok) { - reject('Something went wrong while creating or updating the slide'); - return; - } - - const persistedSlide: ApiSlide = await rawResponse.json(); - - resolve(persistedSlide); - } catch (err) { - reject(err); - } - }); - } - - get(deckId: string, slideId: string): Promise { - return new Promise(async (resolve, reject) => { - try { - const config: EnvironmentDeckDeckGoConfig = EnvironmentConfigService.getInstance().get('deckdeckgo'); - - const rawResponse: Response = await fetch(config.apiUrl + `/decks/${deckId}/slides/${slideId}`, { - method: 'GET', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'Authorization': await this.authService.getBearer() - } - }); - - if (!rawResponse || !rawResponse.ok) { - reject('Something went wrong while loading the slide'); - return; - } - - const slide: ApiSlide = await rawResponse.json(); - - resolve(slide); - } catch (err) { - reject(err); - } - }); - } -} diff --git a/studio/src/app/services/editor/publish/publish.service.tsx b/studio/src/app/services/editor/publish/publish.service.tsx index 3cb468950..88769533f 100644 --- a/studio/src/app/services/editor/publish/publish.service.tsx +++ b/studio/src/app/services/editor/publish/publish.service.tsx @@ -9,13 +9,15 @@ import {ApiDeck} from '../../../models/api/api.deck'; import {Slide} from '../../../models/data/slide'; import {User} from '../../../models/data/user'; -import {DeckEditorService} from '../deck/deck-editor.service'; -import {ApiDeckService} from '../../api/deck/api.deck.service'; -import {ApiSlideService} from '../../api/slide/api.slide.service'; +import {ApiPresentation} from '../../../models/api/api.presentation'; import {ApiSlide} from '../../../models/api/api.slide'; + import {DeckService} from '../../data/deck/deck.service'; import {SlideService} from '../../data/slide/slide.service'; import {UserService} from '../../data/user/user.service'; +import {DeckEditorService} from '../deck/deck-editor.service'; + +import {ApiPresentationService} from '../../api/presentation/api.presentation.service'; export class PublishService { @@ -23,8 +25,7 @@ export class PublishService { private deckEditorService: DeckEditorService; - private apiDeckService: ApiDeckService; - private apiSlideService: ApiSlideService; + private apiPresentationService: ApiPresentationService; private deckService: DeckService; private slideService: SlideService; @@ -37,8 +38,7 @@ export class PublishService { // Private constructor, singleton this.deckEditorService = DeckEditorService.getInstance(); - this.apiDeckService = ApiDeckService.getInstance(); - this.apiSlideService = ApiSlideService.getInstance(); + this.apiPresentationService = ApiPresentationService.getInstance(); this.deckService = DeckService.getInstance(); this.slideService = SlideService.getInstance(); @@ -78,31 +78,33 @@ export class PublishService { return; } - const apiDeck: ApiDeck = await this.createOrUpdateApiDeck(deck); - - this.progress(0.15); - - const newApiId: boolean = deck.data.api_id !== apiDeck.id; - if (newApiId) { - deck.data.api_id = apiDeck.id; + const apiDeck: ApiDeck = await this.convertDeck(deck); - deck = await this.deckService.update(deck); - } + this.progress(0.25); - this.progress(0.3); + const apiDeckPublish: ApiPresentation = await this.publishDeck(deck, apiDeck); - const apiSlideIds: string[] = await this.createOrUpdateApiSlides(deck); + this.progress(0.50); - this.progress(0.5); + if (!apiDeckPublish || !apiDeckPublish.id || !apiDeckPublish.url) { + this.progressComplete(); + reject('Publish failed'); + return; + } - const updatedApiDeck: ApiDeck = await this.putApiDeckSlidesList(apiDeck, apiSlideIds); + this.progress(0.75); - this.progress(0.65); + const newApiId: boolean = deck.data.api_id !== apiDeckPublish.id; + if (newApiId) { + deck.data.api_id = apiDeckPublish.id; - const publishedUrl: string = await this.apiDeckService.publish(updatedApiDeck); + deck = await this.deckService.update(deck); + } this.progress(0.80); + const publishedUrl: string = apiDeckPublish.url; + await this.delayUpdateMeta(deck, publishedUrl, description, tags, newApiId); resolve(publishedUrl); @@ -114,6 +116,95 @@ export class PublishService { }); } + private publishDeck(deck: Deck, apiDeck: ApiDeck): Promise { + return new Promise(async (resolve, reject) => { + try { + const apiDeckPublish: ApiPresentation = await this.createOrUpdatePublish(deck, apiDeck); + + resolve(apiDeckPublish); + } catch (err) { + reject (err); + } + }) + } + + private createOrUpdatePublish(deck: Deck, apiDeck: ApiDeck): Promise { + if (deck.data.api_id) { + return this.apiPresentationService.put(apiDeck); + } else { + return this.apiPresentationService.post(apiDeck); + } + } + + private convertDeck(deck: Deck): Promise { + return new Promise(async (resolve, reject) => { + try { + const apiSlides: ApiSlide[] = await this.convertSlides(deck); + + const apiDeck: ApiDeck = { + name: deck.data.name, + owner_id: deck.data.owner_id, + attributes: deck.data.attributes, + background: deck.data.background, + slides: apiSlides + }; + + resolve(apiDeck); + } catch (err) { + reject(err); + } + }); + } + + private convertSlides(deck: Deck): Promise { + return new Promise(async (resolve, reject) => { + if (!deck.data.slides || deck.data.slides.length <= 0) { + resolve([]); + return; + } + + try { + const promises: Promise[] = []; + + for (let i: number = 0; i < deck.data.slides.length; i++) { + const slideId: string = deck.data.slides[i]; + + promises.push(this.convertSlide(deck, slideId)); + } + + if (!promises || promises.length <= 0) { + resolve([]); + return; + } + + const slides: ApiSlide[] = await Promise.all(promises); + + resolve(slides); + } catch (err) { + reject(err); + } + }); + } + + private convertSlide(deck: Deck, slideId: string): Promise { + return new Promise(async (resolve, reject) => { + const slide: Slide = await this.slideService.get(deck.id, slideId); + + if (!slide || !slide.data) { + reject('Missing slide for publishing'); + return; + } + + const apiSlide: ApiSlide = { + template: slide.data.template, + content: slide.data.content, + attributes: slide.data.attributes + }; + + resolve(apiSlide); + }); + } + // Even if we fixed the delay to publish to Cloudfare CDN (#195), sometimes if too quick, the presentation will not be correctly published // Therefore, to avoid such problem, we add a bit of delay in the process but only for the first publish private delayUpdateMeta(deck: Deck, publishedUrl: string, description: string, tags: string[], delay: boolean): Promise { @@ -219,187 +310,4 @@ export class PublishService { } }); } - - private createOrUpdateApiDeck(deck: Deck): Promise { - return new Promise(async (resolve, reject) => { - try { - let persistedApiDeck: ApiDeck; - - if (deck.data.api_id && deck.data.api_id !== undefined && deck.data.api_id !== '') { - const currentDeck: ApiDeck = await this.apiDeckService.get(deck.data.api_id); - - if (!currentDeck) { - persistedApiDeck = await this.postApiDeck(deck); - } else { - persistedApiDeck = await this.putApiDeck(currentDeck, deck); - } - } else { - persistedApiDeck = await this.postApiDeck(deck); - } - - resolve(persistedApiDeck); - } catch (err) { - reject(err); - } - }) - } - - private putApiDeck(currentDeck: ApiDeck, deck: Deck): Promise { - return new Promise(async (resolve, reject) => { - try { - currentDeck.name = deck.data.name; - currentDeck.attributes = deck.data.attributes; - currentDeck.background = deck.data.background; - - const persistedDeck: ApiDeck = await this.apiDeckService.put(currentDeck); - - resolve(persistedDeck); - } catch (err) { - reject(err); - } - }); - } - - private postApiDeck(deck: Deck): Promise { - return new Promise(async (resolve, reject) => { - try { - const apiDeck: ApiDeck = { - slides: [], - name: deck.data.name, - owner_id: deck.data.owner_id, - attributes: deck.data.attributes, - background: deck.data.background - }; - - const persistedDeck: ApiDeck = await this.apiDeckService.post(apiDeck); - - resolve(persistedDeck); - } catch (err) { - reject(err); - } - }); - } - - private putApiDeckSlidesList(apiDeck: ApiDeck, apiSlideIds: string[]): Promise { - return new Promise(async (resolve, reject) => { - try { - apiDeck.slides = apiSlideIds; - - const persistedDeck: ApiDeck = await this.apiDeckService.put(apiDeck); - - resolve(persistedDeck); - } catch (err) { - reject(err); - } - }); - } - - private createOrUpdateApiSlides(deck: Deck): Promise { - return new Promise(async (resolve, reject) => { - if (!deck.data.slides || deck.data.slides.length <= 0) { - resolve([]); - return; - } - - try { - const apiSlideIds: string[] = []; - - for (let i: number = 0; i < deck.data.slides.length; i++) { - const slideId: string = deck.data.slides[i]; - const apiSlideId: string = await this.fetchAndCreateOrUpdateSlide(deck, slideId); - apiSlideIds.push(apiSlideId); - } - - resolve(apiSlideIds); - } catch (err) { - reject(err); - } - }); - } - - private fetchAndCreateOrUpdateSlide(deck: Deck, slideId: string): Promise { - return new Promise(async (resolve, reject) => { - try { - const slide: Slide = await this.slideService.get(deck.id, slideId); - - if (!slide || !slide.data) { - reject('Missing slide for publishing'); - return; - } - - const apiSlide: ApiSlide = await this.createOrUpdateApiSlide(deck.data.api_id, slide); - - if (!apiSlide) { - reject('Slide could not be created or updated'); - return; - } - - if (slide.data.api_id !== apiSlide.id) { - slide.data.api_id = apiSlide.id; - await this.slideService.update(deck.id, slide); - } - - resolve(apiSlide.id); - } catch (err) { - reject(err); - } - }); - } - - private createOrUpdateApiSlide(apiDeckId: string, slide: Slide): Promise { - return new Promise(async (resolve, reject) => { - try { - let persistedApiSlide: ApiSlide; - - if (slide.data.api_id && slide.data.api_id !== undefined && slide.data.api_id !== '') { - const currentSlide: ApiSlide = await this.apiSlideService.get(apiDeckId, slide.data.api_id); - - if (!currentSlide) { - persistedApiSlide = await this.postApiSlide(apiDeckId, slide); - } else { - persistedApiSlide = await this.putApiSlide(apiDeckId, currentSlide, slide); - } - } else { - persistedApiSlide = await this.postApiSlide(apiDeckId, slide); - } - - resolve(persistedApiSlide); - } catch (err) { - reject(err); - } - }) - } - - private putApiSlide(apiDeckId: string, currentSlide: ApiSlide, slide: Slide): Promise { - return new Promise(async (resolve, reject) => { - try { - currentSlide.content = slide.data.content; - currentSlide.attributes = slide.data.attributes; - - const persistedSlide: ApiSlide = await this.apiSlideService.put(apiDeckId, currentSlide); - - resolve(persistedSlide); - } catch (err) { - reject(err); - } - }); - } - - private postApiSlide(apiDeckId: string, slide: Slide): Promise { - return new Promise(async (resolve, reject) => { - try { - const apiSlide: ApiSlide = { - template: slide.data.template, - content: slide.data.content, - attributes: slide.data.attributes - }; - - const persistedSlide: ApiSlide = await this.apiSlideService.post(apiDeckId, apiSlide); - - resolve(persistedSlide); - } catch (err) { - reject(err); - } - }); - } } From 0704ee32aba07d554d7a9ab3c4c3f0a65c3cd201 Mon Sep 17 00:00:00 2001 From: peterpeterparker Date: Wed, 18 Sep 2019 20:44:09 +0200 Subject: [PATCH 2/2] feat(#341): pass api deck id for put --- .../services/api/presentation/api.presentation.service.tsx | 4 ++-- studio/src/app/services/editor/publish/publish.service.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/studio/src/app/services/api/presentation/api.presentation.service.tsx b/studio/src/app/services/api/presentation/api.presentation.service.tsx index 1be3d75c7..5c5bc15ce 100644 --- a/studio/src/app/services/api/presentation/api.presentation.service.tsx +++ b/studio/src/app/services/api/presentation/api.presentation.service.tsx @@ -30,8 +30,8 @@ export class ApiPresentationService { return this.query(deck, '/presentations', 'POST'); } - put(deck: ApiDeck, bearer?: string): Promise { - return this.query(deck, `/presentations/${deck.id}`, 'PUT', bearer); + put(apiDeckId: string, deck: ApiDeck, bearer?: string): Promise { + return this.query(deck, `/presentations/${apiDeckId}`, 'PUT', bearer); } private query(deck: ApiDeck, context: string, method: string, bearer?: string): Promise { diff --git a/studio/src/app/services/editor/publish/publish.service.tsx b/studio/src/app/services/editor/publish/publish.service.tsx index 88769533f..227b662b0 100644 --- a/studio/src/app/services/editor/publish/publish.service.tsx +++ b/studio/src/app/services/editor/publish/publish.service.tsx @@ -130,7 +130,7 @@ export class PublishService { private createOrUpdatePublish(deck: Deck, apiDeck: ApiDeck): Promise { if (deck.data.api_id) { - return this.apiPresentationService.put(apiDeck); + return this.apiPresentationService.put(deck.data.api_id, apiDeck); } else { return this.apiPresentationService.post(apiDeck); }