Skip to content

Commit

Permalink
update message crud
Browse files Browse the repository at this point in the history
  • Loading branch information
Nesb01t committed Feb 4, 2024
1 parent 6e8d337 commit 9a9c81a
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 8 deletions.
9 changes: 9 additions & 0 deletions src/main/kotlin/cafe/nes/dao/MessageDAO.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package cafe.nes.dao

import cafe.nes.models.Message

interface MessageDAO {
suspend fun getMessages(): List<Message>
suspend fun boardMessage(msg: Message): Message?
suspend fun deleteMessage(id: Int): Boolean
}
33 changes: 33 additions & 0 deletions src/main/kotlin/cafe/nes/dao/MessageDAOImpl.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package cafe.nes.dao

import cafe.nes.dao.DatabaseSingleton.dbQuery
import cafe.nes.models.Message
import cafe.nes.models.Messages
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq

class MessageDAOImpl : MessageDAO {
private fun resultRowToMessage(row: ResultRow) = Message(
id = row[Messages.id],
content = row[Messages.content],
userId = row[Messages.userId]
)

override suspend fun getMessages(): List<Message> = dbQuery {
Messages.selectAll().map { resultRowToMessage(it) }
}

override suspend fun boardMessage(msg: Message): Message? = dbQuery {
val insert = Messages.insert {
it[content] = msg.content
it[userId] = msg.userId
}
insert.resultedValues?.singleOrNull()?.let { resultRowToMessage(it) }
}

override suspend fun deleteMessage(id: Int): Boolean = dbQuery {
Messages.deleteWhere { Messages.id eq id } > 0
}
}

val messageSvc: MessageDAO = MessageDAOImpl()
3 changes: 1 addition & 2 deletions src/main/kotlin/cafe/nes/dao/UserDAOImpl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package cafe.nes.dao
import cafe.nes.dao.DatabaseSingleton.dbQuery
import cafe.nes.models.User
import cafe.nes.models.Users
import kotlinx.coroutines.runBlocking
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq

Expand Down Expand Up @@ -77,4 +76,4 @@ class UserDAOImpl : UserDAO {
}
}

val dao: UserDAO = UserDAOImpl()
val userSvc: UserDAO = UserDAOImpl()
22 changes: 22 additions & 0 deletions src/main/kotlin/cafe/nes/models/Message.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package cafe.nes.models

import kotlinx.serialization.Serializable
import org.jetbrains.exposed.sql.*
import java.time.LocalDateTime

@Serializable
data class Message(
val id: Int,
val content: String,
val userId: Int?,
val time: String = LocalDateTime.now().toString(),
)

object Messages : Table() {
val id = integer("id").autoIncrement()
val content = varchar("content", 255)
val userId = integer("userId").references(Users.id).nullable()
val time: LocalDateTime = LocalDateTime.now()

override val primaryKey = PrimaryKey(Users.id)
}
34 changes: 34 additions & 0 deletions src/main/kotlin/cafe/nes/routes/MessageRoute.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package cafe.nes.routes

import cafe.nes.dao.messageSvc
import cafe.nes.models.Message
import io.ktor.http.*
import io.ktor.server.application.*
import io.ktor.server.request.*
import io.ktor.server.response.*
import io.ktor.server.routing.*

fun Route.messageRouting() {
route("/message") {

get("/") {
call.respondText(messageSvc.getMessages().toString())
}

post("/") {
val received = call.receive<Message>()
val msg = messageSvc.boardMessage(msg = received)
call.respondText(msg.toString())
}

delete("/{id}") {
val id = call.parameters["id"]?.toInt()
if (id == null) {
call.respond(HttpStatusCode.BadRequest, "id is required")
return@delete
}
val res = messageSvc.deleteMessage(id)
call.respondText(res.toString())
}
}
}
12 changes: 6 additions & 6 deletions src/main/kotlin/cafe/nes/routes/UserRoute.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package cafe.nes.routes

import cafe.nes.dao.dao
import cafe.nes.dao.userSvc
import cafe.nes.models.User
import io.ktor.http.*
import io.ktor.server.application.*
Expand All @@ -12,7 +12,7 @@ fun Route.userRouting() {
route("/user") {

get("/") {
call.respondText(dao.getAllUsers().toString())
call.respondText(userSvc.getAllUsers().toString())
}

get("/{id}") {
Expand All @@ -22,19 +22,19 @@ fun Route.userRouting() {
return@get
}

val user = dao.getUser(id)
val user = userSvc.getUser(id)
call.respond(user.toString())
}

post("/") {
val received = call.receive<User>()
val user = dao.addNewUser(user = received)
val user = userSvc.addNewUser(user = received)
call.respondText(user.toString())
}

patch("/") {
val received = call.receive<User>()
val user = dao.editUser(user = received)
val user = userSvc.editUser(user = received)
call.respondText(user.toString())
}

Expand All @@ -44,7 +44,7 @@ fun Route.userRouting() {
call.respond(HttpStatusCode.BadRequest, "id is required")
return@delete
}
val user = dao.deleteUser(id)
val user = userSvc.deleteUser(id)
call.respondText(user.toString())
}
}
Expand Down

0 comments on commit 9a9c81a

Please sign in to comment.