Skip to content

Commit

Permalink
#4 - US01 implemented
Browse files Browse the repository at this point in the history
  • Loading branch information
Harold Jose committed Jun 13, 2023
1 parent 4096475 commit 630fe01
Show file tree
Hide file tree
Showing 15 changed files with 188 additions and 176 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,25 @@
package dev.haroldjose.familysharedlist.dataLayer.datasource.remote.account

import dev.haroldjose.familysharedlist.dataLayer.datasource.mongoDb.request.FilterByUuidDto
import dev.haroldjose.familysharedlist.dataLayer.datasource.mongoDb.request.MongoDbRequestDocumentDto
import dev.haroldjose.familysharedlist.dataLayer.datasource.mongoDb.request.MongoDbRequestFilterUpdateDto
import dev.haroldjose.familysharedlist.dataLayer.datasource.remote.mongoDb.MongoDbDataApiDataSource
import dev.haroldjose.familysharedlist.dataLayer.datasource.remote.mongoDb.resources.MongoDbResources
import dev.haroldjose.familysharedlist.dataLayer.datasource.remote.mongoDb.response.MongoDbFindAllResponseDto
import dev.haroldjose.familysharedlist.dataLayer.datasource.remote.mongoDb.response.MongoDbFindByUuidResponseDto
import dev.haroldjose.familysharedlist.dataLayer.dto.AccountDto
import dev.haroldjose.familysharedlist.dataLayer.dto.FamilyListDto
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.contextual

internal class AccountMongoDbDataApiDataSource: MongoDbDataApiDataSource<AccountDto>(
dataSource = MongoDbResources.DataSource.CLUSTER0.value,
database = MongoDbResources.Database.ACCOUNT.value,
collection = MongoDbResources.Collection.ACCOUNT.value
collection = MongoDbResources.Collection.ACCOUNT.value,
serializers = SerializersModule {
contextual(MongoDbFindAllResponseDto.serializer(AccountDto.serializer()))
contextual(MongoDbFindByUuidResponseDto.serializer(AccountDto.serializer()))
contextual(MongoDbRequestDocumentDto.serializer(AccountDto.serializer()))
contextual(MongoDbRequestFilterUpdateDto.serializer(FilterByUuidDto.serializer(), AccountDto.serializer()))
}
), IAccountMongoDbDataApiDataSource
Original file line number Diff line number Diff line change
@@ -1,12 +1,25 @@
package dev.haroldjose.familysharedlist.dataLayer.datasource.remote.familiList

import dev.haroldjose.familysharedlist.dataLayer.datasource.mongoDb.request.FilterByUuidDto
import dev.haroldjose.familysharedlist.dataLayer.datasource.mongoDb.request.MongoDbRequestDocumentDto
import dev.haroldjose.familysharedlist.dataLayer.datasource.mongoDb.request.MongoDbRequestFilterUpdateDto
import dev.haroldjose.familysharedlist.dataLayer.datasource.remote.mongoDb.MongoDbDataApiDataSource
import dev.haroldjose.familysharedlist.dataLayer.datasource.remote.mongoDb.resources.MongoDbResources
import dev.haroldjose.familysharedlist.dataLayer.datasource.remote.mongoDb.response.MongoDbFindAllResponseDto
import dev.haroldjose.familysharedlist.dataLayer.datasource.remote.mongoDb.response.MongoDbFindByUuidResponseDto
import dev.haroldjose.familysharedlist.dataLayer.dto.FamilyListDto
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.contextual


internal class FamilyListMongoDbDataApiDataSource: MongoDbDataApiDataSource<FamilyListDto>(
dataSource = MongoDbResources.DataSource.CLUSTER0.value,
database = MongoDbResources.Database.FAMILYSHAREDLIST.value,
collection = MongoDbResources.Collection.SHOPPINGLIST.value
collection = MongoDbResources.Collection.SHOPPINGLIST.value,
serializers = SerializersModule {
contextual(MongoDbFindAllResponseDto.serializer(FamilyListDto.serializer()))
contextual(MongoDbFindByUuidResponseDto.serializer(FamilyListDto.serializer()))
contextual(MongoDbRequestDocumentDto.serializer(FamilyListDto.serializer()))
contextual(MongoDbRequestFilterUpdateDto.serializer(FilterByUuidDto.serializer(), FamilyListDto.serializer()))
}
), IFamilyListMongoDbDataApiDataSource
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package dev.haroldjose.familysharedlist.dataLayer.datasource.remote.mongoDb

import dev.haroldjose.familysharedlist.dataLayer.datasource.mongoDb.IMongoDbBaseDto
import io.ktor.client.statement.HttpResponse
import kotlinx.serialization.modules.SerializersModule

interface IMongoDbDataApiDataSource<T: IMongoDbBaseDto> {

val dataSource: String
val database: String
val collection: String
val serializers: SerializersModule

suspend fun insert(item: T)
suspend fun findAll(): HttpResponse
suspend fun findBy(uuid: String): HttpResponse
suspend fun findAll(): List<T>
suspend fun findBy(uuid: String): T?
suspend fun update(item: T)
suspend fun delete(uuid: String)
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ import dev.haroldjose.familysharedlist.dataLayer.datasource.mongoDb.request.Mong
import dev.haroldjose.familysharedlist.dataLayer.datasource.mongoDb.request.MongoDbRequestDto
import dev.haroldjose.familysharedlist.dataLayer.datasource.mongoDb.request.MongoDbRequestFilterDto
import dev.haroldjose.familysharedlist.dataLayer.datasource.mongoDb.request.MongoDbRequestFilterUpdateDto
import dev.haroldjose.familysharedlist.dataLayer.datasource.remote.mongoDb.response.MongoDbResponseDto
import dev.haroldjose.familysharedlist.dataLayer.datasource.remote.mongoDb.response.MongoDbFindAllResponseDto
import dev.haroldjose.familysharedlist.dataLayer.datasource.remote.mongoDb.response.MongoDbFindByUuidResponseDto
import dev.haroldjose.familysharedlist.dataLayer.dto.AccountDto
import dev.haroldjose.familysharedlist.dataLayer.dto.FamilyListDto
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
Expand All @@ -20,12 +23,14 @@ import io.ktor.http.ContentType
import io.ktor.http.contentType
import io.ktor.serialization.kotlinx.json.json
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.contextual

open class MongoDbDataApiDataSource<T : IMongoDbBaseDto>(
override val dataSource: String,
override val database: String,
override val collection: String,
) : IMongoDbDataApiDataSource<T> {
override val serializers: SerializersModule) : IMongoDbDataApiDataSource<T> {

//TODO: handle Error in all request
private val apiUrl = BuildKonfig.apiUrl
Expand All @@ -51,6 +56,7 @@ open class MongoDbDataApiDataSource<T : IMongoDbBaseDto>(
json(Json {
encodeDefaults = true
ignoreUnknownKeys = true
serializersModule = serializers
})
}
}
Expand All @@ -76,23 +82,21 @@ open class MongoDbDataApiDataSource<T : IMongoDbBaseDto>(
}
}

override suspend fun findAll(): HttpResponse {
override suspend fun findAll(): List<T> {

val httpResponse = client.post(Resources.FIND_ONE.value) {
val httpResponse = client.post(Resources.FIND.value) {
setBody(getDefaultRequestDto())
}

//TODO: serialize here with generics or inject an serializer function to return List<T>
//This code does not work
if (httpResponse.status.value in 200..299) {
//val mongoDbResponseDto = httpResponse.body<MongoDbResponseDto<T>>()
//val test = mongoDbResponseDto.documents
val mongoDbFindAllResponseDto = httpResponse.body<MongoDbFindAllResponseDto<T>>()
return mongoDbFindAllResponseDto.documents
}

return httpResponse
return arrayListOf()
}

override suspend fun findBy(uuid: String): HttpResponse {
override suspend fun findBy(uuid: String): T? {

val bodyRequest = MongoDbRequestFilterDto(
default = getDefaultRequestDto(),
Expand All @@ -101,18 +105,16 @@ open class MongoDbDataApiDataSource<T : IMongoDbBaseDto>(
)
)

val httpResponse = client.post(Resources.FIND.value) {
val httpResponse = client.post(Resources.FIND_ONE.value) {
setBody(bodyRequest)
}

//TODO: serialize here with generics or inject an serializer function to return List<T>
//This code does not work
//if (httpResponse.status.value in 200..299) {
// val mongoDbResponseDto = httpResponse.body<MongoDbResponseDto<T>()
// return mongoDbResponseDto.documents
//}
if (httpResponse.status.value in 200..299) {
val mongoDbFindAllResponseDto = httpResponse.body<MongoDbFindByUuidResponseDto<T>>()
return mongoDbFindAllResponseDto.document
}

return httpResponse
return null
}

override suspend fun update(item: T) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ package dev.haroldjose.familysharedlist.dataLayer.datasource.remote.mongoDb.resp
import kotlinx.serialization.Serializable

@Serializable
data class MongoDbResponseDto<T>(
val documents: T
data class MongoDbFindAllResponseDto<T>(
val documents: List<T>
)

@Serializable
data class MongoDbFindByUuidResponseDto<T>(
val document: T
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ import kotlinx.serialization.Serializable

@Serializable
data class AccountDto(
override val uuid: String,
override val uuid: String = "",
val createdDate: Instant = Clock.System.now(),
val updatedDate: Instant = Clock.System.now(),
val name: String = "Guest",
val name: String = "",
val email: String = "",
val password: String = "",
val myAccountIsSharedWith: List<String> = arrayListOf(),
var accountsSharedWithMe: List<String> = arrayListOf(),
) : IMongoDbBaseDto
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,7 @@ internal class FamilyListRepository() : IFamilyListRepository {
}

override suspend fun findAll(): List<FamilyListDto> {

val httpResponse = remoteDataSource.findAll()

//if (httpResponse.status.value in 200..299) {
// val responseDto = httpResponse.body<FamilyListFindAllResponseDto>()
// return responseDto.documents
//}

return arrayListOf()
return remoteDataSource.findAll()
}

override suspend fun update(item: FamilyListDto) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package dev.haroldjose.familysharedlist.domainLayer.extensions


import dev.haroldjose.familysharedlist.dataLayer.dto.AccountDto
import dev.haroldjose.familysharedlist.domainLayer.models.AccountModel

internal fun AccountDto.toModel(): AccountModel {
return AccountModel(
uuid = this.uuid,
createdDate = this.createdDate,
updatedDate = this.updatedDate,
name = this.name,
email = this.email,
myAccountIsSharedWith = this.myAccountIsSharedWith,
accountsSharedWithMe = this.accountsSharedWithMe
)
}

internal fun AccountModel.toDto(): AccountDto {
return AccountDto(
uuid = this.uuid,
createdDate = this.createdDate,
updatedDate = this.updatedDate,
name = this.name,
email = this.email,
myAccountIsSharedWith = this.myAccountIsSharedWith,
accountsSharedWithMe = this.accountsSharedWithMe
)
}

Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,13 @@ internal fun FamilyListDto.toModel(): FamilyListModel {
isCompleted = this.isCompleted,
quantity = this.quantity
)
}

internal fun FamilyListModel.toDto(): FamilyListDto {
return FamilyListDto(
uuid = this.uuid,
name = this.name,
isCompleted = this.isCompleted,
quantity = this.quantity
)
}
Loading

0 comments on commit 630fe01

Please sign in to comment.