From 88d8ca7b7ddf75f156c5617513700aed89592aa1 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Thu, 14 Apr 2022 12:09:17 +0800 Subject: [PATCH 1/2] fix reminders resolver getting page from postgres --- packages/api/src/datalayer/reminders/model.ts | 2 + packages/api/src/entity/reminder.ts | 3 ++ packages/api/src/resolvers/reminders/index.ts | 46 +++++++++++-------- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/packages/api/src/datalayer/reminders/model.ts b/packages/api/src/datalayer/reminders/model.ts index d10333e47..0bfad531d 100644 --- a/packages/api/src/datalayer/reminders/model.ts +++ b/packages/api/src/datalayer/reminders/model.ts @@ -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 diff --git a/packages/api/src/entity/reminder.ts b/packages/api/src/entity/reminder.ts index e5dcd9ae1..a9ec91221 100644 --- a/packages/api/src/entity/reminder.ts +++ b/packages/api/src/entity/reminder.ts @@ -44,4 +44,7 @@ export class Reminder { @UpdateDateColumn() updatedAt?: Date + + @Column('text') + elasticPageId?: string } diff --git a/packages/api/src/resolvers/reminders/index.ts b/packages/api/src/resolvers/reminders/index.ts index 807316b4d..7b11d9fe3 100644 --- a/packages/api/src/resolvers/reminders/index.ts +++ b/packages/api/src/resolvers/reminders/index.ts @@ -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, }) } From 3befff61af0aa375193dfdcddc5e7732ed4f16ee Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Thu, 14 Apr 2022 13:22:21 +0800 Subject: [PATCH 2/2] fix tests --- packages/api/test/db.ts | 30 +++++++++---------- packages/api/test/resolvers/reminders.test.ts | 18 +++++------ 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/packages/api/test/db.ts b/packages/api/test/db.ts index 182248196..d7b75c4c4 100644 --- a/packages/api/test/db.ts +++ b/packages/api/test/db.ts @@ -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 => { export const createTestReminder = async ( user: User, - link?: string + pageId?: string ): Promise => { return getRepository(Reminder).save({ user: user, - link: link, + elasticPageId: pageId, remindAt: new Date(), }) } diff --git a/packages/api/test/resolvers/reminders.test.ts b/packages/api/test/resolvers/reminders.test.ts index afc681338..907c5269a 100644 --- a/packages/api/test/resolvers/reminders.test.ts +++ b/packages/api/test/resolvers/reminders.test.ts @@ -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 () => {