fix: customize upvote ratio
This commit is contained in:
@@ -56,10 +56,11 @@ func runSeedCommand(userRepo repositories.UserRepository, postRepo repositories.
|
|||||||
|
|
||||||
func printSeedUsage() {
|
func printSeedUsage() {
|
||||||
fmt.Fprintln(os.Stderr, "Seed subcommands:")
|
fmt.Fprintln(os.Stderr, "Seed subcommands:")
|
||||||
fmt.Fprintln(os.Stderr, " database [--posts <n>] [--users <n>] [--votes-per-post <n>]")
|
fmt.Fprintln(os.Stderr, " database [--posts <n>] [--users <n>] [--votes-per-post <n>] [--upvote-ratio <r>]")
|
||||||
fmt.Fprintln(os.Stderr, " --posts: number of posts to create (default: 40)")
|
fmt.Fprintln(os.Stderr, " --posts: number of posts to create (default: 40)")
|
||||||
fmt.Fprintln(os.Stderr, " --users: number of additional users to create (default: 5)")
|
fmt.Fprintln(os.Stderr, " --users: number of additional users to create (default: 5)")
|
||||||
fmt.Fprintln(os.Stderr, " --votes-per-post: average votes per post (default: 15)")
|
fmt.Fprintln(os.Stderr, " --votes-per-post: average votes per post (default: 15)")
|
||||||
|
fmt.Fprintln(os.Stderr, " --upvote-ratio: percentage of upvotes vs downvotes, 0.0-1.0 (default: 0.7)")
|
||||||
}
|
}
|
||||||
|
|
||||||
func clampFlagValue(value *int, min int, name string) {
|
func clampFlagValue(value *int, min int, name string) {
|
||||||
@@ -76,9 +77,10 @@ func seedDatabase(userRepo repositories.UserRepository, postRepo repositories.Po
|
|||||||
numPosts := fs.Int("posts", 40, "number of posts to create")
|
numPosts := fs.Int("posts", 40, "number of posts to create")
|
||||||
numUsers := fs.Int("users", 5, "number of additional users to create")
|
numUsers := fs.Int("users", 5, "number of additional users to create")
|
||||||
votesPerPost := fs.Int("votes-per-post", 15, "average votes per post")
|
votesPerPost := fs.Int("votes-per-post", 15, "average votes per post")
|
||||||
|
upvoteRatio := fs.Float64("upvote-ratio", 0.7, "percentage of upvotes vs downvotes, 0.0-1.0")
|
||||||
fs.SetOutput(os.Stderr)
|
fs.SetOutput(os.Stderr)
|
||||||
fs.Usage = func() {
|
fs.Usage = func() {
|
||||||
fmt.Fprintln(os.Stderr, "Usage: goyco seed database [--posts <n>] [--users <n>] [--votes-per-post <n>]")
|
fmt.Fprintln(os.Stderr, "Usage: goyco seed database [--posts <n>] [--users <n>] [--votes-per-post <n>] [--upvote-ratio <r>]")
|
||||||
fmt.Fprintln(os.Stderr, "\nOptions:")
|
fmt.Fprintln(os.Stderr, "\nOptions:")
|
||||||
fs.PrintDefaults()
|
fs.PrintDefaults()
|
||||||
}
|
}
|
||||||
@@ -93,6 +95,11 @@ func seedDatabase(userRepo repositories.UserRepository, postRepo repositories.Po
|
|||||||
clampFlagValue(numUsers, 0, "users")
|
clampFlagValue(numUsers, 0, "users")
|
||||||
clampFlagValue(numPosts, 1, "posts")
|
clampFlagValue(numPosts, 1, "posts")
|
||||||
clampFlagValue(votesPerPost, 0, "votes-per-post")
|
clampFlagValue(votesPerPost, 0, "votes-per-post")
|
||||||
|
if *upvoteRatio < 0 {
|
||||||
|
*upvoteRatio = 0
|
||||||
|
} else if *upvoteRatio > 1 {
|
||||||
|
*upvoteRatio = 1
|
||||||
|
}
|
||||||
|
|
||||||
if !IsJSONOutput() {
|
if !IsJSONOutput() {
|
||||||
fmt.Println("Starting database seeding...")
|
fmt.Println("Starting database seeding...")
|
||||||
@@ -119,7 +126,7 @@ func seedDatabase(userRepo repositories.UserRepository, postRepo repositories.Po
|
|||||||
fmt.Printf("Seed user ready: ID=%d Username=%s\n", seedUser.ID, seedUser.Username)
|
fmt.Printf("Seed user ready: ID=%d Username=%s\n", seedUser.ID, seedUser.Username)
|
||||||
}
|
}
|
||||||
|
|
||||||
generator := newSeedGenerator(string(userPasswordHash))
|
generator := newSeedGenerator(string(userPasswordHash), *upvoteRatio)
|
||||||
allUsers := []database.User{*seedUser}
|
allUsers := []database.User{*seedUser}
|
||||||
|
|
||||||
users, err := createUsers(generator, userRepo, *numUsers, "Creating users")
|
users, err := createUsers(generator, userRepo, *numUsers, "Creating users")
|
||||||
@@ -258,13 +265,15 @@ func validateSeedConsistency(voteRepo repositories.VoteRepository, users []datab
|
|||||||
type seedGenerator struct {
|
type seedGenerator struct {
|
||||||
passwordHash string
|
passwordHash string
|
||||||
randSource *rand.Rand
|
randSource *rand.Rand
|
||||||
|
upvoteRatio float64
|
||||||
}
|
}
|
||||||
|
|
||||||
func newSeedGenerator(passwordHash string) *seedGenerator {
|
func newSeedGenerator(passwordHash string, upvoteRatio float64) *seedGenerator {
|
||||||
seed := time.Now().UnixNano()
|
seed := time.Now().UnixNano()
|
||||||
return &seedGenerator{
|
return &seedGenerator{
|
||||||
passwordHash: passwordHash,
|
passwordHash: passwordHash,
|
||||||
randSource: rand.New(rand.NewSource(seed)),
|
randSource: rand.New(rand.NewSource(seed)),
|
||||||
|
upvoteRatio: upvoteRatio,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -490,9 +499,8 @@ func (g *seedGenerator) createVotesForPost(voteRepo repositories.VoteRepository,
|
|||||||
}
|
}
|
||||||
usedUsers[user.ID] = true
|
usedUsers[user.ID] = true
|
||||||
|
|
||||||
voteTypeInt := g.randSource.Intn(10)
|
|
||||||
var voteType database.VoteType
|
var voteType database.VoteType
|
||||||
if voteTypeInt < 7 {
|
if g.randSource.Float64() < g.upvoteRatio {
|
||||||
voteType = database.VoteUp
|
voteType = database.VoteUp
|
||||||
} else {
|
} else {
|
||||||
voteType = database.VoteDown
|
voteType = database.VoteDown
|
||||||
|
|||||||
Reference in New Issue
Block a user