diff --git a/handler/review.go b/handler/review.go index 2cbc47b..9275f76 100644 --- a/handler/review.go +++ b/handler/review.go @@ -6,6 +6,7 @@ import ( "github.com/gin-gonic/gin" "jcourse_go/middleware" + "jcourse_go/model/converter" "jcourse_go/model/dto" "jcourse_go/model/model" "jcourse_go/service" @@ -52,6 +53,8 @@ func GetReviewListHandler(c *gin.Context) { return } + converter.RemoveReviewsUserInfo(reviews, true) + response := dto.ReviewListResponse{ Page: request.Page, PageSize: request.PageSize, diff --git a/model/converter/course.go b/model/converter/course.go index 73fcf55..106850e 100644 --- a/model/converter/course.go +++ b/model/converter/course.go @@ -70,8 +70,8 @@ func ConvertOfferedCourseFromPO(po po.OfferedCoursePO) model.OfferedCourse { func ConvertOfferedCoursesFromPOs(pos []po.OfferedCoursePO) []model.OfferedCourse { res := make([]model.OfferedCourse, 0, len(pos)) - for _, po := range pos { - res = append(res, ConvertOfferedCourseFromPO(po)) + for _, p := range pos { + res = append(res, ConvertOfferedCourseFromPO(p)) } return res } diff --git a/model/converter/review.go b/model/converter/review.go index 36f6f24..50b1ebc 100644 --- a/model/converter/review.go +++ b/model/converter/review.go @@ -24,6 +24,21 @@ func ConvertReviewFromPO(po po.ReviewPO) model.Review { } } +func RemoveReviewUserInfo(review *model.Review, hideUser bool) { + if review == nil { + return + } + if hideUser && review.IsAnonymous { + review.User = model.UserMinimal{} + } +} + +func RemoveReviewsUserInfo(reviews []model.Review, hideUser bool) { + for i := range reviews { + RemoveReviewUserInfo(&reviews[i], hideUser) + } +} + func PackReviewWithCourse(review *model.Review, course model.CourseMinimal) { review.Course = course } diff --git a/model/converter/review_test.go b/model/converter/review_test.go new file mode 100644 index 0000000..e29033c --- /dev/null +++ b/model/converter/review_test.go @@ -0,0 +1,43 @@ +package converter + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "jcourse_go/model/model" +) + +func TestRemoveReviewUserInfo(t *testing.T) { + hides := []bool{true, false, true, false} + expected := []int64{0, 1, 1, 1} + user := model.UserMinimal{ID: 1} + reviews := []model.Review{{ + User: user, + IsAnonymous: true, + }, { + User: user, + IsAnonymous: true, + }, { + User: user, + IsAnonymous: false, + }, { + User: user, + IsAnonymous: false, + }} + for i := range reviews { + r := reviews[i] + hide := hides[i] + RemoveReviewUserInfo(&r, hide) + assert.Equal(t, expected[i], r.User.ID) + } +} + +func TestRemoveReviewsUserInfo(t *testing.T) { + reviews := []model.Review{{ + User: model.UserMinimal{ID: 1}, + IsAnonymous: true, + }} + RemoveReviewsUserInfo(reviews, true) + assert.Equal(t, int64(0), reviews[0].User.ID) +} diff --git a/model/model/rating_test.go b/model/model/rating_test.go new file mode 100644 index 0000000..35b291c --- /dev/null +++ b/model/model/rating_test.go @@ -0,0 +1,20 @@ +package model + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestRatingInfo_Calc(t *testing.T) { + rating := &RatingInfo{ + RatingDist: []RatingInfoDistItem{ + {Count: 1, Rating: 1}, + {Count: 2, Rating: 2}, + {Count: 5, Rating: 5}, + }, + } + rating.Calc() + assert.Equal(t, int64(8), rating.Count) + assert.Equal(t, 3.75, rating.Average) +} diff --git a/util/conv_test.go b/util/conv_test.go new file mode 100644 index 0000000..597b88c --- /dev/null +++ b/util/conv_test.go @@ -0,0 +1,16 @@ +package util + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestStringsToFloat64s(t *testing.T) { + src := []string{"1", "2", "3", "4", "5"} + dst := StringsToFloat64s(src) + assert.Equal(t, len(src), len(dst)) + for i := range src { + assert.Equal(t, float64(i+1), dst[i]) + } +}