diff --git a/packages/api/src/entity/post.ts b/packages/api/src/entity/post.ts index 2890a3af9..530bf78be 100644 --- a/packages/api/src/entity/post.ts +++ b/packages/api/src/entity/post.ts @@ -1,9 +1,11 @@ import { Column, + CreateDateColumn, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn, + UpdateDateColumn, } from 'typeorm' import { User } from './user' @@ -37,9 +39,9 @@ export class Post { @Column('text', { nullable: true }) thought?: string | null - @Column('timestamptz') + @CreateDateColumn({ type: 'timestamptz' }) createdAt!: Date - @Column('timestamptz') + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt!: Date } diff --git a/packages/api/src/generated/graphql.ts b/packages/api/src/generated/graphql.ts index 7a128adaa..069fed32e 100644 --- a/packages/api/src/generated/graphql.ts +++ b/packages/api/src/generated/graphql.ts @@ -515,6 +515,7 @@ export type CreatePostError = { }; export enum CreatePostErrorCode { + BadRequest = 'BAD_REQUEST', Unauthorized = 'UNAUTHORIZED' } @@ -2408,12 +2409,12 @@ export type ParseResult = { export type Post = { __typename?: 'Post'; - author: User; + author: Scalars['String']; content: Scalars['String']; createdAt: Scalars['Date']; highlights?: Maybe>; id: Scalars['ID']; - libraryItems: Array
; + libraryItems?: Maybe>; ownedByViewer: Scalars['Boolean']; thought?: Maybe; thumbnail?: Maybe; @@ -7059,12 +7060,12 @@ export type PageInfoResolvers = { - author?: Resolver; + author?: Resolver; content?: Resolver; createdAt?: Resolver; highlights?: Resolver>, ParentType, ContextType>; id?: Resolver; - libraryItems?: Resolver, ParentType, ContextType>; + libraryItems?: Resolver>, ParentType, ContextType>; ownedByViewer?: Resolver; thought?: Resolver, ParentType, ContextType>; thumbnail?: Resolver, ParentType, ContextType>; diff --git a/packages/api/src/generated/schema.graphql b/packages/api/src/generated/schema.graphql index ca5744364..849c09f9d 100644 --- a/packages/api/src/generated/schema.graphql +++ b/packages/api/src/generated/schema.graphql @@ -460,6 +460,7 @@ type CreatePostError { } enum CreatePostErrorCode { + BAD_REQUEST UNAUTHORIZED } @@ -1842,12 +1843,12 @@ input ParseResult { } type Post { - author: User! + author: String! content: String! createdAt: Date! highlights: [Highlight!] id: ID! - libraryItems: [Article!]! + libraryItems: [Article!] ownedByViewer: Boolean! thought: String thumbnail: String diff --git a/packages/api/src/resolvers/function_resolvers.ts b/packages/api/src/resolvers/function_resolvers.ts index bb23933e5..840476bce 100644 --- a/packages/api/src/resolvers/function_resolvers.ts +++ b/packages/api/src/resolvers/function_resolvers.ts @@ -791,26 +791,32 @@ export const functionResolvers = { recommendedAt: (recommendation: Recommendation) => recommendation.createdAt, }, Post: { - author(post: Post, _: never, ctx: ResolverContext) { - return ctx.dataLoaders.users.load(post.userId) + async author(post: Post, _: never, ctx: ResolverContext) { + const author = await ctx.dataLoaders.users.load(post.userId) + return author?.name }, ownedByViewer(post: Post, _: never, ctx: ResolverContext) { - console.log('ownedByViewer: ctx.claims?.uid', ctx.claims?.uid) return post.userId === ctx.claims?.uid }, - libraryItems( + async libraryItems( post: { libraryItemIds: string[] }, _: never, ctx: ResolverContext ) { - return ctx.dataLoaders.libraryItems.loadMany(post.libraryItemIds) + const items = await ctx.dataLoaders.libraryItems.loadMany( + post.libraryItemIds + ) + return items.filter((item) => !!item) }, - highlights( + async highlights( post: { highlightIds: string[] }, _: never, ctx: ResolverContext ) { - return ctx.dataLoaders.highlights.loadMany(post.highlightIds) + const highlights = await ctx.dataLoaders.highlights.loadMany( + post.highlightIds + ) + return highlights.filter((highlight) => !!highlight) }, }, ...resultResolveTypeResolver('Login'), diff --git a/packages/api/src/resolvers/posts/index.ts b/packages/api/src/resolvers/posts/index.ts index 38326dc1a..c65fcab7d 100644 --- a/packages/api/src/resolvers/posts/index.ts +++ b/packages/api/src/resolvers/posts/index.ts @@ -121,6 +121,14 @@ export const createPostResolver = authorized< const { title, content, highlightIds, libraryItemIds, thought, thumbnail } = input + if (libraryItemIds.length === 0) { + log.error('Invalid args', { libraryItemIds }) + + return { + errorCodes: [CreatePostErrorCode.BadRequest], + } + } + const postToCreate = { userId: uid, title, diff --git a/packages/api/src/schema.ts b/packages/api/src/schema.ts index 3099e9b03..09840b724 100755 --- a/packages/api/src/schema.ts +++ b/packages/api/src/schema.ts @@ -3343,11 +3343,11 @@ const schema = gql` id: ID! title: String! content: String! - author: User! + author: String! ownedByViewer: Boolean! thumbnail: String thought: String - libraryItems: [Article!]! + libraryItems: [Article!] highlights: [Highlight!] createdAt: Date! updatedAt: Date! @@ -3374,6 +3374,7 @@ const schema = gql` enum CreatePostErrorCode { UNAUTHORIZED + BAD_REQUEST } input UpdatePostInput {