package services import ( "database/sql" "errors" "go-sjles-pta-vote/server/db" "go-sjles-pta-vote/server/models" ) var ErrQuestionAlreadyExists = errors.New("Question already exists") func CreatePoll(poll *models.Poll) (*models.Poll, error) { new_poll := models.Poll{} db_conn, err := db.Connect() if err != nil { return nil, err } defer db.Close() get_stmt, err := db_conn.Prepare(` SELECT id FROM polls WHERE question == $1 `) if err != nil { return nil, err } defer get_stmt.Close() var id int err = get_stmt.QueryRow(poll.Question).Scan(&id) if err != sql.ErrNoRows { if err != nil { return nil, err } return nil, ErrQuestionAlreadyExists } stmt, err := db_conn.Prepare(` INSERT INTO polls ( question, expires_at ) VALUES ( $1, $2 ) RETURNING ID; `) if err != nil { return nil, err } defer stmt.Close() res, err := stmt.Exec(poll.Question, poll.ExpiresAt) if err != nil { return nil, err } new_poll.ID, err = res.LastInsertId() return &new_poll, err }