You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.1 KiB
81 lines
2.1 KiB
package models |
|
|
|
import ( |
|
"fmt" |
|
"log" |
|
"time" |
|
|
|
"sponsorahacker/db" |
|
) |
|
|
|
type Goal struct { |
|
id int |
|
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 time.Time `db:"created_at"` |
|
UpdatedAt time.Time `db:"updated_at"` |
|
CreatedBy int `db:"created_by"` |
|
} |
|
|
|
func (g *Goal) CreateGoal() error { |
|
dbClient, err := db.NewDbClient() |
|
|
|
if err != nil { |
|
log.Fatalf("Could not connect to database: %v", err) |
|
return err |
|
} |
|
_, err = dbClient.Exec(`INSERT INTO goals (name, description, learn_more_url, funding_amount, created_by, created_at, updated_at) |
|
VALUES (?, ?, ?, ?, ?, ?, ?);`, g.Name, g.Description, g.LearnMoreURL, g.FundingAmount, g.CreatedBy, g.CreatedAt, g.UpdatedAt) |
|
|
|
if err != nil { |
|
log.Fatalf("Could not create goal: %v", err) |
|
} |
|
return nil |
|
} |
|
|
|
func GetGoals(user int) ([]Goal, error) { |
|
var goals []Goal |
|
|
|
dbClient, err := db.NewDbClient() |
|
|
|
if err != nil { |
|
log.Fatalf("Could not connect to database: %v", err) |
|
} |
|
|
|
result, err := dbClient.Query(`SELECT name, description, learn_more_url, funding_amount, created_by, created_at, updated_at FROM goals where created_by = ?`, user) |
|
|
|
if err != nil { |
|
log.Fatalf("Could not get goals: %v", err) |
|
} |
|
for result.Next() { |
|
var goal Goal |
|
err = result.StructScan(&goal) |
|
|
|
fmt.Println(goal.Name) |
|
|
|
if err != nil { |
|
log.Fatalf("Could not read goal: %v", err) |
|
return nil, err |
|
} |
|
goals = append(goals, goal) |
|
} |
|
|
|
return goals, nil |
|
} |
|
|
|
func GetGoal(id int) (*Goal, error) { |
|
dbClient, err := db.NewDbClient() |
|
result, err := dbClient.Query(`SELECT name, description, learn_more_url, funding_amount, created_by, created_at, updated_at FROM goals where id = ?`, id) |
|
|
|
if err != nil { |
|
log.Fatalf("Could not read goal: %v", err) |
|
return nil, err |
|
} |
|
|
|
var goal Goal |
|
err = result.StructScan(&goal) |
|
|
|
return &goal, nil |
|
}
|
|
|