diff --git a/model/admin_impl.go b/model/admin_impl.go index 42cc0ad7..86556576 100644 --- a/model/admin_impl.go +++ b/model/admin_impl.go @@ -4,6 +4,8 @@ import ( "context" "github.com/google/uuid" + "github.com/samber/lo" + "github.com/traPtitech/Jomon/ent" "github.com/traPtitech/Jomon/ent/user" ) @@ -16,12 +18,11 @@ func (repo *EntRepository) GetAdmins(ctx context.Context) ([]*Admin, error) { return nil, err } - admins := []*Admin{} - for _, u := range users { - admins = append(admins, &Admin{ + admins := lo.Map(users, func(u *ent.User, _ int) *Admin { + return &Admin{ ID: u.ID, - }) - } + } + }) return admins, nil } diff --git a/model/comment_impl.go b/model/comment_impl.go index b29ab3df..d37b93e4 100644 --- a/model/comment_impl.go +++ b/model/comment_impl.go @@ -5,6 +5,7 @@ import ( "time" "github.com/google/uuid" + "github.com/samber/lo" "github.com/traPtitech/Jomon/ent" "github.com/traPtitech/Jomon/ent/comment" "github.com/traPtitech/Jomon/ent/request" @@ -33,10 +34,9 @@ func (repo *EntRepository) GetComments( if err != nil { return nil, err } - modelcomments := []*Comment{} - for _, c := range comments { - modelcomments = append(modelcomments, ConvertEntCommentToModelComment(c, c.Edges.User.ID)) - } + modelcomments := lo.Map(comments, func(c *ent.Comment, _ int) *Comment { + return ConvertEntCommentToModelComment(c, c.Edges.User.ID) + }) return modelcomments, nil } diff --git a/model/group_impl.go b/model/group_impl.go index 6d9dd3b1..c43d5d2e 100644 --- a/model/group_impl.go +++ b/model/group_impl.go @@ -4,6 +4,7 @@ import ( "context" "github.com/google/uuid" + "github.com/samber/lo" "github.com/traPtitech/Jomon/ent" "github.com/traPtitech/Jomon/ent/group" "github.com/traPtitech/Jomon/ent/user" @@ -16,10 +17,9 @@ func (repo *EntRepository) GetGroups(ctx context.Context) ([]*Group, error) { if err != nil { return nil, err } - modelgroups := []*Group{} - for _, g := range groups { - modelgroups = append(modelgroups, ConvertEntGroupToModelGroup(g)) - } + modelgroups := lo.Map(groups, func(g *ent.Group, _ int) *Group { + return ConvertEntGroupToModelGroup(g) + }) return modelgroups, nil } @@ -85,10 +85,9 @@ func (repo *EntRepository) GetOwners(ctx context.Context, groupID uuid.UUID) ([] if err != nil { return nil, err } - owners := []*Owner{} - for _, groupowner := range groupowners { - owners = append(owners, &Owner{ID: groupowner.ID}) - } + owners := lo.Map(groupowners, func(groupowner *ent.User, _ int) *Owner { + return &Owner{ID: groupowner.ID} + }) return owners, nil } @@ -104,10 +103,9 @@ func (repo *EntRepository) AddOwners( if err != nil { return nil, err } - resowners := []*Owner{} - for _, owner := range ownerIDs { - resowners = append(resowners, &Owner{ID: owner}) - } + resowners := lo.Map(ownerIDs, func(owner uuid.UUID, _ int) *Owner { + return &Owner{ID: owner} + }) return resowners, nil } @@ -135,10 +133,10 @@ func (repo *EntRepository) GetMembers(ctx context.Context, groupID uuid.UUID) ([ if err != nil { return nil, err } - modelmembers := []*Member{} - for _, member := range members { - modelmembers = append(modelmembers, &Member{member.ID}) - } + modelmembers := lo.Map(members, func(member *ent.User, _ int) *Member { + return &Member{member.ID} + }) + return modelmembers, nil } @@ -154,11 +152,10 @@ func (repo *EntRepository) AddMembers( if err != nil { return nil, err } + resMembers := lo.Map(userIDs, func(member uuid.UUID, _ int) *Member { + return &Member{member} + }) - resMembers := []*Member{} - for _, member := range userIDs { - resMembers = append(resMembers, &Member{member}) - } return resMembers, nil } diff --git a/model/request_impl.go b/model/request_impl.go index c7dd7c11..acc17d54 100644 --- a/model/request_impl.go +++ b/model/request_impl.go @@ -5,6 +5,7 @@ import ( "time" "github.com/google/uuid" + "github.com/samber/lo" "github.com/traPtitech/Jomon/ent" "github.com/traPtitech/Jomon/ent/group" "github.com/traPtitech/Jomon/ent/request" @@ -115,12 +116,11 @@ func (repo *EntRepository) GetRequests( return nil, err } - reqres := []*RequestResponse{} - for _, r := range requests { - rr := convertEntRequestResponseToModelRequestResponse( + reqres := lo.Map(requests, func(r *ent.Request, _ int) *RequestResponse { + return convertEntRequestResponseToModelRequestResponse( r, r.Edges.Tag, r.Edges.Group, r.Edges.Status[0], r.Edges.User) - reqres = append(reqres, rr) - } + }) + return reqres, nil } @@ -138,10 +138,9 @@ func (repo *EntRepository) CreateRequest( panic(v) } }() - var tagIDs []uuid.UUID - for _, t := range tags { - tagIDs = append(tagIDs, t.ID) - } + tagIDs := lo.Map(tags, func(t *Tag, _ int) uuid.UUID { + return t.ID + }) created, err := tx.Client().Request. Create(). SetTitle(title). @@ -236,19 +235,19 @@ func (repo *EntRepository) GetRequest( if err != nil { return nil, err } - var tags []*Tag - for _, t := range r.Edges.Tag { - tags = append(tags, ConvertEntTagToModelTag(t)) - } - var targets []*RequestTargetDetail - for _, target := range r.Edges.Target { - targets = append(targets, ConvertEntRequestTargetToModelRequestTargetDetail(target)) - } + tags := lo.Map(r.Edges.Tag, func(t *ent.Tag, _ int) *Tag { + return ConvertEntTagToModelTag(t) + }) + targets := lo.Map( + r.Edges.Target, + func(target *ent.RequestTarget, _ int) *RequestTargetDetail { + return ConvertEntRequestTargetToModelRequestTargetDetail(target) + }, + ) modelGroup := ConvertEntGroupToModelGroup(r.Edges.Group) - var statuses []*RequestStatus - for _, status := range r.Edges.Status { - statuses = append(statuses, convertEntRequestStatusToModelRequestStatus(status)) - } + statuses := lo.Map(r.Edges.Status, func(status *ent.RequestStatus, _ int) *RequestStatus { + return convertEntRequestStatusToModelRequestStatus(status) + }) reqdetail := &RequestDetail{ ID: r.ID, Status: convertEntRequestStatusToModelStatus(&r.Edges.Status[0].Status), @@ -279,10 +278,9 @@ func (repo *EntRepository) UpdateRequest( panic(v) } }() - var tagIDs []uuid.UUID - for _, t := range tags { - tagIDs = append(tagIDs, t.ID) - } + tagIDs := lo.Map(tags, func(t *Tag, _ int) uuid.UUID { + return t.ID + }) updated, err := tx.Client().Request. UpdateOneID(requestID). SetTitle(title). @@ -332,10 +330,9 @@ func (repo *EntRepository) UpdateRequest( err = RollbackWithError(tx, err) return nil, err } - var modeltags []*Tag - for _, enttag := range enttags { - modeltags = append(modeltags, ConvertEntTagToModelTag(enttag)) - } + modeltags := lo.Map(enttags, func(enttag *ent.Tag, _ int) *Tag { + return ConvertEntTagToModelTag(enttag) + }) var entgroup *ent.Group if group != nil { entgroup, err = updated.QueryGroup().Only(ctx) @@ -359,10 +356,9 @@ func (repo *EntRepository) UpdateRequest( if err != nil { return nil, err } - var statuses []*RequestStatus - for _, s := range entstatuses { - statuses = append(statuses, convertEntRequestStatusToModelRequestStatus(s)) - } + statuses := lo.Map(entstatuses, func(s *ent.RequestStatus, _ int) *RequestStatus { + return convertEntRequestStatusToModelRequestStatus(s) + }) modelgroup := ConvertEntGroupToModelGroup(entgroup) reqdetail := &RequestDetail{ @@ -388,10 +384,9 @@ func convertEntRequestResponseToModelRequestResponse( if request == nil { return nil } - modeltags := []*Tag{} - for _, t := range tags { - modeltags = append(modeltags, ConvertEntTagToModelTag(t)) - } + modeltags := lo.Map(tags, func(t *ent.Tag, _ int) *Tag { + return ConvertEntTagToModelTag(t) + }) return &RequestResponse{ ID: request.ID, Status: convertEntRequestStatusToModelStatus(&status.Status), diff --git a/model/request_target_impl.go b/model/request_target_impl.go index 4562ba85..e8eb2ef3 100644 --- a/model/request_target_impl.go +++ b/model/request_target_impl.go @@ -4,6 +4,7 @@ import ( "context" "github.com/google/uuid" + "github.com/samber/lo" "github.com/traPtitech/Jomon/ent" "github.com/traPtitech/Jomon/ent/request" "github.com/traPtitech/Jomon/ent/requesttarget" @@ -25,35 +26,30 @@ func (repo *EntRepository) GetRequestTargets( if err != nil { return nil, err } - var targets []*RequestTargetDetail - for _, t := range ts { - targets = append(targets, ConvertEntRequestTargetToModelRequestTargetDetail(t)) - } + targets := lo.Map(ts, func(t *ent.RequestTarget, _ int) *RequestTargetDetail { + return ConvertEntRequestTargetToModelRequestTargetDetail(t) + }) return targets, err } func (repo *EntRepository) createRequestTargets( ctx context.Context, tx *ent.Tx, requestID uuid.UUID, targets []*RequestTarget, ) ([]*RequestTargetDetail, error) { - var bulk []*ent.RequestTargetCreate - for _, t := range targets { - bulk = append(bulk, - tx.Client().RequestTarget. - Create(). - SetAmount(t.Amount). - SetRequestID(requestID). - SetUserID(t.Target), - ) - } + bulk := lo.Map(targets, func(t *RequestTarget, _ int) *ent.RequestTargetCreate { + return tx.Client().RequestTarget. + Create(). + SetAmount(t.Amount). + SetRequestID(requestID). + SetUserID(t.Target) + }) cs, err := tx.Client().RequestTarget.CreateBulk(bulk...). Save(ctx) if err != nil { return nil, err } - ids := []uuid.UUID{} - for _, c := range cs { - ids = append(ids, c.ID) - } + ids := lo.Map(cs, func(c *ent.RequestTarget, _ int) uuid.UUID { + return c.ID + }) created, err := tx.Client().RequestTarget. Query(). Where( @@ -65,10 +61,9 @@ func (repo *EntRepository) createRequestTargets( return nil, err } // []*ent.RequestTarget to []*RequestTargetDetail - var ts []*RequestTargetDetail - for _, t := range created { - ts = append(ts, ConvertEntRequestTargetToModelRequestTargetDetail(t)) - } + ts := lo.Map(created, func(t *ent.RequestTarget, _ int) *RequestTargetDetail { + return ConvertEntRequestTargetToModelRequestTargetDetail(t) + }) return ts, nil } diff --git a/model/tag_impl.go b/model/tag_impl.go index d9667fbe..93f2d21b 100644 --- a/model/tag_impl.go +++ b/model/tag_impl.go @@ -5,6 +5,7 @@ import ( "time" "github.com/google/uuid" + "github.com/samber/lo" "github.com/traPtitech/Jomon/ent" "github.com/traPtitech/Jomon/ent/tag" ) @@ -16,10 +17,10 @@ func (repo *EntRepository) GetTags(ctx context.Context) ([]*Tag, error) { if err != nil { return nil, err } - modeltags := []*Tag{} - for _, t := range tags { - modeltags = append(modeltags, ConvertEntTagToModelTag(t)) - } + modeltags := lo.Map(tags, func(t *ent.Tag, _ int) *Tag { + return ConvertEntTagToModelTag(t) + }) + return modeltags, nil } diff --git a/model/transaction_impl.go b/model/transaction_impl.go index 9b45ae3b..a7b88b8e 100644 --- a/model/transaction_impl.go +++ b/model/transaction_impl.go @@ -5,6 +5,7 @@ import ( "entgo.io/ent/dialect/sql" "github.com/google/uuid" + "github.com/samber/lo" "github.com/traPtitech/Jomon/ent" "github.com/traPtitech/Jomon/ent/group" "github.com/traPtitech/Jomon/ent/groupbudget" @@ -116,10 +117,9 @@ func (repo *EntRepository) GetTransactions( } // Converting - var res []*TransactionResponse - for _, tx := range txs { - res = append(res, ConvertEntTransactionToModelTransactionResponse(tx)) - } + res := lo.Map(txs, func(tx *ent.Transaction, _ int) *TransactionResponse { + return ConvertEntTransactionToModelTransactionResponse(tx) + }) return res, nil } @@ -162,10 +162,9 @@ func (repo *EntRepository) CreateTransaction( }() // Get Tags - var tagIDs []uuid.UUID - for _, t := range tags { - tagIDs = append(tagIDs, *t) - } + tagIDs := lo.Map(tags, func(t *uuid.UUID, _ int) uuid.UUID { + return *t + }) // Create Transaction Detail detail, err := repo.createTransactionDetail(ctx, tx, amount, target) @@ -271,10 +270,9 @@ func (repo *EntRepository) UpdateTransaction( } // Get Tags - var tagIDs []uuid.UUID - for _, t := range tags { - tagIDs = append(tagIDs, *t) - } + tagIDs := lo.Map(tags, func(t *uuid.UUID, _ int) uuid.UUID { + return *t + }) // Delete Tag Transaction Edge _, err = tx.Client().Tag. @@ -381,10 +379,9 @@ func ConvertEntTransactionToModelTransaction(transaction *ent.Transaction) *Tran func ConvertEntTransactionToModelTransactionResponse( transaction *ent.Transaction, ) *TransactionResponse { - var tags []*Tag - for _, t := range transaction.Edges.Tag { - tags = append(tags, ConvertEntTagToModelTag(t)) - } + tags := lo.Map(transaction.Edges.Tag, func(t *ent.Tag, _ int) *Tag { + return ConvertEntTagToModelTag(t) + }) var g *Group if transaction.Edges.GroupBudget != nil { g = ConvertEntGroupToModelGroup(transaction.Edges.GroupBudget.Edges.Group) diff --git a/model/user_impl.go b/model/user_impl.go index 0690955d..03e6633a 100644 --- a/model/user_impl.go +++ b/model/user_impl.go @@ -5,6 +5,7 @@ import ( "time" "github.com/google/uuid" + "github.com/samber/lo" "github.com/traPtitech/Jomon/ent" "github.com/traPtitech/Jomon/ent/user" ) @@ -53,10 +54,9 @@ func (repo *EntRepository) GetUsers(ctx context.Context) ([]*User, error) { if err != nil { return nil, err } - var modelusers []*User - for _, u := range users { - modelusers = append(modelusers, convertEntUserToModelUser(u)) - } + modelusers := lo.Map(users, func(u *ent.User, _ int) *User { + return convertEntUserToModelUser(u) + }) return modelusers, nil } diff --git a/router/admin.go b/router/admin.go index dd9741b7..0789f1cd 100644 --- a/router/admin.go +++ b/router/admin.go @@ -5,7 +5,9 @@ import ( "github.com/google/uuid" "github.com/labstack/echo/v4" + "github.com/samber/lo" "github.com/traPtitech/Jomon/ent" + "github.com/traPtitech/Jomon/model" "go.uber.org/zap" ) @@ -17,10 +19,9 @@ func (h Handlers) GetAdmins(c echo.Context) error { return echo.NewHTTPError(http.StatusInternalServerError, err) } - res := []*uuid.UUID{} - for _, admin := range admins { - res = append(res, &admin.ID) - } + res := lo.Map(admins, func(admin *model.Admin, _ int) *uuid.UUID { + return &admin.ID + }) return c.JSON(http.StatusOK, res) } diff --git a/router/group.go b/router/group.go index 1edf7819..419ad0a5 100644 --- a/router/group.go +++ b/router/group.go @@ -7,7 +7,9 @@ import ( "github.com/google/uuid" "github.com/labstack/echo/v4" + "github.com/samber/lo" "github.com/traPtitech/Jomon/ent" + "github.com/traPtitech/Jomon/model" "go.uber.org/zap" ) @@ -61,17 +63,16 @@ func (h Handlers) GetGroups(c echo.Context) error { return echo.NewHTTPError(http.StatusInternalServerError, err) } - res := []*GroupOverview{} - for _, group := range groups { - res = append(res, &GroupOverview{ + res := lo.Map(groups, func(group *model.Group, _ int) *GroupOverview { + return &GroupOverview{ ID: group.ID, Name: group.Name, Description: group.Description, Budget: group.Budget, CreatedAt: group.CreatedAt, UpdatedAt: group.UpdatedAt, - }) - } + } + }) return c.JSON(http.StatusOK, res) } @@ -143,17 +144,17 @@ func (h Handlers) GetGroupDetail(c echo.Context) error { h.Logger.Error("failed to get owners from repository", zap.Error(err)) return echo.NewHTTPError(http.StatusInternalServerError, err) } - for _, owner := range owners { - res.Owners = append(res.Owners, &owner.ID) - } + res.Owners = lo.Map(owners, func(owner *model.Owner, _ int) *uuid.UUID { + return &owner.ID + }) members, err := h.Repository.GetMembers(ctx, groupID) if err != nil { h.Logger.Error("failed to get members from repository", zap.Error(err)) return echo.NewHTTPError(http.StatusInternalServerError, err) } - for _, member := range members { - res.Members = append(res.Members, &member.ID) - } + res.Members = lo.Map(members, func(member *model.Member, indec int) *uuid.UUID { + return &member.ID + }) return c.JSON(http.StatusOK, res) } @@ -240,10 +241,9 @@ func (h Handlers) PostMember(c echo.Context) error { h.Logger.Error("failed to add member in repository", zap.Error(err)) return echo.NewHTTPError(http.StatusInternalServerError, err) } - res := []*uuid.UUID{} - for _, m := range added { - res = append(res, &m.ID) - } + res := lo.Map(added, func(m *model.Member, _ int) *uuid.UUID { + return &m.ID + }) return c.JSON(http.StatusOK, res) } @@ -299,10 +299,9 @@ func (h Handlers) PostOwner(c echo.Context) error { return echo.NewHTTPError(http.StatusInternalServerError, err) } - res := make([]uuid.UUID, len(added)) - for i, owner := range added { - res[i] = owner.ID - } + res := lo.Map(added, func(owner *model.Owner, _ int) uuid.UUID { + return owner.ID + }) return c.JSON(http.StatusOK, res) } diff --git a/router/group_test.go b/router/group_test.go index 572ea26a..4ca8482d 100644 --- a/router/group_test.go +++ b/router/group_test.go @@ -13,6 +13,7 @@ import ( "github.com/google/uuid" "github.com/labstack/echo/v4" + "github.com/samber/lo" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/traPtitech/Jomon/ent" @@ -66,17 +67,16 @@ func TestHandlers_GetGroups(t *testing.T) { GetGroups(c.Request().Context()). Return(groups, nil) - resOverview := []*GroupOverview{} - for _, group := range groups { - resOverview = append(resOverview, &GroupOverview{ + resOverview := lo.Map(groups, func(group *model.Group, _ int) *GroupOverview { + return &GroupOverview{ ID: group.ID, Name: group.Name, Description: group.Description, Budget: group.Budget, CreatedAt: group.CreatedAt, UpdatedAt: group.UpdatedAt, - }) - } + } + }) resBody, err := json.Marshal(resOverview) require.NoError(t, err) diff --git a/router/request.go b/router/request.go index 8948af38..5ac87943 100644 --- a/router/request.go +++ b/router/request.go @@ -9,6 +9,7 @@ import ( "github.com/google/uuid" "github.com/labstack/echo-contrib/session" "github.com/labstack/echo/v4" + "github.com/samber/lo" "github.com/traPtitech/Jomon/ent" "github.com/traPtitech/Jomon/model" "github.com/traPtitech/Jomon/service" @@ -182,56 +183,58 @@ func (h Handlers) GetRequests(c echo.Context) error { return echo.NewHTTPError(http.StatusInternalServerError, err) } - tags := []*TagOverview{} - requests := []*RequestResponse{} - for _, request := range modelrequests { - for _, tag := range request.Tags { - tags = append(tags, &TagOverview{ - ID: tag.ID, - Name: tag.Name, - CreatedAt: tag.CreatedAt, - UpdatedAt: tag.UpdatedAt, - }) - } - - restargets := []*TargetOverview{} - for _, target := range request.Targets { - restargets = append(restargets, &TargetOverview{ - ID: target.ID, - Target: target.Target, - Amount: target.Amount, - PaidAt: target.PaidAt, - CreatedAt: target.CreatedAt, + requests := lo.Map( + modelrequests, + func(request *model.RequestResponse, _ int) *RequestResponse { + tags := lo.Map(request.Tags, func(tag *model.Tag, _ int) *TagOverview { + return &TagOverview{ + ID: tag.ID, + Name: tag.Name, + CreatedAt: tag.CreatedAt, + UpdatedAt: tag.UpdatedAt, + } }) - } - var resgroup *GroupOverview - if request.Group != nil { - resgroup = &GroupOverview{ - ID: request.Group.ID, - Name: request.Group.Name, - Description: request.Group.Description, - Budget: request.Group.Budget, - CreatedAt: request.Group.CreatedAt, - UpdatedAt: request.Group.UpdatedAt, + restargets := lo.Map( + request.Targets, + func(target *model.RequestTargetDetail, _ int) *TargetOverview { + return &TargetOverview{ + ID: target.ID, + Target: target.Target, + Amount: target.Amount, + PaidAt: target.PaidAt, + CreatedAt: target.CreatedAt, + } + }, + ) + + var resgroup *GroupOverview + if request.Group != nil { + resgroup = &GroupOverview{ + ID: request.Group.ID, + Name: request.Group.Name, + Description: request.Group.Description, + Budget: request.Group.Budget, + CreatedAt: request.Group.CreatedAt, + UpdatedAt: request.Group.UpdatedAt, + } } - } - res := &RequestResponse{ - ID: request.ID, - Status: request.Status, - CreatedAt: request.CreatedAt, - UpdatedAt: request.UpdatedAt, - CreatedBy: request.CreatedBy, - Title: request.Title, - Content: request.Content, - Targets: restargets, - Tags: tags, - Group: resgroup, - Comments: []*CommentDetail{}, - } - requests = append(requests, res) - } + return &RequestResponse{ + ID: request.ID, + Status: request.Status, + CreatedAt: request.CreatedAt, + UpdatedAt: request.UpdatedAt, + CreatedBy: request.CreatedBy, + Title: request.Title, + Content: request.Content, + Targets: restargets, + Tags: tags, + Group: resgroup, + Comments: []*CommentDetail{}, + } + }, + ) return c.JSON(http.StatusOK, requests) } @@ -256,13 +259,12 @@ func (h Handlers) PostRequest(c echo.Context) error { } tags = append(tags, tag) } - targets := []*model.RequestTarget{} - for _, target := range req.Targets { - targets = append(targets, &model.RequestTarget{ + targets := lo.Map(req.Targets, func(target *Target, _ int) *model.RequestTarget { + return &model.RequestTarget{ Target: target.Target, Amount: target.Amount, - }) - } + } + }) var group *model.Group if req.Group != nil { group, err = h.Repository.GetGroup(ctx, *req.Group) @@ -301,33 +303,36 @@ func (h Handlers) PostRequest(c echo.Context) error { UpdatedAt: request.Group.UpdatedAt, } } - var reqtargets []*TargetOverview - for _, target := range request.Targets { - reqtargets = append(reqtargets, &TargetOverview{ - ID: target.ID, - Target: target.Target, - Amount: target.Amount, - PaidAt: target.PaidAt, - CreatedAt: target.CreatedAt, - }) - } - var restags []*TagOverview - for _, tag := range request.Tags { - restags = append(restags, &TagOverview{ + reqtargets := lo.Map( + request.Targets, + func(target *model.RequestTargetDetail, _ int) *TargetOverview { + return &TargetOverview{ + ID: target.ID, + Target: target.Target, + Amount: target.Amount, + PaidAt: target.PaidAt, + CreatedAt: target.CreatedAt, + } + }, + ) + restags := lo.Map(request.Tags, func(tag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: tag.ID, Name: tag.Name, CreatedAt: tag.CreatedAt, UpdatedAt: tag.UpdatedAt, - }) - } - var statuses []*StatusResponseOverview - for _, status := range request.Statuses { - statuses = append(statuses, &StatusResponseOverview{ - Status: status.Status, - CreatedAt: status.CreatedAt, - CreatedBy: status.CreatedBy, - }) - } + } + }) + statuses := lo.Map( + request.Statuses, + func(status *model.RequestStatus, _ int) *StatusResponseOverview { + return &StatusResponseOverview{ + Status: status.Status, + CreatedAt: status.CreatedAt, + CreatedBy: status.CreatedBy, + } + }, + ) res := &RequestResponse{ ID: request.ID, @@ -374,17 +379,15 @@ func (h Handlers) GetRequest(c echo.Context) error { h.Logger.Error("failed to get comments from repository", zap.Error(err)) return echo.NewHTTPError(http.StatusInternalServerError, err) } - comments := []*CommentDetail{} - for _, modelcomment := range modelcomments { - comment := &CommentDetail{ + comments := lo.Map(modelcomments, func(modelcomment *model.Comment, _ int) *CommentDetail { + return &CommentDetail{ ID: modelcomment.ID, User: modelcomment.User, Comment: modelcomment.Comment, CreatedAt: modelcomment.CreatedAt, UpdatedAt: modelcomment.UpdatedAt, } - comments = append(comments, comment) - } + }) var resgroup *GroupOverview if request.Group != nil { resgroup = &GroupOverview{ @@ -396,33 +399,38 @@ func (h Handlers) GetRequest(c echo.Context) error { UpdatedAt: request.Group.UpdatedAt, } } - reqtargets := []*TargetOverview{} - for _, target := range request.Targets { - reqtargets = append(reqtargets, &TargetOverview{ - ID: target.ID, - Target: target.Target, - Amount: target.Amount, - PaidAt: target.PaidAt, - CreatedAt: target.CreatedAt, - }) - } - restags := []*TagOverview{} - for _, tag := range request.Tags { - restags = append(restags, &TagOverview{ + reqtargets := lo.Map( + request.Targets, + func(target *model.RequestTargetDetail, _ int) *TargetOverview { + return &TargetOverview{ + ID: target.ID, + Target: target.Target, + Amount: target.Amount, + PaidAt: target.PaidAt, + CreatedAt: target.CreatedAt, + } + }, + ) + restags := lo.Map(request.Tags, func(tag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: tag.ID, Name: tag.Name, CreatedAt: tag.CreatedAt, UpdatedAt: tag.UpdatedAt, - }) - } - var resstatuses []*StatusResponseOverview - for _, status := range request.Statuses { - resstatuses = append(resstatuses, &StatusResponseOverview{ - CreatedBy: status.CreatedBy, - Status: status.Status, - CreatedAt: status.CreatedAt, - }) - } + } + }) + + resstatuses := lo.Map( + request.Statuses, + func(status *model.RequestStatus, _ int) *StatusResponseOverview { + return &StatusResponseOverview{ + CreatedBy: status.CreatedBy, + Status: status.Status, + CreatedAt: status.CreatedAt, + } + }, + ) + res := &RequestResponse{ ID: request.ID, Status: request.Status, @@ -471,13 +479,12 @@ func (h Handlers) PutRequest(c echo.Context) error { } tags = append(tags, tag) } - targets := []*model.RequestTarget{} - for _, target := range req.Targets { - targets = append(targets, &model.RequestTarget{ + targets := lo.Map(req.Targets, func(target *Target, _ int) *model.RequestTarget { + return &model.RequestTarget{ Target: target.Target, Amount: target.Amount, - }) - } + } + }) var group *model.Group if req.Group != nil { group, err = h.Repository.GetGroup(ctx, *req.Group) @@ -510,17 +517,15 @@ func (h Handlers) PutRequest(c echo.Context) error { h.Logger.Error("failed to get comments from repository", zap.Error(err)) return echo.NewHTTPError(http.StatusInternalServerError, err) } - var comments []*CommentDetail - for _, modelcomment := range modelcomments { - comment := &CommentDetail{ + comments := lo.Map(modelcomments, func(modelcomment *model.Comment, _ int) *CommentDetail { + return &CommentDetail{ ID: modelcomment.ID, User: modelcomment.User, Comment: modelcomment.Comment, CreatedAt: modelcomment.CreatedAt, UpdatedAt: modelcomment.UpdatedAt, } - comments = append(comments, comment) - } + }) var resgroup *GroupOverview if group != nil { @@ -533,33 +538,39 @@ func (h Handlers) PutRequest(c echo.Context) error { UpdatedAt: request.Group.UpdatedAt, } } - var restags []*TagOverview - for _, tag := range request.Tags { - restags = append(restags, &TagOverview{ + restags := lo.Map(request.Tags, func(tag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: tag.ID, Name: tag.Name, CreatedAt: tag.CreatedAt, UpdatedAt: tag.UpdatedAt, - }) - } - var restargets []*TargetOverview - for _, target := range request.Targets { - restargets = append(restargets, &TargetOverview{ - ID: target.ID, - Target: target.Target, - Amount: target.Amount, - PaidAt: target.PaidAt, - CreatedAt: target.CreatedAt, - }) - } - var resstatuses []*StatusResponseOverview - for _, status := range request.Statuses { - resstatuses = append(resstatuses, &StatusResponseOverview{ - CreatedBy: status.CreatedBy, - Status: status.Status, - CreatedAt: status.CreatedAt, - }) - } + } + }) + + restargets := lo.Map( + request.Targets, + func(target *model.RequestTargetDetail, _ int) *TargetOverview { + return &TargetOverview{ + ID: target.ID, + Target: target.Target, + Amount: target.Amount, + PaidAt: target.PaidAt, + CreatedAt: target.CreatedAt, + } + }, + ) + + resstatuses := lo.Map( + request.Statuses, + func(status *model.RequestStatus, _ int) *StatusResponseOverview { + return &StatusResponseOverview{ + CreatedBy: status.CreatedBy, + Status: status.Status, + CreatedAt: status.CreatedAt, + } + }, + ) + res := &RequestResponse{ ID: request.ID, Status: request.Status, @@ -704,13 +715,9 @@ func (h Handlers) PutStatus(c echo.Context) error { h.Logger.Error("failed to get request targets from repository", zap.Error(err)) return echo.NewHTTPError(http.StatusInternalServerError, err) } - var paid bool - for _, target := range targets { - if target.PaidAt != nil { - paid = true - break - } - } + paid := lo.Reduce(targets, func(p bool, target *model.RequestTargetDetail, _ int) bool { + return p || target.PaidAt != nil + }, false) if paid { h.Logger.Info("someone already paid") return echo.NewHTTPError(http.StatusBadRequest, errors.New("someone already paid")) diff --git a/router/request_test.go b/router/request_test.go index 7bdac653..0d5c1ae4 100644 --- a/router/request_test.go +++ b/router/request_test.go @@ -507,6 +507,8 @@ func TestHandlers_PostRequest(t *testing.T) { }, Title: request.Title, Content: request.Content, + Tags: []*TagOverview{}, + Targets: []*TargetOverview{}, } resBody, err := json.Marshal(res) require.NoError(t, err) @@ -603,6 +605,7 @@ func TestHandlers_PostRequest(t *testing.T) { CreatedAt: tag.CreatedAt, UpdatedAt: tag.UpdatedAt, }}, + Targets: []*TargetOverview{}, } resBody, err := json.Marshal(res) require.NoError(t, err) @@ -686,6 +689,8 @@ func TestHandlers_PostRequest(t *testing.T) { CreatedBy: request.CreatedBy, Title: request.Title, Content: request.Content, + Tags: []*TagOverview{}, + Targets: []*TargetOverview{}, Statuses: []*StatusResponseOverview{ { CreatedBy: request.Statuses[0].CreatedBy, @@ -803,6 +808,7 @@ func TestHandlers_PostRequest(t *testing.T) { }, Title: request.Title, Content: request.Content, + Tags: []*TagOverview{}, Targets: []*TargetOverview{tgov}, } resBody, err := json.Marshal(res) @@ -1431,7 +1437,10 @@ func TestHandlers_PutRequest(t *testing.T) { CreatedBy: updateRequest.Statuses[0].CreatedBy, }, }, - Content: updateRequest.Content, + Content: updateRequest.Content, + Tags: []*TagOverview{}, + Targets: []*TargetOverview{}, + Comments: []*CommentDetail{}, } resBody, err := json.Marshal(res) require.NoError(t, err) @@ -1568,6 +1577,8 @@ func TestHandlers_PutRequest(t *testing.T) { UpdatedAt: tag2.UpdatedAt, }, }, + Targets: []*TargetOverview{}, + Comments: []*CommentDetail{}, } resBody, err := json.Marshal(res) require.NoError(t, err) @@ -1717,6 +1728,8 @@ func TestHandlers_PutRequest(t *testing.T) { CreatedAt: target2.CreatedAt, }, }, + Tags: []*TagOverview{}, + Comments: []*CommentDetail{}, } resBody, err := json.Marshal(res) require.NoError(t, err) @@ -1839,6 +1852,9 @@ func TestHandlers_PutRequest(t *testing.T) { CreatedAt: group.CreatedAt, UpdatedAt: group.UpdatedAt, }, + Tags: []*TagOverview{}, + Targets: []*TargetOverview{}, + Comments: []*CommentDetail{}, } resBody, err := json.Marshal(res) require.NoError(t, err) @@ -1971,6 +1987,8 @@ func TestHandlers_PutRequest(t *testing.T) { Title: updateRequest.Title, Content: updateRequest.Content, Comments: resComments, + Tags: []*TagOverview{}, + Targets: []*TargetOverview{}, } resBody, err := json.Marshal(res) require.NoError(t, err) diff --git a/router/tag.go b/router/tag.go index 34c88ee5..49c60366 100644 --- a/router/tag.go +++ b/router/tag.go @@ -7,6 +7,8 @@ import ( "github.com/google/uuid" "github.com/labstack/echo/v4" + "github.com/samber/lo" + "github.com/traPtitech/Jomon/model" "go.uber.org/zap" ) @@ -30,15 +32,14 @@ func (h Handlers) GetTags(c echo.Context) error { return echo.NewHTTPError(http.StatusInternalServerError, err) } - res := []*TagOverview{} - for _, tag := range tags { - res = append(res, &TagOverview{ + res := lo.Map(tags, func(tag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: tag.ID, Name: tag.Name, CreatedAt: tag.CreatedAt, UpdatedAt: tag.UpdatedAt, - }) - } + } + }) return c.JSON(http.StatusOK, res) } diff --git a/router/tag_test.go b/router/tag_test.go index 9381f645..93d831dd 100644 --- a/router/tag_test.go +++ b/router/tag_test.go @@ -13,6 +13,7 @@ import ( "github.com/google/uuid" "github.com/labstack/echo/v4" + "github.com/samber/lo" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/traPtitech/Jomon/model" @@ -57,15 +58,15 @@ func TestHandlers_GetTags(t *testing.T) { GetTags(c.Request().Context()). Return(tags, nil) - resOverview := []*TagOverview{} - for _, tag := range tags { - resOverview = append(resOverview, &TagOverview{ + resOverview := lo.Map(tags, func(tag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: tag.ID, Name: tag.Name, CreatedAt: tag.CreatedAt, UpdatedAt: tag.UpdatedAt, - }) - } + } + }) + res := resOverview resBody, err := json.Marshal(res) require.NoError(t, err) diff --git a/router/transaction.go b/router/transaction.go index 5560a913..8e6e26b5 100644 --- a/router/transaction.go +++ b/router/transaction.go @@ -8,6 +8,7 @@ import ( "github.com/google/uuid" "github.com/labstack/echo/v4" + "github.com/samber/lo" "github.com/traPtitech/Jomon/model" "github.com/traPtitech/Jomon/service" "go.uber.org/zap" @@ -136,17 +137,16 @@ func (h Handlers) GetTransactions(c echo.Context) error { return echo.NewHTTPError(http.StatusInternalServerError, err) } - res := []*Transaction{} - for _, tx := range txs { - tags := []*TagOverview{} - for _, tag := range tx.Tags { - tags = append(tags, &TagOverview{ + res := lo.Map(txs, func(tx *model.TransactionResponse, _ int) *Transaction { + tags := lo.Map(tx.Tags, func(tag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: tag.ID, Name: tag.Name, CreatedAt: tag.CreatedAt, UpdatedAt: tag.UpdatedAt, - }) - } + } + }) + var group *GroupOverview if tx.Group != nil { group = &GroupOverview{ @@ -158,7 +158,7 @@ func (h Handlers) GetTransactions(c echo.Context) error { UpdatedAt: tx.Group.UpdatedAt, } } - tx := &Transaction{ + return &Transaction{ ID: tx.ID, Amount: tx.Amount, Target: tx.Target, @@ -168,8 +168,7 @@ func (h Handlers) GetTransactions(c echo.Context) error { CreatedAt: tx.CreatedAt, UpdatedAt: tx.UpdatedAt, } - res = append(res, tx) - } + }) return c.JSON(http.StatusOK, res) } @@ -196,15 +195,15 @@ func (h Handlers) PostTransaction(c echo.Context) error { return echo.NewHTTPError(http.StatusInternalServerError, err) } - tags := []*TagOverview{} - for _, tag := range created.Tags { - tags = append(tags, &TagOverview{ + tags := lo.Map(created.Tags, func(tag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: tag.ID, Name: tag.Name, CreatedAt: tag.CreatedAt, UpdatedAt: tag.UpdatedAt, - }) - } + } + }) + var group *GroupOverview if created.Group != nil { group = &GroupOverview{ @@ -246,15 +245,15 @@ func (h Handlers) GetTransaction(c echo.Context) error { return echo.NewHTTPError(http.StatusInternalServerError, err) } - tags := []*TagOverview{} - for _, tag := range tx.Tags { - tags = append(tags, &TagOverview{ + tags := lo.Map(tx.Tags, func(tag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: tag.ID, Name: tag.Name, CreatedAt: tag.CreatedAt, UpdatedAt: tag.UpdatedAt, - }) - } + } + }) + var group *GroupOverview if tx.Group != nil { group = &GroupOverview{ @@ -304,15 +303,15 @@ func (h Handlers) PutTransaction(c echo.Context) error { return echo.NewHTTPError(http.StatusInternalServerError, err) } - tags := []*TagOverview{} - for _, tag := range updated.Tags { - tags = append(tags, &TagOverview{ + tags := lo.Map(updated.Tags, func(tag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: tag.ID, Name: tag.Name, CreatedAt: tag.CreatedAt, UpdatedAt: tag.UpdatedAt, - }) - } + } + }) + var group *GroupOverview if updated.Group != nil { group = &GroupOverview{ diff --git a/router/transaction_test.go b/router/transaction_test.go index 2cfe0b88..5897ee09 100644 --- a/router/transaction_test.go +++ b/router/transaction_test.go @@ -11,6 +11,7 @@ import ( "github.com/google/uuid" "github.com/labstack/echo/v4" + "github.com/samber/lo" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/traPtitech/Jomon/model" @@ -99,17 +100,16 @@ func TestHandlers_GetTransactions(t *testing.T) { }). Return(txs, nil) - resOverview := []*Transaction{} - for _, tx := range txs { - tag := []*TagOverview{} - for _, modelTag := range tx.Tags { - tag = append(tag, &TagOverview{ + res := lo.Map(txs, func(tx *model.TransactionResponse, _ int) *Transaction { + tag := lo.Map(tx.Tags, func(modelTag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: modelTag.ID, Name: modelTag.Name, CreatedAt: modelTag.CreatedAt, UpdatedAt: modelTag.UpdatedAt, - }) - } + } + }) + group := &GroupOverview{ ID: tx.Group.ID, Name: tx.Group.Name, @@ -118,7 +118,7 @@ func TestHandlers_GetTransactions(t *testing.T) { CreatedAt: tx.Group.CreatedAt, UpdatedAt: tx.Group.UpdatedAt, } - resOverview = append(resOverview, &Transaction{ + return &Transaction{ ID: tx.ID, Amount: tx.Amount, Target: tx.Target, @@ -126,9 +126,9 @@ func TestHandlers_GetTransactions(t *testing.T) { Group: group, CreatedAt: tx.CreatedAt, UpdatedAt: tx.UpdatedAt, - }) - } - res := resOverview + } + }) + resBody, err := json.Marshal(res) require.NoError(t, err) @@ -213,17 +213,16 @@ func TestHandlers_GetTransactions(t *testing.T) { }). Return(txs, nil) - resOverview := []*Transaction{} - for _, tx := range txs { - tag := []*TagOverview{} - for _, modelTag := range tx.Tags { - tag = append(tag, &TagOverview{ + res := lo.Map(txs, func(tx *model.TransactionResponse, _ int) *Transaction { + tag := lo.Map(tx.Tags, func(modelTag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: modelTag.ID, Name: modelTag.Name, CreatedAt: modelTag.CreatedAt, UpdatedAt: modelTag.UpdatedAt, - }) - } + } + }) + group := &GroupOverview{ ID: tx.Group.ID, Name: tx.Group.Name, @@ -232,7 +231,7 @@ func TestHandlers_GetTransactions(t *testing.T) { CreatedAt: tx.Group.CreatedAt, UpdatedAt: tx.Group.UpdatedAt, } - resOverview = append(resOverview, &Transaction{ + return &Transaction{ ID: tx.ID, Amount: tx.Amount, Target: tx.Target, @@ -240,9 +239,9 @@ func TestHandlers_GetTransactions(t *testing.T) { Group: group, CreatedAt: tx.CreatedAt, UpdatedAt: tx.UpdatedAt, - }) - } - res := resOverview + } + }) + resBody, err := json.Marshal(res) require.NoError(t, err) @@ -328,17 +327,16 @@ func TestHandlers_GetTransactions(t *testing.T) { }). Return(txs, nil) - resOverview := []*Transaction{} - for _, tx := range txs { - tag := []*TagOverview{} - for _, modelTag := range tx.Tags { - tag = append(tag, &TagOverview{ + res := lo.Map(txs, func(tx *model.TransactionResponse, _ int) *Transaction { + tag := lo.Map(tx.Tags, func(modelTag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: modelTag.ID, Name: modelTag.Name, CreatedAt: modelTag.CreatedAt, UpdatedAt: modelTag.UpdatedAt, - }) - } + } + }) + group := &GroupOverview{ ID: tx.Group.ID, Name: tx.Group.Name, @@ -347,7 +345,7 @@ func TestHandlers_GetTransactions(t *testing.T) { CreatedAt: tx.Group.CreatedAt, UpdatedAt: tx.Group.UpdatedAt, } - resOverview = append(resOverview, &Transaction{ + return &Transaction{ ID: tx.ID, Amount: tx.Amount, Target: tx.Target, @@ -355,9 +353,9 @@ func TestHandlers_GetTransactions(t *testing.T) { Group: group, CreatedAt: tx.CreatedAt, UpdatedAt: tx.UpdatedAt, - }) - } - res := resOverview + } + }) + resBody, err := json.Marshal(res) require.NoError(t, err) @@ -448,17 +446,16 @@ func TestHandlers_GetTransactions(t *testing.T) { }). Return(txs, nil) - resOverview := []*Transaction{} - for _, tx := range txs { - tag := []*TagOverview{} - for _, modelTag := range tx.Tags { - tag = append(tag, &TagOverview{ + res := lo.Map(txs, func(tx *model.TransactionResponse, _ int) *Transaction { + tag := lo.Map(tx.Tags, func(modelTag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: modelTag.ID, Name: modelTag.Name, CreatedAt: modelTag.CreatedAt, UpdatedAt: modelTag.UpdatedAt, - }) - } + } + }) + group := &GroupOverview{ ID: tx.Group.ID, Name: tx.Group.Name, @@ -467,7 +464,7 @@ func TestHandlers_GetTransactions(t *testing.T) { CreatedAt: tx.Group.CreatedAt, UpdatedAt: tx.Group.UpdatedAt, } - resOverview = append(resOverview, &Transaction{ + return &Transaction{ ID: tx.ID, Amount: tx.Amount, Target: tx.Target, @@ -475,9 +472,9 @@ func TestHandlers_GetTransactions(t *testing.T) { Group: group, CreatedAt: tx.CreatedAt, UpdatedAt: tx.UpdatedAt, - }) - } - res := resOverview + } + }) + resBody, err := json.Marshal(res) require.NoError(t, err) @@ -552,17 +549,16 @@ func TestHandlers_GetTransactions(t *testing.T) { }). Return(txs, nil) - resOverview := []*Transaction{} - for _, tx := range txs { - tag := []*TagOverview{} - for _, modelTag := range tx.Tags { - tag = append(tag, &TagOverview{ + res := lo.Map(txs, func(tx *model.TransactionResponse, _ int) *Transaction { + tag := lo.Map(tx.Tags, func(modelTag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: modelTag.ID, Name: modelTag.Name, CreatedAt: modelTag.CreatedAt, UpdatedAt: modelTag.UpdatedAt, - }) - } + } + }) + group := &GroupOverview{ ID: tx.Group.ID, Name: tx.Group.Name, @@ -571,7 +567,7 @@ func TestHandlers_GetTransactions(t *testing.T) { CreatedAt: tx.Group.CreatedAt, UpdatedAt: tx.Group.UpdatedAt, } - resOverview = append(resOverview, &Transaction{ + return &Transaction{ ID: tx.ID, Amount: tx.Amount, Target: tx.Target, @@ -579,9 +575,9 @@ func TestHandlers_GetTransactions(t *testing.T) { Group: group, CreatedAt: tx.CreatedAt, UpdatedAt: tx.UpdatedAt, - }) - } - res := resOverview + } + }) + resBody, err := json.Marshal(res) require.NoError(t, err) @@ -659,18 +655,16 @@ func TestHandlers_PostTransaction(t *testing.T) { CreateTransaction(c.Request().Context(), tx1.Amount, tx1.Target, tags, &group, nil). Return(tx1, nil) - var resOverview Transaction - reses := []*Transaction{} - for _, tx := range txs { - tag := []*TagOverview{} - for _, modelTag := range tx.Tags { - tag = append(tag, &TagOverview{ + res := lo.Map(txs, func(tx *model.TransactionResponse, _ int) *Transaction { + tag := lo.Map(tx.Tags, func(modelTag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: modelTag.ID, Name: modelTag.Name, CreatedAt: modelTag.CreatedAt, UpdatedAt: modelTag.UpdatedAt, - }) - } + } + }) + group := &GroupOverview{ ID: tx.Group.ID, Name: tx.Group.Name, @@ -679,7 +673,7 @@ func TestHandlers_PostTransaction(t *testing.T) { CreatedAt: tx.Group.CreatedAt, UpdatedAt: tx.Group.UpdatedAt, } - resOverview = Transaction{ + return &Transaction{ ID: tx.ID, Amount: tx.Amount, Target: tx.Target, @@ -688,9 +682,8 @@ func TestHandlers_PostTransaction(t *testing.T) { CreatedAt: tx.CreatedAt, UpdatedAt: tx.UpdatedAt, } - reses = append(reses, &resOverview) - } - res := reses + }) + resBody, err := json.Marshal(res) require.NoError(t, err) @@ -778,17 +771,15 @@ func TestHandlers_PostTransaction(t *testing.T) { tags, &group, &request.ID). Return(tx, nil) - var resOverview Transaction - reses := []*Transaction{} - to := []*TagOverview{} - for _, modelTag := range tx.Tags { - to = append(to, &TagOverview{ + to := lo.Map(tx.Tags, func(modelTag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: modelTag.ID, Name: modelTag.Name, CreatedAt: modelTag.CreatedAt, UpdatedAt: modelTag.UpdatedAt, - }) - } + } + }) + grov := &GroupOverview{ ID: tx.Group.ID, Name: tx.Group.Name, @@ -797,17 +788,17 @@ func TestHandlers_PostTransaction(t *testing.T) { CreatedAt: tx.Group.CreatedAt, UpdatedAt: tx.Group.UpdatedAt, } - resOverview = Transaction{ - ID: tx.ID, - Amount: tx.Amount, - Target: tx.Target, - Tags: to, - Group: grov, - CreatedAt: tx.CreatedAt, - UpdatedAt: tx.UpdatedAt, + res := []*Transaction{ + { + ID: tx.ID, + Amount: tx.Amount, + Target: tx.Target, + Tags: to, + Group: grov, + CreatedAt: tx.CreatedAt, + UpdatedAt: tx.UpdatedAt, + }, } - reses = append(reses, &resOverview) - res := reses resBody, err := json.Marshal(res) require.NoError(t, err) @@ -871,15 +862,15 @@ func TestHandlers_GetTransaction(t *testing.T) { Return(tx, nil) var resOverview Transaction - to := []*TagOverview{} - for _, modelTag := range tx.Tags { - to = append(to, &TagOverview{ + to := lo.Map(tx.Tags, func(modelTag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: modelTag.ID, Name: modelTag.Name, CreatedAt: modelTag.CreatedAt, UpdatedAt: modelTag.UpdatedAt, - }) - } + } + }) + grov := &GroupOverview{ ID: tx.Group.ID, Name: tx.Group.Name, @@ -969,10 +960,9 @@ func TestHandlers_PutTransaction(t *testing.T) { UpdatedAt: time.Now(), } - updatedTags := []*uuid.UUID{} - for _, modelTag := range updated.Tags { - updatedTags = append(updatedTags, &modelTag.ID) - } + updatedTags := lo.Map(updated.Tags, func(modelTag *model.Tag, _ int) *uuid.UUID { + return &modelTag.ID + }) e := echo.New() reqBody := fmt.Sprintf( @@ -1001,15 +991,14 @@ func TestHandlers_PutTransaction(t *testing.T) { Return(updated, nil) var resOverview Transaction - to := []*TagOverview{} - for _, modelTag := range updated.Tags { - to = append(to, &TagOverview{ + to := lo.Map(updated.Tags, func(modelTag *model.Tag, _ int) *TagOverview { + return &TagOverview{ ID: modelTag.ID, Name: modelTag.Name, CreatedAt: modelTag.CreatedAt, UpdatedAt: modelTag.UpdatedAt, - }) - } + } + }) grov := &GroupOverview{ ID: updated.Group.ID, Name: updated.Group.Name, diff --git a/router/user.go b/router/user.go index 677d6acc..a14e59d4 100644 --- a/router/user.go +++ b/router/user.go @@ -7,6 +7,8 @@ import ( "github.com/google/uuid" "github.com/labstack/echo-contrib/session" "github.com/labstack/echo/v4" + "github.com/samber/lo" + "github.com/traPtitech/Jomon/model" "go.uber.org/zap" ) @@ -27,9 +29,8 @@ func (h Handlers) GetUsers(c echo.Context) error { return echo.NewHTTPError(http.StatusInternalServerError, err) } - res := make([]User, 0, len(users)) - for _, user := range users { - res = append(res, User{ + res := lo.Map(users, func(user *model.User, _ int) User { + return User{ ID: user.ID, Name: user.Name, DisplayName: user.DisplayName, @@ -37,8 +38,8 @@ func (h Handlers) GetUsers(c echo.Context) error { CreatedAt: user.CreatedAt, UpdatedAt: user.UpdatedAt, DeletedAt: user.DeletedAt, - }) - } + } + }) return c.JSON(http.StatusOK, res) } diff --git a/service/webhook.go b/service/webhook.go index d1f8664f..c2059158 100644 --- a/service/webhook.go +++ b/service/webhook.go @@ -117,10 +117,9 @@ func WebhookEventHandler(c echo.Context, reqBody, resBody []byte) { "https://jomon.trap.jp", resApp.ID) - amount := 0 - for _, target := range resApp.Targets { - amount += target.Amount - } + amount := lo.Reduce(resApp.Targets, func(amo int, target *Target, _ int) int { + return amo + target.Amount + }, 0) message += fmt.Sprintf("- 支払金額: %d円\n", amount) if resApp.Group != nil { @@ -128,7 +127,7 @@ func WebhookEventHandler(c echo.Context, reqBody, resBody []byte) { } if len(resApp.Tags) != 0 { - tags := lo.Map(resApp.Tags, func(tag *Tag, index int) string { + tags := lo.Map(resApp.Tags, func(tag *Tag, _ int) string { return tag.Name }) message += fmt.Sprintf("- タグ: %s", strings.Join(tags, ", ")) @@ -167,10 +166,10 @@ func WebhookEventHandler(c echo.Context, reqBody, resBody []byte) { resApp.Amount) } } else { - targets := make([]string, len(resApps)) - for i, resApp := range resApps { - targets[i] = resApp.Target - } + targets := lo.Map( + resApps, func(resApp TransactionRequestApplication, _ int) string { + return resApp.Target + }) if resApp.Amount < 0 { message += fmt.Sprintf( "- %sへの支払い\n - 支払い金額: 計%d円(一人当たりへの支払い金額: %d円)\n", @@ -189,7 +188,7 @@ func WebhookEventHandler(c echo.Context, reqBody, resBody []byte) { message += fmt.Sprintf("- 関連するグループ: %s\n", resApp.Group.Name) } if len(resApp.Tags) != 0 { - tags := lo.Map(resApp.Tags, func(tag *Tag, index int) string { + tags := lo.Map(resApp.Tags, func(tag *Tag, _ int) string { return tag.Name }) message += fmt.Sprintf("- タグ: %s", strings.Join(tags, ", ")) diff --git a/testutil/random/ramdom.go b/testutil/random/ramdom.go index 1b3645fc..c5d69837 100644 --- a/testutil/random/ramdom.go +++ b/testutil/random/ramdom.go @@ -3,6 +3,8 @@ package random import ( "math/rand/v2" "testing" + + "github.com/samber/lo" ) const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" @@ -32,27 +34,21 @@ func Numeric64(t *testing.T, n int64) int64 { func AlphaNumericSlice(t *testing.T, length int, n int64) []string { t.Helper() - slice := []string{} - for range length { - slice = append(slice, AlphaNumeric(t, int(n))) - } - return slice + return lo.Times(length, func(_ int) string { + return AlphaNumeric(t, int(n)) + }) } func NumericSlice(t *testing.T, length int, n int) []int { t.Helper() - slice := []int{} - for range length { - slice = append(slice, Numeric(t, n)) - } - return slice + return lo.Times(length, func(_ int) int { + return Numeric(t, n) + }) } func Numeric64Slice(t *testing.T, length int, n int64) []int64 { t.Helper() - slice := []int64{} - for range length { - slice = append(slice, Numeric64(t, n)) - } - return slice + return lo.Times(length, func(_ int) int64 { + return Numeric64(t, n) + }) }