diff --git a/backend/codiki-exposition/src/main/java/org/codiki/exposition/publication/PublicationController.java b/backend/codiki-exposition/src/main/java/org/codiki/exposition/publication/PublicationController.java
index 7dd9560..0704bc0 100644
--- a/backend/codiki-exposition/src/main/java/org/codiki/exposition/publication/PublicationController.java
+++ b/backend/codiki-exposition/src/main/java/org/codiki/exposition/publication/PublicationController.java
@@ -1,29 +1,22 @@
package org.codiki.exposition.publication;
+import org.codiki.application.publication.PublicationUseCases;
+import org.codiki.domain.publication.exception.NoPublicationSearchResultException;
+import org.codiki.domain.publication.exception.PublicationNotFoundException;
+import org.codiki.domain.publication.model.Publication;
+import org.codiki.domain.publication.model.PublicationEditionRequest;
+import org.codiki.exposition.publication.model.PreviewContentRequest;
+import org.codiki.exposition.publication.model.PreviewContentResponse;
+import org.codiki.exposition.publication.model.PublicationDto;
+import org.codiki.exposition.publication.model.PublicationEditionRequestDto;
+import org.springframework.web.bind.annotation.*;
+
import java.util.List;
import java.util.UUID;
import static org.springframework.http.HttpStatus.CREATED;
import static org.springframework.http.HttpStatus.NO_CONTENT;
import static org.springframework.util.ObjectUtils.isEmpty;
-import org.codiki.application.publication.PublicationUseCases;
-import org.codiki.domain.publication.exception.NoPublicationSearchResultException;
-import org.codiki.domain.publication.exception.PublicationNotFoundException;
-import org.codiki.domain.publication.model.Publication;
-import org.codiki.domain.publication.model.PublicationEditionRequest;
-import org.codiki.exposition.publication.model.PreviewContentRequest;
-import org.codiki.exposition.publication.model.PublicationDto;
-import org.codiki.exposition.publication.model.PublicationEditionRequestDto;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseStatus;
-import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/publications")
@@ -93,8 +86,9 @@ public class PublicationController {
return publications;
}
- @PostMapping("/preview")
- public String previewPublicationContent(@RequestBody PreviewContentRequest request) {
- return publicationUseCases.previewContent(request.text());
+ @PostMapping(value = "/preview")
+ public PreviewContentResponse previewPublicationContent(@RequestBody PreviewContentRequest request) {
+ String previewContent = publicationUseCases.previewContent(request.text());
+ return new PreviewContentResponse(previewContent);
}
}
diff --git a/backend/codiki-exposition/src/main/java/org/codiki/exposition/publication/model/PreviewContentResponse.java b/backend/codiki-exposition/src/main/java/org/codiki/exposition/publication/model/PreviewContentResponse.java
new file mode 100644
index 0000000..afa69e7
--- /dev/null
+++ b/backend/codiki-exposition/src/main/java/org/codiki/exposition/publication/model/PreviewContentResponse.java
@@ -0,0 +1,5 @@
+package org.codiki.exposition.publication.model;
+
+public record PreviewContentResponse(
+ String text
+) {}
diff --git a/backend/rest-client-collection/Codiki/Publication/Preview content.bru b/backend/rest-client-collection/Codiki/Publication/Preview content.bru
new file mode 100644
index 0000000..44009a7
--- /dev/null
+++ b/backend/rest-client-collection/Codiki/Publication/Preview content.bru
@@ -0,0 +1,21 @@
+meta {
+ name: Preview content
+ type: http
+ seq: 7
+}
+
+post {
+ url: {{url}}/api/publications/preview
+ body: json
+ auth: bearer
+}
+
+auth:bearer {
+ token: {{bearerToken}}
+}
+
+body:json {
+ {
+ "text" : "[h1]Test[/h1]"
+ }
+}
diff --git a/backend/rest-client-collection/Codiki/environments/localhost.bru b/backend/rest-client-collection/Codiki/environments/localhost.bru
index 73a91db..e46e189 100644
--- a/backend/rest-client-collection/Codiki/environments/localhost.bru
+++ b/backend/rest-client-collection/Codiki/environments/localhost.bru
@@ -1,7 +1,7 @@
vars {
url: http://localhost:8987
publicationId: ec76602f-5501-4091-868e-b471611e63de
- bearerToken: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1YWQ0NjJiOC04ZjllLTRhMjYtYmI4Ni1jNzRmZWY1ZDExYjYiLCJleHAiOjE3MTA4Mzc2ODQsInBzZXVkbyI6IlN0YW5kYXJkIHVzZXIiLCJlbWFpbCI6InN0YW5kYXJkLnVzZXJAY29kaWtpLm9yZyIsInJvbGVzIjoiU1RBTkRBUkQifQ.2HggC3T_4I14IpW02DZJiYfgYwc074kU8Y4AmuGf1mZzv0U8OUxpAw_xEhnKtn8NcaCozz_2vFv4o_CaBqS8Ag
+ bearerToken: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMWQ1NTdhNi04OGIxLTQyNzQtOTk0ZS1mOWE5YTYwOTc5OTciLCJleHAiOjE3MjY5NTExNTgsInBob3RvSWQiOiI2MjhkYTFhNy0wNzAyLTRlNDktOGIwNi00ZDg2MGE2YTNkZTUiLCJwc2V1ZG8iOiJUYWtpZ3VjaGkiLCJlbWFpbCI6ImZsb3JpYW4udGhpZXJyeTcyQGdtYWlsLmNvbSIsInJvbGVzIjoiU1RBTkRBUkQifQ.4OQglB0cT2hTMO7_Bfxj7nQPYi42e0Gh06jmHj2q-SQTM6Md70Ii_BiKR__GxY14bahPAjLcIWfAYS2A0Tc1Vw
categoryId: 172fa901-3f4b-4540-92f3-1c15820e8ec9
pictureId: 65b660b7-66bb-4e4a-a62c-fd0ca101f972
}
diff --git a/frontend/src/app/components/publication-edition/publication-edition.component.html b/frontend/src/app/components/publication-edition/publication-edition.component.html
index 7629a4e..439d537 100644
--- a/frontend/src/app/components/publication-edition/publication-edition.component.html
+++ b/frontend/src/app/components/publication-edition/publication-edition.component.html
@@ -86,7 +86,7 @@
{{ publication.title }}
{{ publication.description }}
-
+
}
diff --git a/frontend/src/app/components/publication-edition/publication-edition.component.ts b/frontend/src/app/components/publication-edition/publication-edition.component.ts
index 1fa1759..1aa2b8b 100644
--- a/frontend/src/app/components/publication-edition/publication-edition.component.ts
+++ b/frontend/src/app/components/publication-edition/publication-edition.component.ts
@@ -1,20 +1,20 @@
import { CommonModule, Location } from "@angular/common";
-import { Component, EventEmitter, inject, Input, OnChanges, OnDestroy, OnInit, Output } from "@angular/core";
+import { Component, EventEmitter, inject, Input, OnChanges, OnDestroy, Output } from "@angular/core";
import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule, Validators } from "@angular/forms";
import { MatDialogModule } from "@angular/material/dialog";
import { MatIconModule } from "@angular/material/icon";
import { MatInputModule } from "@angular/material/input";
import { MatProgressSpinnerModule } from "@angular/material/progress-spinner";
+import { MatSelectModule } from "@angular/material/select";
import { MatTabsModule } from "@angular/material/tabs";
import { MatTooltipModule } from "@angular/material/tooltip";
-import { filter, map, Observable, of, Subscription } from "rxjs";
-import { Publication } from "../../core/rest-services/publications/model/publication";
-import { PictureSelectionDialog } from "./picture-selection-dialog/picture-selection-dialog.component";
-import { SubmitButtonComponent } from "../submit-button/submit-button.component";
-import { PublicationEditionService } from "./publication-edition.service";
-import { MatSelectModule } from "@angular/material/select";
-import { CategoryService } from "../../core/service/category.service";
+import { map, Observable, of, Subscription } from "rxjs";
import { Category } from "../../core/rest-services/category/model/category";
+import { Publication } from "../../core/rest-services/publications/model/publication";
+import { CategoryService } from "../../core/service/category.service";
+import { SubmitButtonComponent } from "../submit-button/submit-button.component";
+import { PictureSelectionDialog } from "./picture-selection-dialog/picture-selection-dialog.component";
+import { PublicationEditionService } from "./publication-edition.service";
@Component({
selector: 'app-publication-edition',
@@ -46,11 +46,11 @@ export class PublicationEditionComponent implements OnChanges, OnDestroy {
@Output()
publicationSave = new EventEmitter();
+ publicationInEdition!: Publication;
private readonly categoryService = inject(CategoryService);
private readonly formBuilder = inject(FormBuilder);
private readonly location = inject(Location);
private readonly publicationEditionService = inject(PublicationEditionService);
- private publicationInEdition!: Publication;
private subscriptions: Subscription[] = [];
publicationEditionForm: FormGroup = this.formBuilder.group({
@@ -92,7 +92,7 @@ export class PublicationEditionComponent implements OnChanges, OnDestroy {
}
return 0;
}
-
+
ngOnChanges(): void {
this.ngOnDestroy();
@@ -129,12 +129,13 @@ export class PublicationEditionComponent implements OnChanges, OnDestroy {
this.subscriptions.push(categoryIdChangeSubscription);
const publicationSubscription = this.publicationEditionService.state$.subscribe(state => {
+ console.log(state.publication.parsedText.substring(0, 15));
this.publicationInEdition = state.publication;
- this.publicationEditionForm.controls['title'].setValue(this.publication.title, { emitEvent: false });
- this.publicationEditionForm.controls['description'].setValue(this.publication.description, { emitEvent: false });
- this.publicationEditionForm.controls['text'].setValue(this.publication.text, { emitEvent: false });
- this.publicationEditionForm.controls['illustrationId'].setValue(this.publication.illustrationId, { emitEvent: false });
- this.publicationEditionForm.controls['categoryId'].setValue(this.publication.categoryId, { emitEvent: false });
+ this.publicationEditionForm.controls['title'].setValue(this.publicationInEdition.title, { emitEvent: false });
+ this.publicationEditionForm.controls['description'].setValue(this.publicationInEdition.description, { emitEvent: false });
+ this.publicationEditionForm.controls['text'].setValue(this.publicationInEdition.text, { emitEvent: false });
+ this.publicationEditionForm.controls['illustrationId'].setValue(this.publicationInEdition.illustrationId, { emitEvent: false });
+ this.publicationEditionForm.controls['categoryId'].setValue(this.publicationInEdition.categoryId, { emitEvent: false });
});
this.subscriptions.push(publicationSubscription);
}
diff --git a/frontend/src/app/components/publication-edition/publication-edition.service.ts b/frontend/src/app/components/publication-edition/publication-edition.service.ts
index 92201a1..ef60523 100644
--- a/frontend/src/app/components/publication-edition/publication-edition.service.ts
+++ b/frontend/src/app/components/publication-edition/publication-edition.service.ts
@@ -9,6 +9,7 @@ import { PublicationRestService } from "../../core/rest-services/publications/pu
import { copy } from "../../core/utils/ObjectUtils";
import { CodeBlockDialog } from "./code-block-dialog/code-block-dialog.component";
import { PictureSelectionDialog } from "./picture-selection-dialog/picture-selection-dialog.component";
+import { PreviewContentRequest } from "../../core/rest-services/publications/model/preview";
declare let Prism: any;
@@ -76,7 +77,7 @@ export class PublicationEditionService implements OnDestroy {
}
private _save(state: PublicationEditionState): void {
- this.stateSubject.next(state);
+ this.stateSubject.next(state);
}
get isLoading$(): Observable {
@@ -268,9 +269,12 @@ export class PublicationEditionService implements OnDestroy {
const state = this._state;
this.isPreviewingSubject.next(true);
- this.publicationRestService.preview(state.publication.text)
- .then(parsedText => {
- state.publication.parsedText = parsedText;
+ const request: PreviewContentRequest = {
+ text: state.publication.text
+ };
+ this.publicationRestService.preview(request)
+ .then(response => {
+ state.publication.parsedText = response.text;
this._save(state);
setTimeout(() => Prism.highlightAll(), 1000);
})
diff --git a/frontend/src/app/core/rest-services/publications/model/preview.ts b/frontend/src/app/core/rest-services/publications/model/preview.ts
new file mode 100644
index 0000000..07b8314
--- /dev/null
+++ b/frontend/src/app/core/rest-services/publications/model/preview.ts
@@ -0,0 +1,7 @@
+export interface PreviewContentRequest {
+ text: string;
+}
+
+export interface PreviewContentResponse {
+ text: string;
+}
\ No newline at end of file
diff --git a/frontend/src/app/core/rest-services/publications/publication.rest-service.ts b/frontend/src/app/core/rest-services/publications/publication.rest-service.ts
index e082a28..fc96878 100644
--- a/frontend/src/app/core/rest-services/publications/publication.rest-service.ts
+++ b/frontend/src/app/core/rest-services/publications/publication.rest-service.ts
@@ -2,6 +2,7 @@ import { HttpClient, HttpParams } from '@angular/common/http';
import { Injectable, inject } from '@angular/core';
import { last, lastValueFrom } from 'rxjs';
import { Publication } from './model/publication';
+import { PreviewContentRequest, PreviewContentResponse } from './model/preview';
@Injectable({
providedIn: 'root'
@@ -31,9 +32,8 @@ export class PublicationRestService {
return lastValueFrom(this.httpClient.get('/api/publications', { params }));
}
- preview(publicationText: string): Promise {
- const request = { text: publicationText };
- return lastValueFrom(this.httpClient.post('/api/publications/preview', request));
+ preview(request: PreviewContentRequest): Promise {
+ return lastValueFrom(this.httpClient.post('/api/publications/preview', request));
}
delete(publicationId: string): Promise {