mock saving digest in redis

This commit is contained in:
Hongbo Wu 2024-04-12 16:56:16 +08:00
parent e37bcd7408
commit a47a5a7d9c
4 changed files with 61 additions and 23 deletions

View file

@ -1,3 +1,4 @@
import { setDigest } from '../services/digest'
import { logger } from '../utils/logger'
export const CREATE_DIGEST_JOB = 'create-digest'
@ -13,6 +14,27 @@ export interface CreateDigestJobResponse {
export const processCreateDigestJob = async (data: CreateDigestJobData) => {
logger.info('processing create digest job', data)
// do something
await Promise.resolve()
// TODO: create digest
const digest = {
url: 'https://example.com',
title: 'Example Digest',
jobState: 'completed',
content: 'This is an example digest',
chapters: [
{
title: 'Chapter 1',
},
{
title: 'Chapter 2',
},
],
urlsToAudio: ['https://example.com/audio'],
}
// save digest to redis
await setDigest(data.userId, digest)
logger.info('digest created', digest)
return true
}

View file

@ -3,7 +3,7 @@ import express from 'express'
import { TaskState } from '../generated/graphql'
import { CREATE_DIGEST_JOB } from '../jobs/create_digest'
import { createJobId, getJob, jobStateToTaskState } from '../queue-processor'
import { redisDataSource } from '../redis_data_source'
import { getDigest } from '../services/digest'
import { findActiveUser } from '../services/user'
import { analytics } from '../utils/analytics'
import { getClaimsByToken, getTokenByRequest } from '../utils/auth'
@ -11,19 +11,6 @@ import { corsConfig } from '../utils/corsConfig'
import { enqueueCreateDigest } from '../utils/createTask'
import { logger } from '../utils/logger'
interface Digest {
url: string
title: string
jobState: string
content: string
chapters: Chapter[]
urlsToAudio: string[]
}
interface Chapter {
title: string
}
interface Feedback {
digestRating: number
rankingRating: number
@ -135,18 +122,15 @@ export function digestRouter() {
}
// if job is done and removed then get the digest from redis
const key = `digest:${userId}`
const digest = await redisDataSource.redisClient?.get(key)
const digest = await getDigest(userId)
if (!digest) {
logger.info(`Digest not found: ${key}`)
logger.info(`Digest not found: ${userId}`)
return res.sendStatus(404)
}
const digestObject = JSON.parse(digest) as Digest
// return digest
return res.send({
...digestObject,
...digest,
jobId,
jobState: TaskState.Succeeded,
})

View file

@ -90,7 +90,7 @@ export const createApp = (): Express => {
app.use('/api/notification', notificationRouter())
app.use('/api/integration', integrationRouter())
app.use('/api/tasks', taskRouter())
app.use('/api/digest', digestRouter)
app.use('/api/digest', digestRouter())
app.use('/svc/pubsub/content', contentServiceRouter())
app.use('/svc/pubsub/links', linkServiceRouter())
app.use('/svc/pubsub/newsletters', newsletterServiceRouter())

View file

@ -0,0 +1,32 @@
import { redisDataSource } from '../redis_data_source'
export interface Digest {
url: string
title: string
jobState: string
content: string
chapters: Chapter[]
urlsToAudio: string[]
}
interface Chapter {
title: string
}
const digestKey = (userId: string) => `digest:${userId}`
export const getDigest = async (userId: string): Promise<Digest | null> => {
const digest = await redisDataSource.redisClient?.get(digestKey(userId))
return digest ? (JSON.parse(digest) as Digest) : null
}
export const setDigest = async (userId: string, digest: Digest) => {
const result = await redisDataSource.redisClient?.set(
digestKey(userId),
JSON.stringify(digest)
)
if (result != 'OK') {
throw new Error('Failed to set digest')
}
}