Skip to content
This repository has been archived by the owner on Sep 14, 2024. It is now read-only.

Commit

Permalink
Merge pull request #360 from MixDrinks/start_mongo_migration
Browse files Browse the repository at this point in the history
Migrate visit count to mongo (duplicate)
  • Loading branch information
VovaStelmashchuk authored Jul 7, 2024
2 parents 34eb4ca + dceb0e7 commit df4ae12
Show file tree
Hide file tree
Showing 10 changed files with 84 additions and 287 deletions.
10 changes: 0 additions & 10 deletions .github/workflows/linter.yml

This file was deleted.

7 changes: 7 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,13 @@ dependencies {
implementation("com.zaxxer:HikariCP:5.1.0")
implementation("org.postgresql:postgresql:42.7.3")

implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
implementation("org.mongodb:mongodb-driver-kotlin-coroutine:4.10.1")

testImplementation("io.mockk:mockk:1.13.10")
testImplementation("io.kotest:kotest-runner-junit5:5.8.1")
implementation(kotlin("stdlib-jdk8"))
}
kotlin {
jvmToolchain(15)
}
8 changes: 8 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
pluginManagement {
plugins {
kotlin("jvm") version "2.0.0"
}
}
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}
rootProject.name = "mixdrinks"
5 changes: 4 additions & 1 deletion src/main/kotlin/org/mixdrinks/Application.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import io.ktor.server.netty.Netty
import io.ktor.server.plugins.contentnegotiation.ContentNegotiation
import io.ktor.server.plugins.cors.routing.CORS
import org.jetbrains.exposed.sql.Database
import org.mixdrinks.mongo.Mongo
import org.mixdrinks.plugins.configureCache
import org.mixdrinks.plugins.configureRedirectMiddleWare
import org.mixdrinks.plugins.configureRouting
Expand Down Expand Up @@ -60,10 +61,12 @@ fun main() {
pageSize = config.property("ktor.settings.pageSize").getString().toInt()
)

val mongoString = config.property("ktor.database.mongoString").getString()
val appVersion = config.property("ktor.app.version").getString()

service(appVersion)
api(appSettings)

api(appSettings, mongoString)
}

val port = config.property("ktor.connector.port").getString().toInt()
Expand Down
9 changes: 6 additions & 3 deletions src/main/kotlin/org/mixdrinks/cocktails/visit/VisitRouting.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,17 @@ import org.jetbrains.exposed.sql.update
import org.mixdrinks.cocktails.score.scoreCocktailsChangeResponse
import org.mixdrinks.data.Cocktail
import org.mixdrinks.data.CocktailsTable
import org.mixdrinks.mongo.Mongo
import org.mixdrinks.view.error.QueryRequireException
import org.mixdrinks.view.v2.getCocktailId

fun Routing.visitRouting() {
fun Routing.visitRouting(mongo: Mongo) {
post("v2/cocktails/visit") {
this.call.incVisitMethod()
this.call.incVisitMethod(mongo)
}
}

private suspend fun ApplicationCall.incVisitMethod() {
private suspend fun ApplicationCall.incVisitMethod(mongo: Mongo) {
val id = this.getCocktailId()

transaction {
Expand All @@ -29,6 +30,8 @@ private suspend fun ApplicationCall.incVisitMethod() {
}
}

mongo.incVisitCount(id.id)

this.respond(
transaction {
scoreCocktailsChangeResponse(
Expand Down
41 changes: 41 additions & 0 deletions src/main/kotlin/org/mixdrinks/mongo/Mongo.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.mixdrinks.mongo

import com.mongodb.client.model.Filters
import com.mongodb.client.model.Updates
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

class Mongo(connectionString: String) {

private val client by lazy {
MongoClient.create(connectionString = connectionString)
}

private val database by lazy {
client.getDatabase("mixdrinks")
}

init {
GlobalScope.launch {
database.listCollections().collect {
println(it)
}
}
}

data class MongoCocktail(
val id: Int,
val visitCount: Int,
)

suspend fun incVisitCount(id: Int) {
val queryParam = Filters.eq("id", id)
val updateParams = Updates.inc("visitCount", 1)
database.getCollection<MongoCocktail>(collectionName = "cocktails")
.updateOne(
filter = queryParam,
update = updateParams,
)
}
}
26 changes: 17 additions & 9 deletions src/main/kotlin/org/mixdrinks/view/v2/Api.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import io.ktor.server.routing.routing
import org.mixdrinks.cocktails.CocktailMapper
import org.mixdrinks.cocktails.visit.visitRouting
import org.mixdrinks.domain.CocktailSelector
import org.mixdrinks.mongo.Mongo
import org.mixdrinks.view.cocktail.cocktails
import org.mixdrinks.view.controllers.filter.FilterCache
import org.mixdrinks.view.controllers.filter.FilterSource
Expand All @@ -21,23 +22,30 @@ import org.mixdrinks.view.snapshot.SnapshotCreator
import org.mixdrinks.view.snapshot.sitemap.SiteMapCreator
import org.mixdrinks.view.snapshot.snapshot

fun Application.api(appSettings: AppSettings) {
fun Application.api(
appSettings: AppSettings,
mongoString: String
) {
this.routing {
visitRouting(Mongo(mongoString))
}
println("Visit routing initialized.")

this.score(appSettings)

this.cocktails()
this.items()
this.appSetting(appSettings)

val filterCache = FilterCache()

val cocktailSelector = CocktailSelector(filterCache.filterGroups)
val snapshotCreator = SnapshotCreator(filterCache)
this.filterMetaInfo(FilterSource(filterCache))

val searchResponseBuilder =
SearchResponseBuilder(filterCache, cocktailSelector, DescriptionBuilder(), CocktailMapper())
this.score(appSettings)

this.routing {
visitRouting()
}

this.cocktails()
this.items()
this.appSetting(appSettings)
this.snapshot(snapshotCreator, SiteMapCreator())

val searchSlugResponseBuilder = SearchSlugResponseBuilder(filterCache, searchResponseBuilder)
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/application.conf
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ ktor {
url = ${?DB_URL}
user = ${?DB_USER}
password = ${?DB_PASSWORD}
mongoString = ${?MONGO_STRING}
}
connector {
port = 8080
Expand Down
98 changes: 0 additions & 98 deletions src/test/kotlin/org/fullness/endtoend/CocktailEndToEndTests.kt

This file was deleted.

Loading

0 comments on commit df4ae12

Please sign in to comment.