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 }