diff options
| author | Armand Philippot <git@armandphilippot.com> | 2023-11-24 20:00:08 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2023-11-27 14:47:51 +0100 |
| commit | f111685c5886f3e77edfd3621c98d8ac1b9bcce4 (patch) | |
| tree | 62a541fe3afeb64bf745443706fbfb02e96c5230 /src/types/graphql | |
| parent | bee515641cb144be9a855ff2cac258d2fedab21d (diff) | |
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
Diffstat (limited to 'src/types/graphql')
| -rw-r--r-- | src/types/graphql/generics.ts | 25 | ||||
| -rw-r--r-- | src/types/graphql/index.ts | 3 | ||||
| -rw-r--r-- | src/types/graphql/mutations.ts | 60 | ||||
| -rw-r--r-- | src/types/graphql/queries.ts | 143 |
4 files changed, 0 insertions, 231 deletions
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<T> = { - cursor: string; - node: T; -}; - -export type GraphQLEdgesInput = { - after?: string; - before?: string; - first?: number; - last?: number; -}; - -export type GraphQLNode<T> = { - node: T; -}; - -export type GraphQLNodes<T> = { - 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<T> = { - createComment: T; -}; - -export type SendMailResponse<T> = { - sendEmail: T; -}; - -export type MutationsResponseMap<T> = { - [sendCommentMutation]: SendCommentResponse<T>; - [sendMailMutation]: SendMailResponse<T>; -}; - -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<T> = { - post: T; -}; - -export type ArticlesResponse<T> = { - posts: T; -}; - -export type CommentsResponse<T> = { - comments: T; -}; - -export type ThematicResponse<T> = { - thematic: T; -}; - -export type ThematicsResponse<T> = { - thematics: T; -}; - -export type TopicResponse<T> = { - topic: T; -}; - -export type TopicsResponse<T> = { - topics: T; -}; - -export type EdgesResponse<T> = { - edges: GraphQLEdges<T>[]; - pageInfo: GraphQLPageInfo; -}; - -export type EndCursorResponse = { - pageInfo: Pick<GraphQLPageInfo, 'endCursor'>; -}; - -export type QueriesResponseMap<T> = { - [articleBySlugQuery]: ArticleResponse<T>; - [articlesCardQuery]: ArticlesResponse<GraphQLNodes<T>>; - [articlesEndCursorQuery]: ArticlesResponse<EndCursorResponse>; - [articlesQuery]: ArticlesResponse<EdgesResponse<T>>; - [articlesSlugQuery]: ArticlesResponse<EdgesResponse<T>>; - [commentsQuery]: CommentsResponse<EdgesResponse<T>>; - [thematicBySlugQuery]: ThematicResponse<T>; - [thematicsListQuery]: ThematicsResponse<EdgesResponse<T>>; - [thematicsSlugQuery]: ThematicsResponse<EdgesResponse<T>>; - [topicBySlugQuery]: TopicResponse<T>; - [topicsListQuery]: TopicsResponse<EdgesResponse<T>>; - [topicsSlugQuery]: TopicsResponse<EdgesResponse<T>>; - [totalArticlesQuery]: ArticlesResponse<T>; - [totalThematicsQuery]: ThematicsResponse<T>; - [totalTopicsQuery]: TopicsResponse<T>; -}; - -//=========================================================================== -// Queries input types -//=========================================================================== - -export type QueryEdges = Pick<GraphQLEdgesInput, 'after' | 'first'>; - -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; -}; |
