func (db *Database) AddActivity(type_id int64, description string, user_id int64, is_public bool, lat, long string) error { var latitude sql.NullFloat64 var longitude sql.NullFloat64 var err error if latitude.Float64, err = strconv.ParseFloat(lat, 64); err != nil { latitude.Valid = false } else { latitude.Valid = true } if longitude.Float64, err = strconv.ParseFloat(long, 64); err != nil { longitude.Valid = false } else { longitude.Valid = true } public := 0 if is_public { public = 1 } txn, err := db.conn.Begin() if err != nil { log.Printf("Starting transaction failed: %v", err) return err } row := txn.QueryRow("SELECT count(1) FROM activity_type_flags WHERE type_id = ? AND flag_id = ?", type_id, db.flagNameToIdMapping[FLAG_POINT_IN_TIME]) var point_in_time_count int64 if err = row.Scan(&point_in_time_count); err != nil { log.Printf("row.Scan failed: %v", err) txn.Rollback() return err } result, err := txn.Exec("INSERT INTO activities (type_id, timestamp, description, user_id, public, latitude, longitude) VALUES (?, NOW(), ?, ?, ?, ?, ?)", type_id, description, user_id, public, latitude, longitude) if err == nil { activity_id, _ := result.LastInsertId() if point_in_time_count != 0 { _, err = txn.Exec("UPDATE activities SET end_timestamp = NOW() WHERE id = ?", activity_id) if err != nil { log.Printf("db.conn.Exec failed: %v", err) } } } if err != nil { txn.Rollback() } else { err = txn.Commit() if err != nil { log.Printf("committing transaction failed: %v", err) } } return err }
func checkFloatForNull(eventFloat string, event *sql.NullFloat64) { var err error if eventFloat == "" { event.Valid = false } else { event.Float64, err = strconv.ParseFloat(eventFloat, 64) if err != nil { event.Valid = false return } event.Valid = true } }
func AddActivity(w http.ResponseWriter, r *http.Request) { session, _ := store.Get(r, SESSION_NAME) if authenticated, ok := session.Values["Authenticated"].(bool); !ok || !authenticated { http.Error(w, "unauthenticated", http.StatusForbidden) return } username := session.Values["UserName"].(string) user_id := session.Values["UserId"].(int64) type_id := r.FormValue("type_id") description := r.FormValue("desc") is_public := 0 if r.FormValue("public") == "on" { is_public = 1 } var err error var latitude sql.NullFloat64 var longitude sql.NullFloat64 if latitude.Float64, err = strconv.ParseFloat(r.FormValue("lat"), 64); err != nil { latitude.Valid = false } else { latitude.Valid = true } if longitude.Float64, err = strconv.ParseFloat(r.FormValue("long"), 64); err != nil { longitude.Valid = false } else { longitude.Valid = true } if _, err := db.Exec("INSERT INTO activities (type_id, timestamp, description, user_id, public, latitude, longitude) VALUES (?, NOW(), ?, ?, ?, ?, ?)", type_id, description, user_id, is_public, latitude, longitude); err != nil { log.Printf("AddActivity: db.Exec failed: %v", err) } else { log.Printf("added activity %s (type_id = %s) for user %s", description, type_id, username) } fmt.Fprintf(w, "OK") }
func CreateNullFloat64(v float64) sql.NullFloat64 { var ni sql.NullFloat64 ni.Valid = true ni.Float64 = v return ni }