Refactor Article GET routes

This commit is contained in:
Florian Sylvain
2023-02-07 21:35:09 +01:00
parent 8940dc9bf6
commit 11df35953a
4 changed files with 33 additions and 15 deletions
+1 -1
View File
@@ -64,7 +64,7 @@ func initArticlesRoutes(r *gin.RouterGroup) {
articlesRouter.Use(corsMiddleware, api.AuthMiddleware.MiddlewareFunc())
articlesRouter.GET("/", articles.Get)
articlesRouter.GET("/:id", articles.Get)
articlesRouter.GET("/:id", articles.GetUnique)
articlesRouter.POST("/:id", articles.Add)
articlesRouter.PUT("/:id", articles.Edit)
articlesRouter.DELETE("/:id", articles.Delete)
+18 -9
View File
@@ -10,6 +10,7 @@ import (
"github.com/Floriansylvain/GohCMS/internal/api"
"github.com/Floriansylvain/GohCMS/internal/database"
"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson"
)
func getApiFullUrl() string {
@@ -64,8 +65,6 @@ func getArticleIdFilter(titleID string) map[string]any {
}
func Get(c *gin.Context) {
titleID := c.Params.ByName("id")
skip, skipErr := parseUintQueryParam(c, "skip", 0)
take, takeErr := parseUintQueryParam(c, "take", 10)
if skipErr != nil || takeErr != nil {
@@ -73,13 +72,8 @@ func Get(c *gin.Context) {
return
}
articles, err := database.GetDocuments(articlesLocation, getArticleIdFilter(titleID))
if err != nil {
api.SendBadRequest(c, fmt.Sprintf("The ID '%v' doesn't match any article.", titleID))
return
}
articlesArray := ParseArticlesFromBytesToArray(articles)
documents, _ := database.GetDocuments(articlesLocation, map[string]any{})
articlesArray := ParseArticlesFromBytesToArray(documents)
articlesArrayLength := uint64(len(articlesArray))
if skip >= articlesArrayLength || take == 0 {
c.JSON(http.StatusOK, map[string]any{
@@ -91,3 +85,18 @@ func Get(c *gin.Context) {
c.JSON(http.StatusOK, getBuiltGetResponse(articlesArray, skip, take))
}
func GetUnique(c *gin.Context) {
titleID := c.Params.ByName("id")
article, err := database.GetUniqueDocument(articlesLocation, getArticleIdFilter(titleID))
if err != nil {
api.SendBadRequest(c, fmt.Sprintf("The ID '%v' doesn't match any article.", titleID))
return
}
var parsedArticle Article
bson.Unmarshal(article, &parsedArticle)
c.JSON(http.StatusOK, parsedArticle)
}
+10 -1
View File
@@ -24,7 +24,7 @@ export interface GetArticle {
}
}
export function fetchArticle(id: string): Promise<GetArticle> {
function fetchArticle(id: string): Promise<Article | GetArticle> {
return new Promise((resolve, reject) => {
fetch(`${baseApiUrl}/articles/${id}`, {
credentials: 'include',
@@ -36,6 +36,15 @@ export function fetchArticle(id: string): Promise<GetArticle> {
})
}
export function fetchUniqueArticle(id: string): Promise<Article> {
return fetchArticle(id) as Promise<Article>
}
export function fetchAllArticle(): Promise<GetArticle> {
return fetchArticle("") as Promise<GetArticle>
}
export function deleteArticle(id: string): Promise<any> {
return new Promise((resolve, reject) => {
fetch(`${baseApiUrl}/articles/${id}`, {
+4 -4
View File
@@ -1,6 +1,6 @@
<script setup lang="ts">
import Modal from '@/components/ModalSuccessError.vue';
import { fetchArticle, sendArticleWithMethod, type Article, type GetArticle } from '@/utils/database';
import { fetchUniqueArticle, sendArticleWithMethod, type Article } from '@/utils/database';
import Editor from '@tinymce/tinymce-vue';
import { onMounted, ref, type Ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
@@ -19,9 +19,9 @@ function displayErrorMessage(message: string): void {
errorModalShow.value = true
}
async function getArticle(): Promise<GetArticle | undefined> {
async function getArticle(): Promise<Article | undefined> {
try {
return await fetchArticle(route.params.articleID as string)
return await fetchUniqueArticle(route.params.articleID as string)
} catch {
displayErrorMessage("Impossible de récupérer l'article. Vérifiez l'URL. Tentez-vous d'accéder au mode édition directement depuis un lien ?")
return undefined
@@ -29,7 +29,7 @@ async function getArticle(): Promise<GetArticle | undefined> {
}
onMounted(async () => {
article.value = (await getArticle())?.content[0]
article.value = await getArticle()
editorData.value = article.value?.content.html ?? ""
})