feat: issue creation

This commit is contained in:
2025-02-22 18:01:45 +01:00
parent 5b148cb4bb
commit 2d83ca9d20
10 changed files with 258 additions and 40 deletions

View File

@ -68,7 +68,7 @@ func (h *Handler) fillIssuePageSelectedProject(ctx context.Context, vmodel *comp
return nil
}
func (h *Handler) handleIssueSummary(w http.ResponseWriter, r *http.Request) {
func (h *Handler) handleIssueSummaryForm(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
issueSummaryForm := component.NewIssueSummaryForm()
@ -105,13 +105,70 @@ func (h *Handler) handleIssueSummary(w http.ResponseWriter, r *http.Request) {
return
}
issueContent, err := h.issueManager.GenerateIssue(ctx, httpCtx.User(ctx), projectID, summary)
issueTitle, issueBody, err := h.issueManager.GenerateIssue(ctx, httpCtx.User(ctx), projectID, summary)
if err != nil {
h.handleError(w, r, errors.WithStack(err))
return
}
vmodel.IssueForm.Field("content").Set("value", issueContent)
vmodel.IssueForm.Field("title").Set("value", issueTitle)
vmodel.IssueForm.Field("body").Set("value", issueBody)
page := component.IssuePage(*vmodel)
templ.Handler(page).ServeHTTP(w, r)
}
func (h *Handler) handleIssueForm(w http.ResponseWriter, r *http.Request) {
issueForm := component.NewIssueForm()
if err := issueForm.Handle(r); err != nil {
h.handleError(w, r, errors.WithStack(err))
return
}
vmodel, err := h.fillIssuePageVModel(r)
if err != nil {
h.handleError(w, r, errors.WithStack(err))
return
}
if errs := issueForm.Validate(); errs != nil {
vmodel.IssueForm = issueForm
page := component.IssuePage(*vmodel)
templ.Handler(page).ServeHTTP(w, r)
return
}
projectID := r.URL.Query().Get("project")
title, err := form.FormFieldAttr[string](issueForm, "title", "value")
if err != nil {
h.handleError(w, r, errors.WithStack(err))
return
}
body, err := form.FormFieldAttr[string](issueForm, "body", "value")
if err != nil {
h.handleError(w, r, errors.WithStack(err))
return
}
ctx := r.Context()
user := httpCtx.User(ctx)
issueURL, err := h.issueManager.CreateIssue(ctx, user, projectID, title, body)
if err != nil {
h.handleError(w, r, errors.WithStack(err))
return
}
vmodel.IssueURL = issueURL
vmodel.SummaryForm.Field("summary").Set("value", "")
vmodel.IssueForm.Field("title").Set("value", "")
vmodel.IssueForm.Field("body").Set("value", "")
page := component.IssuePage(*vmodel)
templ.Handler(page).ServeHTTP(w, r)