diff --git a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/application/ClientsDatabaseRepository.kt b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/application/ClientsDatabaseRepository.kt index 01f5ef9..914340b 100644 --- a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/application/ClientsDatabaseRepository.kt +++ b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/application/ClientsDatabaseRepository.kt @@ -17,14 +17,13 @@ class ClientsDatabaseRepository( } } - override suspend fun get(id: String, context: IContext?): Client? { - return database.suspendedTransaction { + override suspend fun get(id: String, context: IContext?): Client? = + database.suspendedTransaction { Clients .selectAll() .where { Clients.id eq id } .map(Clients::toClient) .singleOrNull() } - } } diff --git a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/application/CodesInEmailsDatabaseRepository.kt b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/application/CodesInEmailsDatabaseRepository.kt index 4620e6a..5fcda66 100644 --- a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/application/CodesInEmailsDatabaseRepository.kt +++ b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/application/CodesInEmailsDatabaseRepository.kt @@ -17,51 +17,48 @@ class CodesInEmailsDatabaseRepository( } } - override suspend fun getCodeInEmail(code: String): CodeInEmail? { - return database.suspendedTransaction { + override suspend fun getCodeInEmail(code: String): CodeInEmail? = + database.suspendedTransaction { CodesInEmails .selectAll() .where { CodesInEmails.code eq code } .map(CodesInEmails::toCodeInEmail) .singleOrNull() } - } - override suspend fun getCodesInEmailsExpiringBefore(date: Instant): List { - return database.suspendedTransaction { + + override suspend fun getCodesInEmailsExpiringBefore(date: Instant): List = + database.suspendedTransaction { CodesInEmails .selectAll() .where { CodesInEmails.expiresAt less date.toString() } .map(CodesInEmails::toCodeInEmail) } - } override suspend fun createCodeInEmail( email: String, code: String, expiresAt: Instant, - ): CodeInEmail? { - return database.suspendedTransaction { + ): CodeInEmail? = + database.suspendedTransaction { CodesInEmails.insert { it[this.email] = email it[this.code] = code it[this.expiresAt] = expiresAt.toString() }.resultedValues?.map(CodesInEmails::toCodeInEmail)?.singleOrNull() } - } override suspend fun updateCodeInEmail( email: String, code: String, expiresAt: Instant, - ): Boolean { - return database.suspendedTransaction { + ): Boolean = + database.suspendedTransaction { CodesInEmails.update({ CodesInEmails.email eq email }) { it[this.code] = code it[this.expiresAt] = expiresAt.toString() } } == 1 - } override suspend fun deleteCodeInEmail(code: String) { database.suspendedTransaction { diff --git a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/posts/LikesInPostsDatabaseRepository.kt b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/posts/LikesInPostsDatabaseRepository.kt index 5990553..7bf2d12 100644 --- a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/posts/LikesInPostsDatabaseRepository.kt +++ b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/posts/LikesInPostsDatabaseRepository.kt @@ -19,14 +19,13 @@ class LikesInPostsDatabaseRepository( } } - override suspend fun list(limit: Long, offset: Long, parentId: String, context: IContext?): List { - return database.suspendedTransaction { + override suspend fun list(limit: Long, offset: Long, parentId: String, context: IContext?): List = + database.suspendedTransaction { customJoin() .where { LikesInPosts.postId eq parentId } .limit(limit.toInt(), offset) .map { LikesInPosts.toLikeInPost(it, null, Users.toUser(it)) } } - } override suspend fun create(payload: Unit, parentId: String, context: IContext?): LikeInPost? { if (context !is UserContext) return null @@ -38,16 +37,15 @@ class LikesInPostsDatabaseRepository( } } - override suspend fun delete(id: String, parentId: String, context: IContext?): Boolean { - return database.suspendedTransaction { + override suspend fun delete(id: String, parentId: String, context: IContext?): Boolean = + database.suspendedTransaction { LikesInPosts.deleteWhere { postId eq parentId and (userId eq id) } } == 1 - } - private fun customJoin(additionalFields: List> = listOf()): Query { - return LikesInPosts + private fun customJoin(additionalFields: List> = listOf()): Query = + LikesInPosts .join(Users, JoinType.LEFT, LikesInPosts.userId, Users.id) .select( additionalFields + @@ -59,6 +57,5 @@ class LikesInPostsDatabaseRepository( Users.avatar + Users.verified ) - } } diff --git a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/posts/PostsDatabaseRepository.kt b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/posts/PostsDatabaseRepository.kt index aa5c252..3a3ceea 100644 --- a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/posts/PostsDatabaseRepository.kt +++ b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/posts/PostsDatabaseRepository.kt @@ -22,8 +22,8 @@ class PostsDatabaseRepository( } } - override suspend fun listDefault(limit: Long, offset: Long, context: UserContext): List { - return database.suspendedTransaction { + override suspend fun listDefault(limit: Long, offset: Long, context: UserContext): List = + database.suspendedTransaction { customJoinColumnSet(context.userId) .join( FollowersInUsers, @@ -42,20 +42,18 @@ class PostsDatabaseRepository( .limit(limit.toInt(), offset) .map { Posts.toPost(it, Users.toUser(it)) } } - } - override suspend fun listTrends(limit: Long, offset: Long, context: UserContext): List { - return database.suspendedTransaction { + override suspend fun listTrends(limit: Long, offset: Long, context: UserContext): List = + database.suspendedTransaction { customJoin(context.userId) .groupBy(Posts.id) .orderBy(Posts.trendsCount to SortOrder.DESC) .limit(limit.toInt(), offset) .map { Posts.toPost(it, Users.toUser(it)) } } - } - override suspend fun listUserPosts(userId: String, limit: Long, offset: Long, context: UserContext): List { - return database.suspendedTransaction { + override suspend fun listUserPosts(userId: String, limit: Long, offset: Long, context: UserContext): List = + database.suspendedTransaction { customJoin(context.userId) .where { Posts.userId eq userId } .groupBy(Posts.id) @@ -63,10 +61,9 @@ class PostsDatabaseRepository( .limit(limit.toInt(), offset) .map { Posts.toPost(it, Users.toUser(it)) } } - } - override suspend fun listReplies(postId: String, limit: Long, offset: Long, context: UserContext): List { - return database.suspendedTransaction { + override suspend fun listReplies(postId: String, limit: Long, offset: Long, context: UserContext): List = + database.suspendedTransaction { customJoin(context.userId) .where { Posts.repliedToId eq postId } .groupBy(Posts.id) @@ -74,7 +71,6 @@ class PostsDatabaseRepository( .limit(limit.toInt(), offset) .map { Posts.toPost(it, Users.toUser(it)) } } - } override suspend fun get(id: String, context: IContext?): Post? { if (context !is UserContext) return null @@ -107,29 +103,26 @@ class PostsDatabaseRepository( return get(id, context) } - override suspend fun update(id: String, payload: PostPayload, context: IContext?): Boolean { - return database.suspendedTransaction { + override suspend fun update(id: String, payload: PostPayload, context: IContext?): Boolean = + database.suspendedTransaction { Posts.update({ Posts.id eq id }) { it[body] = payload.body it[edited] = Clock.System.now().toString() } } == 1 - } - override suspend fun delete(id: String, context: IContext?): Boolean { - return database.suspendedTransaction { + override suspend fun delete(id: String, context: IContext?): Boolean = + database.suspendedTransaction { Posts.deleteWhere { Posts.id eq id } } == 1 - } - private fun customJoin(viewedBy: String): Query { - return customJoinColumnSet(viewedBy).customPostsSlice() - } + private fun customJoin(viewedBy: String): Query = + customJoinColumnSet(viewedBy).customPostsSlice() - private fun customJoinColumnSet(viewedBy: String): ColumnSet { - return Posts.join(Users, JoinType.INNER, Posts.userId, Users.id) + private fun customJoinColumnSet(viewedBy: String): ColumnSet = + Posts.join(Users, JoinType.INNER, Posts.userId, Users.id) .join(LikesInPosts, JoinType.LEFT, Posts.id, LikesInPosts.postId) .join(Posts.replies, JoinType.LEFT, Posts.id, Posts.replies[Posts.repliedToId]) .join(Posts.reposts, JoinType.LEFT, Posts.id, Posts.reposts[Posts.repostOfId]) @@ -139,10 +132,9 @@ class PostsDatabaseRepository( Posts.id, LikesInPosts.likesIn[LikesInPosts.postId] ) { LikesInPosts.likesIn[LikesInPosts.userId] eq viewedBy } - } - private fun ColumnSet.customPostsSlice(additionalFields: List> = listOf()): Query { - return select( + private fun ColumnSet.customPostsSlice(additionalFields: List> = listOf()): Query = + select( Posts.columns + Users.id + Users.displayName + @@ -155,6 +147,5 @@ class PostsDatabaseRepository( Posts.likesIn + additionalFields ) - } } diff --git a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/users/ClientsInUsersDatabaseRepository.kt b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/users/ClientsInUsersDatabaseRepository.kt index 42aca0e..ecca833 100644 --- a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/users/ClientsInUsersDatabaseRepository.kt +++ b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/users/ClientsInUsersDatabaseRepository.kt @@ -20,8 +20,8 @@ class ClientsInUsersDatabaseRepository( } } - override suspend fun create(userId: String, clientId: String, expiration: Instant): ClientInUser? { - return database.suspendedTransaction { + override suspend fun create(userId: String, clientId: String, expiration: Instant): ClientInUser? = + database.suspendedTransaction { ClientsInUsers.insert { it[code] = generateCode() it[ClientsInUsers.userId] = userId @@ -29,24 +29,21 @@ class ClientsInUsersDatabaseRepository( it[ClientsInUsers.expiration] = expiration.toString() }.resultedValues?.map(ClientsInUsers::toClientInUser)?.singleOrNull() } - } - override suspend fun get(code: String): ClientInUser? { - return database.suspendedTransaction { + override suspend fun get(code: String): ClientInUser? = + database.suspendedTransaction { ClientsInUsers .selectAll() .where { ClientsInUsers.code eq code } .map(ClientsInUsers::toClientInUser) .singleOrNull() } - } - override suspend fun delete(code: String): Boolean { - return database.suspendedTransaction { + override suspend fun delete(code: String): Boolean = + database.suspendedTransaction { ClientsInUsers.deleteWhere { ClientsInUsers.code eq code } } == 1 - } } diff --git a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/users/FollowersInUsersDatabaseRepository.kt b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/users/FollowersInUsersDatabaseRepository.kt index 80129b1..5f7bf7b 100644 --- a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/users/FollowersInUsersDatabaseRepository.kt +++ b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/users/FollowersInUsersDatabaseRepository.kt @@ -18,28 +18,26 @@ class FollowersInUsersDatabaseRepository( } } - override suspend fun list(limit: Long, offset: Long, parentId: String, context: IContext?): List { - return database.suspendedTransaction { + override suspend fun list(limit: Long, offset: Long, parentId: String, context: IContext?): List = + database.suspendedTransaction { customFollowersJoin() .where { FollowersInUsers.targetId eq parentId and (FollowersInUsers.accepted eq true) } .limit(limit.toInt(), offset) .map { FollowersInUsers.toFollowerInUser(it, Users.toUser(it), null) } } - } override suspend fun listFollowing( limit: Long, offset: Long, parentId: String, context: IContext?, - ): List { - return database.suspendedTransaction { + ): List = + database.suspendedTransaction { customFollowingJoin() .where { FollowersInUsers.userId eq parentId and (FollowersInUsers.accepted eq true) } .limit(limit.toInt(), offset) .map { FollowersInUsers.toFollowerInUser(it, null, Users.toUser(it)) } } - } override suspend fun create(payload: Unit, parentId: String, context: IContext?): FollowerInUser? { if (context !is FollowerInUserContext) return null @@ -52,28 +50,25 @@ class FollowersInUsersDatabaseRepository( } } - override suspend fun delete(id: String, parentId: String, context: IContext?): Boolean { - return database.suspendedTransaction { + override suspend fun delete(id: String, parentId: String, context: IContext?): Boolean = + database.suspendedTransaction { FollowersInUsers.deleteWhere { userId eq id and (targetId eq parentId) } } == 1 - } - private fun customFollowersJoin(): Query { - return FollowersInUsers + private fun customFollowersJoin(): Query = + FollowersInUsers .join(Users, JoinType.LEFT, FollowersInUsers.userId, Users.id) .customUsersFollowersSlice() - } - private fun customFollowingJoin(): Query { - return FollowersInUsers + private fun customFollowingJoin(): Query = + FollowersInUsers .join(Users, JoinType.LEFT, FollowersInUsers.targetId, Users.id) .customUsersFollowersSlice() - } - private fun ColumnSet.customUsersFollowersSlice(additionalFields: List> = listOf()): Query { - return select( + private fun ColumnSet.customUsersFollowersSlice(additionalFields: List> = listOf()): Query = + select( additionalFields + FollowersInUsers.userId + FollowersInUsers.targetId + @@ -83,6 +78,5 @@ class FollowersInUsersDatabaseRepository( Users.avatar + Users.verified ) - } } diff --git a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/users/UsersDatabaseRepository.kt b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/users/UsersDatabaseRepository.kt index 6f14329..a42cd6a 100644 --- a/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/users/UsersDatabaseRepository.kt +++ b/extopy-backend/src/commonMain/kotlin/me/nathanfallet/extopy/database/users/UsersDatabaseRepository.kt @@ -32,8 +32,8 @@ class UsersDatabaseRepository( } } - override suspend fun getForUsernameOrEmail(username: String, includePassword: Boolean): User? { - return database.suspendedTransaction { + override suspend fun getForUsernameOrEmail(username: String, includePassword: Boolean): User? = + database.suspendedTransaction { Users .selectAll() .where { Users.username eq username or (Users.email eq username) } @@ -42,10 +42,9 @@ class UsersDatabaseRepository( } .singleOrNull() } - } - override suspend fun create(payload: CreateUserPayload, context: IContext?): User? { - return database.suspendedTransaction { + override suspend fun create(payload: CreateUserPayload, context: IContext?): User? = + database.suspendedTransaction { Users.insert { it[id] = generateId() it[displayName] = payload.displayName @@ -58,10 +57,9 @@ class UsersDatabaseRepository( it[lastActive] = Clock.System.now().toString() }.resultedValues?.map(Users::toUser)?.singleOrNull() } - } - override suspend fun update(id: String, payload: UpdateUserPayload, context: IContext?): Boolean { - return database.suspendedTransaction { + override suspend fun update(id: String, payload: UpdateUserPayload, context: IContext?): Boolean = + database.suspendedTransaction { Users.update({ Users.id eq id }) { payload.username?.let { username -> it[Users.username] = username @@ -83,14 +81,12 @@ class UsersDatabaseRepository( } } } == 1 - } - override suspend fun delete(id: String, context: IContext?): Boolean { + override suspend fun delete(id: String, context: IContext?): Boolean = TODO("Not yet implemented") - } - private fun customJoin(viewedBy: String, additionalFields: List> = listOf()): Query { - return Users.join(Posts, JoinType.LEFT, Users.id, Posts.userId) + private fun customJoin(viewedBy: String, additionalFields: List> = listOf()): Query = + Users.join(Posts, JoinType.LEFT, Users.id, Posts.userId) .join(FollowersInUsers, JoinType.LEFT, Users.id, FollowersInUsers.targetId) .join( FollowersInUsers.following, @@ -134,6 +130,5 @@ class UsersDatabaseRepository( Users.followersIn + Users.followingIn ) - } }