Skip to content

Commit 4157221

Browse files
author
Leandro Ferreira
committed
Adding workspace
1 parent cd14346 commit 4157221

File tree

10 files changed

+102
-80
lines changed

10 files changed

+102
-80
lines changed

backend/core/auth/src/main/java/io/writeopia/api/core/auth/routing/AuthRouting.kt

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import io.writeopia.api.core.auth.repository.deleteUserById
2323
import io.writeopia.api.core.auth.repository.getEnabledUserByEmail
2424
import io.writeopia.api.core.auth.repository.getUserByEmail
2525
import io.writeopia.api.core.auth.repository.getUserById
26+
import io.writeopia.api.core.auth.utils.runIfMember
2627
import io.writeopia.connection.logger
2728
import io.writeopia.sdk.serialization.data.auth.AuthResponse
2829
import io.writeopia.sdk.serialization.data.auth.DeleteAccountResponse
@@ -115,20 +116,22 @@ fun Routing.authRoute(writeopiaDb: WriteopiaDbBackend, debugMode: Boolean = fals
115116
authenticate("auth-jwt", optional = debugMode) {
116117
post<AddUserToWorkspaceRequest>("/api/workspace/user") { request ->
117118
val userId = getUserId() ?: ""
118-
119119
val (userEmail, workspaceId, role) = request
120-
val result = WorkspaceService.addUserToWorkspaceSecure(
121-
workspaceOwnerId = userId,
122-
userEmail,
123-
workspaceId,
124-
role,
125-
writeopiaDb
126-
)
127120

128-
if (result) {
129-
call.respond(HttpStatusCode.OK, "User added to workspace")
130-
} else {
131-
call.respond(HttpStatusCode.NotFound, "Not added")
121+
runIfMember(userId, workspaceId, writeopiaDb, debugMode) {
122+
val result = WorkspaceService.addUserToWorkspaceSecure(
123+
workspaceOwnerId = userId,
124+
userEmail,
125+
workspaceId,
126+
role,
127+
writeopiaDb
128+
)
129+
130+
if (result) {
131+
call.respond(HttpStatusCode.OK, "User added to workspace")
132+
} else {
133+
call.respond(HttpStatusCode.NotFound, "Not added")
134+
}
132135
}
133136
}
134137
}

backend/core/auth/src/main/java/io/writeopia/api/core/auth/utils/VerifyUser.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ suspend fun RoutingContext.runIfMember(
1010
userId: String,
1111
workspaceId: String,
1212
writeopiaDb: WriteopiaDbBackend,
13+
debug: Boolean = false,
1314
block: suspend () -> Unit
1415
) {
1516
val shouldContinue = writeopiaDb.isUserInWorkspace(userId, workspaceId)
1617

17-
if (shouldContinue) {
18+
if (shouldContinue || debug) {
1819
block()
1920
}
2021

backend/documents/documents/src/main/java/io/writeopia/api/documents/documents/DocumentsService.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@ object DocumentsService {
2323

2424
suspend fun receiveDocuments(
2525
documents: List<Document>,
26+
workspaceId: String,
2627
writeopiaDb: WriteopiaDbBackend,
2728
useAi: Boolean
2829
): Boolean {
2930
documents.forEach { document ->
3031
writeopiaDb.saveDocument(document)
3132
}
3233

33-
return if (useAi) sendToAiHub(documents) else true
34+
return if (useAi) sendToAiHub(documents, workspaceId) else true
3435
}
3536

3637
suspend fun receiveFolders(
@@ -51,20 +52,20 @@ object DocumentsService {
5152

5253
suspend fun getDocumentById(
5354
id: String,
54-
userId: String,
55+
workspaceId: String,
5556
writeopiaDb: WriteopiaDbBackend
56-
): Document? = writeopiaDb.getDocumentById(id, userId)
57+
): Document? = writeopiaDb.getDocumentById(id, workspaceId)
5758

5859
suspend fun getFolderById(
5960
id: String,
6061
userId: String,
6162
writeopiaDb: WriteopiaDbBackend
6263
): Folder? = writeopiaDb.getFolderById(id, userId)
6364

64-
private suspend fun sendToAiHub(documents: List<Document>) =
65+
private suspend fun sendToAiHub(documents: List<Document>, workspaceId: String,) =
6566
wrWebClient.post("${Urls.AI_HUB}/documents/") {
6667
contentType(ContentType.Application.Json)
67-
setBody(SendDocumentsRequest(documents.map { it.toApi() }))
68+
setBody(SendDocumentsRequest(documents.map { it.toApi() }, workspaceId))
6869
}.status
6970
.isSuccess()
7071
}

backend/documents/documents/src/main/java/io/writeopia/api/documents/documents/repository/DocumentSqlBeDao.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ class DocumentSqlBeDao(
132132
)
133133
}
134134

135-
fun loadDocumentById(id: String, userId: String): Document? =
136-
documentQueries?.selectById(id, userId)
135+
fun loadDocumentById(id: String, workspaceId: String): Document? =
136+
documentQueries?.selectById(id, workspaceId)
137137
?.executeAsOneOrNull()
138138
?.let { entity ->
139139
Document(

backend/documents/documents/src/main/java/io/writeopia/api/documents/documents/repository/DocumentsRepository.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,11 @@ suspend fun WriteopiaDbBackend.allFoldersByWorkspaceId(workspaceId: String): Lis
4747
fun WriteopiaDbBackend.getDocumentsByParentId(parentId: String = "root"): List<Document> =
4848
getDocumentDaoFn().loadDocumentByParentId(parentId)
4949

50-
suspend fun WriteopiaDbBackend.getDocumentById(id: String = "test", userId: String): Document? =
51-
getDocumentDaoFn().loadDocumentById(id, userId)
50+
suspend fun WriteopiaDbBackend.getDocumentById(
51+
id: String = "test",
52+
workspaceId: String
53+
): Document? =
54+
getDocumentDaoFn().loadDocumentById(id, workspaceId)
5255

5356
suspend fun WriteopiaDbBackend.getFolderById(id: String = "test", userId: String): Folder? =
5457
getDocumentDaoFn().loadFolderById(id)

backend/documents/documents/src/main/java/io/writeopia/api/documents/routing/DocumentsRouting.kt

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ fun Routing.documentsRoute(
4040
val id = call.pathParameters["id"] ?: ""
4141
val workspaceId = call.pathParameters["workspaceId"] ?: ""
4242

43-
runIfMember(userId, workspaceId, writeopiaDb) {
44-
val document = DocumentsService.getDocumentById(id, userId, writeopiaDb)
43+
runIfMember(userId, workspaceId, writeopiaDb, debug) {
44+
val document = DocumentsService.getDocumentById(id, workspaceId, writeopiaDb)
4545

4646
if (document != null) {
4747
call.respond(
@@ -59,11 +59,11 @@ fun Routing.documentsRoute(
5959
}
6060

6161
authenticate("auth-jwt", optional = debug) {
62-
get("/api/workspace/{workspaceId}/parent/{parentId}") {
62+
get("/api/workspace/{workspaceId}/document/parent/{parentId}") {
6363
val userId = getUserId() ?: ""
6464
val workspaceId = call.pathParameters["workspaceId"] ?: ""
6565

66-
runIfMember(userId, workspaceId, writeopiaDb) {
66+
runIfMember(userId, workspaceId, writeopiaDb, debug) {
6767
val parentId = call.pathParameters["parentId"]!!
6868
val documentList = writeopiaDb.getDocumentsByParentId(parentId)
6969

@@ -83,12 +83,12 @@ fun Routing.documentsRoute(
8383
}
8484

8585
authenticate("auth-jwt", optional = debug) {
86-
get("/api/workspace/{workspaceId}/parent/{id}") {
86+
get("/api/workspace/{workspaceId}/document/parent/{id}") {
8787
val userId = getUserId() ?: ""
8888
val workspaceId = call.pathParameters["workspaceId"] ?: ""
8989
val id = call.pathParameters["id"]!!
9090

91-
runIfMember(userId, workspaceId, writeopiaDb) {
91+
runIfMember(userId, workspaceId, writeopiaDb, debug) {
9292
val ids = writeopiaDb.getIdsByParentId(id)
9393

9494
if (ids.isNotEmpty()) {
@@ -112,7 +112,7 @@ fun Routing.documentsRoute(
112112
val query = call.queryParameters["q"]
113113
val workspaceId = call.pathParameters["workspaceId"] ?: ""
114114

115-
runIfMember(userId, workspaceId, writeopiaDb) {
115+
runIfMember(userId, workspaceId, writeopiaDb, debug) {
116116
if (query == null) {
117117
call.respond(HttpStatusCode.BadRequest)
118118
} else {
@@ -132,12 +132,14 @@ fun Routing.documentsRoute(
132132
}
133133

134134
authenticate("auth-jwt", optional = debug) {
135-
post<SendDocumentsRequest>("/api/workspace/{workspaceId}/document") { request ->
135+
post<SendDocumentsRequest>("/api/workspace/document") { request ->
136136
val userId = getUserId() ?: ""
137-
val workspaceId = call.pathParameters["workspaceId"] ?: ""
138-
val documentList = request.documents
137+
val workspaceId = request.workspaceId
138+
val documentList = request.documents.map { document ->
139+
document.copy(workspaceId = workspaceId)
140+
}
139141

140-
runIfMember(userId, workspaceId, writeopiaDb) {
142+
runIfMember(userId, workspaceId, writeopiaDb, debug) {
141143
try {
142144
if (documentList.isNotEmpty()) {
143145
val addedToHub = DocumentsService.receiveDocuments(
@@ -146,6 +148,7 @@ fun Routing.documentsRoute(
146148
.toModel()
147149
.copy(lastSyncedAt = Clock.System.now())
148150
},
151+
workspaceId = workspaceId,
149152
writeopiaDb,
150153
useAi
151154
)
@@ -182,7 +185,7 @@ fun Routing.documentsRoute(
182185
val userId = getUserId() ?: ""
183186
val workspaceId = call.pathParameters["workspaceId"] ?: ""
184187

185-
runIfMember(userId, workspaceId, writeopiaDb) {
188+
runIfMember(userId, workspaceId, writeopiaDb, debug) {
186189
val folder = DocumentsService.getFolderById(id, userId, writeopiaDb)
187190

188191
if (folder != null) {
@@ -199,13 +202,15 @@ fun Routing.documentsRoute(
199202
}
200203
}
201204

202-
post<SendFoldersRequest>("/api/workspace/{workspaceId}/folder") { request ->
205+
post<SendFoldersRequest>("/api/workspace/folder") { request ->
203206
val userId = getUserId() ?: ""
204-
val workspaceId = call.pathParameters["workspaceId"] ?: ""
207+
val workspaceId = request.workspaceId
205208

206-
runIfMember(userId, workspaceId, writeopiaDb) {
209+
runIfMember(userId, workspaceId, writeopiaDb, debug) {
207210
try {
208-
val folderList = request.folders
211+
val folderList = request.folders.map { folder ->
212+
folder.copy(workspaceId = workspaceId)
213+
}
209214

210215
if (folderList.isNotEmpty()) {
211216
val addedToHub = DocumentsService.receiveFolders(
@@ -241,11 +246,11 @@ fun Routing.documentsRoute(
241246
}
242247

243248
authenticate("auth-jwt", optional = debug) {
244-
post<FolderDiffRequest>("/api/workspace/{workspaceId}/document/folder/diff") { folderDiff ->
249+
post<FolderDiffRequest>("/api/workspace/document/folder/diff") { folderDiff ->
245250
val userId = getUserId() ?: ""
246-
val workspaceId = call.pathParameters["workspaceId"] ?: ""
251+
val workspaceId = folderDiff.workspaceId
247252

248-
runIfMember(userId, workspaceId, writeopiaDb) {
253+
runIfMember(userId, workspaceId, writeopiaDb, debug) {
249254
try {
250255
println("loading folder diff")
251256
println("user id: ${getUserId()}")
@@ -275,11 +280,11 @@ fun Routing.documentsRoute(
275280
}
276281

277282
authenticate("auth-jwt", optional = debug) {
278-
post<WorkspaceDiffRequest>("/api/workspace/{workspaceId}/workspace/diff") { workspaceDiff ->
283+
post<WorkspaceDiffRequest>("/api/workspace/diff") { workspaceDiff ->
279284
val userId = getUserId() ?: ""
280-
val workspaceId = call.pathParameters["workspaceId"] ?: ""
285+
val workspaceId = workspaceDiff.workspaceId
281286

282-
runIfMember(userId, workspaceId, writeopiaDb) {
287+
runIfMember(userId, workspaceId, writeopiaDb, debug) {
283288
try {
284289
println("loading workspace diff")
285290
println("user id: ${getUserId()}")

backend/documents/documents/src/main/java/io/writeopia/api/documents/search/SearchService.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@ object SearchDocument {
1717

1818
suspend fun search(
1919
query: String,
20-
userId: String,
20+
workspaceId: String,
2121
writeopiaDb: WriteopiaDbBackend
2222
): ResultData<List<Document>> {
23-
return semanticSearch(query, userId).mapSuspend { idList ->
23+
return semanticSearch(query, workspaceId).mapSuspend { idList ->
2424
idList.mapNotNull { id ->
25-
writeopiaDb.getDocumentById(id, userId)
25+
writeopiaDb.getDocumentById(id, workspaceId)
2626
}
2727
}
2828
}
2929

30-
private suspend fun semanticSearch(query: String, userId: String): ResultData<List<String>> {
30+
private suspend fun semanticSearch(query: String, workspaceId: String): ResultData<List<String>> {
3131
val request = wrWebClient.get("${Urls.AI_HUB}/documents/search/?q=${query}") {
3232
contentType(ContentType.Application.Json)
3333
}

0 commit comments

Comments
 (0)