Skip to content

Commit

Permalink
Fewer lines in DB
Browse files Browse the repository at this point in the history
  • Loading branch information
nathanfallet committed Feb 2, 2024
1 parent 8fa7283 commit 86c5ba4
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 92 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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<CodeInEmail> {
return database.suspendedTransaction {

override suspend fun getCodesInEmailsExpiringBefore(date: Instant): List<CodeInEmail> =
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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,13 @@ class LikesInPostsDatabaseRepository(
}
}

override suspend fun list(limit: Long, offset: Long, parentId: String, context: IContext?): List<LikeInPost> {
return database.suspendedTransaction {
override suspend fun list(limit: Long, offset: Long, parentId: String, context: IContext?): List<LikeInPost> =
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
Expand All @@ -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<Expression<*>> = listOf()): Query {
return LikesInPosts
private fun customJoin(additionalFields: List<Expression<*>> = listOf()): Query =
LikesInPosts
.join(Users, JoinType.LEFT, LikesInPosts.userId, Users.id)
.select(
additionalFields +
Expand All @@ -59,6 +57,5 @@ class LikesInPostsDatabaseRepository(
Users.avatar +
Users.verified
)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ class PostsDatabaseRepository(
}
}

override suspend fun listDefault(limit: Long, offset: Long, context: UserContext): List<Post> {
return database.suspendedTransaction {
override suspend fun listDefault(limit: Long, offset: Long, context: UserContext): List<Post> =
database.suspendedTransaction {
customJoinColumnSet(context.userId)
.join(
FollowersInUsers,
Expand All @@ -42,39 +42,35 @@ class PostsDatabaseRepository(
.limit(limit.toInt(), offset)
.map { Posts.toPost(it, Users.toUser(it)) }
}
}

override suspend fun listTrends(limit: Long, offset: Long, context: UserContext): List<Post> {
return database.suspendedTransaction {
override suspend fun listTrends(limit: Long, offset: Long, context: UserContext): List<Post> =
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<Post> {
return database.suspendedTransaction {
override suspend fun listUserPosts(userId: String, limit: Long, offset: Long, context: UserContext): List<Post> =
database.suspendedTransaction {
customJoin(context.userId)
.where { Posts.userId eq userId }
.groupBy(Posts.id)
.orderBy(Posts.published to SortOrder.DESC)
.limit(limit.toInt(), offset)
.map { Posts.toPost(it, Users.toUser(it)) }
}
}

override suspend fun listReplies(postId: String, limit: Long, offset: Long, context: UserContext): List<Post> {
return database.suspendedTransaction {
override suspend fun listReplies(postId: String, limit: Long, offset: Long, context: UserContext): List<Post> =
database.suspendedTransaction {
customJoin(context.userId)
.where { Posts.repliedToId eq postId }
.groupBy(Posts.id)
.orderBy(Posts.published to SortOrder.DESC)
.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
Expand Down Expand Up @@ -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])
Expand All @@ -139,10 +132,9 @@ class PostsDatabaseRepository(
Posts.id,
LikesInPosts.likesIn[LikesInPosts.postId]
) { LikesInPosts.likesIn[LikesInPosts.userId] eq viewedBy }
}

private fun ColumnSet.customPostsSlice(additionalFields: List<Expression<*>> = listOf()): Query {
return select(
private fun ColumnSet.customPostsSlice(additionalFields: List<Expression<*>> = listOf()): Query =
select(
Posts.columns +
Users.id +
Users.displayName +
Expand All @@ -155,6 +147,5 @@ class PostsDatabaseRepository(
Posts.likesIn +
additionalFields
)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,33 +20,30 @@ 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
it[ClientsInUsers.clientId] = clientId
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
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,28 +18,26 @@ class FollowersInUsersDatabaseRepository(
}
}

override suspend fun list(limit: Long, offset: Long, parentId: String, context: IContext?): List<FollowerInUser> {
return database.suspendedTransaction {
override suspend fun list(limit: Long, offset: Long, parentId: String, context: IContext?): List<FollowerInUser> =
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<FollowerInUser> {
return database.suspendedTransaction {
): List<FollowerInUser> =
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
Expand All @@ -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<Expression<*>> = listOf()): Query {
return select(
private fun ColumnSet.customUsersFollowersSlice(additionalFields: List<Expression<*>> = listOf()): Query =
select(
additionalFields +
FollowersInUsers.userId +
FollowersInUsers.targetId +
Expand All @@ -83,6 +78,5 @@ class FollowersInUsersDatabaseRepository(
Users.avatar +
Users.verified
)
}

}
Loading

0 comments on commit 86c5ba4

Please sign in to comment.