3 changed files with 87 additions and 17 deletions
@ -0,0 +1,86 @@
@@ -0,0 +1,86 @@
|
||||
package pages |
||||
|
||||
import ( |
||||
"fmt" |
||||
"github.com/gin-gonic/gin" |
||||
"log" |
||||
"net/http" |
||||
"sponsorahacker/db" |
||||
"sponsorahacker/utils" |
||||
"strconv" |
||||
"strings" |
||||
"time" |
||||
) |
||||
|
||||
type Goal struct { |
||||
Name string `form:"item-name" db:"name" binding:"required"` |
||||
FundingAmount float64 `form:"funding-amount" db:"funding_amount" binding:"required,numeric"` |
||||
Description string `form:"item-description" db:"description" binding:"required"` |
||||
LearnMoreURL *string `form:"item-url" db:"learn_more_url"` // Optional field
|
||||
CreatedAt string `db:"created_at"` |
||||
UpdatedAt string `db:"updated_at"` |
||||
} |
||||
|
||||
func Goals(c *gin.Context) { |
||||
isLoggedIn := utils.CheckIfLoggedIn(c) |
||||
|
||||
c.HTML(http.StatusOK, "goals.html", gin.H{ |
||||
"title": "Sponsor A Hacker", |
||||
"isLoggedIn": isLoggedIn, |
||||
}) |
||||
} |
||||
|
||||
func CreateGoal(c *gin.Context) { |
||||
dbClient, err := db.NewDbClient() |
||||
|
||||
if err != nil { |
||||
log.Fatalf("Could not connect to database: %v", err) |
||||
return |
||||
} |
||||
|
||||
isLoggedIn := utils.CheckIfLoggedIn(c) |
||||
|
||||
name := strings.TrimSpace(c.PostForm("item-name")) |
||||
fundingAmountStr := strings.TrimSpace(c.PostForm("funding-amount")) |
||||
description := strings.TrimSpace(c.PostForm("item-description")) |
||||
learnMoreURL := strings.TrimSpace(c.PostForm("item-url")) |
||||
|
||||
if name == "" && fundingAmountStr == "" && description == "" && learnMoreURL == "" { |
||||
fieldError := fmt.Errorf("missing a required field. Please check and make sure all fields are filled out") |
||||
c.HTML(http.StatusOK, "goals.html", gin.H{ |
||||
"title": "Sponsor A Hacker", |
||||
"isLoggedIn": isLoggedIn, |
||||
"error": fieldError, |
||||
}) |
||||
} |
||||
|
||||
createdDate := time.Now() |
||||
updatedDate := time.Now() |
||||
fundingAmount, err := strconv.ParseFloat(fundingAmountStr, 64) |
||||
|
||||
if err != nil { |
||||
fieldError := fmt.Errorf("invalid funding amount") |
||||
c.HTML(http.StatusOK, "goals.html", gin.H{ |
||||
"title": "Sponsor A Hacker", |
||||
"isLoggedIn": isLoggedIn, |
||||
"error": fieldError, |
||||
}) |
||||
} |
||||
|
||||
_, err = dbClient.Exec(`INSERT INTO goals (name, description, learn_more_url, funding_amount, created_at, updated_at) |
||||
VALUES (?, ?, ?, ?, ?, ?);`, name, description, learnMoreURL, fundingAmount, createdDate, updatedDate) |
||||
|
||||
if err != nil { |
||||
fmt.Printf("Error inserting goal: %v", err) |
||||
c.HTML(http.StatusOK, "goals.html", gin.H{ |
||||
"title": "Sponsor A Hacker", |
||||
"isLoggedIn": isLoggedIn, |
||||
"error": err, |
||||
}) |
||||
} |
||||
|
||||
c.HTML(http.StatusOK, "goals.html", gin.H{ |
||||
"title": "Sponsor A Hacker", |
||||
"isLoggedIn": isLoggedIn, |
||||
}) |
||||
} |
||||
@ -1,16 +0,0 @@
@@ -1,16 +0,0 @@
|
||||
package pages |
||||
|
||||
import ( |
||||
"github.com/gin-gonic/gin" |
||||
"net/http" |
||||
"sponsorahacker/utils" |
||||
) |
||||
|
||||
func Goals(c *gin.Context) { |
||||
isLoggedIn := utils.CheckIfLoggedIn(c) |
||||
|
||||
c.HTML(http.StatusOK, "goals.html", gin.H{ |
||||
"title": "Sponsor A Hacker", |
||||
"isLoggedIn": isLoggedIn, |
||||
}) |
||||
} |
||||
Loading…
Reference in new issue