From f111685c5886f3e77edfd3621c98d8ac1b9bcce4 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Fri, 24 Nov 2023 20:00:08 +0100 Subject: refactor(services, types): reorganize GraphQL fetchers and data types The Typescript mapped types was useful for autocompletion in fetchers but their are harder to maintain. I think it's better to keep each query close to its fetcher to have a better understanding of the fetched data. So I: * colocate queries with their own fetcher * colocate mutations with their own mutator * remove Typescript mapped types for queries and mutations * move data convertors inside graphql services * rename most of data types and fetchers --- src/types/graphql/generics.ts | 25 ------- src/types/graphql/index.ts | 3 - src/types/graphql/mutations.ts | 60 ----------------- src/types/graphql/queries.ts | 143 ----------------------------------------- 4 files changed, 231 deletions(-) delete mode 100644 src/types/graphql/generics.ts delete mode 100644 src/types/graphql/index.ts delete mode 100644 src/types/graphql/mutations.ts delete mode 100644 src/types/graphql/queries.ts (limited to 'src/types/graphql') diff --git a/src/types/graphql/generics.ts b/src/types/graphql/generics.ts deleted file mode 100644 index dec5f10..0000000 --- a/src/types/graphql/generics.ts +++ /dev/null @@ -1,25 +0,0 @@ -export type GraphQLPageInfo = { - endCursor: string; - hasNextPage: boolean; - total: number; -}; - -export type GraphQLEdges = { - cursor: string; - node: T; -}; - -export type GraphQLEdgesInput = { - after?: string; - before?: string; - first?: number; - last?: number; -}; - -export type GraphQLNode = { - node: T; -}; - -export type GraphQLNodes = { - nodes: T[]; -}; diff --git a/src/types/graphql/index.ts b/src/types/graphql/index.ts deleted file mode 100644 index 79eb05e..0000000 --- a/src/types/graphql/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './generics'; -export * from './mutations'; -export * from './queries'; diff --git a/src/types/graphql/mutations.ts b/src/types/graphql/mutations.ts deleted file mode 100644 index 6ff066c..0000000 --- a/src/types/graphql/mutations.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { sendCommentMutation, sendMailMutation } from '../../services/graphql'; - -//=========================================================================== -// Existing mutations list -//=========================================================================== - -export type Mutations = typeof sendMailMutation | typeof sendCommentMutation; - -//=========================================================================== -// Mutations response types -//=========================================================================== - -export type SendCommentResponse = { - createComment: T; -}; - -export type SendMailResponse = { - sendEmail: T; -}; - -export type MutationsResponseMap = { - [sendCommentMutation]: SendCommentResponse; - [sendMailMutation]: SendMailResponse; -}; - -export type Approved = { - approved: boolean; -}; - -export type SentComment = { - clientMutationId: string; - success: boolean; - comment: Approved | null; -}; - -//=========================================================================== -// Mutations input types -//=========================================================================== - -export type SendCommentInput = { - author: string; - authorEmail: string; - authorUrl: string; - clientMutationId: string; - commentOn: number; - content: string; - parent?: number; -}; - -export type SendMailInput = { - body: string; - clientMutationId: string; - replyTo: string; - subject: string; -}; - -export type MutationsInputMap = { - [sendCommentMutation]: SendCommentInput; - [sendMailMutation]: SendMailInput; -}; diff --git a/src/types/graphql/queries.ts b/src/types/graphql/queries.ts deleted file mode 100644 index 83e9c67..0000000 --- a/src/types/graphql/queries.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { - articleBySlugQuery, - articlesCardQuery, - articlesEndCursorQuery, - articlesQuery, - articlesSlugQuery, - commentsQuery, - thematicBySlugQuery, - thematicsListQuery, - thematicsSlugQuery, - topicBySlugQuery, - topicsListQuery, - topicsSlugQuery, - totalArticlesQuery, - totalThematicsQuery, - totalTopicsQuery, -} from '../../services/graphql'; -import { Slug } from '../app'; -import { RawComment } from '../raw-data'; -import { - GraphQLEdges, - GraphQLEdgesInput, - GraphQLNodes, - GraphQLPageInfo, -} from './generics'; - -//=========================================================================== -// Existing queries list -//=========================================================================== - -export type Queries = - | typeof articlesQuery - | typeof articleBySlugQuery - | typeof articlesCardQuery - | typeof articlesEndCursorQuery - | typeof articlesSlugQuery - | typeof commentsQuery - | typeof thematicBySlugQuery - | typeof thematicsListQuery - | typeof thematicsSlugQuery - | typeof topicBySlugQuery - | typeof topicsListQuery - | typeof topicsSlugQuery - | typeof totalArticlesQuery - | typeof totalThematicsQuery - | typeof totalTopicsQuery; - -//=========================================================================== -// Queries response types -//=========================================================================== - -export type ArticleResponse = { - post: T; -}; - -export type ArticlesResponse = { - posts: T; -}; - -export type CommentsResponse = { - comments: T; -}; - -export type ThematicResponse = { - thematic: T; -}; - -export type ThematicsResponse = { - thematics: T; -}; - -export type TopicResponse = { - topic: T; -}; - -export type TopicsResponse = { - topics: T; -}; - -export type EdgesResponse = { - edges: GraphQLEdges[]; - pageInfo: GraphQLPageInfo; -}; - -export type EndCursorResponse = { - pageInfo: Pick; -}; - -export type QueriesResponseMap = { - [articleBySlugQuery]: ArticleResponse; - [articlesCardQuery]: ArticlesResponse>; - [articlesEndCursorQuery]: ArticlesResponse; - [articlesQuery]: ArticlesResponse>; - [articlesSlugQuery]: ArticlesResponse>; - [commentsQuery]: CommentsResponse>; - [thematicBySlugQuery]: ThematicResponse; - [thematicsListQuery]: ThematicsResponse>; - [thematicsSlugQuery]: ThematicsResponse>; - [topicBySlugQuery]: TopicResponse; - [topicsListQuery]: TopicsResponse>; - [topicsSlugQuery]: TopicsResponse>; - [totalArticlesQuery]: ArticlesResponse; - [totalThematicsQuery]: ThematicsResponse; - [totalTopicsQuery]: TopicsResponse; -}; - -//=========================================================================== -// Queries input types -//=========================================================================== - -export type QueryEdges = Pick; - -export type ContentId = { - contentId: number; -}; - -export type Search = { - search?: string; -}; - -export type QueriesInputMap = { - [articleBySlugQuery]: Slug; - [articlesCardQuery]: QueryEdges & Search; - [articlesEndCursorQuery]: QueryEdges & Search; - [articlesQuery]: QueryEdges & Search; - [articlesSlugQuery]: QueryEdges & Search; - [commentsQuery]: ContentId & QueryEdges; - [thematicBySlugQuery]: Slug; - [thematicsListQuery]: QueryEdges & Search; - [thematicsSlugQuery]: QueryEdges & Search; - [topicBySlugQuery]: Slug; - [topicsListQuery]: QueryEdges & Search; - [topicsSlugQuery]: QueryEdges & Search; - [totalArticlesQuery]: Search; - [totalThematicsQuery]: null; - [totalTopicsQuery]: null; -}; - -export type CommentPage = { - comments: RawComment[]; - hasNextPage: boolean; - endCursor: string; -}; -- cgit v1.2.3