Skip to content

Commit

Permalink
staging --> main (#615)
Browse files Browse the repository at this point in the history
* 588 rename tables til form (#597)

* config try1

* tableproviders made configurable

* AppConfig rename

* TableProvider renamed FormProvider

* TableService renamed FormService

* Table -> Form

* Api table(s) -> form(s)

* context routing tables -> routes

* context routing tables -> routes

* context routing with migration fix

* clean up

* clean up2

* getContextByTeamIdAndFormId

* ryddings

---------

Co-authored-by: Gyda Elisa Sæter <[email protected]>

* 605 utforske nytt ikon for oppdater svar (#614)

* design test

* added text to refresh answer button

* added text to refresh answer button

* fjernet unødvendig state (#617)

---------

Co-authored-by: JegHeterGyda <[email protected]>
Co-authored-by: Gyda Elisa Sæter <[email protected]>
  • Loading branch information
3 people authored Feb 11, 2025
1 parent 991d67c commit 6f5dc3b
Show file tree
Hide file tree
Showing 42 changed files with 314 additions and 293 deletions.
5 changes: 2 additions & 3 deletions backend/src/main/kotlin/no/bekk/Application.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package no.bekk

import io.ktor.client.*
import no.bekk.plugins.*
import io.ktor.server.application.*
import io.ktor.server.plugins.contentnegotiation.*
Expand All @@ -17,12 +16,12 @@ fun main(args: Array<String>) {

private fun loadAppConfig(config: ApplicationConfig) {

AppConfig.tables = TableConfig.apply {
AppConfig.formConfig = FormConfig.apply {
airTable = AirTableConfig.apply {
baseUrl = config.propertyOrNull("airTable.baseUrl")?.getString() ?: throw IllegalStateException("Unable to initialize app config \"airTable.baseUrl\"")
}

tables = config.configList("tables").map { table ->
forms = config.configList("forms").map { table ->

when (table.propertyOrNull("type")?.getString()) {
"AIRTABLE" -> AirTableInstanceConfig(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ import java.net.URI
import java.util.concurrent.TimeUnit

fun Application.initializeAuthentication() {
val issuer = AppConfig.oAuth.getIssuer()
val issuer = getIssuer()
val clientId = AppConfig.oAuth.clientId
val jwksUri = AppConfig.oAuth.getJwksUrl()
val jwksUri = getJwksUrl()

val jwkProvider = JwkProviderBuilder(URI(jwksUri).toURL())
.cached(10, 24, TimeUnit.HOURS)
Expand Down
21 changes: 10 additions & 11 deletions backend/src/main/kotlin/no/bekk/configuration/AppConfig.kt
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@
package no.bekk.configuration

import io.ktor.client.*

object AppConfig {
lateinit var tables: TableConfig
lateinit var formConfig: FormConfig
lateinit var microsoftGraph: MicrosoftGraphConfig
lateinit var oAuth: OAuthConfig
lateinit var frontend: FrontendConfig
lateinit var backend: BackendConfig
lateinit var db: DbConfig
}

object TableConfig {
object FormConfig {
lateinit var airTable: AirTableConfig
lateinit var tables: List<TableInstance>
lateinit var forms: List<FormInstances>
}

object AirTableConfig {
lateinit var baseUrl: String
}

interface TableInstance {
interface FormInstances {
val id: String
}

Expand All @@ -32,13 +31,13 @@ data class AirTableInstanceConfig (
var viewId: String? = null,
var webhookId: String? = null,
var webhookSecret: String? = null,
) : TableInstance
) : FormInstances

data class YAMLInstanceConfig (
override val id: String,
val endpoint: String? = null,
val resourcePath: String? = null
) : TableInstance
) : FormInstances



Expand All @@ -60,10 +59,10 @@ object OAuthConfig {
lateinit var superUserMail: String
}

fun OAuthConfig.getIssuer() = AppConfig.oAuth.baseUrl + "/" + AppConfig.oAuth.tenantId + AppConfig.oAuth.issuerPath
fun OAuthConfig.getAuthUrl() = AppConfig.oAuth.baseUrl + "/" + AppConfig.oAuth.tenantId + AppConfig.oAuth.authPath
fun OAuthConfig.getTokenUrl() = AppConfig.oAuth.baseUrl + "/" + AppConfig.oAuth.tenantId + AppConfig.oAuth.tokenPath
fun OAuthConfig.getJwksUrl() = AppConfig.oAuth.baseUrl + "/" + AppConfig.oAuth.tenantId + AppConfig.oAuth.jwksPath
fun getIssuer() = AppConfig.oAuth.baseUrl + "/" + AppConfig.oAuth.tenantId + AppConfig.oAuth.issuerPath
fun getTokenUrl() = AppConfig.oAuth.baseUrl + "/" + AppConfig.oAuth.tenantId + AppConfig.oAuth.tokenPath
fun getJwksUrl() = AppConfig.oAuth.baseUrl + "/" + AppConfig.oAuth.tenantId + AppConfig.oAuth.jwksPath


object FrontendConfig {
lateinit var host: String
Expand Down
19 changes: 11 additions & 8 deletions backend/src/main/kotlin/no/bekk/database/ContextRepository.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ object ContextRepository {
Database.getConnection().use { conn ->
conn.prepareStatement(sqlStatement).use { statement ->
statement.setString(1, context.teamId)
statement.setString(2, context.tableId)
statement.setString(2, context.formId)
statement.setString(3, context.name)

val result = statement.executeQuery()
if (result.next()) {
return DatabaseContext(
id = result.getString("id"),
teamId = result.getString("team_id"),
tableId = result.getString("table_id"),
formId = result.getString("table_id"),
name = result.getString("name"),
)
} else {
Expand All @@ -40,6 +40,8 @@ object ContextRepository {
}
}



fun getContextsByTeamId(teamId: String): List<DatabaseContext> {
val sqlStatement = "SELECT * FROM contexts WHERE team_id = ?"

Expand All @@ -55,7 +57,7 @@ object ContextRepository {
DatabaseContext(
id = result.getString("id"),
teamId = result.getString("team_id"),
tableId = result.getString("table_id"),
formId = result.getString("table_id"),
name = result.getString("name")
)
)
Expand All @@ -65,13 +67,13 @@ object ContextRepository {
}
}

fun getContextByTeamIdAndTableId(teamId: String, tableId: String): List<DatabaseContext> {
fun getContextByTeamIdAndFormId(teamId: String, formId: String): List<DatabaseContext> {
val sqlStatement = "SELECT * FROM contexts WHERE team_id = ? AND table_id = ?"

Database.getConnection().use { conn ->
conn.prepareStatement(sqlStatement).use { statement ->
statement.setString(1, teamId)
statement.setString(2, tableId)
statement.setString(2, formId)

val result = statement.executeQuery()
val contexts = mutableListOf<DatabaseContext>()
Expand All @@ -81,8 +83,8 @@ object ContextRepository {
DatabaseContext(
id = result.getString("id"),
teamId = result.getString("team_id"),
tableId = result.getString("table_id"),
name = result.getString("name")
formId = result.getString("table_id"),
name = result.getString("name"),
)
)
}
Expand All @@ -101,7 +103,7 @@ object ContextRepository {
return DatabaseContext(
id = result.getString("id"),
teamId = result.getString("team_id"),
tableId = result.getString("table_id"),
formId = result.getString("table_id"),
name = result.getString("name")
)
} else {
Expand All @@ -111,6 +113,7 @@ object ContextRepository {
}
}

//This can be removed after schemas in frisk are migrated to new metadata
fun getContextTableId(id: String): String {
val sqlStatement = "SELECT table_id FROM contexts WHERE id = ?"
Database.getConnection().use { conn ->
Expand Down
13 changes: 11 additions & 2 deletions backend/src/main/kotlin/no/bekk/database/DatabaseContext.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,27 @@ package no.bekk.database

import kotlinx.serialization.Serializable

@Serializable
data class OldDatabaseContextRequest(
val teamId: String,
val tableId: String,
val name: String,
val copyContext: String? = null,
)


@Serializable
data class DatabaseContext(
val id: String,
val teamId: String,
val tableId: String,
val formId: String,
val name: String,
)

@Serializable
data class DatabaseContextRequest(
val teamId: String,
val tableId: String,
val formId: String,
val name: String,
val copyContext: String? = null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ data class Column(
)

@Serializable
data class TableWithoutId(
data class FormWithoutId(
val name: String,
val columns: List<Column>,
val records: List<Question>,
)

@Serializable
data class Table(
data class Form(
val id: String,
val name: String,
val columns: List<Column>,
Expand Down
6 changes: 3 additions & 3 deletions backend/src/main/kotlin/no/bekk/plugins/Routing.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import io.ktor.server.response.*
import io.ktor.server.routing.*
import no.bekk.database.ContextRepository
import no.bekk.routes.*
import no.bekk.services.TableService
import no.bekk.services.FormService
import no.bekk.util.logger

fun Application.configureRouting() {
Expand All @@ -23,7 +23,7 @@ fun Application.configureRouting() {
}

get("/schemas") {
val schemas = TableService.getTableProviders().map {
val schemas = FormService.getFormProviders().map {
it.getSchema()
}
call.respond(schemas)
Expand All @@ -43,7 +43,7 @@ fun Application.configureRouting() {
commentRouting()
contextRouting()
questionRouting()
tableRouting()
formRouting()
userInfoRouting()
uploadCSVRouting()
}
Expand Down
10 changes: 5 additions & 5 deletions backend/src/main/kotlin/no/bekk/providers/AirTableProvider.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class AirTableProvider(
val webhookSecret: String? = null,
val webhookId: String? = null,

) : TableProvider {
) : FormProvider {

private fun <K, V> createCache(): Cache<K, V> {
val expirationDuration = if (webhookId != null) (24L * 6) else 1L
Expand All @@ -33,7 +33,7 @@ class AirTableProvider(
.build()
}

private val tableCache: Cache<String, Table> = createCache()
private val tableCache: Cache<String, Form> = createCache()
private val questionCache: Cache<String, Question> = createCache()
private val columnCache: Cache<String, List<Column>> = createCache()

Expand All @@ -44,7 +44,7 @@ class AirTableProvider(
private val SVARENHET = "Svarenhet"
private val SVARVARIGHET = "Svarvarighet"

override suspend fun getTable(): Table {
override suspend fun getForm(): Form {
val cachedTable = tableCache.getIfPresent(id)
if (cachedTable != null) {
logger.info("Successfully retrieved table: $tableId from cache")
Expand Down Expand Up @@ -97,7 +97,7 @@ class AirTableProvider(
return freshColumns
}

private suspend fun getTableFromAirTable(): Table {
private suspend fun getTableFromAirTable(): Form {
val allRecords = fetchAllRecordsFromTable()
val airTableMetadata = fetchMetadataFromBase()

Expand Down Expand Up @@ -154,7 +154,7 @@ class AirTableProvider(
refreshWebhook()
}

return Table(
return Form(
id = id,
name = airtableClient.getBases().bases.find { it.id == baseId }?.name ?: tableMetadata.name,
columns = columns,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package no.bekk.providers

import no.bekk.model.internal.*

interface TableProvider {
interface FormProvider {
val id: String
suspend fun getTable(): Table
suspend fun getForm(): Form
suspend fun getQuestion(recordId: String): Question
suspend fun getColumns(): List<Column>
suspend fun getSchema(): Schema
Expand Down
Loading

0 comments on commit 6f5dc3b

Please sign in to comment.