Add id to saving request and make both id and url optional
This commit is contained in:
@ -335,13 +335,15 @@ export const getPageByParam = async <K extends keyof ParamSet>(
|
||||
const params = {
|
||||
query: {
|
||||
bool: {
|
||||
filter: Object.keys(param).map((key) => {
|
||||
return {
|
||||
filter: Object.keys(param)
|
||||
.filter(
|
||||
(key) => param[key as K] !== undefined && param[key as K] !== null
|
||||
) // filter out undefined and null values
|
||||
.map((key) => ({
|
||||
term: {
|
||||
[key]: param[key as K],
|
||||
},
|
||||
}
|
||||
}),
|
||||
})),
|
||||
},
|
||||
},
|
||||
size: 1,
|
||||
|
||||
@ -1752,7 +1752,8 @@ export type QueryArticleArgs = {
|
||||
|
||||
|
||||
export type QueryArticleSavingRequestArgs = {
|
||||
url: Scalars['String'];
|
||||
id?: InputMaybe<Scalars['ID']>;
|
||||
url?: InputMaybe<Scalars['String']>;
|
||||
};
|
||||
|
||||
|
||||
@ -5079,7 +5080,7 @@ export type ProfileResolvers<ContextType = ResolverContext, ParentType extends R
|
||||
export type QueryResolvers<ContextType = ResolverContext, ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query']> = {
|
||||
apiKeys?: Resolver<ResolversTypes['ApiKeysResult'], ParentType, ContextType>;
|
||||
article?: Resolver<ResolversTypes['ArticleResult'], ParentType, ContextType, RequireFields<QueryArticleArgs, 'slug' | 'username'>>;
|
||||
articleSavingRequest?: Resolver<ResolversTypes['ArticleSavingRequestResult'], ParentType, ContextType, RequireFields<QueryArticleSavingRequestArgs, 'url'>>;
|
||||
articleSavingRequest?: Resolver<ResolversTypes['ArticleSavingRequestResult'], ParentType, ContextType, Partial<QueryArticleSavingRequestArgs>>;
|
||||
articles?: Resolver<ResolversTypes['ArticlesResult'], ParentType, ContextType, Partial<QueryArticlesArgs>>;
|
||||
deviceTokens?: Resolver<ResolversTypes['DeviceTokensResult'], ParentType, ContextType>;
|
||||
feedArticles?: Resolver<ResolversTypes['FeedArticlesResult'], ParentType, ContextType, Partial<QueryFeedArticlesArgs>>;
|
||||
|
||||
@ -1246,7 +1246,7 @@ type Profile {
|
||||
type Query {
|
||||
apiKeys: ApiKeysResult!
|
||||
article(format: String, slug: String!, username: String!): ArticleResult!
|
||||
articleSavingRequest(url: String!): ArticleSavingRequestResult!
|
||||
articleSavingRequest(id: ID, url: String): ArticleSavingRequestResult!
|
||||
articles(after: String, first: Int, includePending: Boolean, query: String, sharedOnly: Boolean, sort: SortParams): ArticlesResult!
|
||||
deviceTokens: DeviceTokensResult!
|
||||
feedArticles(after: String, first: Int, sharedByUser: ID, sort: SortParams): FeedArticlesResult!
|
||||
|
||||
@ -56,8 +56,13 @@ export const articleSavingRequestResolver = authorized<
|
||||
ArticleSavingRequestSuccess,
|
||||
ArticleSavingRequestError,
|
||||
QueryArticleSavingRequestArgs
|
||||
>(async (_, { url }, { models, claims }) => {
|
||||
const page = await getPageByParam({ url, userId: claims.uid })
|
||||
>(async (_, { id, url }, { models, claims }) => {
|
||||
const params = {
|
||||
_id: id || undefined,
|
||||
url: url || undefined,
|
||||
userId: claims.uid,
|
||||
}
|
||||
const page = await getPageByParam(params)
|
||||
if (!page) {
|
||||
return { errorCodes: [ArticleSavingRequestErrorCode.NotFound] }
|
||||
}
|
||||
|
||||
@ -2526,7 +2526,7 @@ const schema = gql`
|
||||
getFollowers(userId: ID): GetFollowersResult!
|
||||
getFollowing(userId: ID): GetFollowingResult!
|
||||
getUserPersonalization: GetUserPersonalizationResult!
|
||||
articleSavingRequest(url: String!): ArticleSavingRequestResult!
|
||||
articleSavingRequest(id: ID, url: String): ArticleSavingRequestResult!
|
||||
newsletterEmails: NewsletterEmailsResult!
|
||||
reminder(linkId: ID!): ReminderResult!
|
||||
labels: LabelsResult!
|
||||
|
||||
@ -16,9 +16,17 @@ import * as createTask from '../../src/utils/createTask'
|
||||
import { createTestUser, deleteTestUser } from '../db'
|
||||
import { graphqlRequest, request } from '../util'
|
||||
|
||||
const articleSavingRequestQuery = (url: string) => `
|
||||
const articleSavingRequestQuery = ({
|
||||
id,
|
||||
url,
|
||||
}: {
|
||||
id?: string
|
||||
url?: string
|
||||
}) => `
|
||||
query {
|
||||
articleSavingRequest(url: "${url}") {
|
||||
articleSavingRequest(id: ${id ? `"${id}"` : null}, url: ${
|
||||
url ? `"${url}"` : null
|
||||
}) {
|
||||
... on ArticleSavingRequestSuccess {
|
||||
articleSavingRequest {
|
||||
id
|
||||
@ -117,19 +125,32 @@ describe('ArticleSavingRequest API', () => {
|
||||
|
||||
describe('articleSavingRequest', () => {
|
||||
let url: string
|
||||
let id: string
|
||||
|
||||
before(async () => {
|
||||
url = 'https://blog.omnivore.app/2'
|
||||
// create article saving request
|
||||
await graphqlRequest(
|
||||
const res = await graphqlRequest(
|
||||
createArticleSavingRequestMutation(url),
|
||||
authToken
|
||||
).expect(200)
|
||||
id = res.body.data.createArticleSavingRequest.articleSavingRequest.id
|
||||
})
|
||||
|
||||
it('returns the article saving request if exists', async () => {
|
||||
const res = await graphqlRequest(
|
||||
articleSavingRequestQuery(url),
|
||||
articleSavingRequestQuery({ url }),
|
||||
authToken
|
||||
).expect(200)
|
||||
|
||||
expect(
|
||||
res.body.data.articleSavingRequest.articleSavingRequest.status
|
||||
).to.eql(ArticleSavingRequestStatus.Processing)
|
||||
})
|
||||
|
||||
it('returns the article saving request by id', async () => {
|
||||
const res = await graphqlRequest(
|
||||
articleSavingRequestQuery({ id }),
|
||||
authToken
|
||||
).expect(200)
|
||||
|
||||
@ -140,7 +161,7 @@ describe('ArticleSavingRequest API', () => {
|
||||
|
||||
it('returns not_found if not exists', async () => {
|
||||
const res = await graphqlRequest(
|
||||
articleSavingRequestQuery('invalid-id'),
|
||||
articleSavingRequestQuery({ id: 'invalid-id' }),
|
||||
authToken
|
||||
).expect(200)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user