diff --git a/backend/main.go b/backend/main.go index ab093d6..0f26368 100644 --- a/backend/main.go +++ b/backend/main.go @@ -143,16 +143,26 @@ func main() { return } + listsWithImages, err := userModel.ListWithImages(r.Context(), userId) + if err != nil { + log.Println(err) + w.WriteHeader(http.StatusNotFound) + fmt.Fprintf(w, "Something went wrong") + return + } + type ImagesReturn struct { UserImages []models.UserImageWithImage ImageProperties []models.TypedProperties ProcessingImages []models.UserProcessingImage + Lists []models.ListsWithImages } imagesReturn := ImagesReturn{ UserImages: images, ImageProperties: models.GetTypedImageProperties(imageProperties), ProcessingImages: processingImages, + Lists: listsWithImages, } jsonImages, err := json.Marshal(imagesReturn) diff --git a/backend/models/user.go b/backend/models/user.go index 97a141f..4da269b 100644 --- a/backend/models/user.go +++ b/backend/models/user.go @@ -316,6 +316,26 @@ func (m UserModel) GetUserImages(ctx context.Context, userId uuid.UUID) ([]UserI return userImages, err } +type ListsWithImages struct { + model.Lists + + Images []model.ImageLists +} + +func (m UserModel) ListWithImages(ctx context.Context, userId uuid.UUID) ([]ListsWithImages, error) { + stmt := SELECT(Lists.AllColumns, ImageLists.AllColumns). + FROM( + Lists. + INNER_JOIN(ImageLists, ImageLists.ListID.EQ(Lists.ID)), + ). + WHERE(Lists.UserID.EQ(UUID(userId))) + + lists := []ListsWithImages{} + err := stmt.QueryContext(ctx, m.dbPool, &lists) + + return lists, err +} + func NewUserModel(db *sql.DB) UserModel { return UserModel{dbPool: db} } diff --git a/frontend/src/network/index.ts b/frontend/src/network/index.ts index 7189b23..dd591aa 100644 --- a/frontend/src/network/index.ts +++ b/frontend/src/network/index.ts @@ -186,10 +186,27 @@ const userProcessingImageValidator = strictObject({ export type UserImage = InferOutput; +const listValidator = strictObject({ + ID: pipe(string(), uuid()), + UserID: pipe(string(), uuid()), + CreatedAt: pipe(string()), + Name: string(), + Description: nullable(string()), + + Images: array( + strictObject({ + ID: pipe(string(), uuid()), + ImageID: pipe(string(), uuid()), + ListID: pipe(string(), uuid()), + }), + ), +}); + const imageRequestValidator = strictObject({ UserImages: array(userImageValidator), ImageProperties: array(dataTypeValidator), ProcessingImages: array(userProcessingImageValidator), + Lists: array(listValidator), }); export type JustTheImageWhatAreTheseNames = InferOutput<