diff --git a/backend/agents/event_location_agent.go b/backend/agents/event_location_agent.go index 6c7f494..fc51a9c 100644 --- a/backend/agents/event_location_agent.go +++ b/backend/agents/event_location_agent.go @@ -368,6 +368,11 @@ func NewLocationEventAgent(locationModel models.LocationModel, eventModel models return event, err } + _, err = agent.contactModel.SaveToImage(ctx, info.imageId, organizer.ID) + if err != nil { + return event, err + } + locationId, err := uuid.Parse(args.LocationId) if err != nil { return event, err diff --git a/backend/models/contacts.go b/backend/models/contacts.go index 5684479..030474d 100644 --- a/backend/models/contacts.go +++ b/backend/models/contacts.go @@ -54,7 +54,7 @@ func (m ContactModel) Save(ctx context.Context, userId uuid.UUID, contact model. } func (m ContactModel) SaveToImage(ctx context.Context, imageId uuid.UUID, contactId uuid.UUID) (model.ImageContacts, error) { - insertImageContactStmt := ImageLocations. + insertImageContactStmt := ImageContacts. INSERT(ImageContacts.ImageID, ImageContacts.ContactID). VALUES(imageId, contactId). RETURNING(ImageContacts.AllColumns) diff --git a/backend/models/user.go b/backend/models/user.go index ae2ed5a..c212e72 100644 --- a/backend/models/user.go +++ b/backend/models/user.go @@ -34,7 +34,8 @@ type ImageWithProperties struct { Events []struct { model.Events - Location *model.Locations + Location *model.Locations + Organizer *model.Contacts } } @@ -69,6 +70,8 @@ func (m UserModel) ListWithProperties(ctx context.Context, userId uuid.UUID) ([] Locations.AllColumns, ImageEvents.AllColumns, Events.AllColumns, + ImageContacts.AllColumns, + Contacts.AllColumns, ). FROM( UserImages.INNER_JOIN(Image, Image.ID.EQ(UserImages.ImageID)). @@ -79,7 +82,9 @@ func (m UserModel) ListWithProperties(ctx context.Context, userId uuid.UUID) ([] LEFT_JOIN(ImageLocations, ImageLocations.ImageID.EQ(UserImages.ImageID)). LEFT_JOIN(Locations, Locations.ID.EQ(ImageLocations.LocationID)). LEFT_JOIN(ImageEvents, ImageEvents.ImageID.EQ(UserImages.ImageID)). - LEFT_JOIN(Events, Events.ID.EQ(ImageEvents.EventID))). + LEFT_JOIN(Events, Events.ID.EQ(ImageEvents.EventID)). + LEFT_JOIN(ImageContacts, ImageContacts.ImageID.EQ(UserImages.ImageID)). + LEFT_JOIN(Contacts, Contacts.ID.EQ(ImageContacts.ContactID))). WHERE(UserImages.UserID.EQ(UUID(userId))) fmt.Println(listWithPropertiesStmt.DebugSql()) diff --git a/frontend/src/components/search-card/SearchCardEvent.tsx b/frontend/src/components/search-card/SearchCardEvent.tsx index 0a98bd7..b75015b 100644 --- a/frontend/src/components/search-card/SearchCardEvent.tsx +++ b/frontend/src/components/search-card/SearchCardEvent.tsx @@ -17,7 +17,7 @@ export const SearchCardEvent = ({ item }: Props) => {

- Organized by TODO on{" "} + Organized by {data.Organizer?.Name ?? "unknown"} on{" "} {new Date(data.StartDateTime).toLocaleDateString("en-US", { month: "long", day: "numeric", diff --git a/frontend/src/network/index.ts b/frontend/src/network/index.ts index 216fd25..fb47e64 100644 --- a/frontend/src/network/index.ts +++ b/frontend/src/network/index.ts @@ -2,17 +2,13 @@ import { type InferOutput, array, nullable, - object, + strictObject, parse, pipe, string, - null_, uuid, literal, variant, - date, - isoDate, - isoDateTime, } from "valibot"; type BaseRequestParams = Partial<{ @@ -29,7 +25,7 @@ const getBaseRequest = ({ path, body, method }: BaseRequestParams): Request => { }); }; -const sendImageResponseValidator = object({ +const sendImageResponseValidator = strictObject({ ID: pipe(string(), uuid()), ImageID: pipe(string(), uuid()), UserID: pipe(string(), uuid()), @@ -52,14 +48,22 @@ export const sendImage = async ( return parse(sendImageResponseValidator, res); }; -const locationValidator = object({ +const locationValidator = strictObject({ ID: pipe(string(), uuid()), Name: string(), Address: nullable(string()), Description: nullable(string()), }); -const eventValidator = object({ +const contactValidator = strictObject({ + ID: pipe(string(), uuid()), + Name: string(), + Description: nullable(string()), + PhoneNumber: nullable(string()), + Email: nullable(string()), +}); + +const eventValidator = strictObject({ ID: pipe(string(), uuid()), Name: string(), StartDateTime: nullable(pipe(string())), @@ -67,14 +71,16 @@ const eventValidator = object({ Description: nullable(string()), LocationID: nullable(pipe(string(), uuid())), Location: nullable(locationValidator), + OrganizerID: nullable(pipe(string(), uuid())), + Organizer: nullable(contactValidator), }); -const locationDataType = object({ +const locationDataType = strictObject({ type: literal("location"), data: locationValidator, }); -const eventDataType = object({ +const eventDataType = strictObject({ type: literal("event"), data: eventValidator, });