mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2025-09-18 14:59:24 +00:00
Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
c9822a491b | |||
23b2d60295 | |||
f4bc9eed39 | |||
e310f188b0 | |||
6c1571188c | |||
945d2fa284 | |||
020095f1ff | |||
b165a76e62 | |||
03c8830672 | |||
38448da89b | |||
2ade5aff91 | |||
29bf6e80ec | |||
027e927e1b |
25
CHANGELOG.md
25
CHANGELOG.md
@@ -1,5 +1,30 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 0.12.7
|
||||||
|
|
||||||
|
* `Repos`:
|
||||||
|
* `Cache`:
|
||||||
|
* Force `WriteCRUDCacheRepo` to subscribe on new and updated objects of parent repo
|
||||||
|
* `Pagination`:
|
||||||
|
* New function `changeResultsUnchecked(Pagination)`
|
||||||
|
|
||||||
|
## 0.12.6
|
||||||
|
|
||||||
|
* `MimeeTypes>`:
|
||||||
|
* Fixed absence of `image/*` in known mime types
|
||||||
|
|
||||||
|
## 0.12.5
|
||||||
|
|
||||||
|
* `Repos`:
|
||||||
|
* `Exposed`:
|
||||||
|
* Fixes in `paginate` extensions
|
||||||
|
|
||||||
|
## 0.12.4
|
||||||
|
|
||||||
|
* `Versions`:
|
||||||
|
* `Kotlin`: `1.7.0` -> `1.7.10`
|
||||||
|
* `Compose`: `1.2.0-alpha01-dev755` -> `1.2.0-alpha01-dev764`
|
||||||
|
|
||||||
## 0.12.3
|
## 0.12.3
|
||||||
|
|
||||||
* `Repos`:
|
* `Repos`:
|
||||||
|
@@ -14,5 +14,5 @@ crypto_js_version=4.1.1
|
|||||||
# Project data
|
# Project data
|
||||||
|
|
||||||
group=dev.inmo
|
group=dev.inmo
|
||||||
version=0.12.3
|
version=0.12.7
|
||||||
android_code_version=142
|
android_code_version=146
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
[versions]
|
[versions]
|
||||||
|
|
||||||
kt = "1.7.0"
|
kt = "1.7.10"
|
||||||
kt-serialization = "1.4.0"
|
kt-serialization = "1.4.0"
|
||||||
kt-coroutines = "1.6.4"
|
kt-coroutines = "1.6.4"
|
||||||
|
|
||||||
jb-compose = "1.2.0-alpha01-dev755"
|
jb-compose = "1.2.0-alpha01-dev764"
|
||||||
jb-exposed = "0.39.2"
|
jb-exposed = "0.39.2"
|
||||||
jb-dokka = "1.7.0"
|
jb-dokka = "1.7.10"
|
||||||
|
|
||||||
klock = "3.0.0"
|
klock = "3.0.0"
|
||||||
uuid = "0.5.0"
|
uuid = "0.5.0"
|
||||||
|
@@ -2017,6 +2017,7 @@ internal val knownMimeTypes: Set<MimeType> = setOf(
|
|||||||
KnownMimeTypes.Chemical.XCml,
|
KnownMimeTypes.Chemical.XCml,
|
||||||
KnownMimeTypes.Chemical.XCsml,
|
KnownMimeTypes.Chemical.XCsml,
|
||||||
KnownMimeTypes.Chemical.XXyz,
|
KnownMimeTypes.Chemical.XXyz,
|
||||||
|
KnownMimeTypes.Image.Any,
|
||||||
KnownMimeTypes.Image.Bmp,
|
KnownMimeTypes.Image.Bmp,
|
||||||
KnownMimeTypes.Image.Cgm,
|
KnownMimeTypes.Image.Cgm,
|
||||||
KnownMimeTypes.Image.G3fax,
|
KnownMimeTypes.Image.G3fax,
|
||||||
|
@@ -48,6 +48,14 @@ data class PaginationResult<T>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <T> emptyPaginationResult() = PaginationResult<T>(0, 0, emptyList(), 0L)
|
fun <T> emptyPaginationResult() = PaginationResult<T>(0, 0, emptyList(), 0L)
|
||||||
|
fun <T> emptyPaginationResult(
|
||||||
|
basePagination: Pagination
|
||||||
|
) = PaginationResult<T>(
|
||||||
|
basePagination.page,
|
||||||
|
basePagination.size,
|
||||||
|
emptyList(),
|
||||||
|
0L
|
||||||
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return New [PaginationResult] with [data] without checking of data sizes equality
|
* @return New [PaginationResult] with [data] without checking of data sizes equality
|
||||||
|
@@ -4,11 +4,7 @@ import org.jetbrains.exposed.sql.*
|
|||||||
|
|
||||||
fun Query.paginate(with: Pagination, orderBy: Pair<Expression<*>, SortOrder>? = null) = limit(
|
fun Query.paginate(with: Pagination, orderBy: Pair<Expression<*>, SortOrder>? = null) = limit(
|
||||||
with.size,
|
with.size,
|
||||||
(if (orderBy ?.second == SortOrder.DESC) {
|
with.firstIndex.toLong()
|
||||||
with.lastIndex
|
|
||||||
} else {
|
|
||||||
with.firstIndex
|
|
||||||
}).toLong()
|
|
||||||
).let {
|
).let {
|
||||||
if (orderBy != null) {
|
if (orderBy != null) {
|
||||||
it.orderBy(
|
it.orderBy(
|
||||||
|
@@ -33,6 +33,14 @@ open class WriteCRUDCacheRepo<ObjectType, IdType, InputValueType>(
|
|||||||
override val updatedObjectsFlow: Flow<ObjectType> by parentRepo::updatedObjectsFlow
|
override val updatedObjectsFlow: Flow<ObjectType> by parentRepo::updatedObjectsFlow
|
||||||
override val deletedObjectsIdsFlow: Flow<IdType> by parentRepo::deletedObjectsIdsFlow
|
override val deletedObjectsIdsFlow: Flow<IdType> by parentRepo::deletedObjectsIdsFlow
|
||||||
|
|
||||||
|
val createdObjectsFlowJob = parentRepo.newObjectsFlow.onEach {
|
||||||
|
kvCache.set(idGetter(it), it)
|
||||||
|
}.launchIn(scope)
|
||||||
|
|
||||||
|
val updatedObjectsFlowJob = parentRepo.updatedObjectsFlow.onEach {
|
||||||
|
kvCache.set(idGetter(it), it)
|
||||||
|
}.launchIn(scope)
|
||||||
|
|
||||||
val deletedObjectsFlowJob = parentRepo.deletedObjectsIdsFlow.onEach {
|
val deletedObjectsFlowJob = parentRepo.deletedObjectsIdsFlow.onEach {
|
||||||
kvCache.unset(it)
|
kvCache.unset(it)
|
||||||
}.launchIn(scope)
|
}.launchIn(scope)
|
||||||
|
@@ -3,6 +3,7 @@ package dev.inmo.micro_utils.repos.exposed.keyvalue
|
|||||||
import dev.inmo.micro_utils.pagination.*
|
import dev.inmo.micro_utils.pagination.*
|
||||||
import dev.inmo.micro_utils.repos.ReadKeyValueRepo
|
import dev.inmo.micro_utils.repos.ReadKeyValueRepo
|
||||||
import dev.inmo.micro_utils.repos.exposed.*
|
import dev.inmo.micro_utils.repos.exposed.*
|
||||||
|
import dev.inmo.micro_utils.repos.exposed.utils.selectPaginated
|
||||||
import org.jetbrains.exposed.sql.*
|
import org.jetbrains.exposed.sql.*
|
||||||
import org.jetbrains.exposed.sql.transactions.transaction
|
import org.jetbrains.exposed.sql.transactions.transaction
|
||||||
|
|
||||||
@@ -29,24 +30,32 @@ open class ExposedReadKeyValueRepo<Key, Value>(
|
|||||||
override suspend fun count(): Long = transaction(database) { selectAll().count() }
|
override suspend fun count(): Long = transaction(database) { selectAll().count() }
|
||||||
|
|
||||||
override suspend fun keys(pagination: Pagination, reversed: Boolean): PaginationResult<Key> = transaction(database) {
|
override suspend fun keys(pagination: Pagination, reversed: Boolean): PaginationResult<Key> = transaction(database) {
|
||||||
selectAll().paginate(pagination, keyColumn to if (reversed) SortOrder.DESC else SortOrder.ASC).map {
|
selectAll().selectPaginated(
|
||||||
|
pagination,
|
||||||
|
keyColumn,
|
||||||
|
reversed
|
||||||
|
) {
|
||||||
it[keyColumn]
|
it[keyColumn]
|
||||||
}
|
}
|
||||||
}.createPaginationResult(pagination, count())
|
}
|
||||||
|
|
||||||
override suspend fun keys(v: Value, pagination: Pagination, reversed: Boolean): PaginationResult<Key> = transaction(database) {
|
override suspend fun keys(v: Value, pagination: Pagination, reversed: Boolean): PaginationResult<Key> = transaction(database) {
|
||||||
select { valueColumn.eq(v) }.let {
|
select { valueColumn.eq(v) }.selectPaginated(
|
||||||
it.count() to it.paginate(pagination, keyColumn to if (reversed) SortOrder.DESC else SortOrder.ASC).map {
|
pagination,
|
||||||
|
keyColumn,
|
||||||
|
reversed
|
||||||
|
) {
|
||||||
it[keyColumn]
|
it[keyColumn]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.let { (count, list) ->
|
|
||||||
list.createPaginationResult(pagination, count)
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun values(pagination: Pagination, reversed: Boolean): PaginationResult<Value> = transaction(database) {
|
override suspend fun values(pagination: Pagination, reversed: Boolean): PaginationResult<Value> = transaction(database) {
|
||||||
selectAll().paginate(pagination, keyColumn to if (reversed) SortOrder.DESC else SortOrder.ASC).map {
|
selectAll().selectPaginated(
|
||||||
|
pagination,
|
||||||
|
keyColumn,
|
||||||
|
reversed
|
||||||
|
) {
|
||||||
it[valueColumn]
|
it[valueColumn]
|
||||||
}
|
}
|
||||||
}.createPaginationResult(pagination, count())
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user