Destory deck helper
Build and Push Docker Image / build (push) Successful in 2m58s

This commit is contained in:
2026-06-29 00:17:15 -07:00
parent 39afe80a6c
commit 0595285c25
3 changed files with 48 additions and 7 deletions
@@ -1,5 +1,5 @@
import db from "@/db/db-client" import db from "@/db/db-client"
import { FlashcardDeck } from "@/models" import { Flashcard, FlashcardDeck } from "@/models"
import BaseService from "@/services/base-service" import BaseService from "@/services/base-service"
export class DestroyService extends BaseService { export class DestroyService extends BaseService {
@@ -8,12 +8,19 @@ export class DestroyService extends BaseService {
} }
async perform(): Promise<void> { async perform(): Promise<void> {
await db.transaction(async (transaction) => { await db.transaction(async () => {
await FlashcardDeck.update( await FlashcardDeck.update(
{ parentDeckId: null }, { parentDeckId: null },
{ where: { parentDeckId: this.flashcardDeck.id }, transaction } { where: { parentDeckId: this.flashcardDeck.id } }
) )
await this.flashcardDeck.destroy({ transaction })
await Flashcard.destroy({
where: {
flashcardDeckId: this.flashcardDeck.id,
},
})
await this.flashcardDeck.destroy()
}) })
} }
} }
@@ -36,8 +36,8 @@
@select="onSelect" @select="onSelect"
@move="handleMove" @move="handleMove"
@created="fetch()" @created="fetch()"
@updated="fetch()" @updated="onDeckUpdated"
@deleted="fetch()" @deleted="onDeckDeleted"
/> />
</template> </template>
</draggable> </draggable>
@@ -142,13 +142,27 @@ watch(
// --- Selection --- // --- Selection ---
const selectedId = ref<number | null>(null) const selectedId = ref<number | null>(null)
const emit = defineEmits<{ select: [deck: DeckNode] }>() const emit = defineEmits<{
select: [deck: DeckNode]
updated: [flashcardDeckId: number]
deleted: [flashcardDeckId: number]
}>()
function onSelect(deck: DeckNode) { function onSelect(deck: DeckNode) {
selectedId.value = deck.id selectedId.value = deck.id
emit("select", deck) emit("select", deck)
} }
async function onDeckUpdated(flashcardDeckId: number) {
await fetch()
emit("updated", flashcardDeckId)
}
async function onDeckDeleted(flashcardDeckId: number) {
await fetch()
emit("deleted", flashcardDeckId)
}
// --- Drag & Drop --- // --- Drag & Drop ---
const snack = useSnack() const snack = useSnack()
+20
View File
@@ -11,6 +11,8 @@
<FlashcardDeckTree <FlashcardDeckTree
ref="deckTree" ref="deckTree"
@select="onDeckSelected" @select="onDeckSelected"
@updated="onDeckUpdated"
@deleted="onDeckDeleted"
/> />
</v-card> </v-card>
</v-col> </v-col>
@@ -85,6 +87,7 @@ import useBreadcrumbs from "@/use/use-breadcrumbs"
import useFlashcards from "@/use/use-flashcards" import useFlashcards from "@/use/use-flashcards"
import useRouteQueryPagination from "@/use/utils/use-route-query-pagination" import useRouteQueryPagination from "@/use/utils/use-route-query-pagination"
import flashcardDecksApi from "@/api/flashcard-decks-api"
import FlashcardDeckTree, { import FlashcardDeckTree, {
type DeckNode, type DeckNode,
} from "@/components/flashcard-decks/FlashcardDeckTree.vue" } from "@/components/flashcard-decks/FlashcardDeckTree.vue"
@@ -117,6 +120,23 @@ function onDeckSelected(deck: DeckNode) {
selectedDeck.value = deck selectedDeck.value = deck
} }
function onDeckDeleted(flashcardDeckId: number) {
if (selectedDeck.value?.id !== flashcardDeckId) {
return
}
selectedDeck.value = null
}
async function onDeckUpdated(flashcardDeckId: number) {
if (selectedDeck.value?.id !== flashcardDeckId) {
return
}
const { flashcardDeck } = await flashcardDecksApi.get(flashcardDeckId)
selectedDeck.value = { ...selectedDeck.value, ...flashcardDeck }
}
function openFlashcardCreateDialog() { function openFlashcardCreateDialog() {
flashcardCreateDialog.value?.show() flashcardCreateDialog.value?.show()
} }