fix: error importing reading list with non-numerical number

closes #499
This commit is contained in:
Gauthier Roebroeck 2021-04-21 10:02:31 +08:00
commit 3ef02409ba
10 changed files with 35 additions and 35 deletions

View file

@ -31,5 +31,5 @@ interface ReadListRequestResultBookDto {
interface ReadListRequestBookDto { interface ReadListRequestBookDto {
series: string, series: string,
number: number, number: string,
} }

View file

@ -10,7 +10,7 @@ data class ReadListRequest(
data class ReadListRequestBook( data class ReadListRequestBook(
val series: String, val series: String,
val number: Int, val number: String,
) )
data class ReadListRequestResult( data class ReadListRequestResult(

View file

@ -40,7 +40,7 @@ class ReadListMatcher(
val seriesId = seriesMatches.first().id val seriesId = seriesMatches.first().id
val seriesBooks = bookRepository.findBySeriesId(seriesId) val seriesBooks = bookRepository.findBySeriesId(seriesId)
val bookMatches = bookMetadataRepository.findByIds(seriesBooks.map { it.id }) val bookMatches = bookMetadataRepository.findByIds(seriesBooks.map { it.id })
.filter { it.number.toIntOrNull()?.equals(book.number) ?: false } .filter { (it.number.trimStart('0') == book.number.trimStart('0')) }
.map { it.bookId } .map { it.bookId }
when { when {
bookMatches.size > 1 -> unmatchedBooks += ReadListRequestResultBook(book, "ERR_1013") bookMatches.size > 1 -> unmatchedBooks += ReadListRequestResultBook(book, "ERR_1013")

View file

@ -28,7 +28,7 @@ class ReadListProvider(
val books = readingList.books.mapNotNull { val books = readingList.books.mapNotNull {
val series = computeSeriesFromSeriesAndVolume(it.series, it.volume) val series = computeSeriesFromSeriesAndVolume(it.series, it.volume)
if (!series.isNullOrBlank() && it.number != null) if (!series.isNullOrBlank() && it.number != null)
ReadListRequestBook(series, it.number!!) ReadListRequestBook(series, it.number!!.trim())
else { else {
logger.warn { "Book is missing series or number, skipping: $it" } logger.warn { "Book is missing series or number, skipping: $it" }
null null

View file

@ -9,7 +9,7 @@ class Book {
var series: String? = null var series: String? = null
@JsonProperty(value = "Number") @JsonProperty(value = "Number")
var number: Int? = null var number: String? = null
@JsonProperty(value = "Volume") @JsonProperty(value = "Volume")
var volume: Int? = null var volume: Int? = null

View file

@ -6,7 +6,7 @@ import org.gotson.komga.domain.model.ReadListRequestResultBook
data class ReadListRequestBookDto( data class ReadListRequestBookDto(
val series: String, val series: String,
val number: Int, val number: String,
) )
data class ReadListRequestResultDto( data class ReadListRequestResultDto(

View file

@ -78,17 +78,17 @@ class ReadListMatcherTest(
seriesLifecycle.sortBooks(s) seriesLifecycle.sortBooks(s)
bookMetadataRepository.findById(booksSeries2[0].id).let { bookMetadataRepository.findById(booksSeries2[0].id).let {
bookMetadataRepository.update(it.copy(number = "025")) bookMetadataRepository.update(it.copy(number = "0025"))
} }
} }
val request = ReadListRequest( val request = ReadListRequest(
name = "readlist", name = "readlist",
books = listOf( books = listOf(
ReadListRequestBook(series = "Batman: White Knight", number = 1), ReadListRequestBook(series = "Batman: White Knight", number = "1"),
ReadListRequestBook(series = "joker", number = 2), ReadListRequestBook(series = "joker", number = "02"),
ReadListRequestBook(series = "Batman: White Knight", number = 2), ReadListRequestBook(series = "Batman: White Knight", number = "2"),
ReadListRequestBook(series = "joker", number = 25), ReadListRequestBook(series = "joker", number = "25"),
) )
) )
@ -99,7 +99,7 @@ class ReadListMatcherTest(
with(result) { with(result) {
assertThat(readList).isNotNull assertThat(readList).isNotNull
assertThat(unmatchedBooks).isEmpty() assertThat(unmatchedBooks).isEmpty()
assertThat(errorCode).isBlank() assertThat(errorCode).isBlank
with(readList!!) { with(readList!!) {
assertThat(name).isEqualTo(request.name) assertThat(name).isEqualTo(request.name)
assertThat(bookIds).hasSize(4) assertThat(bookIds).hasSize(4)
@ -125,10 +125,10 @@ class ReadListMatcherTest(
val request = ReadListRequest( val request = ReadListRequest(
name = "my readlist", name = "my readlist",
books = listOf( books = listOf(
ReadListRequestBook(series = "batman: white knight", number = 1), ReadListRequestBook(series = "batman: white knight", number = "1"),
ReadListRequestBook(series = "joker", number = 2), ReadListRequestBook(series = "joker", number = "2"),
ReadListRequestBook(series = "BATMAN: WHITE KNIGHT", number = 2), ReadListRequestBook(series = "BATMAN: WHITE KNIGHT", number = "2"),
ReadListRequestBook(series = "joker", number = 25), ReadListRequestBook(series = "joker", number = "25"),
) )
) )
@ -176,10 +176,10 @@ class ReadListMatcherTest(
val request = ReadListRequest( val request = ReadListRequest(
name = "readlist", name = "readlist",
books = listOf( books = listOf(
ReadListRequestBook(series = "tokyo ghost", number = 1), ReadListRequestBook(series = "tokyo ghost", number = "1"),
ReadListRequestBook(series = "batman", number = 3), ReadListRequestBook(series = "batman", number = "3"),
ReadListRequestBook(series = "joker", number = 3), ReadListRequestBook(series = "joker", number = "3"),
ReadListRequestBook(series = "batman", number = 2), ReadListRequestBook(series = "batman", number = "2"),
) )
) )

View file

@ -21,12 +21,12 @@ class ReadListProviderTest {
books = listOf( books = listOf(
Book().apply { Book().apply {
series = "series 1" series = "series 1"
number = 4 number = " 4 "
volume = 2005 volume = 2005
}, },
Book().apply { Book().apply {
series = "series 2" series = "series 2"
number = 1 number = "1"
}, },
) )
} }
@ -44,12 +44,12 @@ class ReadListProviderTest {
with(books[0]) { with(books[0]) {
assertThat(series).isEqualTo("series 1 (2005)") assertThat(series).isEqualTo("series 1 (2005)")
assertThat(number).isEqualTo(4) assertThat(number).isEqualTo("4")
} }
with(books[1]) { with(books[1]) {
assertThat(series).isEqualTo("series 2") assertThat(series).isEqualTo("series 2")
assertThat(number).isEqualTo(1) assertThat(number).isEqualTo("1")
} }
} }
} }
@ -62,12 +62,12 @@ class ReadListProviderTest {
books = listOf( books = listOf(
Book().apply { Book().apply {
series = " " series = " "
number = 4 number = "4"
volume = 2005 volume = 2005
}, },
Book().apply { Book().apply {
series = null series = null
number = 1 number = "1"
}, },
Book().apply { Book().apply {
series = "Series" series = "Series"
@ -110,12 +110,12 @@ class ReadListProviderTest {
books = listOf( books = listOf(
Book().apply { Book().apply {
series = "series 1" series = "series 1"
number = 4 number = "4"
volume = 2005 volume = 2005
}, },
Book().apply { Book().apply {
series = "series 2" series = "series 2"
number = 1 number = "1"
}, },
) )
} }
@ -137,12 +137,12 @@ class ReadListProviderTest {
books = listOf( books = listOf(
Book().apply { Book().apply {
series = "series 1" series = "series 1"
number = 4 number = "4"
volume = 2005 volume = 2005
}, },
Book().apply { Book().apply {
series = "series 2" series = "series 2"
number = 1 number = "1"
}, },
) )
} }

View file

@ -21,7 +21,7 @@ class ReadingListTest {
with(books[0]) { with(books[0]) {
assertThat(series).isEqualTo("Civil War") assertThat(series).isEqualTo("Civil War")
assertThat(number).isEqualTo(1) assertThat(number).isEqualTo("1")
assertThat(volume).isEqualTo(2006) assertThat(volume).isEqualTo(2006)
assertThat(year).isEqualTo(2006) assertThat(year).isEqualTo(2006)
assertThat(fileName).isEqualTo("Civil War Vol.2006 #01 (July, 2006)") assertThat(fileName).isEqualTo("Civil War Vol.2006 #01 (July, 2006)")
@ -29,7 +29,7 @@ class ReadingListTest {
with(books[1]) { with(books[1]) {
assertThat(series).isEqualTo("Wolverine") assertThat(series).isEqualTo("Wolverine")
assertThat(number).isEqualTo(42) assertThat(number).isEqualTo("42")
assertThat(volume).isEqualTo(2003) assertThat(volume).isEqualTo(2003)
assertThat(year).isEqualTo(2006) assertThat(year).isEqualTo(2006)
assertThat(fileName).isEqualTo("Wolverine Vol.2003 #42 (July, 2006)") assertThat(fileName).isEqualTo("Wolverine Vol.2003 #42 (July, 2006)")
@ -37,7 +37,7 @@ class ReadingListTest {
with(books[2]) { with(books[2]) {
assertThat(series).isEqualTo("X-Factor") assertThat(series).isEqualTo("X-Factor")
assertThat(number).isEqualTo(8) assertThat(number).isEqualTo("HS")
assertThat(volume).isEqualTo(2006) assertThat(volume).isEqualTo(2006)
assertThat(year).isEqualTo(2006) assertThat(year).isEqualTo(2006)
assertThat(fileName).isEqualTo("X-Factor Vol.2006 #08 (August, 2006)") assertThat(fileName).isEqualTo("X-Factor Vol.2006 #08 (August, 2006)")

View file

@ -1,5 +1,5 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<ReadingList xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ReadingList>
<Name>Civil War</Name> <Name>Civil War</Name>
<Books> <Books>
<Book Series="Civil War" Number="1" Volume="2006" Year="2006"> <Book Series="Civil War" Number="1" Volume="2006" Year="2006">
@ -10,7 +10,7 @@
<Id>29a69cbf-af64-471d-889c-8fc0f0080f7c</Id> <Id>29a69cbf-af64-471d-889c-8fc0f0080f7c</Id>
<FileName>Wolverine Vol.2003 #42 (July, 2006)</FileName> <FileName>Wolverine Vol.2003 #42 (July, 2006)</FileName>
</Book> </Book>
<Book Series="X-Factor" Number="8" Volume="2006" Year="2006"> <Book Series="X-Factor" Number="HS" Volume="2006" Year="2006">
<Id>ec70e585-5a80-428c-a67e-fd22b668449b</Id> <Id>ec70e585-5a80-428c-a67e-fd22b668449b</Id>
<FileName>X-Factor Vol.2006 #08 (August, 2006)</FileName> <FileName>X-Factor Vol.2006 #08 (August, 2006)</FileName>
</Book> </Book>