Fixed issue where querying empty collection returns an empty book record

This commit is contained in:
2026-04-06 21:08:32 +02:00
parent 2552ba8e94
commit a537c12a3b
5 changed files with 31 additions and 11 deletions

View File

@@ -14,7 +14,10 @@ func CollectionQueryToCollectionDto(collectionsQueryResult []query.CollectionsQu
var collection dto.CollectionGet
for _, collectionsDb := range collectionsQueryResult {
collection.Name = collectionsDb.Name
collection.Books = append(collection.Books, collectionDbToBookItem(&collectionsDb))
book := collectionDbToBookItem(&collectionsDb)
if book != nil {
collection.Books = append(collection.Books, *book)
}
collection.UserID = collectionsDb.UserID
}
return collection
@@ -32,16 +35,24 @@ func CollectionQueryToCollectionItemDto(collectionsQueryResult []query.Collectio
//current collection is the last element
i = len(collections) - 1
}
collections[i].Books = append(collections[i].Books, collectionDbToBookItem(&collectionDb))
book := collectionDbToBookItem(&collectionDb)
if book != nil {
collections[i].Books = append(collections[i].Books, *book)
}
}
return collections
}
func collectionDbToBookItem(collectionDb *query.CollectionsQueryResult) dto.CollectionBookItemGet {
return dto.CollectionBookItemGet{
ID: collectionDb.BookId,
Title: collectionDb.BookTitle,
CoverPath: collectionDb.CoverPath,
func collectionDbToBookItem(collectionDb *query.CollectionsQueryResult) *dto.CollectionBookItemGet {
if collectionDb.BookId > 0 {
bookItem := dto.CollectionBookItemGet{
ID: collectionDb.BookId,
Title: collectionDb.BookTitle,
CoverPath: collectionDb.CoverPath,
}
return &bookItem
} else {
return nil
}
}

View File

@@ -12,8 +12,8 @@ import (
func TestFetchAllCollections_OK(t *testing.T) {
status, res := testFetchCollections(t, "10", "0")
assert.Equal(t, http.StatusOK, status)
assert.Equal(t, int64(2), res.Count)
assert.Equal(t, 2, len(res.Collections))
assert.Equal(t, int64(3), res.Count)
assert.Equal(t, 3, len(res.Collections))
}
func testFetchCollections(t *testing.T, limit string, offset string) (int, dto.CollectionItemsGet) {

View File

@@ -25,10 +25,18 @@ func TestGetCollection_Limit(t *testing.T) {
}
func TestGetCollection_Unauthorized(t *testing.T) {
status, _ := testGetCollection(t, "4", "10", "0")
status, _ := testGetCollection(t, "3", "10", "0")
assert.Equal(t, http.StatusUnauthorized, status)
}
func TestGetCollection_Empty(t *testing.T) {
status, collection := testGetCollection(t, "4", "10", "0")
assert.Equal(t, http.StatusOK, status)
assert.Equal(t, "Empty", collection.Name)
assert.Equal(t, 0, len(collection.Books))
assert.Equal(t, int64(0), collection.Count)
}
func testGetCollection(t *testing.T, id string, limit string, offset string) (int, dto.CollectionGet) {
return testutils.TestFetchModel[dto.CollectionGet](t, "/ws/collection/"+id, limit, offset)
}

View File

@@ -226,7 +226,7 @@ func FetchCollectionBooks(db *gorm.DB, collectionId uint, limit int, offset int)
func FetchCollectionBooksCount(db *gorm.DB, collectionId uint) (int64, error) {
var count int64
res := fetchCollectionBooksQuery(db, collectionId).Count(&count)
res := fetchCollectionBooksQuery(db, collectionId).Where("book_id IS NOT NULL").Count(&count)
return count, res.Error
}