Skip to content

Commit 189620a

Browse files
committed
Enhance backend module structure by adding new core and application modules to Gradle settings. Update dependencies in the API module to include these new modules, improving project organization and modularity. Remove obsolete use case implementations to streamline the codebase.
1 parent d1f3042 commit 189620a

213 files changed

Lines changed: 1713 additions & 2198 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

backend/api/build.gradle.kts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,36 @@ application {
2828
dependencies {
2929
// Project modules
3030
implementation(project(":core"))
31+
implementation(project(":core:common"))
32+
implementation(project(":core:auth"))
33+
implementation(project(":core:storage"))
34+
implementation(project(":core:share"))
35+
implementation(project(":core:activity"))
36+
implementation(project(":core:version"))
37+
implementation(project(":core:sync"))
38+
implementation(project(":core:federation"))
39+
implementation(project(":core:collaboration"))
40+
implementation(project(":core:ai"))
3141
implementation(project(":plugins-api"))
3242
implementation(project(":infrastructure"))
43+
implementation(project(":domain:common"))
44+
implementation(project(":domain:storage"))
45+
implementation(project(":domain:auth"))
46+
implementation(project(":domain:share"))
47+
implementation(project(":domain:activity"))
48+
implementation(project(":application:auth"))
49+
implementation(project(":application:storage"))
50+
implementation(project(":application:share"))
51+
implementation(project(":application:user"))
52+
implementation(project(":application:admin"))
53+
implementation(project(":application:activity"))
54+
implementation(project(":application:metadata"))
55+
implementation(project(":application:version"))
56+
implementation(project(":application:sync"))
57+
implementation(project(":application:plugin"))
58+
implementation(project(":application:chunkedupload"))
59+
implementation(project(":application:health"))
60+
implementation(project(":application:ai"))
3361

3462
// Ktor Server
3563
implementation(libs.bundles.ktor.server)

backend/api/src/main/kotlin/com/vaultstadio/api/Application.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import com.vaultstadio.api.config.configureSwagger
1616
import com.vaultstadio.api.middleware.configureErrorHandling
1717
import com.vaultstadio.api.middleware.configureLogging
1818
import com.vaultstadio.api.plugins.CronScheduler
19-
import com.vaultstadio.api.service.UploadSessionManager
19+
import com.vaultstadio.core.domain.service.UploadSessionManager
2020
import io.github.oshai.kotlinlogging.KotlinLogging
2121
import io.ktor.http.HttpHeaders
2222
import io.ktor.http.HttpMethod
@@ -29,6 +29,7 @@ import io.ktor.server.websocket.WebSockets
2929
import kotlinx.coroutines.CoroutineScope
3030
import kotlinx.coroutines.Dispatchers
3131
import kotlinx.coroutines.SupervisorJob
32+
import kotlin.time.Duration
3233
import org.koin.ktor.ext.get as koinGet
3334

3435
private val logger = KotlinLogging.logger {}
@@ -110,7 +111,7 @@ private fun Application.configureBackgroundJobs() {
110111
cronExpression = "*/15 * * * *", // Every 15 minutes
111112
taskName = "cleanup-expired-uploads",
112113
) {
113-
val cleaned = uploadSessionManager.cleanupExpiredSessions()
114+
val cleaned = uploadSessionManager.cleanupExpiredSessions(Duration.parse("24h"))
114115
if (cleaned > 0) {
115116
logger.info { "Cleaned up $cleaned expired upload sessions" }
116117
}

backend/api/src/main/kotlin/com/vaultstadio/api/config/Koin.kt

Lines changed: 34 additions & 319 deletions
Large diffs are not rendered by default.

backend/api/src/main/kotlin/com/vaultstadio/api/config/Security.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
package com.vaultstadio.api.config
66

7-
import com.vaultstadio.core.domain.model.User
7+
import com.vaultstadio.domain.auth.model.User
88
import com.vaultstadio.core.domain.service.LoginInput
99
import com.vaultstadio.core.domain.service.UserService
1010
import io.ktor.http.HttpHeaders

backend/api/src/main/kotlin/com/vaultstadio/api/dto/ApiResponse.kt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@
44

55
package com.vaultstadio.api.dto
66

7-
import com.vaultstadio.core.domain.model.Activity
8-
import com.vaultstadio.core.domain.model.ActivityType
9-
import com.vaultstadio.core.domain.model.ItemType
10-
import com.vaultstadio.core.domain.model.ShareLink
11-
import com.vaultstadio.core.domain.model.StorageItem
12-
import com.vaultstadio.core.domain.model.StorageQuota
13-
import com.vaultstadio.core.domain.model.User
14-
import com.vaultstadio.core.domain.model.UserInfo
15-
import com.vaultstadio.core.domain.model.UserRole
16-
import com.vaultstadio.core.domain.model.UserStatus
17-
import com.vaultstadio.core.domain.model.Visibility
18-
import com.vaultstadio.core.domain.repository.PagedResult
7+
import com.vaultstadio.domain.activity.model.Activity
8+
import com.vaultstadio.domain.activity.model.ActivityType
9+
import com.vaultstadio.domain.auth.model.User
10+
import com.vaultstadio.domain.auth.model.UserInfo
11+
import com.vaultstadio.domain.auth.model.UserRole
12+
import com.vaultstadio.domain.auth.model.UserStatus
13+
import com.vaultstadio.domain.common.pagination.PagedResult
14+
import com.vaultstadio.domain.share.model.ShareLink
15+
import com.vaultstadio.domain.storage.model.ItemType
16+
import com.vaultstadio.domain.storage.model.StorageItem
17+
import com.vaultstadio.domain.storage.model.StorageQuota
18+
import com.vaultstadio.domain.storage.model.Visibility
1919
import kotlinx.datetime.Instant
2020
import kotlinx.serialization.KSerializer
2121
import kotlinx.serialization.Serializable

backend/api/src/main/kotlin/com/vaultstadio/api/middleware/ErrorHandling.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ package com.vaultstadio.api.middleware
77
import com.vaultstadio.api.config.AuthenticationException
88
import com.vaultstadio.api.dto.ApiError
99
import com.vaultstadio.api.dto.ApiResponse
10-
import com.vaultstadio.core.exception.StorageException
10+
import com.vaultstadio.domain.common.exception.StorageException
1111
import io.github.oshai.kotlinlogging.KotlinLogging
1212
import io.ktor.http.HttpStatusCode
1313
import io.ktor.server.application.Application

backend/api/src/main/kotlin/com/vaultstadio/api/plugins/PluginManager.kt

Lines changed: 19 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
/**
2-
* VaultStadio Plugin Manager
2+
* VaultStadio Plugin Manager implementation.
33
*/
44

55
package com.vaultstadio.api.plugins
66

77
import arrow.core.Either
8+
import com.vaultstadio.plugins.api.PluginManager
89
import arrow.core.left
910
import arrow.core.right
1011
import com.vaultstadio.core.ai.AIService
1112
import com.vaultstadio.core.domain.event.EventBus
1213
import com.vaultstadio.core.domain.model.StorageItemMetadata
1314
import com.vaultstadio.core.domain.repository.MetadataRepository
14-
import com.vaultstadio.core.domain.repository.StorageItemQuery
15-
import com.vaultstadio.core.domain.repository.StorageItemRepository
16-
import com.vaultstadio.core.domain.repository.UserRepository
1715
import com.vaultstadio.core.domain.service.StorageBackend
18-
import com.vaultstadio.core.exception.ItemNotFoundException
19-
import com.vaultstadio.core.exception.PluginException
20-
import com.vaultstadio.core.exception.PluginLoadException
21-
import com.vaultstadio.core.exception.PluginNotFoundException
22-
import com.vaultstadio.core.exception.StorageBackendException
23-
import com.vaultstadio.core.exception.StorageException
16+
import com.vaultstadio.domain.common.exception.ItemNotFoundException
17+
import com.vaultstadio.domain.common.exception.PluginException
18+
import com.vaultstadio.domain.common.exception.PluginLoadException
19+
import com.vaultstadio.domain.common.exception.PluginNotFoundException
20+
import com.vaultstadio.domain.common.exception.StorageBackendException
21+
import com.vaultstadio.domain.common.exception.StorageException
22+
import com.vaultstadio.domain.storage.repository.StorageItemQuery
23+
import com.vaultstadio.domain.storage.repository.StorageItemRepository
24+
import com.vaultstadio.domain.auth.repository.UserRepository
2425
import com.vaultstadio.plugins.api.Plugin
2526
import com.vaultstadio.plugins.api.PluginState
2627
import com.vaultstadio.plugins.context.AIApi
@@ -60,44 +61,6 @@ import java.util.concurrent.ConcurrentHashMap
6061

6162
private val logger = KotlinLogging.logger {}
6263

63-
/**
64-
* Plugin manager interface.
65-
*/
66-
interface PluginManager {
67-
fun listPlugins(): List<Plugin>
68-
fun getPlugin(pluginId: String): Plugin?
69-
fun isPluginEnabled(pluginId: String): Boolean
70-
fun getPluginState(pluginId: String): PluginState
71-
suspend fun enablePlugin(pluginId: String): Either<PluginException, Unit>
72-
suspend fun disablePlugin(pluginId: String): Either<PluginException, Unit>
73-
suspend fun loadPlugins()
74-
suspend fun shutdown()
75-
76-
/**
77-
* Handles a request to a plugin-registered endpoint.
78-
*
79-
* @param pluginId Plugin ID
80-
* @param method HTTP method
81-
* @param path Endpoint path (relative to /plugins/{pluginId}/)
82-
* @param request The endpoint request
83-
* @return The endpoint response, or null if endpoint not found
84-
*/
85-
suspend fun handlePluginEndpoint(
86-
pluginId: String,
87-
method: String,
88-
path: String,
89-
request: EndpointRequest,
90-
): EndpointResponse?
91-
92-
/**
93-
* Gets all registered endpoints for a plugin.
94-
*
95-
* @param pluginId Plugin ID
96-
* @return Map of "METHOD:path" to handler
97-
*/
98-
fun getPluginEndpoints(pluginId: String): Set<String>
99-
}
100-
10164
/**
10265
* Plugin manager implementation.
10366
*/
@@ -325,24 +288,20 @@ class PluginContextImpl(
325288
).left()
326289
}
327290

328-
// Get the item first to get the storage key
329291
val itemResult = storageItemRepository.findById(itemId)
330-
return when {
331-
itemResult.isLeft() ->
332-
itemResult
333-
as Either<StorageException, InputStream>
334-
else -> {
335-
val item = itemResult.getOrNull()
336-
when {
337-
item == null -> ItemNotFoundException(itemId).left()
338-
item.storageKey == null -> com.vaultstadio.core.exception.StorageBackendException(
292+
return itemResult.fold(
293+
{ error -> error.left() },
294+
{ item ->
295+
if (item == null) ItemNotFoundException(itemId).left()
296+
else when {
297+
item.storageKey == null -> StorageBackendException(
339298
"plugin",
340299
"Item has no storage key",
341300
).left()
342301
else -> storageBackend.retrieve(item.storageKey!!)
343302
}
344-
}
345-
}
303+
},
304+
)
346305
}
347306

348307
override suspend fun retrieve(

backend/api/src/main/kotlin/com/vaultstadio/api/routes/RouteExtensions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ package com.vaultstadio.api.routes
88

99
import arrow.core.Either
1010
import com.vaultstadio.api.dto.ApiResponse
11-
import com.vaultstadio.core.exception.StorageException
11+
import com.vaultstadio.domain.common.exception.StorageException
1212
import io.ktor.http.HttpStatusCode
1313
import io.ktor.server.application.ApplicationCall
1414
import io.ktor.server.response.respond

backend/api/src/main/kotlin/com/vaultstadio/api/routes/activity/ActivityRoutes.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ package com.vaultstadio.api.routes.activity
77
import com.vaultstadio.api.config.user
88
import com.vaultstadio.api.dto.ApiResponse
99
import com.vaultstadio.api.dto.toResponse
10-
import com.vaultstadio.api.application.usecase.activity.GetRecentActivityByItemUseCase
11-
import com.vaultstadio.api.application.usecase.activity.GetRecentActivityByUserUseCase
10+
import com.vaultstadio.application.usecase.activity.GetRecentActivityByItemUseCase
11+
import com.vaultstadio.application.usecase.activity.GetRecentActivityByUserUseCase
1212
import io.ktor.http.HttpStatusCode
1313
import io.ktor.server.application.call
1414
import io.ktor.server.response.respond

backend/api/src/main/kotlin/com/vaultstadio/api/routes/admin/AdminRoutes.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import com.vaultstadio.api.dto.ApiError
99
import com.vaultstadio.api.dto.ApiResponse
1010
import com.vaultstadio.api.dto.PaginatedResponse
1111
import com.vaultstadio.api.dto.toAdminResponse
12-
import com.vaultstadio.core.domain.model.UserRole
13-
import com.vaultstadio.api.application.usecase.admin.DeleteUserUseCase
14-
import com.vaultstadio.api.application.usecase.admin.GetAdminStatisticsUseCase
15-
import com.vaultstadio.api.application.usecase.admin.ListUsersUseCase
16-
import com.vaultstadio.api.application.usecase.admin.UpdateQuotaUseCase
17-
import com.vaultstadio.core.domain.repository.UserQuery
12+
import com.vaultstadio.domain.auth.model.UserRole
13+
import com.vaultstadio.application.usecase.admin.DeleteUserUseCase
14+
import com.vaultstadio.application.usecase.admin.GetAdminStatisticsUseCase
15+
import com.vaultstadio.application.usecase.admin.ListUsersUseCase
16+
import com.vaultstadio.application.usecase.admin.UpdateQuotaUseCase
17+
import com.vaultstadio.domain.auth.repository.UserQuery
1818
import io.ktor.http.HttpStatusCode
1919
import io.ktor.server.application.call
2020
import io.ktor.server.response.respond

0 commit comments

Comments
 (0)