Add user and notes services
This commit is contained in:
parent
fce1cc0e9c
commit
8dd4fc9f4d
@ -7,6 +7,7 @@ import be.vandewalleh.features.configurationFeature
|
||||
import be.vandewalleh.features.configurationModule
|
||||
import be.vandewalleh.features.features
|
||||
import be.vandewalleh.migrations.Migration
|
||||
import be.vandewalleh.services.serviceModule
|
||||
import io.ktor.application.Application
|
||||
import io.ktor.application.log
|
||||
import io.ktor.auth.authenticate
|
||||
@ -29,6 +30,7 @@ fun Application.module() {
|
||||
kodein = Kodein {
|
||||
import(controllerModule)
|
||||
import(configurationModule)
|
||||
import(serviceModule)
|
||||
|
||||
bind<Feature>() with singleton { Migration(this.kodein) }
|
||||
bind<Database>() with singleton { Database.Companion.connect(this.instance<DataSource>()) }
|
||||
|
||||
@ -76,12 +76,11 @@ class ChaptersController(kodein: Kodein) : AuthCrudController("/notes/{noteTitle
|
||||
val chapterNumber = call.chapterNumber()
|
||||
?:return@post call.respondStatus(HttpStatusCode.BadRequest)
|
||||
|
||||
val exists =
|
||||
val exists = false
|
||||
|
||||
|
||||
val (title, content) = call.receive<PostRequestBody>()
|
||||
|
||||
if()
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
47
api/src/services/NotesService.kt
Normal file
47
api/src/services/NotesService.kt
Normal file
@ -0,0 +1,47 @@
|
||||
package be.vandewalleh.services
|
||||
|
||||
import be.vandewalleh.tables.Notes
|
||||
import be.vandewalleh.tables.Tags
|
||||
import me.liuwj.ktorm.database.Database
|
||||
import me.liuwj.ktorm.dsl.*
|
||||
import org.kodein.di.Kodein
|
||||
import org.kodein.di.KodeinAware
|
||||
import org.kodein.di.generic.instance
|
||||
import java.time.format.DateTimeFormatter
|
||||
|
||||
/**
|
||||
* service to handle database queries at the Notes level.
|
||||
*/
|
||||
class NotesService(override val kodein: Kodein) : KodeinAware {
|
||||
val db by instance<Database>()
|
||||
|
||||
/**
|
||||
* returns a list of [NotesDTO] associated with the userId
|
||||
*/
|
||||
fun getNotes(userId: Int): List<NotesDTO> {
|
||||
val notes = db.from(Notes)
|
||||
.select(Notes.id, Notes.title, Notes.updatedAt)
|
||||
.where { Notes.userId eq userId }
|
||||
.orderBy(Notes.updatedAt.desc())
|
||||
.map { row ->
|
||||
Notes.createEntity(row)
|
||||
}
|
||||
.toList()
|
||||
|
||||
return notes.map { note ->
|
||||
val tags = db.from(Tags)
|
||||
.select(Tags.name)
|
||||
.where { Tags.noteId eq note.id }
|
||||
.map { it[Tags.name]!! }
|
||||
.toList()
|
||||
|
||||
val updatedAt = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(note.updatedAt)
|
||||
|
||||
NotesDTO(note.title, tags, updatedAt)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
data class NotesDTO(val title: String, val tags: List<String>, val updatedAt: String)
|
||||
13
api/src/services/Services.kt
Normal file
13
api/src/services/Services.kt
Normal file
@ -0,0 +1,13 @@
|
||||
package be.vandewalleh.services
|
||||
|
||||
import org.kodein.di.Kodein
|
||||
import org.kodein.di.generic.bind
|
||||
import org.kodein.di.generic.singleton
|
||||
|
||||
|
||||
/**
|
||||
* [Kodein] controller module containing the app services
|
||||
*/
|
||||
val serviceModule = Kodein.Module(name = "Services") {
|
||||
bind<NotesService>() with singleton { NotesService(this.kodein) }
|
||||
}
|
||||
28
api/src/services/UserService.kt
Normal file
28
api/src/services/UserService.kt
Normal file
@ -0,0 +1,28 @@
|
||||
package be.vandewalleh.services
|
||||
|
||||
import be.vandewalleh.tables.Users
|
||||
import me.liuwj.ktorm.database.Database
|
||||
import me.liuwj.ktorm.dsl.*
|
||||
import org.kodein.di.Kodein
|
||||
import org.kodein.di.KodeinAware
|
||||
import org.kodein.di.generic.instance
|
||||
|
||||
/**
|
||||
* service to handle database queries for users.
|
||||
*/
|
||||
class UserService(override val kodein: Kodein) : KodeinAware {
|
||||
private val db by instance<Database>()
|
||||
|
||||
/**
|
||||
* returns a user ID if present or null
|
||||
*/
|
||||
fun getUserId(userEmail: String): Int? {
|
||||
return db.from(Users)
|
||||
.select(Users.id)
|
||||
.where { Users.email eq userEmail }
|
||||
.limit(0, 1)
|
||||
.map { it[Users.id] }
|
||||
.firstOrNull()
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user