fix rebase conflicts

This commit is contained in:
Hongbo Wu
2023-09-14 12:22:27 +09:00
parent 23b6997d7e
commit 5a9dc344d3
9 changed files with 73 additions and 121 deletions

View File

@ -1,3 +1,4 @@
import { isNil, mergeWith } from 'lodash'
import { Between } from 'typeorm'
import { Filter } from '../../entity/filter'
import { env } from '../../env'
@ -19,22 +20,21 @@ import {
SaveFilterErrorCode,
SaveFilterSuccess,
UpdateFilterError,
UpdateFilterSuccess,
UpdateFilterErrorCode,
UpdateFilterSuccess,
} from '../../generated/graphql'
import { entityManager } from '../../repository'
import { analytics } from '../../utils/analytics'
import { env } from '../../env'
import { isNil, mergeWith } from 'lodash'
import { authorized } from '../../utils/helpers'
export const saveFilterResolver = authorized<
SaveFilterSuccess,
SaveFilterError,
MutationSaveFilterArgs
>(async (_, { input }, { authTrx, log }) => {
>(async (_, { input }, { authTrx, log, uid }) => {
try {
const filter = await authTrx(async (t) => {
return t.withRepository(filterRepository).save({
return t.getRepository(Filter).save({
user: { id: uid },
name: input.name,
category: 'Search',
@ -118,9 +118,7 @@ const updatePosition = async (
const moveUp = newPosition < position
// move filter to the new position
const updated = await AppDataSource.transaction(async (t) => {
await setClaims(t, uid)
const updated = await entityManager.transaction(async (t) => {
// update the position of the other filters
const updated = await t.getRepository(Filter).update(
{
@ -157,44 +155,31 @@ export const updateFilterResolver = authorized<
UpdateFilterSuccess,
UpdateFilterError,
MutationUpdateFilterArgs
>(async (_, { input }, { claims: { uid }, log }) => {
const repo = getRepository(Filter)
>(async (_, { input }, { authTrx, log, uid }) => {
const { id } = input
try {
const user = await getRepository(User).findOneBy({ id: uid })
if (!user) {
return {
errorCodes: [UpdateFilterErrorCode.Unauthorized],
}
}
const filter = await getRepository(Filter).findOne({
where: { id, user: { id: uid } },
relations: ['user'],
})
const filter = await authTrx((t) =>
t.getRepository(Filter).findOneBy({ id })
)
if (!filter) {
return {
__typename: 'UpdateFilterError',
errorCodes: [UpdateFilterErrorCode.NotFound],
}
}
if (filter.user.id !== uid) {
return {
__typename: 'UpdateFilterError',
errorCodes: [UpdateFilterErrorCode.Unauthorized],
}
}
if (!isNil(input.position) && filter.position != input.position) {
await updatePosition(uid, filter, input.position)
}
const updated = await repo.save({
...mergeWith({}, filter, input, (a: unknown, b: unknown) =>
isNil(b) ? a : undefined
),
})
const updated = await authTrx((t) =>
t.getRepository(Filter).save({
...mergeWith({}, filter, input, (a: unknown, b: unknown) =>
isNil(b) ? a : undefined
),
})
)
return {
__typename: 'UpdateFilterSuccess',

View File

@ -122,13 +122,13 @@ export const mergeHighlightResolver = authorized<
}
})
}
// collect colors of overlap highlights
highlight.color && mergedColors.push(highlight.color)
// collect colors of overlap highlights
highlight.color && mergedColors.push(highlight.color)
}
})
// use new color or the color of the last overlap highlight
const color = newHighlightInput.color || mergedColors[mergedColors.length - 1]
// use new color or the color of the last overlap highlight
const color =
newHighlightInput.color || mergedColors[mergedColors.length - 1]
const highlight: DeepPartial<HighlightData> = {
...newHighlightInput,

View File

@ -52,25 +52,20 @@ export const subscriptionsResolver = authorized<
SubscriptionsSuccessPartial,
SubscriptionsError,
QuerySubscriptionsArgs
>(
async (
_obj,
{ sort, type = SubscriptionType.Newsletter }, // default to newsletter
{ authTrx, uid, log }
) => {
try {
const sortBy =
sort?.by === SortBy.UpdatedTime ? 'lastFetchedAt' : 'createdAt'
const sortOrder = sort?.order === SortOrder.Ascending ? 'ASC' : 'DESC'
>(async (_obj, { sort, type }, { authTrx, uid, log }) => {
try {
const sortBy =
sort?.by === SortBy.UpdatedTime ? 'lastFetchedAt' : 'createdAt'
const sortOrder = sort?.order === SortOrder.Ascending ? 'ASC' : 'DESC'
const subscriptions = await authTrx(async (t) => {
const queryBuilder = t
.getRepository(Subscription)
.createQueryBuilder('subscription')
.leftJoinAndSelect('subscription.newsletterEmail', 'newsletterEmail')
.where({
user: { id: uid },
})
const subscriptions = await authTrx(async (t) => {
const queryBuilder = t
.getRepository(Subscription)
.createQueryBuilder('subscription')
.leftJoinAndSelect('subscription.newsletterEmail', 'newsletterEmail')
.where({
user: { id: uid },
})
if (type && type == SubscriptionType.Newsletter) {
queryBuilder.andWhere({
@ -94,10 +89,8 @@ export const subscriptionsResolver = authorized<
)
}
return queryBuilder
.orderBy('subscription.' + sortBy, sortOrder)
.getMany()
})
return queryBuilder.orderBy('subscription.' + sortBy, sortOrder).getMany()
})
return {
subscriptions,

View File

@ -1,12 +1,6 @@
/* eslint-disable @typescript-eslint/require-await */
/* eslint-disable @typescript-eslint/no-unused-vars */
import { PartialArticle } from '..'
import {
FeedArticle,
PageInfo,
SharedArticleSuccess,
} from '../../generated/graphql'
import { Merge } from '../../util'
import { FeedArticle, PageInfo } from '../../generated/graphql'
export type PartialFeedArticle = Omit<
FeedArticle,
@ -18,11 +12,6 @@ type PaginatedFeedArticlesSuccessPartial = {
pageInfo: PageInfo
}
export type SharedArticleSuccessPartial = Merge<
SharedArticleSuccess,
{ article: PartialArticle }
>
// export const getSharedArticleResolver: ResolverFn<
// SharedArticleSuccessPartial | SharedArticleError,
// Record<string, unknown>,

View File

@ -1,5 +1,4 @@
import * as privateIpLib from 'private-ip'
import { v4 as uuidv4 } from 'uuid'
import { LibraryItemState, LibraryItemType } from '../entity/library_item'
import {
ArticleSavingRequest,

View File

@ -2,15 +2,15 @@ import Postgrator from 'postgrator'
import { DeepPartial } from 'typeorm'
import { SnakeNamingStrategy } from 'typeorm-naming-strategies'
import { appDataSource } from '../src/data_source'
import { Filter } from '../src/entity/filter'
import { Label } from '../src/entity/label'
import { LibraryItem } from '../src/entity/library_item'
import { Reminder } from '../src/entity/reminder'
import { User } from '../src/entity/user'
import { UserDeviceToken } from '../src/entity/user_device_tokens'
import { getRepository } from '../src/repository'
import { entityManager, getRepository, setClaims } from '../src/repository'
import { userRepository } from '../src/repository/user'
import { createUser } from '../src/services/create_user'
import { Filter } from "../src/entity/filter"
import { saveLabelsInLibraryItem } from '../src/services/labels'
import { createLibraryItem } from '../src/services/library_item'
import { createDeviceToken } from '../src/services/user_device_tokens'
@ -64,15 +64,17 @@ export const createTestConnection = async (): Promise<void> => {
}
export const deleteFiltersFromUser = async (userId: string) => {
await AppDataSource.transaction(async (t) => {
await entityManager.transaction(async (t) => {
await setClaims(t, userId)
const filterRepo = t.getRepository(Filter);
const filterRepo = t.getRepository(Filter)
const userFilters = await filterRepo.findBy({ user: { id: userId }})
const userFilters = await filterRepo.findBy({ user: { id: userId } })
await Promise.all(userFilters.map(filter => {
return filterRepo.delete(filter.id)
}));
await Promise.all(
userFilters.map((filter) => {
return filterRepo.delete(filter.id)
})
)
})
}

View File

@ -128,8 +128,8 @@ describe('Subscriptions API', () => {
})
it('should not return inactive newsletters but should return inactive RSS', async () => {
const sub5 = await createTestSubscription(
user,
const sub5 = await createSubscription(
user.id,
'sub_5',
undefined,
SubscriptionStatus.Unsubscribed,
@ -138,8 +138,8 @@ describe('Subscriptions API', () => {
)
try {
await createTestSubscription(
user,
await createSubscription(
user.id,
'sub_6',
undefined,
SubscriptionStatus.Unsubscribed,
@ -164,8 +164,8 @@ describe('Subscriptions API', () => {
// create test user and login
const user2 = await createTestUser('fakeUser2')
try {
await createTestSubscription(
user2,
await createSubscription(
user2.id,
'sub_other',
undefined,
SubscriptionStatus.Unsubscribed,
@ -180,7 +180,7 @@ describe('Subscriptions API', () => {
}))
)
} finally {
deleteTestUser(user2.id)
deleteUser(user2.id)
}
})
@ -202,8 +202,8 @@ describe('Subscriptions API', () => {
`
const user3 = await createTestUser('fakeUser3')
try {
await createTestSubscription(
user3,
await createSubscription(
user3.id,
'sub_other',
undefined,
SubscriptionStatus.Unsubscribed,
@ -221,7 +221,7 @@ describe('Subscriptions API', () => {
}))
)
} finally {
deleteTestUser(user3.id)
deleteUser(user3.id)
}
})
@ -243,8 +243,8 @@ describe('Subscriptions API', () => {
`
const user2 = await createTestUser('fakeUser2')
try {
await createTestSubscription(
user2,
await createSubscription(
user2.id,
'sub_other',
undefined,
SubscriptionStatus.Unsubscribed,
@ -262,7 +262,7 @@ describe('Subscriptions API', () => {
}))
)
} finally {
deleteTestUser(user2.id)
deleteUser(user2.id)
}
})

View File

@ -3,34 +3,37 @@ import chai, { expect } from 'chai'
import 'mocha'
import sinon from 'sinon'
import sinonChai from 'sinon-chai'
import { Filter } from '../../src/entity/filter'
import { StatusType, User } from '../../src/entity/user'
import { getRepository } from '../../src/repository'
import { authTrx, getRepository } from '../../src/repository'
import { findProfile } from '../../src/services/profile'
import { deleteUser } from '../../src/services/user'
import * as util from '../../src/utils/sendEmail'
import {
createTestUser,
createUserWithoutProfile, deleteFiltersFromUser,
deleteTestUser,
getProfile,
createUserWithoutProfile,
deleteFiltersFromUser,
} from '../db'
chai.use(sinonChai)
describe('create user', () => {
context('creates a user through manual sign up', () => {
it ('adds the default filters to the user', async () => {
it('adds the default filters to the user', async () => {
after(async () => {
const testUser = await getRepository(User).findOneBy({
name: 'filter_user',
})
await deleteTestUser(testUser!.id)
await deleteUser(testUser!.id)
await deleteFiltersFromUser(testUser!.id)
})
const user = await createTestUser('filter_user');
const filters = await getRepository(Filter).findBy({ user: { id: user.id }})
const user = await createTestUser('filter_user')
const filters = await authTrx(
(t) => t.getRepository(Filter).findBy({ user: { id: user.id } }),
undefined,
user.id
)
expect(filters).not.to.be.empty
})

View File

@ -6160,11 +6160,6 @@
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.2.0":
version "4.6.0"
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
"@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0", "@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.3":
version "1.8.3"
resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"
@ -13011,20 +13006,6 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
ejs@^3.1.6:
version "3.1.9"
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361"
integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==
dependencies:
jake "^10.8.5"
elastic-ts@^0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/elastic-ts/-/elastic-ts-0.9.0.tgz#919b7646cd31d753235f3f9a336f7f26c5e3654d"
integrity sha512-w9Xj/67ygllZG1RS1uMnmWLMfvTEE8zUMyn9zYiEOIgt8RFLKu5X5qCT1N2eYo6IQNTCX5DUdlIw87ii36Udtg==
dependencies:
"@sindresorhus/is" "^4.0.0"
electron-to-chromium@^1.3.811:
version "1.3.816"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.816.tgz#ab6488b126de92670a6459fe3e746050e0c6276f"