From e80b72a72098e843c7f8a9de8bad313a018684cf Mon Sep 17 00:00:00 2001 From: Andrea Brighi Date: Mon, 15 May 2023 22:49:36 +0200 Subject: [PATCH] refactor(desktop): add adapter for domain, db and remote (for Author, Book and SchoolSupply) --- .../desktopdata/adapter/AuthorAdapter.kt | 15 +++++++ .../desktopdata/adapter/BookAdapter.kt | 44 +++++++++++++++++++ .../adapter/SchoolSupplyAdapter.kt | 39 ++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 desktopData/src/main/kotlin/com/intelligentbackpack/desktopdata/adapter/AuthorAdapter.kt create mode 100644 desktopData/src/main/kotlin/com/intelligentbackpack/desktopdata/adapter/BookAdapter.kt create mode 100644 desktopData/src/main/kotlin/com/intelligentbackpack/desktopdata/adapter/SchoolSupplyAdapter.kt diff --git a/desktopData/src/main/kotlin/com/intelligentbackpack/desktopdata/adapter/AuthorAdapter.kt b/desktopData/src/main/kotlin/com/intelligentbackpack/desktopdata/adapter/AuthorAdapter.kt new file mode 100644 index 00000000..0dbff519 --- /dev/null +++ b/desktopData/src/main/kotlin/com/intelligentbackpack/desktopdata/adapter/AuthorAdapter.kt @@ -0,0 +1,15 @@ +package com.intelligentbackpack.desktopdata.adapter + +import com.intelligentbackpack.desktopdata.db.entities.Author as AuthorDB +import com.intelligentbackpack.desktopdomain.entities.Author as AuthorDomain + +/** + * Adapter for author + */ +internal object AuthorAdapter { + + /** + * Convert from domain to DB + */ + fun AuthorDB.fromDBToDomain(): AuthorDomain = this.name +} diff --git a/desktopData/src/main/kotlin/com/intelligentbackpack/desktopdata/adapter/BookAdapter.kt b/desktopData/src/main/kotlin/com/intelligentbackpack/desktopdata/adapter/BookAdapter.kt new file mode 100644 index 00000000..f2a325b8 --- /dev/null +++ b/desktopData/src/main/kotlin/com/intelligentbackpack/desktopdata/adapter/BookAdapter.kt @@ -0,0 +1,44 @@ +package com.intelligentbackpack.desktopdata.adapter + +import book.communication.Book as BookRemote +import com.intelligentbackpack.desktopdata.adapter.AuthorAdapter.fromDBToDomain +import com.intelligentbackpack.desktopdata.db.entities.Book as BookDB +import com.intelligentbackpack.desktopdata.db.relations.BookWithAuthors +import com.intelligentbackpack.desktopdomain.entities.Book as BookDomain + +/** + * Adapter for book + */ +internal object BookAdapter { + + /** + * Convert from DB to domain + */ + fun BookWithAuthors.fromDBToDomain(): BookDomain { + return BookDomain.build { + isbn = this@fromDBToDomain.book.isbn + title = this@fromDBToDomain.book.title + authors = this@fromDBToDomain.authors.map { it.fromDBToDomain() }.toSet() + } + } + + /** + * Convert from domain to DB + */ + fun BookDomain.fromDomainToDB(): BookDB = + BookDB( + isbn = this.isbn, + title = this.title + ) + + /** + * Convert from remote to domain + */ + fun BookRemote.fromRemoteToDomain(): BookDomain { + return BookDomain.build { + isbn = this@fromRemoteToDomain.isbn + title = this@fromRemoteToDomain.titolo + authors = setOf(this@fromRemoteToDomain.autore) + } + } +} diff --git a/desktopData/src/main/kotlin/com/intelligentbackpack/desktopdata/adapter/SchoolSupplyAdapter.kt b/desktopData/src/main/kotlin/com/intelligentbackpack/desktopdata/adapter/SchoolSupplyAdapter.kt new file mode 100644 index 00000000..4f59d514 --- /dev/null +++ b/desktopData/src/main/kotlin/com/intelligentbackpack/desktopdata/adapter/SchoolSupplyAdapter.kt @@ -0,0 +1,39 @@ +package com.intelligentbackpack.desktopdata.adapter + +import com.intelligentbackpack.desktopdata.adapter.AuthorAdapter.fromDBToDomain +import com.intelligentbackpack.desktopdata.db.entities.SchoolSupply as SchoolSupplyDB +import com.intelligentbackpack.desktopdata.db.relations.BookCopyWithAuthors +import com.intelligentbackpack.desktopdomain.entities.Book +import com.intelligentbackpack.desktopdomain.entities.BookCopy +import com.intelligentbackpack.desktopdomain.entities.BookCopy as BookCopyDomain + +/** + * Adapter for school supply + */ +internal object SchoolSupplyAdapter { + + /** + * Convert from DB Book copy to domain Book copy + */ + fun BookCopyWithAuthors.fromDBToDomain(): BookCopyDomain { + return BookCopyDomain.build { + this.rfidCode = this@fromDBToDomain.bookCopy.rfid + this.book = Book.build { + isbn = this@fromDBToDomain.bookCopy.isbn + title = this@fromDBToDomain.bookCopy.title + authors = this@fromDBToDomain.authors.map { it.fromDBToDomain() }.toSet() + } + } + } + + /** + * Convert from domain Book copy to DB Book copy + */ + fun BookCopy.fromDomainToDB(type: Int, inBackpack: Boolean = false): SchoolSupplyDB = + SchoolSupplyDB( + rfid = this@fromDomainToDB.rfidCode, + isbn = this@fromDomainToDB.book.isbn, + type = type, + inBackpack = inBackpack + ) +}