Skip to content
This repository was archived by the owner on Feb 6, 2024. It is now read-only.

Commit 0e32f3c

Browse files
Merge pull request #343 from deckgo/content-publish-api
feat: update studio to publish content to new api
2 parents 1fa9230 + 0704ee3 commit 0e32f3c

File tree

8 files changed

+193
-518
lines changed

8 files changed

+193
-518
lines changed

studio/src/app/handlers/editor/events/deck/deck-events.handler.tsx

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import {DeckEditorService} from '../../../../services/editor/deck/deck-editor.se
2121
import {AuthService} from '../../../../services/auth/auth.service';
2222
import {DeckService} from '../../../../services/data/deck/deck.service';
2323
import {SlideService} from '../../../../services/data/slide/slide.service';
24-
import {ApiSlideService} from '../../../../services/api/slide/api.slide.service';
2524

2625
export class DeckEventsHandler {
2726

@@ -43,8 +42,6 @@ export class DeckEventsHandler {
4342
private deckService: DeckService;
4443
private slideService: SlideService;
4544

46-
private apiSlideService: ApiSlideService;
47-
4845
constructor() {
4946
this.errorService = ErrorService.getInstance();
5047
this.busyService = BusyService.getInstance();
@@ -55,8 +52,6 @@ export class DeckEventsHandler {
5552

5653
this.deckService = DeckService.getInstance();
5754
this.slideService = SlideService.getInstance();
58-
59-
this.apiSlideService = ApiSlideService.getInstance();
6055
}
6156

6257
init(el: HTMLElement): Promise<void> {
@@ -471,15 +466,12 @@ export class DeckEventsHandler {
471466
const slide: Slide = await this.slideService.get(deck.id, slideId);
472467

473468
if (slide && slide.data) {
474-
// 1. If needed, delete slide in the API
475-
await this.deleteApiSlide(deck, slide);
476-
477-
// TODO: no rush but ultimately maybe should we move step 2. and 3. below in a cloud function?
469+
// TODO: no rush but ultimately maybe should we move step 1. and 2. below in a cloud function?
478470

479-
// 2. Delete the slide in Firestore
471+
// 1. Delete the slide in Firestore
480472
await this.slideService.delete(deck.id, slideId);
481473

482-
// 3. Update list of slide in the deck (in Firestore)
474+
// 2. Update list of slide in the deck (in Firestore)
483475
if (deck.data.slides && deck.data.slides.indexOf(slideId) > -1) {
484476
deck.data.slides.splice(deck.data.slides.indexOf(slideId), 1);
485477

@@ -503,28 +495,6 @@ export class DeckEventsHandler {
503495
});
504496
}
505497

506-
private deleteApiSlide(deck: Deck, slide: Slide): Promise<void> {
507-
return new Promise<void>(async (resolve, reject) => {
508-
if (!deck.data.api_id || deck.data.api_id === undefined || deck.data.api_id === '') {
509-
resolve();
510-
return;
511-
}
512-
513-
if (!slide.data.api_id || slide.data.api_id === undefined || slide.data.api_id === '') {
514-
resolve();
515-
return;
516-
}
517-
518-
try {
519-
await this.apiSlideService.delete(deck.data.api_id, slide.data.api_id);
520-
521-
resolve();
522-
} catch (err) {
523-
reject(err);
524-
}
525-
});
526-
}
527-
528498
private deleteSlideElement(): Promise<void> {
529499
return new Promise<void>(async (resolve) => {
530500
const deck: HTMLElement = this.el.querySelector('deckgo-deck');

studio/src/app/models/api/api.deck.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import {DeckAttributes} from '../data/deck';
2+
import {ApiSlide} from './api.slide';
23

34
export interface ApiDeck {
45
id?: string;
5-
slides: string[];
6+
slides: ApiSlide[];
67
name: string;
78
owner_id: string;
89
attributes?: DeckAttributes;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface ApiPresentation {
2+
id: string,
3+
url: string;
4+
}

studio/src/app/models/api/api.slide.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {SlideAttributes, SlideTemplate} from '../data/slide';
22

33
export interface ApiSlide {
4-
id?: string;
54
content?: string;
65
template: SlideTemplate,
76
attributes?: SlideAttributes;

studio/src/app/services/api/deck/api.deck.service.tsx

Lines changed: 0 additions & 161 deletions
This file was deleted.
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import {EnvironmentConfigService} from '../../core/environment/environment-config.service';
2+
3+
import {ApiDeck} from '../../../models/api/api.deck';
4+
5+
import {EnvironmentDeckDeckGoConfig} from '../../core/environment/environment-config';
6+
7+
import {ApiPresentation} from '../../../models/api/api.presentation';
8+
9+
import {AuthService} from '../../auth/auth.service';
10+
11+
export class ApiPresentationService {
12+
13+
private static instance: ApiPresentationService;
14+
15+
private authService: AuthService;
16+
17+
private constructor() {
18+
// Private constructor, singleton
19+
this.authService = AuthService.getInstance();
20+
}
21+
22+
static getInstance() {
23+
if (!ApiPresentationService.instance) {
24+
ApiPresentationService.instance = new ApiPresentationService();
25+
}
26+
return ApiPresentationService.instance;
27+
}
28+
29+
post(deck: ApiDeck): Promise<ApiPresentation> {
30+
return this.query(deck, '/presentations', 'POST');
31+
}
32+
33+
put(apiDeckId: string, deck: ApiDeck, bearer?: string): Promise<ApiPresentation> {
34+
return this.query(deck, `/presentations/${apiDeckId}`, 'PUT', bearer);
35+
}
36+
37+
private query(deck: ApiDeck, context: string, method: string, bearer?: string): Promise<ApiPresentation> {
38+
return new Promise<ApiPresentation>(async (resolve, reject) => {
39+
try {
40+
const config: EnvironmentDeckDeckGoConfig = EnvironmentConfigService.getInstance().get('deckdeckgo');
41+
42+
if (!bearer) {
43+
bearer = await this.authService.getBearer();
44+
}
45+
46+
const rawResponse: Response = await fetch(config.apiUrl + context, {
47+
method: method,
48+
headers: {
49+
'Accept': 'application/json',
50+
'Content-Type': 'application/json',
51+
'Authorization': bearer
52+
},
53+
body: JSON.stringify(deck)
54+
});
55+
56+
if (!rawResponse || !rawResponse.ok) {
57+
reject('Something went wrong while creating or updating the deck');
58+
return;
59+
}
60+
61+
const publishedPresentation: ApiPresentation = await rawResponse.json();
62+
63+
resolve(publishedPresentation);
64+
} catch (err) {
65+
reject(err);
66+
}
67+
});
68+
}
69+
70+
}
71+

0 commit comments

Comments
 (0)