fix: use simple slices instead of []*T

This commit is contained in:
Muyao CHEN 2024-10-24 22:32:57 +02:00
parent de7c6f7223
commit 716a58d44c
6 changed files with 45 additions and 13 deletions

View File

@ -564,3 +564,16 @@ querier.
Since this repo layer is just a wrapping layer between the `sqlc.models` and 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. 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. 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`.

View File

@ -62,7 +62,7 @@ func convToEventRetrieved(eventDTO *sqlc.GetEventByIDRow) (*model.EventRetrieved
return nil, err return nil, err
} }
var users []*model.UserBaseRetrieved var users []model.UserBaseRetrieved
err = json.Unmarshal(eventDTO.Users, &users) err = json.Unmarshal(eventDTO.Users, &users)
if err != nil { if err != nil {
// Unexpected // Unexpected
@ -99,8 +99,8 @@ func (e *eventRepository) GetByID(ctx context.Context, eventID int) (*model.Even
return convToEventRetrieved(&eventDTO) return convToEventRetrieved(&eventDTO)
} }
func convToEventList(eventsDTO []sqlc.ListEventsByUserIDRow) ([]*model.EventListRetrieved, error) { func convToEventList(eventsDTO []sqlc.ListEventsByUserIDRow) ([]model.EventListRetrieved, error) {
var events []*model.EventListRetrieved var events []model.EventListRetrieved
for _, evDTO := range eventsDTO { for _, evDTO := range eventsDTO {
var owner model.UserBaseRetrieved var owner model.UserBaseRetrieved
@ -110,7 +110,7 @@ func convToEventList(eventsDTO []sqlc.ListEventsByUserIDRow) ([]*model.EventList
log.ErrorLog("json unmarshal error", "err", err) log.ErrorLog("json unmarshal error", "err", err)
return nil, err return nil, err
} }
ev := &model.EventListRetrieved{ ev := model.EventListRetrieved{
ID: int(evDTO.ID), ID: int(evDTO.ID),
Name: evDTO.Name, Name: evDTO.Name,
Description: evDTO.Description.String, Description: evDTO.Description.String,
@ -128,7 +128,7 @@ func convToEventList(eventsDTO []sqlc.ListEventsByUserIDRow) ([]*model.EventList
func (e *eventRepository) ListEventsByUserID( func (e *eventRepository) ListEventsByUserID(
ctx context.Context, ctx context.Context,
userID int, userID int,
) ([]*model.EventListRetrieved, error) { ) ([]model.EventListRetrieved, error) {
eventsDTO, err := e.queries.ListEventsByUserID(ctx, int32(userID)) eventsDTO, err := e.queries.ListEventsByUserID(ctx, int32(userID))
if err != nil { if err != nil {
log.ErrorLog("query error", "err", err) log.ErrorLog("query error", "err", err)

View File

@ -59,7 +59,7 @@ func TestConvToEventRetrieved(t *testing.T) {
FirstName: "owner", FirstName: "owner",
LastName: "owner", LastName: "owner",
}, },
Users: []*model.UserBaseRetrieved{ Users: []model.UserBaseRetrieved{
{ {
ID: 1, ID: 1,
FirstName: "owner", FirstName: "owner",
@ -91,7 +91,7 @@ func TestConvToEventList(t *testing.T) {
}, },
} }
want := []*model.EventListRetrieved{ want := []model.EventListRetrieved{
{ {
ID: 123, ID: 123,
Name: "event", Name: "event",

View File

@ -57,7 +57,7 @@ type EventInfoResponse struct {
CreatedAt time.Time CreatedAt time.Time
UpdatedAt time.Time UpdatedAt time.Time
Users []*UserBaseResponse Users []UserBaseResponse
} }
// }}} // }}}
@ -93,7 +93,7 @@ type EventRetrieved struct {
Name string Name string
Description string Description string
Users []*UserBaseRetrieved Users []UserBaseRetrieved
TotalAmount Money TotalAmount Money
DefaultCurrency Currency DefaultCurrency Currency
@ -121,9 +121,9 @@ type Event struct {
Description string Description string
// lazy get using participation join // lazy get using participation join
Users []*UserDO Users []UserDO
// lazy get // lazy get
Expenses []*Expense Expenses []Expense
TotalAmount Money TotalAmount Money
DefaultCurrency Currency DefaultCurrency Currency

View File

@ -53,7 +53,26 @@ type ExpenseGetResponse Expense
// }}} // }}}
// {{{ Retrieved // {{{ 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 // {{{ Entity

View File

@ -37,7 +37,7 @@ type EventRepository interface {
GetByID(ctx context.Context, eventID int) (*model.EventRetrieved, error) GetByID(ctx context.Context, eventID int) (*model.EventRetrieved, error)
// related to events of a user // 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 { type ExpenseRepository interface {