-
Notifications
You must be signed in to change notification settings - Fork 3
/
sense-new-submit.go
60 lines (51 loc) · 1.67 KB
/
sense-new-submit.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package query
import (
"net/http"
"strconv"
"github.com/budden/semdict/pkg/apperror"
"github.com/budden/semdict/pkg/sddb"
"github.com/budden/semdict/pkg/user"
"github.com/gin-gonic/gin"
)
type senseAddParamsType struct {
Sduserid int64
OWord string
}
type senseNewSubmitDataType = senseEditSubmitDataType
func sanitizeNewSenseData(pad *senseNewSubmitDataType) {
sanitizeData(pad)
}
func extractDataFromNewSubmitRequest(c *gin.Context, pad *senseEditSubmitDataType) {
pad.Sduserid = int64(user.GetSDUserIdOrZero(c))
pad.OWord = c.PostForm("oword")
pad.Theme = c.PostForm("theme")
pad.Phrase = c.PostForm("phrase")
}
func SenseNewSubmitPostHandler(c *gin.Context) {
user.EnsureLoggedIn(c)
pad := &senseNewSubmitDataType{}
extractDataFromNewSubmitRequest(c, pad)
sanitizeNewSenseData(pad)
newSenseId := makeNewSenseidInDb(pad)
// https://github.com/gin-gonic/gin/issues/444
c.Redirect(http.StatusFound,
"/wordsearchresultform?dummyid=0&senseid="+strconv.FormatInt(newSenseId, 10))
}
func makeNewSenseidInDb(sap *senseNewSubmitDataType) (id int64) {
reply, err1 := sddb.NamedUpdateQuery(
`insert into tsense (ownerid, oword, theme, phrase)
values (:sduserid, :oword, :theme, :phrase)
returning id`, &sap)
apperror.Panic500AndErrorIf(err1, "Не удалось вставить смысл, извините")
defer sddb.CloseRows(reply)()
var dataFound bool
for reply.Next() {
err1 = reply.Scan(&id)
dataFound = true
}
if !dataFound {
apperror.Panic500AndErrorIf(apperror.ErrDummy, "Вставка не вернула запись")
}
sddb.FatalDatabaseErrorIf(err1, "Ошибочное получение свежего смысла: %#v", err1)
return
}