feat: issue creation
This commit is contained in:
@ -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)
|
||||
|
Reference in New Issue
Block a user