Replace magic numbers with constants
- use strconv.Atoi and strconv.Itoa where appropriate - use constants for number base and size - use constant for reminder job interval
This commit is contained in:
parent
63c748bb1d
commit
623bdf6d56
4 changed files with 14 additions and 10 deletions
|
@ -185,7 +185,7 @@ type motionParameters struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type motionListParameters struct {
|
type motionListParameters struct {
|
||||||
Page int64
|
Page int
|
||||||
Flags struct {
|
Flags struct {
|
||||||
Confirmed, Withdraw, Unvoted bool
|
Confirmed, Withdraw, Unvoted bool
|
||||||
}
|
}
|
||||||
|
@ -200,7 +200,7 @@ func parseMotionParameters(r *http.Request) motionParameters {
|
||||||
|
|
||||||
func parseMotionListParameters(r *http.Request) motionListParameters {
|
func parseMotionListParameters(r *http.Request) motionListParameters {
|
||||||
var m = motionListParameters{}
|
var m = motionListParameters{}
|
||||||
if page, err := strconv.ParseInt(r.URL.Query().Get("page"), 10, 0); err != nil {
|
if page, err := strconv.Atoi(r.URL.Query().Get("page")); err != nil {
|
||||||
m.Page = 1
|
m.Page = 1
|
||||||
} else {
|
} else {
|
||||||
m.Page = page
|
m.Page = page
|
||||||
|
@ -230,7 +230,7 @@ func motionListHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
Decisions []*DecisionForDisplay
|
Decisions []*DecisionForDisplay
|
||||||
Voter *Voter
|
Voter *Voter
|
||||||
Params *motionListParameters
|
Params *motionListParameters
|
||||||
PrevPage, NextPage int64
|
PrevPage, NextPage int
|
||||||
PageTitle string
|
PageTitle string
|
||||||
Flashes interface{}
|
Flashes interface{}
|
||||||
}
|
}
|
||||||
|
@ -513,7 +513,7 @@ func (h *newMotionHandler) Handle(w http.ResponseWriter, r *http.Request) {
|
||||||
default:
|
default:
|
||||||
templateContext.Voter = voter
|
templateContext.Voter = voter
|
||||||
templateContext.Form = NewDecisionForm{
|
templateContext.Form = NewDecisionForm{
|
||||||
VoteType: strconv.FormatInt(voteTypeMotion, 10),
|
VoteType: strconv.Itoa(voteTypeMotion),
|
||||||
}
|
}
|
||||||
renderTemplate(w, r, templates, templateContext)
|
renderTemplate(w, r, templates, templateContext)
|
||||||
}
|
}
|
||||||
|
|
11
forms.go
11
forms.go
|
@ -26,6 +26,9 @@ import (
|
||||||
const (
|
const (
|
||||||
minimumContentLen = 3
|
minimumContentLen = 3
|
||||||
minimumTitleLen = 3
|
minimumTitleLen = 3
|
||||||
|
base10 = 10
|
||||||
|
size8Bit = 8
|
||||||
|
size64Bit = 64
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -66,7 +69,7 @@ func (f *NewDecisionForm) Validate() (bool, *Decision) {
|
||||||
f.Errors["Content"] = fmt.Sprintf("Please enter at least %d words as Text.", minimumContentLen)
|
f.Errors["Content"] = fmt.Sprintf("Please enter at least %d words as Text.", minimumContentLen)
|
||||||
}
|
}
|
||||||
|
|
||||||
if voteType, err := strconv.ParseUint(f.VoteType, 10, 8); err != nil || (voteType != 0 && voteType != 1) {
|
if voteType, err := strconv.ParseUint(f.VoteType, base10, size8Bit); err != nil || (voteType != 0 && voteType != 1) {
|
||||||
f.Errors["VoteType"] = fmt.Sprint("Please choose a valid vote type.", err)
|
f.Errors["VoteType"] = fmt.Sprint("Please choose a valid vote type.", err)
|
||||||
} else {
|
} else {
|
||||||
data.VoteType = VoteType(uint8(voteType))
|
data.VoteType = VoteType(uint8(voteType))
|
||||||
|
@ -106,7 +109,7 @@ func (f *EditDecisionForm) Validate() (bool, *Decision) {
|
||||||
f.Errors["Content"] = fmt.Sprintf("Please enter at least %d words as Text.", minimumContentLen)
|
f.Errors["Content"] = fmt.Sprintf("Please enter at least %d words as Text.", minimumContentLen)
|
||||||
}
|
}
|
||||||
|
|
||||||
if voteType, err := strconv.ParseUint(f.VoteType, 10, 8); err != nil || (voteType != 0 && voteType != 1) {
|
if voteType, err := strconv.ParseUint(f.VoteType, base10, size8Bit); err != nil || (voteType != 0 && voteType != 1) {
|
||||||
f.Errors["VoteType"] = fmt.Sprint("Please choose a valid vote type.", err)
|
f.Errors["VoteType"] = fmt.Sprint("Please choose a valid vote type.", err)
|
||||||
} else {
|
} else {
|
||||||
data.VoteType = VoteType(uint8(voteType))
|
data.VoteType = VoteType(uint8(voteType))
|
||||||
|
@ -142,7 +145,7 @@ func (f *ProxyVoteForm) Validate() (bool, *Voter, *Vote, string) {
|
||||||
|
|
||||||
data := &Vote{}
|
data := &Vote{}
|
||||||
|
|
||||||
if voterID, err = strconv.ParseInt(f.Voter, 10, 64); err != nil {
|
if voterID, err = strconv.ParseInt(f.Voter, base10, size64Bit); err != nil {
|
||||||
f.Errors["Voter"] = fmt.Sprintf("Please choose a valid voter: %v.", err)
|
f.Errors["Voter"] = fmt.Sprintf("Please choose a valid voter: %v.", err)
|
||||||
} else if voter, err = GetVoterByID(voterID); err != nil {
|
} else if voter, err = GetVoterByID(voterID); err != nil {
|
||||||
f.Errors["Voter"] = fmt.Sprintf("Please choose a valid voter: %v.", err)
|
f.Errors["Voter"] = fmt.Sprintf("Please choose a valid voter: %v.", err)
|
||||||
|
@ -150,7 +153,7 @@ func (f *ProxyVoteForm) Validate() (bool, *Voter, *Vote, string) {
|
||||||
data.VoterID = voter.ID
|
data.VoterID = voter.ID
|
||||||
}
|
}
|
||||||
|
|
||||||
if vote, err = strconv.ParseInt(f.Vote, 10, 8); err != nil {
|
if vote, err = strconv.ParseInt(f.Vote, base10, size8Bit); err != nil {
|
||||||
f.Errors["Vote"] = fmt.Sprintf("Please choose a valid vote: %v.", err)
|
f.Errors["Vote"] = fmt.Sprintf("Please choose a valid vote: %v.", err)
|
||||||
} else if voteChoice, ok := VoteChoices[vote]; !ok {
|
} else if voteChoice, ok := VoteChoices[vote]; !ok {
|
||||||
f.Errors["Vote"] = "Please choose a valid vote."
|
f.Errors["Vote"] = "Please choose a valid vote."
|
||||||
|
|
3
jobs.go
3
jobs.go
|
@ -33,6 +33,7 @@ type jobIdentifier int
|
||||||
const (
|
const (
|
||||||
JobIDCloseDecisions jobIdentifier = iota
|
JobIDCloseDecisions jobIdentifier = iota
|
||||||
JobIDRemindVotersJob
|
JobIDRemindVotersJob
|
||||||
|
reminderDays = 3
|
||||||
)
|
)
|
||||||
|
|
||||||
var rescheduleChannel = make(chan jobIdentifier, 1)
|
var rescheduleChannel = make(chan jobIdentifier, 1)
|
||||||
|
@ -143,7 +144,7 @@ func NewRemindVotersJob() *RemindVotersJob {
|
||||||
|
|
||||||
func (j *RemindVotersJob) Schedule() {
|
func (j *RemindVotersJob) Schedule() {
|
||||||
year, month, day := time.Now().UTC().Date()
|
year, month, day := time.Now().UTC().Date()
|
||||||
nextExecution := time.Date(year, month, day, 0, 0, 0, 0, time.UTC).AddDate(0, 0, 3)
|
nextExecution := time.Date(year, month, day, 0, 0, 0, 0, time.UTC).AddDate(0, 0, reminderDays)
|
||||||
|
|
||||||
log.Infof("scheduling RemindVotersJob for %s", nextExecution)
|
log.Infof("scheduling RemindVotersJob for %s", nextExecution)
|
||||||
|
|
||||||
|
|
|
@ -472,7 +472,7 @@ func FindDecisionForDisplayByTag(tag string) (*DecisionForDisplay, error) {
|
||||||
// This function uses OFFSET for pagination which is not a good idea for larger data sets.
|
// This function uses OFFSET for pagination which is not a good idea for larger data sets.
|
||||||
//
|
//
|
||||||
// TODO: migrate to timestamp base pagination
|
// TODO: migrate to timestamp base pagination
|
||||||
func FindDecisionsForDisplayOnPage(page int64, unVoted bool, voter *Voter) ([]*DecisionForDisplay, error) {
|
func FindDecisionsForDisplayOnPage(page int, unVoted bool, voter *Voter) ([]*DecisionForDisplay, error) {
|
||||||
var decisionsStmt *sqlx.Stmt
|
var decisionsStmt *sqlx.Stmt
|
||||||
|
|
||||||
if unVoted && voter != nil {
|
if unVoted && voter != nil {
|
||||||
|
|
Loading…
Reference in a new issue