diff --git a/cmd/main.go b/cmd/main.go index 7719433..e3f83c1 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -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) diff --git a/internal/articles/get.go b/internal/articles/get.go index fa15961..e7e10bc 100644 --- a/internal/articles/get.go +++ b/internal/articles/get.go @@ -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) +} diff --git a/web/admin-gui/src/utils/database.ts b/web/admin-gui/src/utils/database.ts index 8bb3693..ac33c3c 100644 --- a/web/admin-gui/src/utils/database.ts +++ b/web/admin-gui/src/utils/database.ts @@ -24,7 +24,7 @@ export interface GetArticle { } } -export function fetchArticle(id: string): Promise { +function fetchArticle(id: string): Promise
{ return new Promise((resolve, reject) => { fetch(`${baseApiUrl}/articles/${id}`, { credentials: 'include', @@ -36,6 +36,15 @@ export function fetchArticle(id: string): Promise { }) } +export function fetchUniqueArticle(id: string): Promise
{ + return fetchArticle(id) as Promise
+ +} + +export function fetchAllArticle(): Promise { + return fetchArticle("") as Promise +} + export function deleteArticle(id: string): Promise { return new Promise((resolve, reject) => { fetch(`${baseApiUrl}/articles/${id}`, { diff --git a/web/admin-gui/src/views/ArticlesEdit.vue b/web/admin-gui/src/views/ArticlesEdit.vue index e3f7860..418f13d 100644 --- a/web/admin-gui/src/views/ArticlesEdit.vue +++ b/web/admin-gui/src/views/ArticlesEdit.vue @@ -1,6 +1,6 @@