repo增加count方法

修改before remove的监听器返回值类型
This commit is contained in:
2020-10-27 23:37:18 +08:00
parent d1c843cbae
commit ca13018c9f
10 changed files with 63 additions and 27 deletions

View File

@@ -27,7 +27,7 @@ interface IApplication {
logger?.debug(this, "$name business execute success") logger?.debug(this, "$name business execute success")
} catch (ex: Exception) { } catch (ex: Exception) {
msg.status = Status.Error msg.status = Status.Error
msg.message = if (error.isEmpty()) ex.message ?: "" else error msg.message = if (error.isEmpty()) ex.message ?: "" else "$error: ${ex.message}"
logger?.error(this, ex, "$error: ${ex.message}") logger?.error(this, ex, "$error: ${ex.message}")
} }
return msg return msg

View File

@@ -35,7 +35,7 @@ interface ICommandApp<TCommand : ICommand, TKey> : IApplication {
@DeleteMapping("/{id:.+}") @DeleteMapping("/{id:.+}")
fun remove(@PathVariable id: TKey): HttpMessage { fun remove(@PathVariable id: TKey): HttpMessage {
return this.safeExecute("删除${this.name}失败[id: $id]") { return this.safeExecute("删除${this.name}[id: $id]失败") {
if (this.service != null) if (this.service != null)
it.data = this.service!!.remove(id) it.data = this.service!!.remove(id)
else { else {

View File

@@ -2,8 +2,10 @@ package com.synebula.gaea.mongo.repository
import com.synebula.gaea.domain.model.IAggregateRoot import com.synebula.gaea.domain.model.IAggregateRoot
import com.synebula.gaea.domain.repository.IRepository import com.synebula.gaea.domain.repository.IRepository
import com.synebula.gaea.mongo.where
import com.synebula.gaea.mongo.whereId import com.synebula.gaea.mongo.whereId
import org.springframework.data.mongodb.core.MongoTemplate import org.springframework.data.mongodb.core.MongoTemplate
import org.springframework.data.mongodb.core.query.Query
/** /**
* 实现ITypedRepository的mongo仓储类 * 实现ITypedRepository的mongo仓储类
@@ -32,4 +34,10 @@ open class MongoRepository(private var repo: MongoTemplate) : IRepository {
override fun <TAggregateRoot : IAggregateRoot<TKey>, TKey> add(obj: TAggregateRoot, clazz: Class<TAggregateRoot>) { override fun <TAggregateRoot : IAggregateRoot<TKey>, TKey> add(obj: TAggregateRoot, clazz: Class<TAggregateRoot>) {
this.repo.save(obj) this.repo.save(obj)
} }
override fun <TAggregateRoot> count(params: Map<String, Any>?, clazz: Class<TAggregateRoot>): Int {
val query = Query()
return this.repo.count(query.where(params, clazz), clazz).toInt()
}
} }

View File

@@ -2,8 +2,10 @@ package com.synebula.gaea.mongo.repository
import com.synebula.gaea.domain.model.IAggregateRoot import com.synebula.gaea.domain.model.IAggregateRoot
import com.synebula.gaea.domain.repository.ISpecificRepository import com.synebula.gaea.domain.repository.ISpecificRepository
import com.synebula.gaea.mongo.where
import com.synebula.gaea.mongo.whereId import com.synebula.gaea.mongo.whereId
import org.springframework.data.mongodb.core.MongoTemplate import org.springframework.data.mongodb.core.MongoTemplate
import org.springframework.data.mongodb.core.query.Query
/** /**
* 实现IAggregateRoot的mongo仓储类 * 实现IAggregateRoot的mongo仓储类
@@ -48,4 +50,10 @@ class MongoSpecificRepository<TAggregateRoot : IAggregateRoot<String>>(private v
): TAggregateRoot { ): TAggregateRoot {
return this.repo.findOne(whereId(id.toString()), clazz) as TAggregateRoot return this.repo.findOne(whereId(id.toString()), clazz) as TAggregateRoot
} }
override fun <TAggregateRoot> count(params: Map<String, Any>?): Int {
val query = Query()
return this.repo.count(query.where(params, this.clazz!!), this.clazz!!).toInt()
}
} }

View File

@@ -4,15 +4,15 @@ object Status {
/** /**
* 成功 * 成功
*/ */
val Success = 200 const val Success = 200
/** /**
* 失败 * 失败
*/ */
val Failure = 400 const val Failure = 400
/** /**
* 错误 * 错误
*/ */
val Error = 500 const val Error = 500
} }

View File

@@ -39,4 +39,13 @@ interface IRepository {
* @return 聚合根 * @return 聚合根
*/ */
fun <TAggregateRoot : IAggregateRoot<TKey>, TKey> get(id: TKey, clazz: Class<TAggregateRoot>): TAggregateRoot fun <TAggregateRoot : IAggregateRoot<TKey>, TKey> get(id: TKey, clazz: Class<TAggregateRoot>): TAggregateRoot
/**
* 根据条件查询符合条件记录的数量
*
* @param params 查询条件。
* @return int
*/
fun <TAggregateRoot> count(params: Map<String, Any>?, clazz: Class<TAggregateRoot>): Int
} }

View File

@@ -58,4 +58,13 @@ interface ISpecificRepository<TAggregateRoot : IAggregateRoot<TKey>, TKey> {
*/ */
fun <T : IAggregateRoot<TKey>, TKey> get(id: TKey, clazz: Class<T>): T fun <T : IAggregateRoot<TKey>, TKey> get(id: TKey, clazz: Class<T>): T
/**
* 根据条件查询符合条件记录的数量
*
* @param params 查询条件。
* @return int
*/
fun <TAggregateRoot> count(params: Map<String, Any>?): Int
} }

View File

@@ -28,7 +28,7 @@ interface IService<TKey> {
* @param key 监听器标志。 * @param key 监听器标志。
* @param func 监听方法。 * @param func 监听方法。
*/ */
fun addBeforeRemoveListener(key: String, func: (id: TKey) -> Boolean) fun addBeforeRemoveListener(key: String, func: (id: TKey) -> Message<String>)
/** /**
* 移除一个删除对象前执行监听器。 * 移除一个删除对象前执行监听器。

View File

@@ -29,14 +29,14 @@ open class Service<TAggregateRoot : IAggregateRoot<TKey>, TKey>(
/** /**
* 删除对象前执行监听器。 * 删除对象前执行监听器。
*/ */
protected val beforeRemoveListeners = mutableMapOf<String, (id: TKey) -> Boolean>() protected val beforeRemoveListeners = mutableMapOf<String, (id: TKey) -> Message<String>>()
/** /**
* 添加一个删除对象前执行监听器。 * 添加一个删除对象前执行监听器。
* @param key 监听器标志。 * @param key 监听器标志。
* @param func 监听方法。 * @param func 监听方法。
*/ */
override fun addBeforeRemoveListener(key: String, func: (id: TKey) -> Boolean) { override fun addBeforeRemoveListener(key: String, func: (id: TKey) -> Message<String>) {
this.beforeRemoveListeners[key] = func this.beforeRemoveListeners[key] = func
} }
@@ -63,13 +63,14 @@ open class Service<TAggregateRoot : IAggregateRoot<TKey>, TKey>(
} }
override fun remove(id: TKey) { override fun remove(id: TKey) {
var exec = true
val functions = this.beforeRemoveListeners.values val functions = this.beforeRemoveListeners.values
var msg: Message<String>
for (func in functions) { for (func in functions) {
exec = func(id) msg = func(id)
if (!exec) break if (!msg.success) {
throw java.lang.RuntimeException(msg.data)
}
} }
if (exec)
this.repository.remove(id, this.clazz) this.repository.remove(id, this.clazz)
} }

View File

@@ -33,14 +33,14 @@ open class SpecificService<TAggregateRoot : IAggregateRoot<TKey>, TKey>(
/** /**
* 删除对象前执行监听器。 * 删除对象前执行监听器。
*/ */
protected val beforeRemoveListeners = mutableMapOf<String, (id: TKey) -> Boolean>() protected val beforeRemoveListeners = mutableMapOf<String, (id: TKey) -> Message<String>>()
/** /**
* 添加一个删除对象前执行监听器。 * 添加一个删除对象前执行监听器。
* @param key 监听器标志。 * @param key 监听器标志。
* @param func 监听方法。 * @param func 监听方法。
*/ */
override fun addBeforeRemoveListener(key: String, func: (id: TKey) -> Boolean) { override fun addBeforeRemoveListener(key: String, func: (id: TKey) -> Message<String>) {
this.beforeRemoveListeners[key] = func this.beforeRemoveListeners[key] = func
} }
@@ -67,13 +67,14 @@ open class SpecificService<TAggregateRoot : IAggregateRoot<TKey>, TKey>(
} }
override fun remove(id: TKey) { override fun remove(id: TKey) {
var exec = true
val functions = this.beforeRemoveListeners.values val functions = this.beforeRemoveListeners.values
var msg: Message<String>
for (func in functions) { for (func in functions) {
exec = func(id) msg = func(id)
if (!exec) break if (!msg.success) {
throw java.lang.RuntimeException(msg.data)
}
} }
if (exec)
this.repository.remove(id) this.repository.remove(id)
} }