Skip to content

Commit

Permalink
Implement put and delete episode handlers
Browse files Browse the repository at this point in the history
This should be everything I need to close the loop on episode permalink pages and CRUD actions.
  • Loading branch information
bcomnes committed Sep 27, 2022
1 parent ba61710 commit a5397b1
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 5 deletions.
10 changes: 10 additions & 0 deletions plugins/prom.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,16 @@ export default fp(async function (fastify, opts) {
help: 'The number of times episodes are created'
})

fastify.metrics.episodeEditCounter = new fastify.metrics.client.Counter({
name: 'breadcrum_episode_edit_total',
help: 'The number of times episodes are edited'
})

fastify.metrics.episodeDeleteCounter = new fastify.metrics.client.Counter({
name: 'breadcrum_episode_delete_total',
help: 'The number of times episodes are deleted'
})

fastify.metrics.tagAppliedCounter = new fastify.metrics.client.Counter({
name: 'breadcrum_tag_applied_total',
help: 'The number of times tags are applied to bookmarks'
Expand Down
37 changes: 37 additions & 0 deletions routes/api/episodes/_episode_id/delete-episode.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/* eslint-disable camelcase */
import SQL from '@nearform/sql'

export async function deleteEpisode (fastify, opts) {
fastify.delete('/', {
preHandler: fastify.auth([fastify.verifyJWT]),
schema: {
params: {
type: 'object',
properties: {
episode_id: { type: 'string', format: 'uuid' }
},
required: ['episode_id']
}
}
},
async function deleteEpisodeHandler (request, reply) {
const ownerID = request.user.id
const episodeID = request.params.episode_id

const query = SQL`
delete from episodes
where id = ${episodeID}
and owner_id = ${ownerID}
`

// TODO: check results
await fastify.pg.query(query)

reply.status = 202
fastify.metrics.episodeDeleteCounter.inc()

return {
status: 'ok'
}
})
}
10 changes: 5 additions & 5 deletions routes/api/episodes/_episode_id/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { getEpisode } from './get-episode.js'
// import { putEpisode } from './put-episode.js'
// import { deleteEpisode } from './delete-episode.js'
import { putEpisode } from './put-episode.js'
import { deleteEpisode } from './delete-episode.js'

export default async function episodeRoutes (fastify, opts) {
await Promise.all([
getEpisode(fastify, opts)
// putEpisode(fastify, opts),
// deleteEpisode(fastify, opts)
getEpisode(fastify, opts),
putEpisode(fastify, opts),
deleteEpisode(fastify, opts)
])
}
65 changes: 65 additions & 0 deletions routes/api/episodes/_episode_id/put-episode.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/* eslint-disable camelcase */
import SQL from '@nearform/sql'

import { commonEpisodeProps } from '../episode-props.js'

export async function putEpisode (fastify, opts) {
fastify.put('/', {
preHandler: fastify.auth([fastify.verifyJWT]),
schema: {
querystring: {
sensitive: {
type: 'boolean',
default: false
}
},
params: {
type: 'object',
properties: {
episode_id: { type: 'string', format: 'uuid' }
},
required: ['id']
},
body: {
type: 'object',
properties: {
...commonEpisodeProps
},
minProperties: 1,
additionalProperties: false
}
}
},
async function putEpisodeHandler (request, reply) {
return fastify.pg.transact(async client => {
const ownerId = request.user.episode_id
const { episode_id: episodeId } = request.params
const episode = request.body

const updates = []

if (episode.url != null) updates.push(SQL`url = ${episode.url}`)
if (episode.title != null) updates.push(SQL`title = ${episode.title}`)
if (episode.explicit != null) updates.push(SQL`explicit = ${episode.explicit}`)
// TODO: description editing
// TODO: change medium or type?

if (updates.length > 0) {
const query = SQL`
update episodes
set ${SQL.glue(updates, ' , ')}
where id = ${episodeId}
and owner_id =${ownerId};
`

await client.query(query)
}

fastify.metrics.episodeEditCounter.inc()

return {
status: 'ok'
}
})
})
}

0 comments on commit a5397b1

Please sign in to comment.