feat(api): add endpoints to edit and delete cover letters
This commit is contained in:
@@ -142,8 +142,83 @@ func Post(c *gin.Context) {
|
||||
res.Success(c, gin.H{"message": "Successfully created " + coverName})
|
||||
}
|
||||
|
||||
type CoverPut struct {
|
||||
Name string `json:"name" validate:"required,min=1"`
|
||||
Letter string `json:"letter" validate:"required,min=50"`
|
||||
}
|
||||
|
||||
func Put(c *gin.Context) {
|
||||
// Get request data
|
||||
id, err := strconv.Atoi(c.Param("id"))
|
||||
if err != nil {
|
||||
res.Error(c, err.Error(), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
var data CoverPut
|
||||
if err := utils.BindAndValidate(&data, c); err != nil {
|
||||
res.Error(c, err.Error(), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
user, err := jwt.GetUser(c)
|
||||
if err != nil {
|
||||
res.NeedsToLogin(c)
|
||||
return
|
||||
}
|
||||
|
||||
// Find cover letter in database, verify it exists, and update it
|
||||
letters, err := cover.Get("user_id = $1 AND id = $2", user.Id, id)
|
||||
if err != nil {
|
||||
res.Error(c, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
if len(letters) == 0 {
|
||||
res.Error(c, "Cover letter not found", http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
|
||||
err = cover.Update(data.Name, data.Letter, id)
|
||||
if err != nil {
|
||||
res.Error(c, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
res.Success(c, gin.H{"message": "Successfully updated cover letter"})
|
||||
}
|
||||
|
||||
func Delete(c *gin.Context) {
|
||||
// Get request data
|
||||
id, err := strconv.Atoi(c.Param("id"))
|
||||
if err != nil {
|
||||
res.Error(c, err.Error(), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
user, err := jwt.GetUser(c)
|
||||
if err != nil {
|
||||
res.NeedsToLogin(c)
|
||||
return
|
||||
}
|
||||
|
||||
// Find cover letter in database, verify it exists, and delete it
|
||||
letters, err := cover.Get("user_id = $1 AND id = $2", user.Id, id)
|
||||
if err != nil {
|
||||
res.Error(c, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
if len(letters) == 0 {
|
||||
res.Error(c, "Cover letter not found", http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
|
||||
err = cover.Delete(id)
|
||||
if err != nil {
|
||||
res.Error(c, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
res.Success(c, gin.H{"message": "Successfully deleted cover letter"})
|
||||
}
|
||||
|
||||
@@ -61,3 +61,23 @@ func Create(name string, letter string, userId float64) error {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func Update(name string, letter string, id int) error {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
||||
defer cancel()
|
||||
|
||||
query := `UPDATE cover_letters SET name = $1, letter = $2 WHERE id = $3`
|
||||
_, err := db.Pool.Exec(ctx, query, name, letter, id)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func Delete(id int) error {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
||||
defer cancel()
|
||||
|
||||
query := `DELETE FROM cover_letters WHERE id = $1`
|
||||
_, err := db.Pool.Exec(ctx, query, id)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -32,9 +32,11 @@ func SetupRoutes() *gin.Engine {
|
||||
|
||||
// Cover letter routes
|
||||
covers := auth.Group("/cover")
|
||||
covers.GET("", cover.Get)
|
||||
covers.GET("/:id", cover.GetID)
|
||||
covers.POST("", cover.Post)
|
||||
covers.GET("", cover.Get) // Get all letters
|
||||
covers.GET("/:id", cover.GetID) // get single letter
|
||||
covers.POST("", cover.Post) // create new letter
|
||||
covers.PUT("/:id", cover.Put) // edit letter
|
||||
covers.DELETE("/:id", cover.Delete) // delete letter
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user