Skip to content

Commit ec7a48b

Browse files
committed
Store unique (hash, date) combinations for /statistics/track
This will allow us to generate user count statistics
1 parent c5fde9e commit ec7a48b

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

src/main/kotlin/com/chattriggers/website/api/tracking.kt

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package com.chattriggers.website.api
22

3+
import com.chattriggers.website.data.TrackedTimestamp
4+
import com.chattriggers.website.data.TrackedTimestamps
35
import com.chattriggers.website.data.TrackedUser
46
import com.chattriggers.website.data.TrackedUsers
5-
import com.fasterxml.jackson.core.Version
67
import io.javalin.apibuilder.ApiBuilder.get
78
import io.javalin.apibuilder.ApiBuilder.path
89
import io.javalin.http.BadRequestResponse
910
import io.javalin.http.Context
1011
import org.jetbrains.exposed.sql.Op
12+
import org.jetbrains.exposed.sql.and
1113
import org.jetbrains.exposed.sql.transactions.transaction
12-
import java.util.*
14+
import org.joda.time.DateTime
1315

1416
fun trackingRoutes() {
1517
path("statistics") {
@@ -26,13 +28,28 @@ private fun tracking(ctx: Context) {
2628

2729
transaction {
2830
val existingUser = TrackedUser.find(Op.build { TrackedUsers.hash eq hash })
29-
if (existingUser.empty()) {
31+
val user = if (existingUser.empty()) {
3032
TrackedUser.new {
3133
this.hash = hash
3234
this.version = version
3335
}
3436
} else {
35-
existingUser.first().version = version
37+
existingUser.first().also {
38+
it.version = version
39+
}
40+
}
41+
42+
val time = DateTime.now()
43+
44+
val existingTimestamp = TrackedTimestamp.find {
45+
(TrackedTimestamps.user eq user.id) and (TrackedTimestamps.time eq time)
46+
}
47+
48+
if (existingTimestamp.empty()) {
49+
TrackedTimestamp.new {
50+
this.user = user
51+
this.time = DateTime.now()
52+
}
3653
}
3754

3855
ctx.status(200)

src/main/kotlin/com/chattriggers/website/data/tracking.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,15 @@ class TrackedUser(id: EntityID<Int>) : IntEntity(id) {
2222
return Objects.hash(hash, version)
2323
}
2424
}
25+
26+
object TrackedTimestamps : IntIdTable() {
27+
val user = reference("user", TrackedUsers)
28+
val time = date("time")
29+
}
30+
31+
class TrackedTimestamp(id: EntityID<Int>) : IntEntity(id) {
32+
companion object : IntEntityClass<TrackedTimestamp>(TrackedTimestamps)
33+
34+
var user by TrackedUser referencedOn TrackedTimestamps.user
35+
var time by TrackedTimestamps.time
36+
}

0 commit comments

Comments
 (0)