Skip to content

Commit 5cb2e05

Browse files
committed
changed database scheme and added pinning post functionality to ConversationViewModel
1 parent f96ed39 commit 5cb2e05

File tree

9 files changed

+74
-8
lines changed

9 files changed

+74
-8
lines changed

app/src/main/java/de/tum/informatics/www1/artemis/native_app/android/db/AppDatabase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import de.tum.informatics.www1.artemis.native_app.feature.push.communication_not
2929
CommunicationMessageEntity::class
3030
],
3131
exportSchema = true,
32-
version = 10,
32+
version = 11,
3333
)
3434
@TypeConverters(RoomTypeConverters::class)
3535
abstract class AppDatabase : RoomDatabase() {

feature/course-view/src/debug/kotlin/de/tum/informatics/www1/artemis/native_app/feature/courseview/MessagingScreenshots.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,8 @@ private fun generateMessage(
291291
courseWideContext = null,
292292
tags = emptyList(),
293293
answers = emptyList(),
294-
reactions = emptyList()
294+
reactions = emptyList(),
295+
displayPriority = null
295296
)
296297
)
297298
}

feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/service/network/MetisModificationService.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.se
33
import de.tum.informatics.www1.artemis.native_app.core.data.NetworkResponse
44
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.MetisContext
55
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.AnswerPost
6+
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.DisplayPriority
67
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.Reaction
78
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.StandalonePost
89

@@ -24,6 +25,14 @@ interface MetisModificationService {
2425
authToken: String
2526
): NetworkResponse<StandalonePost>
2627

28+
suspend fun updatePostDisplayPriority(
29+
context: MetisContext,
30+
post: StandalonePost,
31+
displayPriority: DisplayPriority,
32+
serverUrl: String,
33+
authToken: String
34+
): NetworkResponse<StandalonePost>
35+
2736
suspend fun createAnswerPost(
2837
context: MetisContext,
2938
post: AnswerPost,

feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/service/network/impl/MetisModificationServiceImpl.kt

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@ import de.tum.informatics.www1.artemis.native_app.core.data.NetworkResponse
44
import de.tum.informatics.www1.artemis.native_app.core.data.cookieAuth
55
import de.tum.informatics.www1.artemis.native_app.core.data.performNetworkCall
66
import de.tum.informatics.www1.artemis.native_app.core.data.service.KtorProvider
7-
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.MetisContext
87
import de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.service.network.MetisModificationService
98
import de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.service.network.RESOURCE_PATH_SEGMENTS
9+
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.MetisContext
1010
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.AnswerPost
11+
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.DisplayPriority
1112
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.Reaction
1213
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.StandalonePost
1314
import io.ktor.client.call.body
1415
import io.ktor.client.request.accept
1516
import io.ktor.client.request.delete
17+
import io.ktor.client.request.parameter
1618
import io.ktor.client.request.post
1719
import io.ktor.client.request.put
1820
import io.ktor.client.request.setBody
@@ -97,6 +99,34 @@ internal class MetisModificationServiceImpl(
9799
}
98100
}
99101

102+
override suspend fun updatePostDisplayPriority(
103+
context: MetisContext,
104+
post: StandalonePost,
105+
displayPriority: DisplayPriority,
106+
serverUrl: String,
107+
authToken: String
108+
): NetworkResponse<StandalonePost> {
109+
val x = performNetworkCall {
110+
ktorProvider.ktorClient.put(serverUrl) {
111+
url {
112+
appendPathSegments(RESOURCE_PATH_SEGMENTS)
113+
appendPathSegments(
114+
context.courseId.toString(),
115+
context.standalonePostResourceEndpoint
116+
)
117+
appendPathSegments(post.id.toString())
118+
appendPathSegments("display-priority")
119+
}
120+
121+
contentType(ContentType.Application.Json)
122+
parameter("displayPriority", displayPriority)
123+
cookieAuth(authToken)
124+
}
125+
}
126+
println(x.orNull()?.body())
127+
return x.bind { it.body() }
128+
}
129+
100130
override suspend fun updateAnswerPost(
101131
context: MetisContext,
102132
post: AnswerPost,

feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/ui/ConversationViewModel.kt

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.M
4646
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.StandalonePostId
4747
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.AnswerPost
4848
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.ConversationWebsocketDto
49+
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.DisplayPriority
4950
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.IAnswerPost
5051
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.IBasePost
5152
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.IStandalonePost
@@ -369,12 +370,29 @@ internal open class ConversationViewModel(
369370
return viewModelScope.async(coroutineContext) {
370371
val conversation =
371372
loadConversation() ?: return@async MetisModificationFailure.UPDATE_POST
372-
val newPost = StandalonePost(23423) //TODO
373-
metisModificationService.updateStandalonePost(
373+
374+
val newDisplayPriority = if (post.displayPriority == DisplayPriority.PINNED) {
375+
DisplayPriority.NONE
376+
} else {
377+
DisplayPriority.PINNED
378+
}
379+
380+
val newPost = when (post) {
381+
is StandalonePost -> post.copy(displayPriority = newDisplayPriority)
382+
is PostPojo -> StandalonePost(
383+
post = post.copy(displayPriority = newDisplayPriority),
384+
conversation = conversation
385+
)
386+
387+
else -> throw IllegalArgumentException()
388+
}
389+
390+
metisModificationService.updatePostDisplayPriority(
374391
context = metisContext,
375392
post = newPost,
393+
displayPriority = newDisplayPriority,
376394
serverUrl = serverConfigurationService.serverUrl.first(),
377-
authToken = accountService.authToken.first()
395+
authToken = accountService.authToken.first(),
378396
)
379397
.asMetisModificationFailure(MetisModificationFailure.UPDATE_POST)
380398
}

feature/metis/shared/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/shared/content/dto/IStandalonePost.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ interface IStandalonePost : IBasePost {
77
val answers: List<IAnswerPost>?
88
val tags: List<String>?
99
val resolved: Boolean?
10+
val displayPriority: DisplayPriority?
1011

1112
/**
1213
* A unique key which can be used to reference this post uniquely

feature/metis/shared/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/shared/content/dto/StandalonePost.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ data class StandalonePost(
2525
// val plagiarismCase: PlagiarismCase? = null,
2626
val conversation: Conversation? = null,
2727
val courseWideContext: CourseWideContext? = null,
28-
val displayPriority: DisplayPriority? = null,
28+
override val displayPriority: DisplayPriority? = null,
2929
override val resolved: Boolean? = null
3030
) : BasePost(), IStandalonePost {
3131

@@ -39,7 +39,8 @@ data class StandalonePost(
3939
conversation = conversation,
4040
creationDate = post.creationDate,
4141
title = post.title,
42-
resolved = post.resolved
42+
resolved = post.resolved,
43+
displayPriority = post.displayPriority
4344
)
4445

4546
@Transient

feature/metis/shared/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/shared/db/MetisDao.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ interface MetisDao {
211211
sp.context,
212212
sp.title,
213213
sp.resolved,
214+
sp.display_priority,
214215
u.name as author_name,
215216
p.author_role,
216217
p.author_id as author_id
@@ -237,6 +238,7 @@ interface MetisDao {
237238
sp.context,
238239
sp.title,
239240
sp.resolved,
241+
sp.display_priority,
240242
u.name as author_name,
241243
p.author_role,
242244
p.author_id as author_id
@@ -272,6 +274,7 @@ interface MetisDao {
272274
sp.context,
273275
sp.title,
274276
sp.resolved,
277+
sp.display_priority,
275278
u.name as author_name,
276279
p.author_role,
277280
p.author_id as author_id

feature/metis/shared/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/shared/db/pojo/PostPojo.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import androidx.room.ColumnInfo
44
import androidx.room.Ignore
55
import androidx.room.Relation
66
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.StandalonePostId
7+
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.DisplayPriority
78
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.IReaction
89
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.IStandalonePost
910
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.UserRole
@@ -37,6 +38,8 @@ data class PostPojo(
3738
override val resolved: Boolean,
3839
@ColumnInfo(name = "context")
3940
val courseWideContext: BasePostingEntity.CourseWideContext?,
41+
@ColumnInfo(name = "display_priority")
42+
override val displayPriority: DisplayPriority?,
4043
@Relation(
4144
entity = StandalonePostTagEntity::class,
4245
entityColumn = "post_id",

0 commit comments

Comments
 (0)