From 48a24b99e111b938141186dbb9024f1b1214d52f Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 29 Jun 2024 20:00:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 11 ++- .../com/synebula/gaea/app/cache/Cache.kt | 2 +- .../{Application.kt => DomainApplication.kt} | 4 +- ...pleApplication.kt => RecordApplication.kt} | 9 +- .../app/controller/cmd/ISimpleCommandApp.kt | 7 +- .../app/controller/cmd/SimpleCommandApp.kt | 4 +- .../gaea/app/controller/query/IQueryApp.kt | 4 +- .../gaea/app/controller/query/QueryApp.kt | 2 +- .../java/com/synebula/gaea/jpa/JpaQuery.kt | 8 +- .../main/java/com/synebula/gaea/jpa/Jpas.kt | 4 +- ...itoryFactory.kt => JpaDbContextFactory.kt} | 4 +- ...epositoryProxy.kt => JpaDbContextProxy.kt} | 2 +- ...yProxyScan.kt => JpaDbContextProxyScan.kt} | 4 +- ...oryRegister.kt => JpaDbContextRegister.kt} | 11 ++- .../gaea/jpa/proxy/method/JpaMethodProxy.kt | 2 +- .../method/resolver/PageMethodResolver.kt | 6 +- .../com/synebula/gaea/mongodb/Mongodbs.kt | 6 +- ...oryFactory.kt => MongoDbContextFactory.kt} | 4 +- .../mongodb/autoconfig/MongoDbContextProxy.kt | 69 +++++++++++++++ ...yRegister.kt => MongoDbContextRegister.kt} | 13 +-- ...sitoryScan.kt => MongoDbRepositoryScan.kt} | 4 +- .../autoconfig/MongodbRepositoryProxy.kt | 55 ------------ .../gaea/mongodb/db/context/MongodbContext.kt | 50 +++++++++++ .../mongodb/{ => db}/query/MongodbQuery.kt | 16 ++-- .../gaea/mongodb/query/MongodbQueryFactory.kt | 23 ----- .../mongodb/query/MongodbUniversalQuery.kt | 88 ------------------- .../repository/MongodbUniversalRepository.kt | 61 ------------- .../synebula/gaea/data/message/HttpMessage.kt | 1 - .../gaea/{domain/model => db}/IEntity.kt | 2 +- .../synebula/gaea/db/context/IDbContext.kt | 66 ++++++++++++++ .../repository => db}/context/IUnitOfWork.kt | 2 +- .../synebula/gaea/{ => db}/query/IQuery.kt | 2 +- .../synebula/gaea/{ => db}/query/Operator.kt | 2 +- .../com/synebula/gaea/{ => db}/query/Order.kt | 2 +- .../com/synebula/gaea/{ => db}/query/Page.kt | 2 +- .../synebula/gaea/{ => db}/query/Params.kt | 2 +- .../com/synebula/gaea/{ => db}/query/Table.kt | 2 +- .../com/synebula/gaea/{ => db}/query/Where.kt | 2 +- .../gaea/domain/event/AfterRemoveEvent.kt | 4 +- .../gaea/domain/event/BeforeRemoveEvent.kt | 3 +- .../gaea/domain/model/AggregateRoot.kt | 2 +- .../com/synebula/gaea/domain/model/Entity.kt | 2 + .../gaea/domain/model/IAggregateRoot.kt | 4 +- .../com/synebula/gaea/domain/model/IValue.kt | 7 -- .../domain/repository/IUniversalRepository.kt | 65 -------------- .../domain/repository/context/IContext.kt | 30 ------- .../gaea/domain/service/SimpleService.kt | 67 -------------- .../com/synebula/gaea/query/IQueryFactory.kt | 18 ---- .../synebula/gaea/query/IUniversalQuery.kt | 49 ----------- .../com/synebula/gaea/record/model/IRecord.kt | 5 ++ .../{domain/record => record/model}/Record.kt | 2 +- .../service/IService.kt} | 22 ++--- .../synebula/gaea/record/service/Service.kt | 65 ++++++++++++++ 53 files changed, 353 insertions(+), 550 deletions(-) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/{Application.kt => DomainApplication.kt} (89%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/{SimpleApplication.kt => RecordApplication.kt} (79%) rename src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/{JpaRepositoryFactory.kt => JpaDbContextFactory.kt} (88%) rename src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/{JpaRepositoryProxy.kt => JpaDbContextProxy.kt} (99%) rename src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/{JpaRepositoryProxyScan.kt => JpaDbContextProxyScan.kt} (65%) rename src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/{JpaRepositoryRegister.kt => JpaDbContextRegister.kt} (95%) rename src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/{MongodbRepositoryFactory.kt => MongoDbContextFactory.kt} (76%) create mode 100644 src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongoDbContextProxy.kt rename src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/{MongodbRepositoryRegister.kt => MongoDbContextRegister.kt} (85%) rename src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/{MongodbRepositoryScan.kt => MongoDbRepositoryScan.kt} (73%) delete mode 100644 src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongodbRepositoryProxy.kt create mode 100644 src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/db/context/MongodbContext.kt rename src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/{ => db}/query/MongodbQuery.kt (91%) delete mode 100644 src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/query/MongodbQueryFactory.kt delete mode 100644 src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/query/MongodbUniversalQuery.kt delete mode 100644 src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/repository/MongodbUniversalRepository.kt rename src/gaea/src/main/kotlin/com/synebula/gaea/{domain/model => db}/IEntity.kt (83%) create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/db/context/IDbContext.kt rename src/gaea/src/main/kotlin/com/synebula/gaea/{domain/repository => db}/context/IUnitOfWork.kt (90%) rename src/gaea/src/main/kotlin/com/synebula/gaea/{ => db}/query/IQuery.kt (97%) rename src/gaea/src/main/kotlin/com/synebula/gaea/{ => db}/query/Operator.kt (93%) rename src/gaea/src/main/kotlin/com/synebula/gaea/{ => db}/query/Order.kt (84%) rename src/gaea/src/main/kotlin/com/synebula/gaea/{ => db}/query/Page.kt (96%) rename src/gaea/src/main/kotlin/com/synebula/gaea/{ => db}/query/Params.kt (98%) rename src/gaea/src/main/kotlin/com/synebula/gaea/{ => db}/query/Table.kt (56%) rename src/gaea/src/main/kotlin/com/synebula/gaea/{ => db}/query/Where.kt (92%) delete mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/IValue.kt delete mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/IUniversalRepository.kt delete mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/context/IContext.kt delete mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/SimpleService.kt delete mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/query/IQueryFactory.kt delete mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/query/IUniversalQuery.kt create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/record/model/IRecord.kt rename src/gaea/src/main/kotlin/com/synebula/gaea/{domain/record => record/model}/Record.kt (90%) rename src/gaea/src/main/kotlin/com/synebula/gaea/{domain/service/ISimpleService.kt => record/service/IService.kt} (53%) create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/record/service/Service.kt diff --git a/build.gradle b/build.gradle index a70a9ee..15bd269 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + buildscript { ext { jvm_version = '21' @@ -7,6 +9,7 @@ buildscript { repositories { mavenLocal() + maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } maven { url 'https://maven.aliyun.com/repository/central' } maven { url 'https://maven.aliyun.com/repository/public' } mavenCentral() @@ -52,10 +55,14 @@ subprojects { sourceCompatibility = "$jvm_version" targetCompatibility = "$jvm_version" compileKotlin { - kotlinOptions.jvmTarget = "$jvm_version" + compilerOptions { + jvmTarget = JvmTarget.valueOf("JVM_$jvm_version") + } } compileTestKotlin { - kotlinOptions.jvmTarget = "$jvm_version" + compilerOptions { + jvmTarget = JvmTarget.valueOf("JVM_$jvm_version") + } } publishing { diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cache/Cache.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cache/Cache.kt index 8766fc2..d60bff2 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cache/Cache.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cache/Cache.kt @@ -24,7 +24,7 @@ open class Cache(expire: Int) : ICache { } override fun add(key: K, value: V) { - this.guavaCache.put(key, value) + this.guavaCache.put(key!!, value!!) } /** diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/Application.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/DomainApplication.kt similarity index 89% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/Application.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/DomainApplication.kt index 9dabd27..cfe50fe 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/Application.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/DomainApplication.kt @@ -3,10 +3,10 @@ package com.synebula.gaea.app.controller import com.synebula.gaea.app.controller.cmd.ICommandApp import com.synebula.gaea.app.controller.query.IQueryApp import com.synebula.gaea.data.message.HttpMessageFactory +import com.synebula.gaea.db.query.IQuery import com.synebula.gaea.domain.service.ICommand import com.synebula.gaea.domain.service.IService import com.synebula.gaea.log.ILogger -import com.synebula.gaea.query.IQuery import org.springframework.beans.factory.annotation.Autowired /** @@ -17,7 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired * @param query 业务查询服务 * @param logger 日志组件 */ -open class Application( +open class DomainApplication( override var name: String, override var service: IService, override var query: IQuery, diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/SimpleApplication.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/RecordApplication.kt similarity index 79% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/SimpleApplication.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/RecordApplication.kt index ebc64ee..2d5de7a 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/SimpleApplication.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/RecordApplication.kt @@ -3,10 +3,10 @@ package com.synebula.gaea.app.controller import com.synebula.gaea.app.controller.cmd.ISimpleCommandApp import com.synebula.gaea.app.controller.query.IQueryApp import com.synebula.gaea.data.message.HttpMessageFactory +import com.synebula.gaea.db.query.IQuery import com.synebula.gaea.domain.model.IAggregateRoot -import com.synebula.gaea.domain.service.ISimpleService import com.synebula.gaea.log.ILogger -import com.synebula.gaea.query.IQuery +import com.synebula.gaea.record.service.IService import org.springframework.beans.factory.annotation.Autowired /** @@ -17,14 +17,13 @@ import org.springframework.beans.factory.annotation.Autowired * @param query 业务查询服务 * @param logger 日志组件 */ -open class SimpleApplication, ID>( +open class RecordApplication, ID>( override var name: String, - override var service: ISimpleService, + override var service: IService, override var query: IQuery, override var logger: ILogger, ) : ISimpleCommandApp, IQueryApp { - @Autowired override lateinit var httpMessageFactory: HttpMessageFactory } \ No newline at end of file diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/ISimpleCommandApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/ISimpleCommandApp.kt index e1ac1ba..44ac106 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/ISimpleCommandApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/ISimpleCommandApp.kt @@ -4,7 +4,7 @@ import com.synebula.gaea.app.controller.IApplication import com.synebula.gaea.data.message.HttpMessage import com.synebula.gaea.data.message.Status import com.synebula.gaea.domain.model.IAggregateRoot -import com.synebula.gaea.domain.service.ISimpleService +import com.synebula.gaea.record.service.IService import com.synebula.gaea.spring.aop.annotation.Method import org.springframework.web.bind.annotation.* @@ -16,12 +16,13 @@ import org.springframework.web.bind.annotation.* * @since 2020-05-15 */ interface ISimpleCommandApp, ID> : IApplication { - var service: ISimpleService + var service: IService @PostMapping @Method("添加") fun add(@RequestBody entity: TRoot): HttpMessage { - return this.httpMessageFactory.create(service.add(entity)) + val id = service.add(entity) + return this.httpMessageFactory.create(id!!) } @PutMapping("/{id:.+}") diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/SimpleCommandApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/SimpleCommandApp.kt index 91c8121..2f6fcf6 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/SimpleCommandApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/SimpleCommandApp.kt @@ -2,7 +2,7 @@ package com.synebula.gaea.app.controller.cmd import com.synebula.gaea.data.message.HttpMessageFactory import com.synebula.gaea.domain.model.IAggregateRoot -import com.synebula.gaea.domain.service.ISimpleService +import com.synebula.gaea.record.service.IService import com.synebula.gaea.log.ILogger import org.springframework.beans.factory.annotation.Autowired @@ -15,7 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired */ open class SimpleCommandApp, ID>( override var name: String, - override var service: ISimpleService, + override var service: IService, override var logger: ILogger, ) : ISimpleCommandApp { @Autowired diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/IQueryApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/IQueryApp.kt index d0f4cea..d625cda 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/IQueryApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/IQueryApp.kt @@ -2,8 +2,8 @@ package com.synebula.gaea.app.controller.query import com.synebula.gaea.app.controller.IApplication import com.synebula.gaea.data.message.HttpMessage -import com.synebula.gaea.query.IQuery -import com.synebula.gaea.query.Params +import com.synebula.gaea.db.query.IQuery +import com.synebula.gaea.db.query.Params import com.synebula.gaea.spring.aop.annotation.Method import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PathVariable diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/QueryApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/QueryApp.kt index a0f6a88..9e6ad7a 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/QueryApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/QueryApp.kt @@ -1,8 +1,8 @@ package com.synebula.gaea.app.controller.query import com.synebula.gaea.data.message.HttpMessageFactory +import com.synebula.gaea.db.query.IQuery import com.synebula.gaea.log.ILogger -import com.synebula.gaea.query.IQuery import org.springframework.beans.factory.annotation.Autowired /** diff --git a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/JpaQuery.kt b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/JpaQuery.kt index b88bb91..42944ae 100644 --- a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/JpaQuery.kt +++ b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/JpaQuery.kt @@ -1,8 +1,8 @@ package com.synebula.gaea.jpa -import com.synebula.gaea.query.IQuery -import com.synebula.gaea.query.Page -import com.synebula.gaea.query.Params +import com.synebula.gaea.db.query.IQuery +import com.synebula.gaea.db.query.Page +import com.synebula.gaea.db.query.Params import jakarta.persistence.EntityManager import org.springframework.data.jpa.repository.support.SimpleJpaRepository @@ -14,7 +14,7 @@ class JpaQuery(override var clazz: Class, entityManager: Entit } override operator fun get(id: ID): TView? { - val view = this.repo.findById(id) + val view = this.repo.findById(id!!) return if (view.isPresent) view.get() else null } diff --git a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/Jpas.kt b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/Jpas.kt index 1346eb2..678bdde 100644 --- a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/Jpas.kt +++ b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/Jpas.kt @@ -1,8 +1,8 @@ package com.synebula.gaea.jpa import com.synebula.gaea.data.date.DateTime -import com.synebula.gaea.query.Operator -import com.synebula.gaea.query.Where +import com.synebula.gaea.db.query.Operator +import com.synebula.gaea.db.query.Where import jakarta.persistence.criteria.* import org.springframework.data.jpa.domain.Specification import java.lang.reflect.Field diff --git a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaRepositoryFactory.kt b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaDbContextFactory.kt similarity index 88% rename from src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaRepositoryFactory.kt rename to src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaDbContextFactory.kt index a54bfb3..0367f95 100644 --- a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaRepositoryFactory.kt +++ b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaDbContextFactory.kt @@ -5,13 +5,13 @@ import org.springframework.beans.factory.FactoryBean import org.springframework.cglib.proxy.Enhancer import org.springframework.data.repository.Repository -class JpaRepositoryFactory( +class JpaDbContextFactory( private val beanFactory: BeanFactory, private val interfaceType: Class<*>, private val implBeanNames: List ) : FactoryBean { override fun getObject(): Any { - val handler: JpaRepositoryProxy<*, *, *> = JpaRepositoryProxy, Any, Any>( + val handler: JpaDbContextProxy<*, *, *> = JpaDbContextProxy, Any, Any>( beanFactory, interfaceType, implBeanNames ) diff --git a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaRepositoryProxy.kt b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaDbContextProxy.kt similarity index 99% rename from src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaRepositoryProxy.kt rename to src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaDbContextProxy.kt index 288ba38..ff9b96a 100644 --- a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaRepositoryProxy.kt +++ b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaDbContextProxy.kt @@ -26,7 +26,7 @@ import java.lang.reflect.Method import java.lang.reflect.ParameterizedType import java.lang.reflect.Type -class JpaRepositoryProxy?, S, ID>( +class JpaDbContextProxy?, S, ID>( beanFactory: BeanFactory, interfaceType: Class<*>, implementBeanNames: List? diff --git a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaRepositoryProxyScan.kt b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaDbContextProxyScan.kt similarity index 65% rename from src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaRepositoryProxyScan.kt rename to src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaDbContextProxyScan.kt index a191086..5d2c51b 100644 --- a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaRepositoryProxyScan.kt +++ b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaDbContextProxyScan.kt @@ -8,5 +8,5 @@ import kotlin.reflect.KClass @Retention(AnnotationRetention.RUNTIME) @MustBeDocumented @Inherited -@Import(JpaRepositoryRegister::class) -annotation class JpaRepositoryProxyScan(val basePackages: Array = [], val scanInterfaces: Array> = []) \ No newline at end of file +@Import(JpaDbContextRegister::class) +annotation class JpaDbContextProxyScan(val basePackages: Array = [], val scanInterfaces: Array> = []) \ No newline at end of file diff --git a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaRepositoryRegister.kt b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaDbContextRegister.kt similarity index 95% rename from src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaRepositoryRegister.kt rename to src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaDbContextRegister.kt index e96812f..0eafb09 100644 --- a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaRepositoryRegister.kt +++ b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/JpaDbContextRegister.kt @@ -24,17 +24,20 @@ import org.springframework.util.ClassUtils import java.util.* import java.util.stream.Collectors -class JpaRepositoryRegister : ImportBeanDefinitionRegistrar, ResourceLoaderAware, BeanClassLoaderAware, +class JpaDbContextRegister : ImportBeanDefinitionRegistrar, ResourceLoaderAware, BeanClassLoaderAware, EnvironmentAware, BeanFactoryAware { + private lateinit var environment: Environment private lateinit var resourceLoader: ResourceLoader private var classLoader: ClassLoader? = null private var beanFactory: BeanFactory? = null + + override fun registerBeanDefinitions(metadata: AnnotationMetadata, registry: BeanDefinitionRegistry) { val attributes = AnnotationAttributes( metadata.getAnnotationAttributes( - JpaRepositoryProxyScan::class.java.name + JpaDbContextProxyScan::class.java.name ) ?: mapOf() ) val basePackages = attributes.getStringArray("basePackages") @@ -55,7 +58,7 @@ class JpaRepositoryRegister : ImportBeanDefinitionRegistrar, ResourceLoaderAware val implClazzDefinitions = scan(basePackages, arrayOf(beanClazzTypeFilter)) for (definition in implClazzDefinitions) { definition.isAutowireCandidate = false - registry.registerBeanDefinition(Objects.requireNonNull(definition.beanClassName), definition) + registry.registerBeanDefinition(Objects.requireNonNull(definition.beanClassName!!), definition) } // 构建bean定义 // 1 bean参数 @@ -66,7 +69,7 @@ class JpaRepositoryRegister : ImportBeanDefinitionRegistrar, ResourceLoaderAware builder.addConstructorArgValue(beanClazz) builder.addConstructorArgValue(implBeanNames) val definition = builder.rawBeanDefinition as GenericBeanDefinition - definition.beanClass = JpaRepositoryFactory::class.java + definition.beanClass = JpaDbContextFactory::class.java definition.autowireMode = GenericBeanDefinition.AUTOWIRE_BY_TYPE registry.registerBeanDefinition(beanClazz.name, definition) } diff --git a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/method/JpaMethodProxy.kt b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/method/JpaMethodProxy.kt index 107a1f9..cd46864 100644 --- a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/method/JpaMethodProxy.kt +++ b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/method/JpaMethodProxy.kt @@ -5,7 +5,7 @@ import com.synebula.gaea.jpa.proxy.method.resolver.AbstractMethodResolver import com.synebula.gaea.jpa.proxy.method.resolver.DefaultMethodResolver import com.synebula.gaea.jpa.proxy.method.resolver.FindMethodResolver import com.synebula.gaea.jpa.proxy.method.resolver.PageMethodResolver -import com.synebula.gaea.query.Params +import com.synebula.gaea.db.query.Params import org.springframework.data.domain.Pageable import org.springframework.data.jpa.domain.Specification import java.lang.reflect.InvocationTargetException diff --git a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/method/resolver/PageMethodResolver.kt b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/method/resolver/PageMethodResolver.kt index c02aedb..36c68d3 100644 --- a/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/method/resolver/PageMethodResolver.kt +++ b/src/gaea.jpa/src/main/java/com/synebula/gaea/jpa/proxy/method/resolver/PageMethodResolver.kt @@ -1,8 +1,8 @@ package com.synebula.gaea.jpa.proxy.method.resolver import com.synebula.gaea.jpa.toSpecification -import com.synebula.gaea.query.Order -import com.synebula.gaea.query.Params +import com.synebula.gaea.db.query.Order +import com.synebula.gaea.db.query.Params import jakarta.persistence.EmbeddedId import jakarta.persistence.Id import org.springframework.data.domain.Page @@ -10,7 +10,7 @@ import org.springframework.data.domain.PageRequest import org.springframework.data.domain.Pageable import org.springframework.data.domain.Sort import java.util.* -import com.synebula.gaea.query.Page as QueryPage +import com.synebula.gaea.db.query.Page as QueryPage /** * 分页方法参数映射 diff --git a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/Mongodbs.kt b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/Mongodbs.kt index 5f92c72..a751038 100644 --- a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/Mongodbs.kt +++ b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/Mongodbs.kt @@ -1,9 +1,9 @@ package com.synebula.gaea.mongodb import com.synebula.gaea.data.date.DateTime -import com.synebula.gaea.query.Operator -import com.synebula.gaea.query.Order -import com.synebula.gaea.query.Where +import com.synebula.gaea.db.query.Operator +import com.synebula.gaea.db.query.Order +import com.synebula.gaea.db.query.Where import org.springframework.data.domain.Sort import org.springframework.data.mongodb.core.query.Criteria import org.springframework.data.mongodb.core.query.Query diff --git a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongodbRepositoryFactory.kt b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongoDbContextFactory.kt similarity index 76% rename from src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongodbRepositoryFactory.kt rename to src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongoDbContextFactory.kt index 3673744..e6cabe6 100644 --- a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongodbRepositoryFactory.kt +++ b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongoDbContextFactory.kt @@ -4,11 +4,11 @@ import com.synebula.gaea.spring.autoconfig.Factory import com.synebula.gaea.spring.autoconfig.Proxy import org.springframework.beans.factory.BeanFactory -class MongodbRepositoryFactory( +class MongoDbContextFactory( supertype: Class<*>, var beanFactory: BeanFactory, ) : Factory(supertype) { override fun createProxy(): Proxy { - return MongodbRepositoryProxy(supertype, this.beanFactory) + return MongoDbContextProxy(supertype, this.beanFactory) } } \ No newline at end of file diff --git a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongoDbContextProxy.kt b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongoDbContextProxy.kt new file mode 100644 index 0000000..b68b605 --- /dev/null +++ b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongoDbContextProxy.kt @@ -0,0 +1,69 @@ +package com.synebula.gaea.mongodb.autoconfig + +import com.synebula.gaea.db.context.IDbContext +import com.synebula.gaea.domain.repository.IRepository +import com.synebula.gaea.mongodb.db.query.MongodbQuery +import com.synebula.gaea.mongodb.repository.MongodbRepository +import com.synebula.gaea.db.query.IQuery +import com.synebula.gaea.reflect.getGenericInterface +import com.synebula.gaea.spring.autoconfig.Proxy +import org.springframework.beans.factory.BeanFactory +import org.springframework.data.mongodb.core.MongoTemplate +import java.lang.reflect.Method + +class MongoDbContextProxy( + private var supertype: Class<*>, private var beanFactory: BeanFactory +) : Proxy() { + + /** + * 实际的执行类 + */ + private var context: Any? + + init { + if (this.supertype.interfaces.any { it == IDbContext::class.java }) { + this.context = beanFactory.getBean(IDbContext::class.java) + if (context == null) { + val constructor = IDbContext::class.java.getConstructor(Class::class.java, MongoTemplate::class.java) + this.context = constructor.newInstance(this.beanFactory.getBean(MongoTemplate::class.java)) + + } + } else { + // 判断接口类型 + val clazz: Class<*> // 代理服务类型 + val interfaceClazz: Class<*> // 代理服务接口 + + if (this.supertype.interfaces.any { it == IQuery::class.java }) { + clazz = MongodbQuery::class.java + interfaceClazz = IQuery::class.java + } else { + clazz = MongodbRepository::class.java + interfaceClazz = IRepository::class.java + } + val constructor = clazz.getConstructor(Class::class.java, MongoTemplate::class.java) + this.context = constructor.newInstance( + this.supertype.getGenericInterface(interfaceClazz)!!.actualTypeArguments[0], + this.beanFactory.getBean(MongoTemplate::class.java) + ) + } + + } + + /** + * 执行代理方法 + * + * @param proxy 代理对象 + * @param method 需要执行的方法 + * @param args 参数列表 + * @return 方法执行结果 + */ + override fun exec(proxy: Any, method: Method, args: Array): Any? { + try { + val proxyMethod: Method = this.context!!.javaClass.getMethod(method.name, *method.parameterTypes) + return proxyMethod.invoke(this.context, *args) + } catch (ex: NoSuchMethodException) { + throw NoSuchMethodException("method [${method.toGenericString()}] not implements in class [${this.context!!.javaClass}], you must implements interface [${this.supertype.name}] ") + } + } + +} \ No newline at end of file diff --git a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongodbRepositoryRegister.kt b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongoDbContextRegister.kt similarity index 85% rename from src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongodbRepositoryRegister.kt rename to src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongoDbContextRegister.kt index 5eca91c..7446d50 100644 --- a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongodbRepositoryRegister.kt +++ b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongoDbContextRegister.kt @@ -1,7 +1,8 @@ package com.synebula.gaea.mongodb.autoconfig +import com.synebula.gaea.db.context.IDbContext +import com.synebula.gaea.db.query.IQuery import com.synebula.gaea.domain.repository.IRepository -import com.synebula.gaea.query.IQuery import com.synebula.gaea.spring.autoconfig.Register import org.springframework.beans.factory.config.BeanDefinition import org.springframework.beans.factory.support.BeanDefinitionBuilder @@ -9,20 +10,20 @@ import org.springframework.beans.factory.support.GenericBeanDefinition import org.springframework.core.annotation.AnnotationAttributes import org.springframework.core.type.AnnotationMetadata -class MongodbRepositoryRegister : Register() { +class MongoDbContextRegister : Register() { override fun scan(metadata: AnnotationMetadata): Map { val result = mutableMapOf() // 获取注解参数信息:basePackages val attributes = AnnotationAttributes( metadata.getAnnotationAttributes( - MongodbRepositoryScan::class.java.name + MongoDbRepositoryScan::class.java.name ) ?: mapOf() ) val basePackages = attributes.getStringArray("basePackages") val beanDefinitions = this.doScan( basePackages, - arrayOf(this.interfaceFilter(arrayOf(IRepository::class.java, IQuery::class.java))) + arrayOf(this.interfaceFilter(arrayOf(IDbContext::class.java, IQuery::class.java, IRepository::class.java))) ) beanDefinitions.forEach { beanDefinition -> // 获取实际的bean类型 @@ -44,7 +45,7 @@ class MongodbRepositoryRegister : Register() { builder.addConstructorArgValue(beanClazz) builder.addConstructorArgValue(this._beanFactory) val definition = builder.rawBeanDefinition as GenericBeanDefinition - definition.beanClass = MongodbRepositoryFactory::class.java + definition.beanClass = MongoDbContextFactory::class.java definition.autowireMode = GenericBeanDefinition.AUTOWIRE_BY_TYPE result[beanClazz.name] = definition } @@ -59,7 +60,7 @@ class MongodbRepositoryRegister : Register() { builder.addConstructorArgValue(this._beanFactory) builder.addConstructorArgValue(emptyArray()) val definition = builder.rawBeanDefinition as GenericBeanDefinition - definition.beanClass = MongodbRepositoryFactory::class.java + definition.beanClass = MongoDbContextFactory::class.java definition.autowireMode = GenericBeanDefinition.AUTOWIRE_BY_TYPE result[IRepository::class.java.name] = definition } diff --git a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongodbRepositoryScan.kt b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongoDbRepositoryScan.kt similarity index 73% rename from src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongodbRepositoryScan.kt rename to src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongoDbRepositoryScan.kt index 08ba32c..2e98eb3 100644 --- a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongodbRepositoryScan.kt +++ b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongoDbRepositoryScan.kt @@ -8,5 +8,5 @@ import java.lang.annotation.Inherited @Retention(AnnotationRetention.RUNTIME) @MustBeDocumented @Inherited -@Import(MongodbRepositoryRegister::class) -annotation class MongodbRepositoryScan(val basePackages: Array = []) \ No newline at end of file +@Import(MongoDbContextRegister::class) +annotation class MongoDbRepositoryScan(val basePackages: Array = []) \ No newline at end of file diff --git a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongodbRepositoryProxy.kt b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongodbRepositoryProxy.kt deleted file mode 100644 index e4b611e..0000000 --- a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/autoconfig/MongodbRepositoryProxy.kt +++ /dev/null @@ -1,55 +0,0 @@ -package com.synebula.gaea.mongodb.autoconfig - -import com.synebula.gaea.domain.repository.IRepository -import com.synebula.gaea.mongodb.query.MongodbQuery -import com.synebula.gaea.mongodb.repository.MongodbRepository -import com.synebula.gaea.query.IQuery -import com.synebula.gaea.reflect.getGenericInterface -import com.synebula.gaea.spring.autoconfig.Proxy -import org.springframework.beans.factory.BeanFactory -import org.springframework.data.mongodb.core.MongoTemplate -import java.lang.reflect.Method - -class MongodbRepositoryProxy( - private var supertype: Class<*>, private var beanFactory: BeanFactory -) : Proxy() { - - private var mongodbRepo: Any - - init { - // 判断接口类型 - val clazz: Class<*> // 代理服务类型 - val interfaceClazz: Class<*> // 代理服务接口 - if (this.supertype.interfaces.any { it == IRepository::class.java }) { - clazz = MongodbRepository::class.java - interfaceClazz = IRepository::class.java - } else { - clazz = MongodbQuery::class.java - interfaceClazz = IQuery::class.java - } - - val constructor = clazz.getConstructor(Class::class.java, MongoTemplate::class.java) - this.mongodbRepo = constructor.newInstance( - this.supertype.getGenericInterface(interfaceClazz)!!.actualTypeArguments[0], - this.beanFactory.getBean(MongoTemplate::class.java) - ) - } - - /** - * 执行代理方法 - * - * @param proxy 代理对象 - * @param method 需要执行的方法 - * @param args 参数列表 - * @return 方法执行结果 - */ - override fun exec(proxy: Any, method: Method, args: Array): Any? { - try { - val proxyMethod: Method = this.mongodbRepo.javaClass.getMethod(method.name, *method.parameterTypes) - return proxyMethod.invoke(this.mongodbRepo, *args) - } catch (ex: NoSuchMethodException) { - throw NoSuchMethodException("method [${method.toGenericString()}] not implements in class [${this.mongodbRepo.javaClass}], you must implements interface [${this.supertype.name}] ") - } - } - -} \ No newline at end of file diff --git a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/db/context/MongodbContext.kt b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/db/context/MongodbContext.kt new file mode 100644 index 0000000..625e473 --- /dev/null +++ b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/db/context/MongodbContext.kt @@ -0,0 +1,50 @@ +package com.synebula.gaea.mongodb.db.context + +import com.synebula.gaea.db.IEntity +import com.synebula.gaea.db.context.IDbContext +import com.synebula.gaea.mongodb.where +import com.synebula.gaea.mongodb.whereId +import org.springframework.data.mongodb.core.MongoTemplate +import org.springframework.data.mongodb.core.query.Query + +class MongodbContext( + protected var template: MongoTemplate +) : IDbContext { + + override fun , ID> add(entity: TEntity, clazz: Class) { + this.template.save(entity) + } + + override fun , ID> add(entities: List, clazz: Class) { + this.template.insert(entities, clazz) + } + + override fun , ID> remove(id: ID, clazz: Class) { + this.template.remove(whereId(id), clazz) + } + + override fun , ID> get(id: ID, clazz: Class): TEntity? { + return this.template.findOne(whereId(id), clazz) + } + + override fun , ID> update(entity: TEntity, clazz: Class) { + this.template.save(entity) + } + + override fun , ID> update(entities: List, clazz: Class) { + this.template.save(entities) + } + + override fun , ID> count(params: Map?, clazz: Class): Int { + val query = Query() + return this.template.count(query.where(params, clazz), clazz).toInt() + } + + override val isCommitted=true + + override fun commit() { + } + + override fun rollback() { + } +} diff --git a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/query/MongodbQuery.kt b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/db/query/MongodbQuery.kt similarity index 91% rename from src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/query/MongodbQuery.kt rename to src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/db/query/MongodbQuery.kt index 9a4c57d..8276ed7 100644 --- a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/query/MongodbQuery.kt +++ b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/db/query/MongodbQuery.kt @@ -1,24 +1,20 @@ -package com.synebula.gaea.mongodb.query +package com.synebula.gaea.mongodb.db.query + import com.synebula.gaea.ext.firstCharLowerCase import com.synebula.gaea.mongodb.order import com.synebula.gaea.mongodb.select import com.synebula.gaea.mongodb.where import com.synebula.gaea.mongodb.whereId -import com.synebula.gaea.query.IQuery -import com.synebula.gaea.query.Page -import com.synebula.gaea.query.Params -import com.synebula.gaea.query.Table +import com.synebula.gaea.db.query.IQuery +import com.synebula.gaea.db.query.Page +import com.synebula.gaea.db.query.Params +import com.synebula.gaea.db.query.Table import com.synebula.gaea.reflect.fieldNames import org.springframework.data.mongodb.core.MongoTemplate import org.springframework.data.mongodb.core.query.Criteria import org.springframework.data.mongodb.core.query.Query -/** - * 实现IQuery的Mongodb查询类 - * @param template MongodbRepo对象 - */ - open class MongodbQuery(override var clazz: Class, var template: MongoTemplate) : IQuery { diff --git a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/query/MongodbQueryFactory.kt b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/query/MongodbQueryFactory.kt deleted file mode 100644 index ca4c351..0000000 --- a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/query/MongodbQueryFactory.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.synebula.gaea.mongodb.query - -import com.synebula.gaea.query.IQuery -import com.synebula.gaea.query.IQueryFactory -import org.springframework.data.mongodb.core.MongoTemplate - -class MongodbQueryFactory(var template: MongoTemplate) : IQueryFactory { - - /** - * 创建IQuery接口类型 - */ - override fun createRawQuery(clazz: Class<*>): IQuery<*, *> { - val constructor = MongodbQuery::class.java.getConstructor(Class::class.java, MongoTemplate::class.java) - return constructor.newInstance(clazz, this.template) - } - - /** - * 创建IQuery接口类型 - */ - override fun createQuery(clazz: Class): IQuery { - return MongodbQuery(clazz, template) - } -} \ No newline at end of file diff --git a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/query/MongodbUniversalQuery.kt b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/query/MongodbUniversalQuery.kt deleted file mode 100644 index 7f396b8..0000000 --- a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/query/MongodbUniversalQuery.kt +++ /dev/null @@ -1,88 +0,0 @@ -package com.synebula.gaea.mongodb.query - - -import com.synebula.gaea.ext.firstCharLowerCase -import com.synebula.gaea.mongodb.order -import com.synebula.gaea.mongodb.select -import com.synebula.gaea.mongodb.where -import com.synebula.gaea.mongodb.whereId -import com.synebula.gaea.query.IUniversalQuery -import com.synebula.gaea.query.Page -import com.synebula.gaea.query.Params -import com.synebula.gaea.query.Table -import com.synebula.gaea.reflect.fieldNames -import org.springframework.data.mongodb.core.MongoTemplate -import org.springframework.data.mongodb.core.query.Criteria -import org.springframework.data.mongodb.core.query.Query - -/** - * 实现IQuery的Mongodb查询类 - * @param template MongodbRepo对象 - */ -open class MongodbUniversalQuery(var template: MongoTemplate) : IUniversalQuery { - - /** - * 使用View解析是collection时是否校验存在,默认不校验 - */ - var validViewCollection = false - - override fun get(id: ID, clazz: Class): TView? { - return this.template.findOne(whereId(id), clazz, this.collection(clazz)) - } - - override fun list(params: Map?, clazz: Class): List { - val fields = this.fields(clazz) - val query = Query() - query.where(params, clazz) - query.select(fields) - return this.find(query, clazz) - } - - override fun count(params: Map?, clazz: Class): Int { - val query = Query() - return this.template.count(query.where(params, clazz), this.collection(clazz)).toInt() - } - - override fun paging(params: Params, clazz: Class): Page { - val query = Query() - val fields = this.fields(clazz) - val result = Page(params.page, params.size) - result.total = this.count(params.parameters, clazz) - //如果总数和索引相同,说明该页没有数据,直接跳到上一页 - if (result.total == result.index) { - params.page -= 1 - result.page -= 1 - } - query.select(fields) - query.where(params.parameters, clazz) - query.with(order(params.orders)) - query.skip(params.index).limit(params.size) - result.data = this.find(query, clazz) - return result - } - - override fun range(field: String, params: List, clazz: Class): List { - return this.find(Query.query(Criteria.where(field).`in`(params)), clazz) - } - - protected fun find(query: Query, clazz: Class): List { - return this.template.find(query, clazz, this.collection(clazz)) - } - - fun fields(clazz: Class): Array { - return clazz.fieldNames().toTypedArray() - } - - /** - * 获取collection - */ - fun collection(clazz: Class): String { - val table = clazz.getDeclaredAnnotation(Table::class.java) - return if (table != null) table.name - else { - val name = clazz.simpleName.removeSuffix("View").firstCharLowerCase() - if (!validViewCollection || this.template.collectionExists(name)) name - else throw RuntimeException("找不到名为[${clazz.name}]的集合") - } - } -} diff --git a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/repository/MongodbUniversalRepository.kt b/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/repository/MongodbUniversalRepository.kt deleted file mode 100644 index 624911f..0000000 --- a/src/gaea.mongodb/src/main/kotlin/com/synebula/gaea/mongodb/repository/MongodbUniversalRepository.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.synebula.gaea.mongodb.repository - -import com.synebula.gaea.domain.model.IAggregateRoot -import com.synebula.gaea.domain.repository.IUniversalRepository -import com.synebula.gaea.mongodb.where -import com.synebula.gaea.mongodb.whereId -import org.springframework.data.mongodb.core.MongoTemplate -import org.springframework.data.mongodb.core.query.Query - -/** - * 实现ITypedRepository的Mongodb仓储类 - * @param repo MongodbRepo对象 - */ -open class MongodbUniversalRepository(private var repo: MongoTemplate) : IUniversalRepository { - - override fun , ID> remove(id: ID, clazz: Class) { - this.repo.remove(whereId(id), clazz) - } - - override fun , ID> get( - id: ID, - clazz: Class, - ): TAggregateRoot? { - return this.repo.findOne(whereId(id), clazz) - } - - override fun , ID> update( - root: TAggregateRoot, - clazz: Class, - ) { - this.repo.save(root) - } - - /** - * 更新多个个对象。 - * - * @param roots 需要更新的对象。 - */ - override fun , ID> update( - roots: List, - clazz: Class - ) { - this.repo.save(roots) - } - - override fun , ID> add(root: TAggregateRoot, clazz: Class) { - this.repo.save(root) - } - - override fun , ID> add( - roots: List, - clazz: Class, - ) { - this.repo.insert(roots, clazz) - } - - override fun count(params: Map?, clazz: Class): Int { - val query = Query() - return this.repo.count(query.where(params, clazz), clazz).toInt() - } -} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/data/message/HttpMessage.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/message/HttpMessage.kt index 89160b0..b165d30 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/data/message/HttpMessage.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/message/HttpMessage.kt @@ -5,7 +5,6 @@ import com.synebula.gaea.data.serialization.json.IJsonSerializer class HttpMessage(private var serializer: IJsonSerializer) : DataMessage() { - constructor(data: Any, serializer: IJsonSerializer) : this(serializer) { this.data = data } diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/IEntity.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/db/IEntity.kt similarity index 83% rename from src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/IEntity.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/db/IEntity.kt index ea99e25..0e30b67 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/IEntity.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/db/IEntity.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.domain.model +package com.synebula.gaea.db /** * 继承本接口,说明对象为实体类型。 diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/db/context/IDbContext.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/db/context/IDbContext.kt new file mode 100644 index 0000000..513d05e --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/db/context/IDbContext.kt @@ -0,0 +1,66 @@ +package com.synebula.gaea.db.context + +import com.synebula.gaea.db.IEntity + +/** + * 继承自IUnitOfWork,表示实现了工作单元模式的上下文接口。 + * + * @author alex + */ +interface IDbContext : IUnitOfWork { + /** + * 插入单个对象。 + * + * @param entity 需要插入的对象。 + * @return 返回原对象,如果对象ID为自增,则补充自增ID。 + */ + fun , ID> add(entity: TEntity, clazz: Class) + + /** + * 插入多个个对象。 + * + * @param entities 需要插入的对象。 + */ + fun , ID> add(entities: List, clazz: Class) + + /** + * 更新对象。 + * + * @param entity 需要更新的对象。 + * @return + */ + fun , ID> update(entity: TEntity, clazz: Class) + + /** + * 更新多个个对象。 + * + * @param entities 需要更新的对象。 + */ + fun , ID> update(entities: List, clazz: Class) + + /** + * 通过id删除该条数据 + * + * @param id id + * @param clazz 操作数据的类型 + */ + fun , ID> remove(id: ID, clazz: Class) + + /** + * 根据ID获取对象。 + * + * @param id id + * @param clazz 操作数据的类型 + * @return 聚合根 + */ + fun , ID> get(id: ID, clazz: Class): TEntity? + + + /** + * 根据条件查询符合条件记录的数量 + * + * @param params 查询条件。 + * @return int + */ + fun , ID> count(params: Map?, clazz: Class): Int +} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/context/IUnitOfWork.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/db/context/IUnitOfWork.kt similarity index 90% rename from src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/context/IUnitOfWork.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/db/context/IUnitOfWork.kt index 4b018d6..6e18148 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/context/IUnitOfWork.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/db/context/IUnitOfWork.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.domain.repository.context +package com.synebula.gaea.db.context /** * 表示所有继承于该接口的类型都是Unit Of Work的一种实现。 diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/query/IQuery.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/IQuery.kt similarity index 97% rename from src/gaea/src/main/kotlin/com/synebula/gaea/query/IQuery.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/db/query/IQuery.kt index 5915695..5f62bbb 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/query/IQuery.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/IQuery.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.query +package com.synebula.gaea.db.query /** * 查询基接口, 其中方法都指定了查询的视图类型。 diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Operator.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Operator.kt similarity index 93% rename from src/gaea/src/main/kotlin/com/synebula/gaea/query/Operator.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Operator.kt index 501f18e..0564b3f 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Operator.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Operator.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.query +package com.synebula.gaea.db.query enum class Operator { /** diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Order.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Order.kt similarity index 84% rename from src/gaea/src/main/kotlin/com/synebula/gaea/query/Order.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Order.kt index 8fdeba1..568c025 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Order.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Order.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.query +package com.synebula.gaea.db.query /** * class OrderType diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Page.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Page.kt similarity index 96% rename from src/gaea/src/main/kotlin/com/synebula/gaea/query/Page.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Page.kt index 69fca7d..5d3c039 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Page.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Page.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.query +package com.synebula.gaea.db.query /** * 分页数据。 diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Params.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Params.kt similarity index 98% rename from src/gaea/src/main/kotlin/com/synebula/gaea/query/Params.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Params.kt index 7a2d724..bcfacab 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Params.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Params.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.query +package com.synebula.gaea.db.query /** * class 分页参数信息 diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Table.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Table.kt similarity index 56% rename from src/gaea/src/main/kotlin/com/synebula/gaea/query/Table.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Table.kt index 59431c1..c2ed96d 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Table.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Table.kt @@ -1,3 +1,3 @@ -package com.synebula.gaea.query +package com.synebula.gaea.db.query annotation class Table(val name: String = "") \ No newline at end of file diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Where.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Where.kt similarity index 92% rename from src/gaea/src/main/kotlin/com/synebula/gaea/query/Where.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Where.kt index 1e06df3..d76d3ac 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Where.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/db/query/Where.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.query +package com.synebula.gaea.db.query /** * 字段注解,规定字段的查询方式 diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/event/AfterRemoveEvent.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/event/AfterRemoveEvent.kt index 20d6510..96f450f 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/event/AfterRemoveEvent.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/event/AfterRemoveEvent.kt @@ -1,6 +1,6 @@ package com.synebula.gaea.domain.event import com.synebula.gaea.data.message.IEvent -import com.synebula.gaea.domain.model.IAggregateRoot +import com.synebula.gaea.db.IEntity -class AfterRemoveEvent, I>(var id: I? = null) : IEvent +class AfterRemoveEvent, I>(var id: I? = null) : IEvent diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/event/BeforeRemoveEvent.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/event/BeforeRemoveEvent.kt index e7364f6..a81259e 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/event/BeforeRemoveEvent.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/event/BeforeRemoveEvent.kt @@ -1,6 +1,7 @@ package com.synebula.gaea.domain.event import com.synebula.gaea.data.message.IEvent +import com.synebula.gaea.db.IEntity import com.synebula.gaea.domain.model.IAggregateRoot -class BeforeRemoveEvent, I>(var id: I? = null) : IEvent \ No newline at end of file +class BeforeRemoveEvent, I>(var id: I? = null) : IEvent \ No newline at end of file diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/AggregateRoot.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/AggregateRoot.kt index 3f7962f..9ed5202 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/AggregateRoot.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/AggregateRoot.kt @@ -1,5 +1,5 @@ package com.synebula.gaea.domain.model abstract class AggregateRoot : Entity(), IAggregateRoot { - override var alive: Boolean = true + override var avalible: Boolean = true } diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/Entity.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/Entity.kt index 8aa77b7..d910360 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/Entity.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/Entity.kt @@ -1,3 +1,5 @@ package com.synebula.gaea.domain.model +import com.synebula.gaea.db.IEntity + abstract class Entity : IEntity diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/IAggregateRoot.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/IAggregateRoot.kt index 2222405..4758ac4 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/IAggregateRoot.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/IAggregateRoot.kt @@ -1,5 +1,7 @@ package com.synebula.gaea.domain.model +import com.synebula.gaea.db.IEntity + /** * 继承本接口,说明对象为聚合根。 * @@ -10,5 +12,5 @@ interface IAggregateRoot : IEntity { /** * 实体对象是否有效。 */ - var alive: Boolean + var avalible: Boolean } diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/IValue.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/IValue.kt deleted file mode 100644 index 3686ce2..0000000 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/model/IValue.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.synebula.gaea.domain.model - -/** - * 继承本接口,说明对象为值类型。 - * @author alex - */ -interface IValue diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/IUniversalRepository.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/IUniversalRepository.kt deleted file mode 100644 index 10b3c76..0000000 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/IUniversalRepository.kt +++ /dev/null @@ -1,65 +0,0 @@ -package com.synebula.gaea.domain.repository - -import com.synebula.gaea.domain.model.IAggregateRoot - -/** - * 定义了提供增删改的仓储接口。 - * 本接口泛型放置到方法上,并需要显式提供聚合根的class对象 - */ -interface IUniversalRepository { - /** - * 插入单个对象。 - * - * @param root 需要插入的对象。 - * @return 返回原对象,如果对象ID为自增,则补充自增ID。 - */ - fun , ID> add(root: TAggregateRoot, clazz: Class) - - /** - * 插入多个个对象。 - * - * @param roots 需要插入的对象。 - */ - fun , ID> add(roots: List, clazz: Class) - - /** - * 更新对象。 - * - * @param root 需要更新的对象。 - * @return - */ - fun , ID> update(root: TAggregateRoot, clazz: Class) - - /** - * 更新多个个对象。 - * - * @param roots 需要更新的对象。 - */ - fun , ID> update(roots: List, clazz: Class) - - /** - * 通过id删除该条数据 - * - * @param id id - * @param clazz 操作数据的类型 - */ - fun , ID> remove(id: ID, clazz: Class) - - /** - * 根据ID获取对象。 - * - * @param id id - * @param clazz 操作数据的类型 - * @return 聚合根 - */ - fun , ID> get(id: ID, clazz: Class): TAggregateRoot? - - - /** - * 根据条件查询符合条件记录的数量 - * - * @param params 查询条件。 - * @return int - */ - fun count(params: Map?, clazz: Class): Int -} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/context/IContext.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/context/IContext.kt deleted file mode 100644 index 2e22c5f..0000000 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/context/IContext.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.synebula.gaea.domain.repository.context - -import com.synebula.gaea.domain.model.IAggregateRoot - -/** - * 继承自IUnitOfWork,表示实现了工作单元模式的上下文接口。 - * - * @author alex - */ -interface IContext : IUnitOfWork { - /** - * 将指定的聚合根标注为“新建”状态。 - * @param obj 聚合根 - */ - fun , ID> add(obj: T) - - /** - * 将指定的聚合根标注为“更改”状态。 - * - * @param obj 聚合根 - */ - fun , ID> update(obj: T) - - /** - * 将指定的聚合根标注为“删除”状态。 - * - * @param obj 聚合根 - */ - fun , ID> remove(obj: T) -} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/SimpleService.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/SimpleService.kt deleted file mode 100644 index 90e7801..0000000 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/SimpleService.kt +++ /dev/null @@ -1,67 +0,0 @@ -package com.synebula.gaea.domain.service - -import com.synebula.gaea.bus.IBus -import com.synebula.gaea.data.message.DataMessage -import com.synebula.gaea.domain.event.AfterRemoveEvent -import com.synebula.gaea.domain.event.BeforeRemoveEvent -import com.synebula.gaea.domain.model.IAggregateRoot -import com.synebula.gaea.domain.repository.IRepository -import com.synebula.gaea.log.ILogger - - -/** - * 依赖了IRepository仓储借口的服务实现类 GenericsService - * 该类依赖仓储接口 @see IGenericsRepository, 需要显式提供聚合根的class对象 - * - * @param repository 仓储对象 - * @param clazz 聚合根类对象 - * @param logger 日志组件 - * @author alex - * @version 0.1 - * @since 2020-05-17 - */ -open class SimpleService, ID>( - protected open var clazz: Class, - protected open var repository: IRepository, - override var logger: ILogger, - protected open var bus: IBus? = null -) : ISimpleService { - - override fun add(root: TRoot): DataMessage { - val msg = DataMessage() - this.repository.add(root) - msg.data = root.id - return msg - } - - override fun update(id: ID, root: TRoot) { - root.id = id - this.repository.update(root) - } - - override fun remove(id: ID) { - val beforeRemoveEvent = BeforeRemoveEvent(id) - this.bus?.publish(beforeRemoveEvent.topic(this.clazz), beforeRemoveEvent) - this.repository.remove(id) - val afterRemoveEvent = AfterRemoveEvent(id) - this.bus?.publish(afterRemoveEvent.topic(this.clazz), afterRemoveEvent) - } - - /** - * 增加对象 - * - * @param roots 增加对象命令列表 - */ - override fun add(roots: List) { - this.repository.add(roots) - } - - /** - * 批量更新对象 - * - * @param roots 更新对象命令列表 - */ - override fun update(roots: List) { - this.repository.update(roots) - } -} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/query/IQueryFactory.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/query/IQueryFactory.kt deleted file mode 100644 index f89d856..0000000 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/query/IQueryFactory.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.synebula.gaea.query - - -/** - * Query 工厂接口。 定义了Query的创建方法。 - */ -interface IQueryFactory { - - /** - * 创建原始类型的IQuery接口类型 - */ - fun createRawQuery(clazz: Class<*>): IQuery<*, *> - - /** - * 创建指定类型的IQuery接口类型 - */ - fun createQuery(clazz: Class): IQuery -} \ No newline at end of file diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/query/IUniversalQuery.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/query/IUniversalQuery.kt deleted file mode 100644 index fc2b962..0000000 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/query/IUniversalQuery.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.synebula.gaea.query - -/** - * 查询基接口, 其中方法都指定了查询的视图类型。 - * - * @author alex - */ -interface IUniversalQuery { - /** - * 根据Key获取对象。 - * - * @param id 对象Key。 - * @return 视图结果 - */ - fun get(id: ID, clazz: Class): TView? - - /** - * 根据实体类条件查询所有符合条件记录 - * - * @param params 查询条件。 - * @return 视图列表 - */ - fun list(params: Map?, clazz: Class): List - - /** - * 根据条件查询符合条件记录的数量 - * - * @param params 查询条件。 - * @return 数量 - */ - fun count(params: Map?, clazz: Class): Int - - /** - * 根据实体类条件查询所有符合条件记录(分页查询) - * - * @param params 分页条件 - * @return 分页数据 - */ - fun paging(params: Params, clazz: Class): Page - - /** - * 查询条件范围内数据。 - * @param field 查询字段 - * @param params 查询条件 - * - * @return 视图列表 - */ - fun range(field: String, params: List, clazz: Class): List -} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/record/model/IRecord.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/record/model/IRecord.kt new file mode 100644 index 0000000..ec08a1c --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/record/model/IRecord.kt @@ -0,0 +1,5 @@ +package com.synebula.gaea.record.model + +import com.synebula.gaea.db.IEntity + +interface IRecord : IEntity \ No newline at end of file diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/record/Record.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/record/model/Record.kt similarity index 90% rename from src/gaea/src/main/kotlin/com/synebula/gaea/domain/record/Record.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/record/model/Record.kt index b6ae3c2..4ea9948 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/record/Record.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/record/model/Record.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.domain.record +package com.synebula.gaea.record.model import java.util.* diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/ISimpleService.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/record/service/IService.kt similarity index 53% rename from src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/ISimpleService.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/record/service/IService.kt index ad7b5bc..e9614bc 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/ISimpleService.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/record/service/IService.kt @@ -1,7 +1,7 @@ -package com.synebula.gaea.domain.service +package com.synebula.gaea.record.service import com.synebula.gaea.data.message.DataMessage -import com.synebula.gaea.domain.model.IAggregateRoot +import com.synebula.gaea.db.IEntity import com.synebula.gaea.log.ILogger @@ -11,7 +11,7 @@ import com.synebula.gaea.log.ILogger * @version 0.0.1 * @since 2016年9月18日 下午2:23:15 */ -interface ISimpleService, ID> { +interface IService, ID> { /** * 日志组件。 */ @@ -20,31 +20,31 @@ interface ISimpleService, ID> { /** * 增加对象 * - * @param root 增加对象命令 + * @param entity 增加对象命令 */ - fun add(root: TAggregateRoot): DataMessage + fun add(entity: Entity): ID? /** * 增加对象 * - * @param roots 增加对象命令列表 + * @param entities 增加对象命令列表 */ - fun add(roots: List) + fun add(entities: List) /** * 更新对象 * * @param id 对象ID - * @param root 更新对象命令 + * @param entity 更新对象命令 */ - fun update(id: ID, root: TAggregateRoot) + fun update(id: ID, entity: Entity) /** * 批量更新对象 * - * @param roots 更新对象命令列表 + * @param entities 更新对象命令列表 */ - fun update(roots: List) + fun update(entities: List) /** * 增加对象 diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/record/service/Service.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/record/service/Service.kt new file mode 100644 index 0000000..44d3f87 --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/record/service/Service.kt @@ -0,0 +1,65 @@ +package com.synebula.gaea.record.service + +import com.synebula.gaea.bus.IBus +import com.synebula.gaea.data.message.DataMessage +import com.synebula.gaea.db.context.IDbContext +import com.synebula.gaea.domain.event.AfterRemoveEvent +import com.synebula.gaea.domain.event.BeforeRemoveEvent +import com.synebula.gaea.log.ILogger +import com.synebula.gaea.record.model.IRecord + + +/** + * 依赖了IRepository仓储借口的服务实现类 GenericsService + * 该类依赖仓储接口 @see IGenericsRepository, 需要显式提供聚合根的class对象 + * + * @param context 仓储对象 + * @param clazz 聚合根类对象 + * @param logger 日志组件 + * @author alex + * @version 0.1 + * @since 2020-05-17 + */ +open class Service, ID>( + protected open var clazz: Class, + protected open var context: IDbContext, + protected open var bus: IBus? = null, + override var logger: ILogger +) : IService { + + override fun add(entity: TEntity): ID? { + this.context.add(entity, clazz) + return entity.id + } + + override fun update(id: ID, entity: TEntity) { + entity.id = id + this.context.update(entity, clazz) + } + + override fun remove(id: ID) { + val beforeRemoveEvent = BeforeRemoveEvent(id) + this.bus?.publish(beforeRemoveEvent.topic(this.clazz), beforeRemoveEvent) + this.context.remove(id, clazz) + val afterRemoveEvent = AfterRemoveEvent(id) + this.bus?.publish(afterRemoveEvent.topic(this.clazz), afterRemoveEvent) + } + + /** + * 增加对象 + * + * @param entitys 增加对象命令列表 + */ + override fun add(entitys: List) { + this.context.add(entitys, clazz) + } + + /** + * 批量更新对象 + * + * @param entitys 更新对象命令列表 + */ + override fun update(entitys: List) { + this.context.update(entitys, clazz) + } +}