Add owners to seeded projects
This commit is contained in:
parent
196eda8185
commit
3aa16c6d12
|
@ -150,7 +150,7 @@ func FetchProjects(
|
|||
for i, p := range projectRows {
|
||||
projectIds[i] = p.Project.ID
|
||||
}
|
||||
projectOwners, err := FetchMultipleProjectsOwners(ctx, tx, currentUser, projectIds)
|
||||
projectOwners, err := FetchMultipleProjectsOwners(ctx, tx, projectIds)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -316,7 +316,6 @@ type ProjectOwners struct {
|
|||
func FetchMultipleProjectsOwners(
|
||||
ctx context.Context,
|
||||
dbConn db.ConnOrTx,
|
||||
currentUser *models.User,
|
||||
projectIds []int,
|
||||
) ([]ProjectOwners, error) {
|
||||
perf := perf.ExtractPerf(ctx)
|
||||
|
@ -359,8 +358,9 @@ func FetchMultipleProjectsOwners(
|
|||
userIds = append(userIds, userProject.UserID)
|
||||
}
|
||||
}
|
||||
users, err := FetchUsers(ctx, tx, currentUser, UsersQuery{
|
||||
users, err := FetchUsers(ctx, tx, nil, UsersQuery{
|
||||
UserIDs: userIds,
|
||||
AnyStatus: true,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, oops.New(err, "failed to fetch users for projects")
|
||||
|
@ -408,14 +408,13 @@ func FetchMultipleProjectsOwners(
|
|||
func FetchProjectOwners(
|
||||
ctx context.Context,
|
||||
dbConn db.ConnOrTx,
|
||||
currentUser *models.User,
|
||||
projectId int,
|
||||
) ([]*models.User, error) {
|
||||
perf := perf.ExtractPerf(ctx)
|
||||
perf.StartBlock("SQL", "Fetch owners for project")
|
||||
defer perf.EndBlock()
|
||||
|
||||
projectOwners, err := FetchMultipleProjectsOwners(ctx, dbConn, currentUser, []int{projectId})
|
||||
projectOwners, err := FetchMultipleProjectsOwners(ctx, dbConn, []int{projectId})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ func BareMinimumSeed() *models.Project {
|
|||
defer tx.Rollback(ctx)
|
||||
|
||||
fmt.Println("Creating HMN project...")
|
||||
hmn := seedProject(ctx, tx, seedHMN)
|
||||
hmn := seedProject(ctx, tx, seedHMN, nil)
|
||||
|
||||
utils.Must0(tx.Commit(ctx))
|
||||
|
||||
|
@ -101,11 +101,21 @@ func SampleSeed() {
|
|||
users := []*models.User{alice, bob, charlie, spammer}
|
||||
|
||||
fmt.Println("Creating starter projects...")
|
||||
hero := seedProject(ctx, tx, seedHandmadeHero)
|
||||
fourcoder := seedProject(ctx, tx, seed4coder)
|
||||
for i := 0; i < 3; i++ {
|
||||
hero := seedProject(ctx, tx, seedHandmadeHero, []*models.User{admin})
|
||||
fourcoder := seedProject(ctx, tx, seed4coder, []*models.User{bob})
|
||||
for i := 0; i < 5; i++ {
|
||||
name := fmt.Sprintf("%s %s", lorem.Word(1, 10), lorem.Word(1, 10))
|
||||
slug := strings.ReplaceAll(strings.ToLower(name), " ", "-")
|
||||
|
||||
possibleOwners := []*models.User{alice, bob, charlie}
|
||||
var owners []*models.User
|
||||
for ownerIdx, owner := range possibleOwners {
|
||||
mask := (i % ((1 << len(possibleOwners)) - 1)) + 1
|
||||
if (1<<ownerIdx)&mask != 0 {
|
||||
owners = append(owners, owner)
|
||||
}
|
||||
}
|
||||
|
||||
seedProject(ctx, tx, models.Project{
|
||||
Slug: slug,
|
||||
Name: name,
|
||||
|
@ -113,8 +123,17 @@ func SampleSeed() {
|
|||
Description: lorem.Paragraph(3, 5),
|
||||
|
||||
Personal: true,
|
||||
})
|
||||
}, owners)
|
||||
}
|
||||
// spam project!
|
||||
seedProject(ctx, tx, models.Project{
|
||||
Slug: "spam",
|
||||
Name: "Cheap abstraction enhancers",
|
||||
Blurb: "Get higher than ever before...up the ladder of abstraction.",
|
||||
Description: "Tired of boring details like the actual problem assigned to you? The sky's the limit with these abstraction enhancers, guaranteed to sweep away all those pesky details so you can focus on what matters: \"architecture\".",
|
||||
|
||||
Personal: true,
|
||||
}, []*models.User{spammer})
|
||||
|
||||
fmt.Println("Creating some forum threads...")
|
||||
for i := 0; i < 5; i++ {
|
||||
|
@ -246,7 +265,7 @@ func populateThread(ctx context.Context, tx pgx.Tx, thread *models.Thread, users
|
|||
|
||||
var latestProjectId int
|
||||
|
||||
func seedProject(ctx context.Context, tx pgx.Tx, input models.Project) *models.Project {
|
||||
func seedProject(ctx context.Context, tx pgx.Tx, input models.Project, owners []*models.User) *models.Project {
|
||||
project := db.MustQueryOne[models.Project](ctx, tx,
|
||||
`
|
||||
INSERT INTO project (
|
||||
|
@ -303,6 +322,14 @@ func seedProject(ctx context.Context, tx pgx.Tx, input models.Project) *models.P
|
|||
))
|
||||
project.ForumID = &forum.ID
|
||||
|
||||
// Add project owners
|
||||
for _, owner := range owners {
|
||||
utils.Must1(tx.Exec(ctx,
|
||||
`INSERT INTO user_project (user_id, project_id) VALUES ($1, $2)`,
|
||||
owner.ID, project.ID,
|
||||
))
|
||||
}
|
||||
|
||||
return project
|
||||
}
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ func BlogIndex(c *RequestContext) ResponseData {
|
|||
canCreate := false
|
||||
if c.CurrentProject.HasBlog() && c.CurrentUser != nil {
|
||||
isProjectOwner := false
|
||||
owners, err := hmndata.FetchProjectOwners(c.Context(), c.Conn, c.CurrentUser, c.CurrentProject.ID)
|
||||
owners, err := hmndata.FetchProjectOwners(c.Context(), c.Conn, c.CurrentProject.ID)
|
||||
if err != nil {
|
||||
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to fetch project owners"))
|
||||
}
|
||||
|
|
|
@ -181,7 +181,7 @@ func ProjectHomepage(c *RequestContext) ResponseData {
|
|||
// There are no further permission checks to do, because permissions are
|
||||
// checked whatever way we fetch the project.
|
||||
|
||||
owners, err := hmndata.FetchProjectOwners(c.Context(), c.Conn, c.CurrentUser, c.CurrentProject.ID)
|
||||
owners, err := hmndata.FetchProjectOwners(c.Context(), c.Conn, c.CurrentProject.ID)
|
||||
if err != nil {
|
||||
return c.ErrorResponse(http.StatusInternalServerError, err)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue