-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
92e0b35
commit 51afbff
Showing
22 changed files
with
250 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,26 @@ | ||
plugins { | ||
id("kotlin-jvm.base-conventions") | ||
alias(libs.plugins.kotlin.serialization) | ||
alias(libs.plugins.ktor) | ||
} | ||
|
||
dependencies { | ||
commonMainImplementation(project(":guestbook-kotlin-app-web")) | ||
commonMainImplementation(project(":guestbook-kotlin-db")) | ||
jvmMainImplementation(libs.bundles.ktor.server) | ||
jvmMainRuntimeOnly(libs.logging.impl) | ||
} | ||
|
||
application { | ||
mainClass = "guestbook.MainKt" | ||
} | ||
|
||
tasks { | ||
val runDir = file("build/run") | ||
withType<JavaExec> { | ||
doFirst { | ||
runDir.mkdirs() | ||
} | ||
workingDir = runDir | ||
} | ||
} |
44 changes: 44 additions & 0 deletions
44
app/web/backend/src/jvmMain/kotlin/guestbook/ApplicationModule.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
package guestbook | ||
|
||
import guestbook.http.routeSession | ||
import io.ktor.serialization.kotlinx.json.json | ||
import io.ktor.server.application.Application | ||
import io.ktor.server.application.install | ||
import io.ktor.server.plugins.contentnegotiation.ContentNegotiation | ||
import io.ktor.server.resources.Resources | ||
import io.ktor.server.routing.routing | ||
import io.ktor.server.sessions.SessionStorageMemory | ||
import io.ktor.server.sessions.Sessions | ||
import io.ktor.server.sessions.cookie | ||
import kotlinx.serialization.json.Json | ||
|
||
@Suppress("unused") // Referenced in application.conf | ||
fun Application.applicationModule() { | ||
println("Starting backend...") | ||
install(ContentNegotiation) { | ||
// TODO: protobuf | ||
json( | ||
Json { | ||
encodeDefaults = false | ||
ignoreUnknownKeys = true | ||
}, | ||
) | ||
} | ||
// install type-safe routing | ||
install(Resources) | ||
|
||
install(Sessions) { | ||
cookie<String>( | ||
name = "user_session", | ||
storage = SessionStorageMemory(), | ||
) { | ||
println("Test: ${sessionIdProvider()}") | ||
} | ||
} | ||
|
||
routing { | ||
routeSession() | ||
} | ||
|
||
println("Backend started!") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package guestbook | ||
|
||
import io.ktor.server.netty.EngineMain | ||
|
||
fun main(args: Array<String>) = EngineMain.main(args) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package guestbook | ||
|
||
data class UserSession( | ||
val id: String, | ||
) |
10 changes: 10 additions & 0 deletions
10
app/web/backend/src/jvmMain/kotlin/guestbook/http/GuestbookOutbound.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package guestbook.http | ||
|
||
import io.ktor.server.routing.Route | ||
import io.ktor.server.routing.route | ||
|
||
fun Route.registerGuestbookRoutes() { | ||
route("/api/guestbook") { | ||
|
||
} | ||
} |
16 changes: 16 additions & 0 deletions
16
app/web/backend/src/jvmMain/kotlin/guestbook/http/RepositoryController.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package guestbook.http | ||
|
||
import io.ktor.server.application.call | ||
import io.ktor.server.response.respond | ||
import io.ktor.server.routing.Route | ||
import io.ktor.server.routing.get | ||
import org.sourcegrade.kontour.DomainEntity | ||
import org.sourcegrade.kontour.Repository | ||
|
||
fun <E : DomainEntity> Route.routeGetAll( | ||
repository: Repository<E, *>, | ||
) { | ||
get { | ||
call.respond(repository) | ||
} | ||
} |
12 changes: 12 additions & 0 deletions
12
app/web/backend/src/jvmMain/kotlin/guestbook/http/SessionController.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package guestbook.http | ||
|
||
import io.ktor.server.application.call | ||
import io.ktor.server.routing.Route | ||
import io.ktor.server.routing.get | ||
import io.ktor.server.sessions.sessionId | ||
|
||
fun Route.routeSession() { | ||
get("/api/v1/session") { | ||
println("Session ID: ${call.sessionId}") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
ktor { | ||
development = true | ||
deployment { | ||
port = 80 | ||
} | ||
application { | ||
modules = [ guestbook.ApplicationModuleKt.applicationModule ] | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<Configuration status="WARN"> | ||
<Appenders> | ||
<Console name="Console"> | ||
<PatternLayout disableAnsi="false"> | ||
<pattern>%highlight{[%d{yy-MMM-dd HH:mm:ss}] [%p] - %m%n%throwable}{INFO=white}</pattern> | ||
</PatternLayout> | ||
</Console> | ||
<RollingRandomAccessFile name="File" fileName="logs/latest.log" | ||
filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz" | ||
immediateFlush="false"> | ||
<PatternLayout> | ||
<pattern>[%d{yy-MMM-dd HH:mm:ss}] [%p] - %m%n%throwable</pattern> | ||
</PatternLayout> | ||
<Policies> | ||
<TimeBasedTriggeringPolicy/> | ||
<OnStartupTriggeringPolicy/> | ||
</Policies> | ||
</RollingRandomAccessFile> | ||
</Appenders> | ||
<Loggers> | ||
<Root level="info"> | ||
<AppenderRef ref="Console"/> | ||
<AppenderRef ref="File"/> | ||
</Root> | ||
</Loggers> | ||
</Configuration> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,11 @@ | ||
plugins { | ||
id("kotlin-jvm.base-conventions") | ||
id("kotlin-js.base-conventions") | ||
alias(libs.plugins.kotlin.serialization) | ||
} | ||
|
||
dependencies { | ||
commonMainApi(project(":guestbook-kotlin-domain")) | ||
commonMainApi(libs.redux) | ||
commonMainApi(libs.ktor.resources) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
27 changes: 27 additions & 0 deletions
27
app/web/frontend/src/jsMain/kotlin/guestbook/http/GuestbookInbound.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package guestbook.http | ||
|
||
import io.ktor.client.HttpClient | ||
import org.sourcegrade.kontour.Creates | ||
import org.sourcegrade.kontour.DomainEntity | ||
import org.sourcegrade.kontour.Repository | ||
import org.sourcegrade.kontour.UUID | ||
|
||
class ClientRepository<E : DomainEntity, C : Creates<E>>( | ||
val httpClient: HttpClient, | ||
) : Repository<E, C> { | ||
override suspend fun countAll(): Long { | ||
TODO("Not yet implemented") | ||
} | ||
|
||
override suspend fun deleteById(id: UUID): Boolean { | ||
TODO("Not yet implemented") | ||
} | ||
|
||
override suspend fun exists(id: UUID): Boolean { | ||
TODO("Not yet implemented") | ||
} | ||
|
||
override suspend fun create(item: C): E { | ||
TODO("Not yet implemented") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package guestbook.web | ||
|
||
import guestbook.domain.Guestbook | ||
import org.reduxkotlin.threadsafe.createTypedThreadSafeStore | ||
|
||
data class HomeState( | ||
val pageSize: Int = 10, | ||
val offset: Long = 0, | ||
val guestbooks: List<Guestbook> = emptyList(), | ||
) { | ||
companion object { | ||
fun createStore() = createTypedThreadSafeStore(::reduce, HomeState()) | ||
|
||
private fun createInitialState(): HomeState { | ||
TODO() | ||
} | ||
|
||
private fun reduce(state: HomeState, action: HomeAction): HomeState = when (action) { | ||
is HomeAction.NextPage -> state.copy(offset = state.offset + state.pageSize) | ||
is HomeAction.PreviousPage -> state.copy(offset = state.offset - state.pageSize) | ||
is HomeAction.GoToPage -> state.copy(offset = action.offset) | ||
is HomeAction.SetPageSize -> state.copy(pageSize = action.pageSize) | ||
is HomeAction.AddGuestbook -> state.copy(guestbooks = state.guestbooks + action.guestbook) | ||
} | ||
} | ||
} | ||
|
||
sealed interface HomeAction { | ||
|
||
// pagination | ||
data object NextPage : HomeAction | ||
data object PreviousPage : HomeAction | ||
data class GoToPage(val offset: Long) : HomeAction | ||
data class SetPageSize(val pageSize: Int) : HomeAction | ||
|
||
data class AddGuestbook(val guestbook: Guestbook) : HomeAction | ||
} |
9 changes: 9 additions & 0 deletions
9
app/web/src/commonMain/kotlin/guestbook.web/http/GuestbookRoute.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package guestbook.web.http | ||
|
||
import io.ktor.resources.Resource | ||
|
||
@Resource("/api/v1/guestbook") | ||
class GuestbookRoute { | ||
@Resource("{id}") | ||
class ById(val id: String) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters