89 lines
2.4 KiB
Go
89 lines
2.4 KiB
Go
package models
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
"udemy_httpserver/db"
|
|
)
|
|
|
|
type Event struct {
|
|
ID int
|
|
Name string `binding:"required"`
|
|
Description string `binding:"required"`
|
|
Location string `binding:"required"`
|
|
DateTime time.Time `binding:"required"`
|
|
UserID int
|
|
}
|
|
|
|
func (e *Event) Save() error {
|
|
insertQuery := `INSERT INTO events(name, description ,location, dateTime, user_id)
|
|
VALUES ($1, $2, $3, $4, $5)`
|
|
statement, err := db.Conn.Prepare(insertQuery)
|
|
if err != nil {
|
|
fmt.Println("Something went wrong trying to prepare statement", err)
|
|
return err
|
|
}
|
|
defer statement.Close()
|
|
result, err := statement.Exec(e.Name, e.Description, e.Location, e.DateTime, e.UserID)
|
|
if err != nil {
|
|
fmt.Println("Something went wrong trying to execute statement", err)
|
|
return err
|
|
}
|
|
eventId, err := result.LastInsertId()
|
|
// Even if we don't return the event, we save the id
|
|
// as we are operating on a pointer to an Event
|
|
e.ID = int(eventId)
|
|
if err != nil {
|
|
fmt.Println("Something went wrong trying to get last inserted id", err)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func GetAllEvents() ([]Event, error) {
|
|
// TODO: implement paging
|
|
selectQuery := `SELECT * FROM events`
|
|
statement, err := db.Conn.Prepare(selectQuery)
|
|
if err != nil {
|
|
fmt.Println("Something went wrong trying to prepare statement", err)
|
|
return nil, err
|
|
}
|
|
result, err := statement.Query()
|
|
if err != nil {
|
|
fmt.Println("Something went wrong trying to execute statement", err)
|
|
return nil, err
|
|
}
|
|
defer result.Close()
|
|
|
|
var events []Event
|
|
for result.Next() {
|
|
var event Event
|
|
err := result.Scan(&event.ID, &event.Name, &event.Description, &event.Location, &event.DateTime, &event.UserID)
|
|
if err != nil {
|
|
fmt.Println("Unexpected value in the database result", err)
|
|
return nil, err
|
|
}
|
|
events = append(events, event)
|
|
}
|
|
|
|
return events, nil
|
|
}
|
|
|
|
func FindEventById(id int) (*Event, error) {
|
|
selectQuery := `SELECT * FROM events WHERE id = $1`
|
|
result, err := db.Conn.Query(selectQuery, id)
|
|
if err != nil {
|
|
fmt.Println("Something went wrong trying to execute statement", err)
|
|
return nil, err
|
|
}
|
|
if result.Next() {
|
|
var event Event
|
|
err = result.Scan(&event.ID, &event.Name, &event.Description, &event.Location, &event.DateTime, &event.UserID)
|
|
if err != nil {
|
|
fmt.Println("Something went wrong parsing the database", err)
|
|
return nil, err
|
|
}
|
|
return &event, nil
|
|
}
|
|
return nil, nil
|
|
}
|