mirror of
https://github.com/ForFarmTeam/ForFarm.git
synced 2025-12-19 14:04:08 +01:00
feat: add CreateRelatedArticle
This commit is contained in:
parent
dd86f38b5a
commit
8af97c0150
@ -58,6 +58,13 @@ func (a *api) registerKnowledgeHubRoutes(_ chi.Router, api huma.API) {
|
||||
Path: prefix + "/{uuid}/related",
|
||||
Tags: tags,
|
||||
}, a.getArticleRelatedArticlesHandler)
|
||||
|
||||
huma.Register(api, huma.Operation{
|
||||
OperationID: "createRelatedArticle",
|
||||
Method: http.MethodPost,
|
||||
Path: prefix + "/{uuid}/related",
|
||||
Tags: tags,
|
||||
}, a.createRelatedArticleHandler)
|
||||
}
|
||||
|
||||
type GetKnowledgeArticlesOutput struct {
|
||||
@ -102,6 +109,14 @@ type GetRelatedArticlesOutput struct {
|
||||
} `json:"body"`
|
||||
}
|
||||
|
||||
type CreateRelatedArticleInput struct {
|
||||
UUID string `path:"uuid"`
|
||||
Body struct {
|
||||
RelatedTitle string `json:"related_title"`
|
||||
RelatedTag string `json:"related_tag"`
|
||||
} `json:"body"`
|
||||
}
|
||||
|
||||
func (a *api) getAllKnowledgeArticlesHandler(ctx context.Context, input *struct{}) (*GetKnowledgeArticlesOutput, error) {
|
||||
resp := &GetKnowledgeArticlesOutput{}
|
||||
|
||||
@ -251,3 +266,25 @@ func (a *api) getArticleRelatedArticlesHandler(ctx context.Context, input *struc
|
||||
resp.Body.RelatedArticles = related
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
func (a *api) createRelatedArticleHandler(
|
||||
ctx context.Context,
|
||||
input *CreateRelatedArticleInput,
|
||||
) (*struct{}, error) {
|
||||
// Validate main article exists
|
||||
if _, err := a.knowledgeHubRepo.GetArticleByID(ctx, input.UUID); err != nil {
|
||||
return nil, huma.Error404NotFound("main article not found")
|
||||
}
|
||||
|
||||
// Create related article
|
||||
related := &domain.RelatedArticle{
|
||||
RelatedTitle: input.Body.RelatedTitle,
|
||||
RelatedTag: input.Body.RelatedTag,
|
||||
}
|
||||
|
||||
if err := a.knowledgeHubRepo.CreateRelatedArticle(ctx, input.UUID, related); err != nil {
|
||||
return nil, huma.Error500InternalServerError("failed to create related article")
|
||||
}
|
||||
|
||||
return nil, nil // HTTP 204 No Content
|
||||
}
|
||||
|
||||
@ -55,4 +55,5 @@ type KnowledgeHubRepository interface {
|
||||
|
||||
GetTableOfContents(ctx context.Context, articleID string) ([]TableOfContent, error)
|
||||
GetRelatedArticles(ctx context.Context, articleID string) ([]RelatedArticle, error)
|
||||
CreateRelatedArticle(ctx context.Context, articleID string, related *RelatedArticle) error
|
||||
}
|
||||
|
||||
@ -182,3 +182,27 @@ func (p *postgresKnowledgeHubRepository) GetRelatedArticles(ctx context.Context,
|
||||
|
||||
return p.fetchRelatedArticles(ctx, query, articleID)
|
||||
}
|
||||
|
||||
func (p *postgresKnowledgeHubRepository) CreateRelatedArticle(
|
||||
ctx context.Context,
|
||||
articleID string,
|
||||
related *domain.RelatedArticle,
|
||||
) error {
|
||||
related.UUID = uuid.New().String() // Generate UUID
|
||||
related.ArticleID = articleID // Link to main article
|
||||
|
||||
query := `
|
||||
INSERT INTO related_articles
|
||||
(uuid, article_id, related_title, related_tag, created_at, updated_at)
|
||||
VALUES ($1, $2, $3, $4, NOW(), NOW())`
|
||||
|
||||
_, err := p.conn.Exec(
|
||||
ctx,
|
||||
query,
|
||||
related.UUID,
|
||||
related.ArticleID,
|
||||
related.RelatedTitle,
|
||||
related.RelatedTag,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user