github.com/ngocphuongnb/tetua@v0.0.7-alpha/app/web/user/profile.go (about) 1 package webuser 2 3 import ( 4 "net/http" 5 "sync" 6 7 "github.com/ngocphuongnb/tetua/app/entities" 8 "github.com/ngocphuongnb/tetua/app/repositories" 9 "github.com/ngocphuongnb/tetua/app/server" 10 "github.com/ngocphuongnb/tetua/app/utils" 11 "github.com/ngocphuongnb/tetua/views" 12 ) 13 14 func Profile(c server.Context) (err1 error) { 15 username := c.Param("username") 16 user, err1 := repositories.User.ByUsername(c.Context(), username) 17 var err2 error 18 var paginate *entities.Paginate[entities.Post] 19 var comments []*entities.Comment 20 var wg sync.WaitGroup 21 22 if err1 != nil { 23 return c.Render(views.Error("User not found")) 24 } 25 26 wg.Add(2) 27 go func(wg *sync.WaitGroup) { 28 defer wg.Done() 29 paginate, err1 = repositories.Post.Paginate(c.Context(), &entities.PostFilter{ 30 UserIDs: []int{user.ID}, 31 Filter: &entities.Filter{ 32 Page: c.ParamInt("page", 1), 33 IgnoreUrlParams: []string{"user"}, 34 }, 35 }) 36 37 if err1 != nil { 38 c.Logger().Error(err1) 39 } 40 }(&wg) 41 42 go func(wg *sync.WaitGroup) { 43 defer wg.Done() 44 if c.ParamInt("page", 1) > 1 { 45 return 46 } 47 comments, err2 = repositories.Comment.FindWithPost(c.Context(), &entities.CommentFilter{ 48 UserIDs: []int{user.ID}, 49 Filter: &entities.Filter{ 50 Limit: 5, 51 }, 52 }) 53 if err1 != nil { 54 c.Logger().Error(err1) 55 } 56 }(&wg) 57 58 wg.Wait() 59 60 if err := utils.FirstError(err1, err2); err != nil { 61 c.Logger().Error("Error loading profile", err) 62 return c.Status(http.StatusBadRequest).Render(views.Error("Error loading profile")) 63 } 64 65 c.Meta().Title = user.Name() 66 return c.Render(views.Profile(user, paginate, comments)) 67 }