Skip to content

Commit

Permalink
feat(helper): ✨ add BookDeleteHelper for delete route
Browse files Browse the repository at this point in the history
  • Loading branch information
djdembeck committed Aug 19, 2022
1 parent 7fbd8fa commit bc9daa3
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 9 deletions.
15 changes: 6 additions & 9 deletions src/config/routes/books/delete.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { FastifyInstance } from 'fastify'

import { RequestGeneric } from '#config/typing/requests'
import PaprAudibleBookHelper from '#helpers/database/audible/PaprAudibleBookHelper'
import RedisHelper from '#helpers/database/RedisHelper'
import BookDeleteHelper from '#helpers/routes/BookDeleteHelper'
import SharedHelper from '#helpers/shared'

async function _delete(fastify: FastifyInstance) {
Expand All @@ -16,20 +15,18 @@ async function _delete(fastify: FastifyInstance) {
}

// Setup Helpers
const paprHelper = new PaprAudibleBookHelper(request.params.asin, {})
const { redis } = fastify
const redisHelper = new RedisHelper(redis, 'book', request.params.asin)
const helper = new BookDeleteHelper(request.params.asin, redis)

// Get book from database
const existingBook = await paprHelper.findOne()
// Call helper handler
const isHandled = await helper.handler()

if (!existingBook) {
if (!isHandled) {
reply.code(404)
throw new Error(`${request.params.asin} not found in the database`)
}

await redisHelper.deleteOne()
return paprHelper.delete()
return { message: `${request.params.asin} deleted` }
})
}

Expand Down
50 changes: 50 additions & 0 deletions src/helpers/routes/BookDeleteHelper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { FastifyRedis } from '@fastify/redis'

import { BookDocument } from '#config/models/Book'
import PaprAudibleBookHelper from '#helpers/database/audible/PaprAudibleBookHelper'
import RedisHelper from '#helpers/database/RedisHelper'

export default class BookDeleteHelper {
asin: string
paprHelper: PaprAudibleBookHelper
redisHelper: RedisHelper
originalBook: BookDocument | null = null
constructor(asin: string, redis: FastifyRedis | null) {
this.asin = asin
this.paprHelper = new PaprAudibleBookHelper(this.asin, {
seedAuthors: undefined,
update: undefined
})
this.redisHelper = new RedisHelper(redis, 'book', this.asin)
}

async getBookFromPapr(): Promise<BookDocument | null> {
return (await this.paprHelper.findOne()).data
}

/**
* Actions to run when a deletion is requested
*/
async deleteActions() {
// 1. Delete the book from cache
await this.redisHelper.deleteOne()

// 2. Delete the book from DB
return (await this.paprHelper.delete()).modified
}

/**
* Main handler for the book delete route
*/
async handler() {
this.originalBook = await this.getBookFromPapr()

// If the book is already present
if (this.originalBook) {
return this.deleteActions()
}

// If the book is not present
return false
}
}

0 comments on commit bc9daa3

Please sign in to comment.