From ecc6a55aba7bb35fc778e7a53848396b88214151 Mon Sep 17 00:00:00 2001 From: Leonardo Bishop Date: Sat, 23 Aug 2025 22:29:28 +0100 Subject: Add multiple conferences feature --- pkg/favourites/service.go | 63 +++++++++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 21 deletions(-) (limited to 'pkg/favourites/service.go') diff --git a/pkg/favourites/service.go b/pkg/favourites/service.go index cba249e..f73f400 100644 --- a/pkg/favourites/service.go +++ b/pkg/favourites/service.go @@ -12,9 +12,10 @@ import ( ) type Service interface { - GetFavouritesForUser(id int32) (*[]sqlc.Favourite, error) - CreateFavouriteForUser(id int32, eventGuid pgtype.UUID, eventId *int32) (*sqlc.Favourite, error) - DeleteFavouriteForUserByEventDetails(id int32, eventGuid pgtype.UUID, eventId *int32) error + GetAllFavouritesForUser(id int32) (*[]sqlc.Favourite, error) + GetFavouritesForUserConference(id int32, conference int32) (*[]sqlc.Favourite, error) + CreateFavouriteForUser(id int32, eventGUID pgtype.UUID, eventID *int32, conferenceID int32) (*sqlc.Favourite, error) + DeleteFavouriteForUserByEventDetails(id int32, eventGUID pgtype.UUID, eventID *int32, conferenceID int32) error } var ( @@ -32,21 +33,22 @@ func NewService(pool *pgxpool.Pool) Service { } } -func (s *service) CreateFavouriteForUser(id int32, eventGuid pgtype.UUID, eventId *int32) (*sqlc.Favourite, error) { +func (s *service) CreateFavouriteForUser(userID int32, eventGUID pgtype.UUID, eventID *int32, conferenceID int32) (*sqlc.Favourite, error) { queries := sqlc.New(s.pool) - var pgEventId pgtype.Int4 - if eventId != nil { - pgEventId = pgtype.Int4{ - Int32: *eventId, + var pgEventID pgtype.Int4 + if eventID != nil { + pgEventID = pgtype.Int4{ + Int32: *eventID, Valid: true, } } favourite, err := queries.CreateFavourite(context.Background(), sqlc.CreateFavouriteParams{ - UserID: id, - EventGuid: eventGuid, - EventID: pgEventId, + UserID: userID, + EventGuid: eventGUID, + EventID: pgEventID, + ConferenceID: conferenceID, }) if err != nil { return nil, fmt.Errorf("could not create favourite: %w", err) @@ -55,10 +57,10 @@ func (s *service) CreateFavouriteForUser(id int32, eventGuid pgtype.UUID, eventI return &favourite, nil } -func (s *service) GetFavouritesForUser(id int32) (*[]sqlc.Favourite, error) { +func (s *service) GetAllFavouritesForUser(userID int32) (*[]sqlc.Favourite, error) { queries := sqlc.New(s.pool) - favourites, err := queries.GetFavouritesForUser(context.Background(), id) + favourites, err := queries.GetFavouritesForUser(context.Background(), userID) if err != nil { if errors.Is(err, pgx.ErrNoRows) { empty := make([]sqlc.Favourite, 0) @@ -70,20 +72,39 @@ func (s *service) GetFavouritesForUser(id int32) (*[]sqlc.Favourite, error) { return &favourites, nil } -func (s *service) DeleteFavouriteForUserByEventDetails(id int32, eventGuid pgtype.UUID, eventId *int32) error { +func (s *service) GetFavouritesForUserConference(userID int32, conferenceID int32) (*[]sqlc.Favourite, error) { queries := sqlc.New(s.pool) - var pgEventId pgtype.Int4 - if eventId != nil { - pgEventId = pgtype.Int4{ - Int32: *eventId, + favourites, err := queries.GetFavouritesForUserConference(context.Background(), sqlc.GetFavouritesForUserConferenceParams{ + UserID: userID, + ConferenceID: conferenceID, + }) + if err != nil { + if errors.Is(err, pgx.ErrNoRows) { + empty := make([]sqlc.Favourite, 0) + return &empty, nil + } + return nil, fmt.Errorf("could not fetch user: %w", err) + } + + return &favourites, nil +} + +func (s *service) DeleteFavouriteForUserByEventDetails(id int32, eventGUID pgtype.UUID, eventID *int32, conferenceID int32) error { + queries := sqlc.New(s.pool) + + var pgEventID pgtype.Int4 + if eventID != nil { + pgEventID = pgtype.Int4{ + Int32: *eventID, Valid: true, } } rowsAffected, err := queries.DeleteFavouriteByEventDetails(context.Background(), sqlc.DeleteFavouriteByEventDetailsParams{ - EventGuid: eventGuid, - EventID: pgEventId, - UserID: id, + EventGuid: eventGUID, + EventID: pgEventID, + UserID: id, + ConferenceID: conferenceID, }) if err != nil { return fmt.Errorf("could not delete favourite: %w", err) -- cgit v1.2.3-70-g09d2