diff --git a/push-message-provider-mock/build.gradle.kts b/push-message-provider-mock/build.gradle.kts new file mode 100644 index 0000000..e52c548 --- /dev/null +++ b/push-message-provider-mock/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + id("kotlin") + id("kotlin-spring") +} + +dependencies { + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") + + implementation("org.springframework.boot:spring-boot-autoconfigure") + + implementation(project(":logger")) + implementation(project(":push-message-provider")) +} diff --git a/push-message-provider-mock/src/main/kotlin/ru/touchin/push/message/provider/mock/EnablePushMessageProviderMock.kt b/push-message-provider-mock/src/main/kotlin/ru/touchin/push/message/provider/mock/EnablePushMessageProviderMock.kt new file mode 100644 index 0000000..ffdabf5 --- /dev/null +++ b/push-message-provider-mock/src/main/kotlin/ru/touchin/push/message/provider/mock/EnablePushMessageProviderMock.kt @@ -0,0 +1,8 @@ +@file:Suppress("unused") +package ru.touchin.push.message.provider.mock + +import org.springframework.context.annotation.Import +import ru.touchin.push.message.provider.mock.configurations.PushMessageProviderMockConfiguration + +@Import(value = [PushMessageProviderMockConfiguration::class]) +annotation class EnablePushMessageProviderMock diff --git a/push-message-provider-mock/src/main/kotlin/ru/touchin/push/message/provider/mock/configurations/PushMessageProviderMockConfiguration.kt b/push-message-provider-mock/src/main/kotlin/ru/touchin/push/message/provider/mock/configurations/PushMessageProviderMockConfiguration.kt new file mode 100644 index 0000000..284e8a0 --- /dev/null +++ b/push-message-provider-mock/src/main/kotlin/ru/touchin/push/message/provider/mock/configurations/PushMessageProviderMockConfiguration.kt @@ -0,0 +1,8 @@ +package ru.touchin.push.message.provider.mock.configurations + +import org.springframework.boot.context.properties.ConfigurationPropertiesScan +import org.springframework.context.annotation.ComponentScan + +@ComponentScan("ru.touchin.push.message.provider.mock") +@ConfigurationPropertiesScan(basePackages = ["ru.touchin.push.message.provider.mock.properties"]) +class PushMessageProviderMockConfiguration diff --git a/push-message-provider-mock/src/main/kotlin/ru/touchin/push/message/provider/mock/factories/PushMessageProviderMockServiceFactoryImpl.kt b/push-message-provider-mock/src/main/kotlin/ru/touchin/push/message/provider/mock/factories/PushMessageProviderMockServiceFactoryImpl.kt new file mode 100644 index 0000000..291f613 --- /dev/null +++ b/push-message-provider-mock/src/main/kotlin/ru/touchin/push/message/provider/mock/factories/PushMessageProviderMockServiceFactoryImpl.kt @@ -0,0 +1,57 @@ +package ru.touchin.push.message.provider.mock.factories + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty +import org.springframework.context.annotation.Primary +import org.springframework.stereotype.Service +import ru.touchin.logger.dto.LogData +import ru.touchin.logger.factory.LogBuilderFactory +import ru.touchin.push.message.provider.dto.request.PushTokenCheck +import ru.touchin.push.message.provider.dto.request.SendPushRequest +import ru.touchin.push.message.provider.dto.result.CheckPushTokenResult +import ru.touchin.push.message.provider.dto.result.SendPushResult +import ru.touchin.push.message.provider.dto.result.SendPushTokenMessageResult +import ru.touchin.push.message.provider.enums.PlatformType +import ru.touchin.push.message.provider.enums.PushMessageProviderType +import ru.touchin.push.message.provider.factories.PushMessageProviderServiceFactory +import ru.touchin.push.message.provider.mock.properties.PushMessageProviderMockProperties +import ru.touchin.push.message.provider.services.PushMessageProviderService +import java.util.* + +@Primary +@Service +@ConditionalOnProperty(prefix = "push-message-provider", name = ["mock.enabled"], havingValue = "true") +class PushMessageProviderMockServiceFactoryImpl( + private val logBuilderFactory: LogBuilderFactory, + private val pushMessageProviderMockProperties: PushMessageProviderMockProperties, +) : PushMessageProviderServiceFactory { + + override fun get(platformType: PlatformType): PushMessageProviderService { + return object : PushMessageProviderService { + override val type: PushMessageProviderType + get() = PushMessageProviderType.FCM + + override fun send(request: SendPushRequest): SendPushResult { + val millis = pushMessageProviderMockProperties.sleepFor.toMillis() + + logBuilderFactory.create(this::class.java) + .addTags("MOCK_PUSH_SEND") + .setMethod("send") + .addData("sleepForMs" to millis) + .build() + .log() + + Thread.sleep(millis) + + return SendPushTokenMessageResult( + messageId = UUID.randomUUID().toString(), + ) + } + + override fun check(request: PushTokenCheck): CheckPushTokenResult { + throw NotImplementedError() + } + + } + } + +} diff --git a/push-message-provider-mock/src/main/kotlin/ru/touchin/push/message/provider/mock/properties/PushMessageProviderMockProperties.kt b/push-message-provider-mock/src/main/kotlin/ru/touchin/push/message/provider/mock/properties/PushMessageProviderMockProperties.kt new file mode 100644 index 0000000..75eb97c --- /dev/null +++ b/push-message-provider-mock/src/main/kotlin/ru/touchin/push/message/provider/mock/properties/PushMessageProviderMockProperties.kt @@ -0,0 +1,11 @@ +package ru.touchin.push.message.provider.mock.properties + +import org.springframework.boot.context.properties.ConfigurationProperties +import org.springframework.boot.context.properties.ConstructorBinding +import java.time.Duration + +@ConstructorBinding +@ConfigurationProperties(prefix = "push-message-provider.mock") +data class PushMessageProviderMockProperties( + val sleepFor: Duration, +) diff --git a/settings.gradle.kts b/settings.gradle.kts index 6ddd481..6461615 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -45,6 +45,7 @@ include("validation-spring") include("version-spring-web") include("push-message-provider") include("push-message-provider-fcm") +include("push-message-provider-mock") include("response-wrapper-spring-web") include("settings-spring-jpa") include("security-authorization-server-core")