diff --git a/api/src/routing/Routes.kt b/api/src/routing/Routes.kt index 7f0a709..da82d16 100644 --- a/api/src/routing/Routes.kt +++ b/api/src/routing/Routes.kt @@ -9,4 +9,5 @@ fun Routing.registerRoutes(kodein: Kodein) { notes(kodein) title(kodein) chapters(kodein) + tags(kodein) } \ No newline at end of file diff --git a/api/src/routing/TagController.kt b/api/src/routing/TagController.kt new file mode 100644 index 0000000..6c61003 --- /dev/null +++ b/api/src/routing/TagController.kt @@ -0,0 +1,20 @@ +package be.vandewalleh.routing + +import be.vandewalleh.extensions.userId +import be.vandewalleh.services.NotesService +import io.ktor.application.* +import io.ktor.auth.* +import io.ktor.response.* +import io.ktor.routing.* +import org.kodein.di.Kodein +import org.kodein.di.generic.instance + +fun Routing.tags(kodein: Kodein) { + val notesService by kodein.instance() + + authenticate { + get("/tags") { + call.respond(notesService.getTags(call.userId())) + } + } +} \ No newline at end of file diff --git a/api/src/services/NotesService.kt b/api/src/services/NotesService.kt index 0b20fe5..1f31991 100644 --- a/api/src/services/NotesService.kt +++ b/api/src/services/NotesService.kt @@ -111,6 +111,12 @@ class NotesService(override val kodein: Kodein) : KodeinAware { db.useTransaction { db.delete(Notes) { it.id eq noteId } } + + fun getTags(userId: Int): List = db.from(Tags) + .leftJoin(Notes, on = Tags.noteId eq Notes.id) + .select(Tags.name) + .where { Notes.userId eq userId } + .map { it[Tags.name]!! } } data class ChaptersDTO(val title: String, val content: String) diff --git a/frontend/pages/create.vue b/frontend/pages/create.vue index 42907c1..d433f14 100644 --- a/frontend/pages/create.vue +++ b/frontend/pages/create.vue @@ -9,40 +9,41 @@ Create a note - - + + A note with the same title already exists + - + + + - + - + - - - - Create - - + + + + Create + + + @@ -51,9 +52,38 @@ name: "create", data: () => ({ delimiters: [" ", ","], - tags: [], - possibleTags: ["Dev", "Ephec", "Java"] - }) + form: { + title: '', + tags: [] + }, + possibleTags: [], + conflict: false + }), + methods: { + createNote() { + this.conflict = false + this.$axios.post(`/notes/${this.form.title}`, { + tags: this.form.tags + }).then(_ => { + this.$router.push("/notes") + } + ).catch(e => { + if (e.response && e.response.status === 409) { + this.conflict = true + } else { + console.log("??") + } + }) + + } + }, + mounted() { + this.$axios.get("/tags") + .then(e => this.possibleTags = e.data) + .catch(e => { + console.log(e) + }) + } }