**AppwriteMappersGenerator** es una librería de Kotlin que utiliza Kotlin Symbol Processing (KSP) para generar automáticamente código que simplifica el desarrollo con Appwrite y pruebas personalizadas. La librería ofrece la anotacion:
@AppwriteDocument : Genera funciones para mapear objetos `Document` y `Documents` de Appwrite a clases Kotlin y viceversa.
Esta librería está diseñada para ahorrar tiempo en la conversión manual de datos de Appwrite y facilitar la creación de pruebas, mejorando la productividad en proyectos Kotlin.
- **Lenguaje**: Kotlin
- **Procesador de anotaciones**: Kotlin Symbol Processing (KSP)
- **Sistema de compilación**: Gradle
- **Dependencia principal**: Appwrite Kotlin SDK (versión 5.0.3)
- **Plataforma soportada**: JVM (compatible con Android y aplicaciones de servidor Kotlin)
1. **Agrega el repositorio de JitPack** a tu archivo `build.gradle.kts` (o `build.gradle`):
repositories {
maven { url = uri("https://jitpack.io") }
}2. **Agrega la dependencia para la librería y KSP**:
dependencies {
implementation("com.github.Danielito1996:appwrite-ksp-mapper:1.0.0")
ksp("com.github.TU_USUARIO:appwrite-ksp-mapper:1.0.0")
}Marca una data class con @AppwriteDocument para generar funciones que mapean objetos Document y Documents de Appwrite a tu clase, y convierten la clase a un Map para Appwrite.
Ejemplo:
@AppwriteDocument
data class Ofertas(
val id: String,
val tittle: String,
val id_anuncio: String,
val description: String?,
val amount: Float?,
val photoUrl: String?,
val expired_time: String?
)Código generado:
com.example.appwrite.models
fun Document<Map<String, Any>>.toOfertas(): Ofertas {
return Ofertas(
id = this.data["id"] as String,
tittle = this.data["tittle"] as String,
id_anuncio = this.data["id_anuncio"] as String,
description = this.data.getOrDefault("description", "") as? String ?: "",
amount = this.data.getOrDefault("amount", 0f) as? Float ?: 0f,
photoUrl = this.data.getOrDefault("photoUrl", "") as? String ?: "",
expired_time = this.data.getOrDefault("expired_time", "") as? String ?: ""
)
}
fun Ofertas.toDocumentData(): Map<String, Any?> {
return mapOf(
"id" to id,
"tittle" to tittle,
"id_anuncio" to id_anuncio,
"description" to description,
"amount" to amount,
"photoUrl" to photoUrl,
"expired_time" to expired_time
)
}
fun Documents<Map<String, Any>>.toOfertasList(): List<Ofertas> {
return this.documents.map { it.toOfertas() }
}Uso en código:
fun main() {
val client = Client()
.setEndpoint("https://[HOSTNAME]/v1")
.setProject("YOUR_PROJECT_ID")
.setKey("YOUR_API_KEY")
val databases = Databases(client)
// Convertir un Document a Ofertas
val document = databases.getDocument("databaseId", "collectionId", "documentId")
val oferta = document.toOfertas()
println(oferta) // Ofertas(id=..., tittle=..., ...)
// Convertir Documents a List<Ofertas>
val documents = databases.listDocuments("databaseId", "collectionId")
val ofertas = documents.toOfertasList()
println(ofertas) // [Ofertas(id=..., tittle=..., ...), ...]
// Convertir Ofertas a Map
val documentData = oferta.toDocumentData()
println(documentData) // {id=..., tittle=..., ...}
}
Kotlin 1.9.24 o superior
KSP 1.9.24-1.0.24
Appwrite Kotlin SDK 5.0.3 o superior (para @AppwriteDocument)
Gradle 7.0 o superior
¡Contribuciones son bienvenidas! Por favor, abre un issue o un pull request en el repositorio de GitHub.
Este proyecto está licenciado bajo la Licencia MIT (LICENSE).