diff options
Diffstat (limited to 'models.go')
-rw-r--r-- | models.go | 46 |
1 files changed, 44 insertions, 2 deletions
@@ -19,6 +19,7 @@ const ( sqlCountOlderThanDecision sqlCountOlderThanUnvotedDecision sqlCreateDecision + sqlUpdateDecision ) var sqlStatements = map[sqlKey]string{ @@ -92,6 +93,11 @@ INSERT INTO decisions ( BETWEEN date(:proposed) AND date(:proposed, '1 day') ) )`, + sqlUpdateDecision: ` +UPDATE decisions +SET proponent=:proponent, title=:title, content=:content, + votetype=:votetype, due=:due, modified=:modified +WHERE id=:id`, } var db *sqlx.DB @@ -376,7 +382,7 @@ func (d *Decision) OlderExists(unvoted bool, voter *Voter) (result bool, err err return } -func (d *Decision) Save() (err error) { +func (d *Decision) Create() (err error) { insertDecisionStmt, err := db.PrepareNamed(sqlStatements[sqlCreateDecision]) if err != nil { logger.Println("Error preparing statement:", err) @@ -393,8 +399,8 @@ func (d *Decision) Save() (err error) { lastInsertId, err := result.LastInsertId() if err != nil { logger.Println("Error getting id of inserted motion:", err) + return } - logger.Println("DEBUG new motion has id", lastInsertId) getDecisionStmt, err := db.Preparex(sqlStatements[sqlLoadDecisionById]) if err != nil { @@ -411,6 +417,42 @@ func (d *Decision) Save() (err error) { return } +func (d *Decision) Update() (err error) { + updateDecisionStmt, err := db.PrepareNamed(sqlStatements[sqlUpdateDecision]) + if err != nil { + logger.Println("Error preparing statement:", err) + return + } + defer updateDecisionStmt.Close() + + result, err := updateDecisionStmt.Exec(d) + if err != nil { + logger.Println("Error updating motion:", err) + return + } + affectedRows, err := result.RowsAffected() + if err != nil { + logger.Print("Problem determining the affected rows") + return + } else if affectedRows != 1 { + logger.Printf("WARNING wrong number of affected rows: %d (1 expected)\n", affectedRows) + } + + getDecisionStmt, err := db.Preparex(sqlStatements[sqlLoadDecisionById]) + if err != nil { + logger.Println("Error preparing statement:", err) + return + } + defer getDecisionStmt.Close() + + err = getDecisionStmt.Get(d, d.Id) + if err != nil { + logger.Println("Error loading updated motion:", err) + } + + return +} + func FindVoterByAddress(emailAddress string) (voter *Voter, err error) { findVoterStmt, err := db.Preparex(sqlStatements[sqlLoadEnabledVoterByEmail]) if err != nil { |