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,
})
}
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 () => {