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, });