Add user and note to Recommendation type

This commit is contained in:
Jackson Harper 2022-12-06 17:44:53 +08:00
parent 81dd49d6af
commit 0892d9e7e6
7 changed files with 132 additions and 12 deletions

View file

@ -198,9 +198,18 @@ export interface Highlight {
highlightPositionAnchorIndex?: number | null
}
export interface RecommendingUser {
userId: string
name: string
username: string
profileImageURL: string | null
}
export interface Recommendation {
id: string
name: string
note: string | null
user: RecommendingUser
recommendedAt: Date
}

View file

@ -1787,6 +1787,7 @@ export enum RecommendErrorCode {
export type RecommendInput = {
groupIds: Array<Scalars['ID']>;
note?: InputMaybe<Scalars['String']>;
pageId: Scalars['ID'];
};
@ -1801,7 +1802,9 @@ export type Recommendation = {
__typename?: 'Recommendation';
id: Scalars['ID'];
name: Scalars['String'];
note?: Maybe<Scalars['String']>;
recommendedAt: Scalars['Date'];
user: RecommendingUser;
};
export type RecommendationGroup = {
@ -1815,6 +1818,14 @@ export type RecommendationGroup = {
updatedAt: Scalars['Date'];
};
export type RecommendingUser = {
__typename?: 'RecommendingUser';
name: Scalars['String'];
profileImageURL?: Maybe<Scalars['String']>;
userId: Scalars['String'];
username: Scalars['String'];
};
export type Reminder = {
__typename?: 'Reminder';
archiveUntil: Scalars['Boolean'];
@ -3230,6 +3241,7 @@ export type ResolversTypes = {
RecommendSuccess: ResolverTypeWrapper<RecommendSuccess>;
Recommendation: ResolverTypeWrapper<Recommendation>;
RecommendationGroup: ResolverTypeWrapper<RecommendationGroup>;
RecommendingUser: ResolverTypeWrapper<RecommendingUser>;
Reminder: ResolverTypeWrapper<Reminder>;
ReminderError: ResolverTypeWrapper<ReminderError>;
ReminderErrorCode: ReminderErrorCode;
@ -3631,6 +3643,7 @@ export type ResolversParentTypes = {
RecommendSuccess: RecommendSuccess;
Recommendation: Recommendation;
RecommendationGroup: RecommendationGroup;
RecommendingUser: RecommendingUser;
Reminder: Reminder;
ReminderError: ReminderError;
ReminderResult: ResolversParentTypes['ReminderError'] | ResolversParentTypes['ReminderSuccess'];
@ -4836,7 +4849,9 @@ export type RecommendSuccessResolvers<ContextType = ResolverContext, ParentType
export type RecommendationResolvers<ContextType = ResolverContext, ParentType extends ResolversParentTypes['Recommendation'] = ResolversParentTypes['Recommendation']> = {
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
name?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
note?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
recommendedAt?: Resolver<ResolversTypes['Date'], ParentType, ContextType>;
user?: Resolver<ResolversTypes['RecommendingUser'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};
@ -4851,6 +4866,14 @@ export type RecommendationGroupResolvers<ContextType = ResolverContext, ParentTy
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};
export type RecommendingUserResolvers<ContextType = ResolverContext, ParentType extends ResolversParentTypes['RecommendingUser'] = ResolversParentTypes['RecommendingUser']> = {
name?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
profileImageURL?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
userId?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
username?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};
export type ReminderResolvers<ContextType = ResolverContext, ParentType extends ResolversParentTypes['Reminder'] = ResolversParentTypes['Reminder']> = {
archiveUntil?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
@ -5718,6 +5741,7 @@ export type Resolvers<ContextType = ResolverContext> = {
RecommendSuccess?: RecommendSuccessResolvers<ContextType>;
Recommendation?: RecommendationResolvers<ContextType>;
RecommendationGroup?: RecommendationGroupResolvers<ContextType>;
RecommendingUser?: RecommendingUserResolvers<ContextType>;
Reminder?: ReminderResolvers<ContextType>;
ReminderError?: ReminderErrorResolvers<ContextType>;
ReminderResult?: ReminderResultResolvers<ContextType>;

View file

@ -1250,6 +1250,7 @@ enum RecommendErrorCode {
input RecommendInput {
groupIds: [ID!]!
note: String
pageId: ID!
}
@ -1262,7 +1263,9 @@ type RecommendSuccess {
type Recommendation {
id: ID!
name: String!
note: String
recommendedAt: Date!
user: RecommendingUser!
}
type RecommendationGroup {
@ -1275,6 +1278,13 @@ type RecommendationGroup {
updatedAt: Date!
}
type RecommendingUser {
name: String!
profileImageURL: String
userId: String!
username: String!
}
type Reminder {
archiveUntil: Boolean!
id: ID!

View file

@ -146,8 +146,9 @@ export const recommendResolver = authorized<
})
try {
const user = await getRepository(User).findOneBy({
id: uid,
const user = await getRepository(User).findOne({
where: { id: uid },
relations: ['profile'],
})
if (!user) {
return {
@ -185,6 +186,13 @@ export const recommendResolver = authorized<
page.id,
{
...group,
note: input.note ?? null,
user: {
userId: user.id,
name: user.name,
username: user.profile.username,
profileImageURL: user.profile.pictureUrl,
},
recommendedAt: new Date(),
},
auth
@ -198,6 +206,7 @@ export const recommendResolver = authorized<
taskNames,
}
} catch (error) {
console.log('Error recommending: ', error)
log.error('Error recommending', {
error,
labels: {

View file

@ -329,10 +329,19 @@ const schema = gql`
updatedAt: Date!
}
type RecommendingUser {
userId: String!
name: String!
username: String!
profileImageURL: String
}
type Recommendation {
id: ID!
name: String!
user: RecommendingUser
recommendedAt: Date!
note: String
}
type Article {
@ -2194,6 +2203,7 @@ const schema = gql`
input RecommendInput {
pageId: ID!
groupIds: [ID!]!
note: String
}
union RecommendResult = RecommendSuccess | RecommendError

View file

@ -7,13 +7,19 @@
"analyzer": {
"strip_html_analyzer": {
"tokenizer": "standard",
"char_filter": ["html_strip"],
"filter": ["lowercase"]
"char_filter": [
"html_strip"
],
"filter": [
"lowercase"
]
}
},
"normalizer": {
"lowercase_normalizer": {
"filter": ["lowercase"]
"filter": [
"lowercase"
]
}
}
}
@ -173,9 +179,31 @@
},
"recommendedAt": {
"type": "date"
},
"note": {
"type": "keyword"
},
"user": {
"type": "nested",
"properties": {
"userID": {
"type": "keyword"
},
"name": {
"type": "keyword",
"normalizer": "lowercase_normalizer"
},
"username": {
"type": "keyword",
"normalizer": "lowercase_normalizer"
},
"profileImageURL": {
"type": "keyword"
}
}
}
}
}
}
}
}
}

View file

@ -80,8 +80,24 @@ export type LibraryItemNode = {
state: State
pageType: PageType
siteName?: string
subscription?: string,
subscription?: string
readAt?: string
recommendedBy?: Recommendation[]
}
export type Recommendation = {
id: string
name: string
note?: string
user?: RecommendingUser
recommendedAt: Date
}
export type RecommendingUser = {
userId: string
name: string
username: string
profileImageURL?: string
}
export type PageInfo = {
@ -135,6 +151,18 @@ export function useGetLibraryItemsQuery({
siteName
subscription
readAt
recommendedBy {
id
name
note
user {
userId
name
username
profileImageURL
}
recommendedAt
}
}
}
pageInfo {
@ -198,7 +226,7 @@ export function useGetLibraryItemsQuery({
}
const getIndexOf = (page: LibraryItems, item: LibraryItem) => {
return page.edges.findIndex(i => i.node.id === item.node.id)
return page.edges.findIndex((i) => i.node.id === item.node.id)
}
const performActionOnItem = async (
@ -329,7 +357,9 @@ export function useGetLibraryItemsQuery({
})
unsubscribeMutation(item.node.subscription).then((res) => {
if (res) {
showSuccessToast('Unsubscribed successfully', { position: 'bottom-right' })
showSuccessToast('Unsubscribed successfully', {
position: 'bottom-right',
})
} else {
showErrorToast('Error unsubscribing', {
position: 'bottom-right',
@ -337,8 +367,8 @@ export function useGetLibraryItemsQuery({
}
})
}
case 'update-item':
updateData(item)
case 'update-item':
updateData(item)
break
case 'refresh':
await mutate()
@ -353,6 +383,6 @@ export function useGetLibraryItemsQuery({
performActionOnItem,
size,
setSize,
mutate
mutate,
}
}