From 716a58d44c1e7001ce28a055eaeec4e7dc82ceb5 Mon Sep 17 00:00:00 2001 From: Muyao CHEN Date: Thu, 24 Oct 2024 22:32:57 +0200 Subject: [PATCH] fix: use simple slices instead of []*T --- README.md | 13 +++++++++++++ internal/howmuch/adapter/repo/event.go | 10 +++++----- internal/howmuch/adapter/repo/event_test.go | 4 ++-- internal/howmuch/model/event.go | 8 ++++---- internal/howmuch/model/expense.go | 21 ++++++++++++++++++++- internal/howmuch/usecase/repo/event.go | 2 +- 6 files changed, 45 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 8eb1930..3ab8654 100644 --- a/README.md +++ b/README.md @@ -564,3 +564,16 @@ querier. Since this repo layer is just a wrapping layer between the `sqlc.models` and my own models, I can extract the conversion part to functions and test them. I'm not testing the whole thing but I test what I can. + +### 2024/10/24 + +When writing the tests. I am asking myself the differences between `[]T`, +`[]*T` and `*[]T`. + +`*[]T` is simple, it is a reference to the original slice. So modifying it +means modifying the original slice. + +But between `[]*T` and `[]T`, the only difference that I see (pointed out by +`ChatGPT`) is how the memory is allocated. With `[]T` it might be better for +the GC to deal with the memory free. I thing for my project I will stick to +`[]T`. diff --git a/internal/howmuch/adapter/repo/event.go b/internal/howmuch/adapter/repo/event.go index 52dcf93..dbc0689 100644 --- a/internal/howmuch/adapter/repo/event.go +++ b/internal/howmuch/adapter/repo/event.go @@ -62,7 +62,7 @@ func convToEventRetrieved(eventDTO *sqlc.GetEventByIDRow) (*model.EventRetrieved return nil, err } - var users []*model.UserBaseRetrieved + var users []model.UserBaseRetrieved err = json.Unmarshal(eventDTO.Users, &users) if err != nil { // Unexpected @@ -99,8 +99,8 @@ func (e *eventRepository) GetByID(ctx context.Context, eventID int) (*model.Even return convToEventRetrieved(&eventDTO) } -func convToEventList(eventsDTO []sqlc.ListEventsByUserIDRow) ([]*model.EventListRetrieved, error) { - var events []*model.EventListRetrieved +func convToEventList(eventsDTO []sqlc.ListEventsByUserIDRow) ([]model.EventListRetrieved, error) { + var events []model.EventListRetrieved for _, evDTO := range eventsDTO { var owner model.UserBaseRetrieved @@ -110,7 +110,7 @@ func convToEventList(eventsDTO []sqlc.ListEventsByUserIDRow) ([]*model.EventList log.ErrorLog("json unmarshal error", "err", err) return nil, err } - ev := &model.EventListRetrieved{ + ev := model.EventListRetrieved{ ID: int(evDTO.ID), Name: evDTO.Name, Description: evDTO.Description.String, @@ -128,7 +128,7 @@ func convToEventList(eventsDTO []sqlc.ListEventsByUserIDRow) ([]*model.EventList func (e *eventRepository) ListEventsByUserID( ctx context.Context, userID int, -) ([]*model.EventListRetrieved, error) { +) ([]model.EventListRetrieved, error) { eventsDTO, err := e.queries.ListEventsByUserID(ctx, int32(userID)) if err != nil { log.ErrorLog("query error", "err", err) diff --git a/internal/howmuch/adapter/repo/event_test.go b/internal/howmuch/adapter/repo/event_test.go index 46bf549..84b42c0 100644 --- a/internal/howmuch/adapter/repo/event_test.go +++ b/internal/howmuch/adapter/repo/event_test.go @@ -59,7 +59,7 @@ func TestConvToEventRetrieved(t *testing.T) { FirstName: "owner", LastName: "owner", }, - Users: []*model.UserBaseRetrieved{ + Users: []model.UserBaseRetrieved{ { ID: 1, FirstName: "owner", @@ -91,7 +91,7 @@ func TestConvToEventList(t *testing.T) { }, } - want := []*model.EventListRetrieved{ + want := []model.EventListRetrieved{ { ID: 123, Name: "event", diff --git a/internal/howmuch/model/event.go b/internal/howmuch/model/event.go index dc11251..19703a7 100644 --- a/internal/howmuch/model/event.go +++ b/internal/howmuch/model/event.go @@ -57,7 +57,7 @@ type EventInfoResponse struct { CreatedAt time.Time UpdatedAt time.Time - Users []*UserBaseResponse + Users []UserBaseResponse } // }}} @@ -93,7 +93,7 @@ type EventRetrieved struct { Name string Description string - Users []*UserBaseRetrieved + Users []UserBaseRetrieved TotalAmount Money DefaultCurrency Currency @@ -121,9 +121,9 @@ type Event struct { Description string // lazy get using participation join - Users []*UserDO + Users []UserDO // lazy get - Expenses []*Expense + Expenses []Expense TotalAmount Money DefaultCurrency Currency diff --git a/internal/howmuch/model/expense.go b/internal/howmuch/model/expense.go index cae35c9..53b17e4 100644 --- a/internal/howmuch/model/expense.go +++ b/internal/howmuch/model/expense.go @@ -53,7 +53,26 @@ type ExpenseGetResponse Expense // }}} // {{{ Retrieved -type ExpensesListRetrieved ExpensesListResponse +type ( + ExpensesListRetrieved ExpensesListResponse + ExpenseRetrieved Expense +) + +type PaymentRetrieved struct { + PayerID int `json:"payer_id"` + PayerFirstName string `json:"payer_first_name"` + PayerLastName string `json:"payer_last_name"` + Amount int `json:"amount"` + Currency string `json:"currency"` +} + +type BenefitRetrieved struct { + RecipientID int `json:"recipient_id"` + RecipientFirstName string `json:"recipient_first_name"` + RecipientLastName string `json:"recipient_last_name"` + Amount int `json:"amount"` + Currency string `json:"currency"` +} // }}} // {{{ Entity diff --git a/internal/howmuch/usecase/repo/event.go b/internal/howmuch/usecase/repo/event.go index a076de6..3c542c8 100644 --- a/internal/howmuch/usecase/repo/event.go +++ b/internal/howmuch/usecase/repo/event.go @@ -37,7 +37,7 @@ type EventRepository interface { GetByID(ctx context.Context, eventID int) (*model.EventRetrieved, error) // related to events of a user - ListEventsByUserID(ctx context.Context, userID int) ([]*model.EventListRetrieved, error) + ListEventsByUserID(ctx context.Context, userID int) ([]model.EventListRetrieved, error) } type ExpenseRepository interface {