diff --git a/pkg/data/data.go b/pkg/data/data.go index b193518..c13b8c2 100644 --- a/pkg/data/data.go +++ b/pkg/data/data.go @@ -132,6 +132,21 @@ func GetJob(id string, db *sqlx.DB) (Job, error) { return job, nil } +func DeleteJob(id string, db *sqlx.DB) (error) { + result, err := db.Exec("DELETE FROM jobs WHERE id = $1", id) + if err != nil { + return err + } + rowsAffected, err := result.RowsAffected() + if err != nil { + return err + } + if rowsAffected != 1 { + return fmt.Errorf("failed to delete job: %w", err) + } + return nil +} + type NewJob struct { Position string `form:"position"` Organization string `form:"organization"` diff --git a/pkg/server/routes.go b/pkg/server/routes.go index b3057b8..4a26de2 100644 --- a/pkg/server/routes.go +++ b/pkg/server/routes.go @@ -245,6 +245,25 @@ func (ctrl *Controller) ViewJob(ctx *gin.Context) { ctx.HTML(200, "view", gin.H{"job": job, "description": template.HTML(description)}) } +func (ctrl *Controller) DeleteJob(ctx *gin.Context) { + id := ctx.Param("id") + err := data.DeleteJob(id, ctrl.DB) + if err != nil { + log.Println(fmt.Errorf("failed to delete job: %w", err)) + ctx.AbortWithStatus(http.StatusInternalServerError) + return + } + + session := sessions.Default(ctx) + session.AddFlash("Job deleted!") + if err := session.Save(); err != nil { + log.Println(fmt.Errorf("DeleteJob failed to session.Save: %w", err)) + } + + ctx.Redirect(http.StatusFound, "/") +} + + func addFlash(ctx *gin.Context, base gin.H) gin.H { session := sessions.Default(ctx) base["flashes"] = session.Flashes() diff --git a/pkg/server/server.go b/pkg/server/server.go index b54e0c0..40dd231 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -77,6 +77,7 @@ func NewServer(c *ServerConfig) (http.Server, error) { { authorized.GET("/jobs/:id/edit", ctrl.EditJob) authorized.POST("/jobs/:id", ctrl.UpdateJob) + authorized.POST("/jobs/:id/delete", ctrl.DeleteJob) } return http.Server{ diff --git a/templates/edit.html b/templates/edit.html index eb0349e..2a38d9d 100644 --- a/templates/edit.html +++ b/templates/edit.html @@ -40,6 +40,16 @@ Please provide a description below if no URL is available. - +
+ +
+ +
+ +
+ {{ end }}