mirror of
https://github.com/Floriansylvain/RenewCMS.git
synced 2026-08-19 19:53:21 +02:00
Refactor Article GET routes
This commit is contained in:
+1
-1
@@ -64,7 +64,7 @@ func initArticlesRoutes(r *gin.RouterGroup) {
|
|||||||
articlesRouter.Use(corsMiddleware, api.AuthMiddleware.MiddlewareFunc())
|
articlesRouter.Use(corsMiddleware, api.AuthMiddleware.MiddlewareFunc())
|
||||||
|
|
||||||
articlesRouter.GET("/", articles.Get)
|
articlesRouter.GET("/", articles.Get)
|
||||||
articlesRouter.GET("/:id", articles.Get)
|
articlesRouter.GET("/:id", articles.GetUnique)
|
||||||
articlesRouter.POST("/:id", articles.Add)
|
articlesRouter.POST("/:id", articles.Add)
|
||||||
articlesRouter.PUT("/:id", articles.Edit)
|
articlesRouter.PUT("/:id", articles.Edit)
|
||||||
articlesRouter.DELETE("/:id", articles.Delete)
|
articlesRouter.DELETE("/:id", articles.Delete)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/Floriansylvain/GohCMS/internal/api"
|
"github.com/Floriansylvain/GohCMS/internal/api"
|
||||||
"github.com/Floriansylvain/GohCMS/internal/database"
|
"github.com/Floriansylvain/GohCMS/internal/database"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
"go.mongodb.org/mongo-driver/bson"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getApiFullUrl() string {
|
func getApiFullUrl() string {
|
||||||
@@ -64,8 +65,6 @@ func getArticleIdFilter(titleID string) map[string]any {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Get(c *gin.Context) {
|
func Get(c *gin.Context) {
|
||||||
titleID := c.Params.ByName("id")
|
|
||||||
|
|
||||||
skip, skipErr := parseUintQueryParam(c, "skip", 0)
|
skip, skipErr := parseUintQueryParam(c, "skip", 0)
|
||||||
take, takeErr := parseUintQueryParam(c, "take", 10)
|
take, takeErr := parseUintQueryParam(c, "take", 10)
|
||||||
if skipErr != nil || takeErr != nil {
|
if skipErr != nil || takeErr != nil {
|
||||||
@@ -73,13 +72,8 @@ func Get(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
articles, err := database.GetDocuments(articlesLocation, getArticleIdFilter(titleID))
|
documents, _ := database.GetDocuments(articlesLocation, map[string]any{})
|
||||||
if err != nil {
|
articlesArray := ParseArticlesFromBytesToArray(documents)
|
||||||
api.SendBadRequest(c, fmt.Sprintf("The ID '%v' doesn't match any article.", titleID))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
articlesArray := ParseArticlesFromBytesToArray(articles)
|
|
||||||
articlesArrayLength := uint64(len(articlesArray))
|
articlesArrayLength := uint64(len(articlesArray))
|
||||||
if skip >= articlesArrayLength || take == 0 {
|
if skip >= articlesArrayLength || take == 0 {
|
||||||
c.JSON(http.StatusOK, map[string]any{
|
c.JSON(http.StatusOK, map[string]any{
|
||||||
@@ -91,3 +85,18 @@ func Get(c *gin.Context) {
|
|||||||
|
|
||||||
c.JSON(http.StatusOK, getBuiltGetResponse(articlesArray, skip, take))
|
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)
|
||||||
|
}
|
||||||
|
|||||||
@@ -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) => {
|
return new Promise((resolve, reject) => {
|
||||||
fetch(`${baseApiUrl}/articles/${id}`, {
|
fetch(`${baseApiUrl}/articles/${id}`, {
|
||||||
credentials: 'include',
|
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> {
|
export function deleteArticle(id: string): Promise<any> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
fetch(`${baseApiUrl}/articles/${id}`, {
|
fetch(`${baseApiUrl}/articles/${id}`, {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import Modal from '@/components/ModalSuccessError.vue';
|
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 Editor from '@tinymce/tinymce-vue';
|
||||||
import { onMounted, ref, type Ref } from 'vue';
|
import { onMounted, ref, type Ref } from 'vue';
|
||||||
import { useRoute, useRouter } from 'vue-router';
|
import { useRoute, useRouter } from 'vue-router';
|
||||||
@@ -19,9 +19,9 @@ function displayErrorMessage(message: string): void {
|
|||||||
errorModalShow.value = true
|
errorModalShow.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getArticle(): Promise<GetArticle | undefined> {
|
async function getArticle(): Promise<Article | undefined> {
|
||||||
try {
|
try {
|
||||||
return await fetchArticle(route.params.articleID as string)
|
return await fetchUniqueArticle(route.params.articleID as string)
|
||||||
} catch {
|
} 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 ?")
|
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
|
return undefined
|
||||||
@@ -29,7 +29,7 @@ async function getArticle(): Promise<GetArticle | undefined> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
article.value = (await getArticle())?.content[0]
|
article.value = await getArticle()
|
||||||
editorData.value = article.value?.content.html ?? ""
|
editorData.value = article.value?.content.html ?? ""
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user