started to fill client part

This commit is contained in:
2019-10-16 23:46:15 +06:00
parent 71c7880582
commit 631cfe9c28
27 changed files with 251 additions and 67 deletions
ClientPart
ClientServerCommon
build.gradle
src
main
kotlin
com
insanusmokrassar
postssystem
core
clientserver
Core
build.gradle
gradle/wrapper
settings.gradle
src/main/kotlin/com/github/insanusmokrassar/postssystem/core

40
Core/build.gradle Normal file

@ -0,0 +1,40 @@
project.version = "0.1.0"
project.group = "com.insanusmokrassar"
buildscript {
repositories {
mavenLocal()
jcenter()
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:$gradle_bintray_plugin_version"
}
}
apply plugin: 'java-library'
apply plugin: 'kotlin'
apply plugin: 'kotlinx-serialization'
repositories {
mavenLocal()
jcenter()
mavenCentral()
maven { url "https://kotlin.bintray.com/kotlinx" }
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
api "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version"
api "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$kotlin_serialisation_runtime_version"
api "joda-time:joda-time:$joda_time_version"
}
compileKotlin {
kotlinOptions {
freeCompilerArgs = [ disableImplicitReflectionSerializerAnnotation ]
}
}

1
Core/settings.gradle Normal file

@ -0,0 +1 @@
rootProject.name = 'postssystem.core'

@ -0,0 +1,4 @@
package com.insanusmokrassar.postssystem.core.api
interface PostsAPI : ReadPostsAPI,
WritePostsAPI

@ -0,0 +1,17 @@
package com.insanusmokrassar.postssystem.core.api
import com.insanusmokrassar.postssystem.core.post.Post
import com.insanusmokrassar.postssystem.core.post.PostId
import com.insanusmokrassar.postssystem.core.content.ContentId
import com.insanusmokrassar.postssystem.core.utils.pagination.*
import com.insanusmokrassar.postssystem.core.utils.pagination.Pagination
import com.insanusmokrassar.postssystem.core.utils.pagination.PaginationResult
import org.joda.time.DateTime
interface ReadPostsAPI {
suspend fun getPostById(id: PostId): Post?
suspend fun getPostsByContent(id: ContentId): List<Post>
suspend fun getPostsByDates(from: DateTime? = null, to: DateTime? = null): List<Post>
suspend fun getPostsByPagination(pagination: Pagination): PaginationResult<Post>
}

@ -0,0 +1,16 @@
package com.insanusmokrassar.postssystem.core.api
import com.insanusmokrassar.postssystem.core.post.*
import com.insanusmokrassar.postssystem.core.post.*
import kotlinx.coroutines.flow.Flow
interface WritePostsAPI {
val postCreatedFlow: Flow<Post>
val postDeletedFlow: Flow<Post>
val postUpdatedFlow: Flow<Post>
suspend fun createPost(content: PostContents): Post?
suspend fun deletePost(id: PostId): Boolean
suspend fun updatePostContent(postId: PostId, content: PostContents): Boolean
}

@ -0,0 +1,9 @@
package com.insanusmokrassar.postssystem.core.content
import org.joda.time.DateTime
typealias ContentId = String
interface Content {
val id: ContentId
}

@ -0,0 +1,5 @@
package com.insanusmokrassar.postssystem.core.content
interface TextContent : Content {
val text: String
}

@ -0,0 +1,13 @@
package com.insanusmokrassar.postssystem.core.post
import com.insanusmokrassar.postssystem.core.content.Content
typealias PostId = String
typealias PostContents = List<Content>
interface Post {
val id: PostId
val content: PostContents
val meta: PostMetaInfo
}

@ -0,0 +1,9 @@
package com.insanusmokrassar.postssystem.core.post
import org.joda.time.DateTime
interface PostMetaInfo {
val postId: PostId
val creationDate: DateTime
val modificationDate: DateTime
}

@ -0,0 +1,6 @@
package com.insanusmokrassar.postssystem.core.utils.pagination
interface Pagination {
val page: Int
val size: Int
}

@ -0,0 +1,9 @@
package com.insanusmokrassar.postssystem.core.utils.pagination
import kotlinx.serialization.Serializable
@Serializable
data class PaginationRequest(
override val page: Int,
override val size: Int
) : Pagination

@ -0,0 +1,14 @@
package com.insanusmokrassar.postssystem.core.utils.pagination
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
@Serializable
data class PaginationResult<T>(
override val page: Int,
val pagesNumber: Int,
val results: List<T>
) : Pagination {
@Transient
override val size: Int = results.size
}