group = "space.nstart.pcp"

plugins {
	kotlin("jvm")
	kotlin("plugin.spring")
	kotlin("plugin.jpa")
	kotlin("plugin.lombok")
	id("org.springframework.boot")
	id("io.spring.dependency-management")
	//id("org.sonarqube")
	jacoco
}

version = "1.0.0"


kotlin {
	jvmToolchain((property("versions.java") as String).toInt())
	compilerOptions {
		freeCompilerArgs.addAll("-Xjsr305=strict")
		jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.fromTarget(property("versions.java") as String))
	}
}

configurations {
	compileOnly {
		extendsFrom(configurations.annotationProcessor.get())
	}
}

dependencies {
	implementation(project(":libs:pcp-types-lib"))
	implementation(project(":libs:ballistics-lib"))
	implementation("${property("dep.spring.actuator")}")
	implementation("org.springframework.boot:spring-boot-starter-logging")
	implementation("org.springframework.boot:spring-boot-starter-validation")
	implementation("org.springframework.boot:spring-boot-starter-web")
	implementation("org.springframework.kafka:spring-kafka")
	implementation("jakarta.validation:jakarta.validation-api")
	implementation("org.jetbrains.kotlin:kotlin-reflect")
	implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
	implementation("org.springframework.boot:spring-boot-starter-webflux")
	implementation("org.springdoc:springdoc-openapi-starter-webflux-ui:${property("versions.open-api")}")


	implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
	implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor:1.6.4")


	implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
//	implementation("org.springframework.kafka:spring-kafka")
	implementation("org.springframework.cloud:spring-cloud-starter-config")
	implementation("org.springframework.boot:spring-boot-starter-flyway")
	implementation("org.flywaydb:flyway-database-postgresql")
	implementation("org.postgresql:postgresql")
	implementation("jakarta.validation:jakarta.validation-api")
	implementation("org.springframework.boot:spring-boot-starter-data-jpa")

	implementation("org.locationtech.jts:jts-core:1.19.0")


	testImplementation("junit:junit")
	testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
	testImplementation("org.springframework.boot:spring-boot-starter-test")
	testImplementation("org.springframework.kafka:spring-kafka-test")
	testImplementation("org.springframework.security:spring-security-test")
	testImplementation("org.testcontainers:junit-jupiter")

	testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}

dependencyManagement {
	imports {
		mavenBom("org.springframework.cloud:spring-cloud-dependencies:${property("versions.spring.cloud")}")
		mavenBom("org.testcontainers:testcontainers-bom:${property("versions.testcontainers")}")
	}
}

tasks.withType<Jar> {
	manifest {
		attributes["Built-By"] = "nstart"
		attributes["Implementation-Version"] = archiveVersion
	}
}

tasks.withType<Test> {
	enabled = true
	useJUnitPlatform()
	finalizedBy(tasks.jacocoTestReport)
	systemProperty("spring.profiles.active", "test")
}

tasks.check {
	dependsOn(tasks.jacocoTestCoverageVerification)
}

tasks.jacocoTestReport {
	dependsOn(tasks.test)
	reports {
		xml.required = true
		html.required = true
		csv.required = false
	}
}

