mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
mock saving digest in redis
This commit is contained in:
parent
e37bcd7408
commit
a47a5a7d9c
4 changed files with 61 additions and 23 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
32
packages/api/src/services/digest.ts
Normal file
32
packages/api/src/services/digest.ts
Normal 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')
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue