Merge pull request #422 from omnivore-app/fix/reminder-data-model-error

Fix reminders resolver getting pages from postgres
This commit is contained in:
Jackson Harper
2022-04-14 14:10:48 -07:00
committed by GitHub
5 changed files with 55 additions and 44 deletions

View File

@ -32,6 +32,7 @@ export interface ReminderData {
createdAt: Date
updatedAt?: Date
remindAt: Date
elasticPageId?: string
}
export const keys = [
@ -46,6 +47,7 @@ export const keys = [
'status',
'createdAt',
'updatedAt',
'elasticPageId',
] as const
export const defaultedKeys = ['id', 'updatedAt', 'status'] as const

View File

@ -44,4 +44,7 @@ export class Reminder {
@UpdateDateColumn()
updatedAt?: Date
@Column('text')
elasticPageId?: string
}

View File

@ -23,9 +23,10 @@ import { env } from '../../env'
import { ReminderData } from '../../datalayer/reminders/model'
import { DataModels } from '../types'
import { DateTime } from 'luxon'
import { UserArticleData } from '../../datalayer/links/model'
import { ArticleSavingRequestData } from '../../datalayer/article_saving_request/model'
import { setLinkArchived } from '../../services/archive_link'
import { getPageById } from '../../elastic/pages'
import { Page } from '../../elastic/types'
const validScheduleTime = (str: string): Date | undefined => {
const scheduleTime = DateTime.fromISO(str, { setZone: true }).set({
@ -87,17 +88,25 @@ export const createReminderResolver = authorized<
try {
if (articleId) {
// saving from web
const link = await models.userArticle.getByArticleId(uid, articleId)
if (!link) {
log.error('link not found', articleId)
const page = await getPageById(articleId)
if (!page) {
log.error('page not found', articleId)
return {
errorCodes: [CreateReminderErrorCode.NotFound],
}
}
linkId = link.id
if (page.userId !== uid) {
log.error('user not authorized', uid)
return {
errorCodes: [CreateReminderErrorCode.Unauthorized],
}
}
linkId = page.id
if (archiveUntil) {
await archiveLinkOrRequest(uid, link, undefined, models)
await archiveLinkOrRequest(uid, page, undefined)
}
}
@ -116,7 +125,7 @@ export const createReminderResolver = authorized<
articleSavingRequestId = articleSavingRequest.id
if (articleSavingRequest.articleId) {
await archiveLinkOrRequest(uid, undefined, articleSavingRequest, models)
await archiveLinkOrRequest(uid, undefined, articleSavingRequest)
}
}
@ -126,7 +135,6 @@ export const createReminderResolver = authorized<
// insert reminder to db
const reminder = await models.reminder.create({
userId: uid,
linkId: linkId ? linkId : undefined,
articleSavingRequestId: articleSavingRequestId
? articleSavingRequestId
: undefined,
@ -135,6 +143,7 @@ export const createReminderResolver = authorized<
sendNotification: sendNotification,
createdAt: new Date(),
remindAt: scheduledTime,
elasticPageId: linkId,
})
console.log('created reminder', reminder)
@ -161,16 +170,13 @@ export const createReminderResolver = authorized<
// case it will be archived when the link is created.
const archiveLinkOrRequest = async (
uid: string,
link: UserArticleData | undefined,
request: ArticleSavingRequestData | undefined,
models: DataModels
page: Page | undefined,
request: ArticleSavingRequestData | undefined
) => {
let target: UserArticleData | undefined = link || undefined
if (!link && request && request.articleId) {
let target: Page | undefined = page || undefined
if (!page && request && request.articleId) {
// this linkId is actually an article.id
target =
(await models.userArticle.getByArticleId(uid, request.articleId)) ||
undefined
target = (await getPageById(request.articleId)) || undefined
}
console.log('archiving target', target)
if (target) {
@ -200,9 +206,9 @@ export const reminderResolver = authorized<
try {
let reminder: ReminderData | null
// get link from articleId
const link = await models.userArticle.getByArticleId(uid, articleId)
if (!link) {
// get page from articleId
const page = await getPageById(articleId)
if (!page) {
// link may not be saved yet
// check savingArticleRequest table
const articleSavingRequest =
@ -224,7 +230,7 @@ export const reminderResolver = authorized<
})
} else {
reminder = await models.reminder.getCreatedByParameters(uid, {
linkId: link.id,
elasticPageId: page.id,
})
}

View File

@ -1,16 +1,16 @@
import Postgrator from 'postgrator'
import { User } from '../src/entity/user'
import { Profile } from '../src/entity/profile'
import { Page } from '../src/entity/page'
import { Link } from '../src/entity/link'
import { Reminder } from '../src/entity/reminder'
import { NewsletterEmail } from '../src/entity/newsletter_email'
import { UserDeviceToken } from '../src/entity/user_device_tokens'
import { Label } from '../src/entity/label'
import { AppDataSource } from '../src/server'
import { getRepository } from '../src/entity/utils'
import { createUser } from '../src/services/create_user'
import { SnakeNamingStrategy } from 'typeorm-naming-strategies'
import Postgrator from "postgrator";
import { User } from "../src/entity/user";
import { Profile } from "../src/entity/profile";
import { Page } from "../src/entity/page";
import { Link } from "../src/entity/link";
import { Reminder } from "../src/entity/reminder";
import { NewsletterEmail } from "../src/entity/newsletter_email";
import { UserDeviceToken } from "../src/entity/user_device_tokens";
import { Label } from "../src/entity/label";
import { AppDataSource } from "../src/server";
import { getRepository } from "../src/entity/utils";
import { createUser } from "../src/services/create_user";
import { SnakeNamingStrategy } from "typeorm-naming-strategies";
const runMigrations = async () => {
const migrationDirectory = __dirname + '/../../db/migrations'
@ -122,11 +122,11 @@ export const createTestLink = async (user: User, page: Page): Promise<Link> => {
export const createTestReminder = async (
user: User,
link?: string
pageId?: string
): Promise<Reminder> => {
return getRepository(Reminder).save({
user: user,
link: link,
elasticPageId: pageId,
remindAt: new Date(),
})
}

View File

@ -1,7 +1,10 @@
import { generateFakeUuid, graphqlRequest, request } from '../util'
import {
createTestLink,
createTestPage,
createTestElasticPage,
generateFakeUuid,
graphqlRequest,
request,
} from '../util'
import {
createTestReminder,
createTestUser,
deleteTestUser,
@ -14,17 +17,15 @@ import {
ReminderErrorCode,
UpdateReminderErrorCode,
} from '../../src/generated/graphql'
import { Page } from '../../src/entity/page'
import { Link } from '../../src/entity/link'
import { DateTime } from 'luxon'
import 'mocha'
import { Page } from '../../src/elastic/types'
describe('Reminders API', () => {
const username = 'fakeUser'
let authToken: string
let page: Page
let link: Link
let reminder: Reminder
before(async () => {
@ -37,9 +38,8 @@ describe('Reminders API', () => {
authToken = res.body.authToken
// create page, link and reminders test data
page = await createTestPage()
link = await createTestLink(user, page)
reminder = await createTestReminder(user, link.id)
page = await createTestElasticPage(user)
reminder = await createTestReminder(user, page.id)
})
after(async () => {