mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Add createIntegration API to the GQL schema
This commit is contained in:
parent
db27ac7d59
commit
e66d047d51
6 changed files with 168 additions and 5 deletions
|
|
@ -9,6 +9,10 @@ import {
|
|||
} from 'typeorm'
|
||||
import { User } from './user'
|
||||
|
||||
export enum IntegrationType {
|
||||
Readwise = 'READWISE',
|
||||
}
|
||||
|
||||
@Entity({ name: 'integrations' })
|
||||
export class Integration {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
|
|
@ -18,8 +22,8 @@ export class Integration {
|
|||
@JoinColumn({ name: 'user_id' })
|
||||
user!: User
|
||||
|
||||
@Column('varchar')
|
||||
name!: string
|
||||
@Column('enum', { enum: IntegrationType })
|
||||
type!: IntegrationType
|
||||
|
||||
@Column('varchar')
|
||||
token!: string
|
||||
|
|
|
|||
|
|
@ -331,6 +331,30 @@ export type CreateHighlightSuccess = {
|
|||
highlight: Highlight;
|
||||
};
|
||||
|
||||
export type CreateIntegrationError = {
|
||||
__typename?: 'CreateIntegrationError';
|
||||
errorCodes: Array<CreateIntegrationErrorCode>;
|
||||
};
|
||||
|
||||
export enum CreateIntegrationErrorCode {
|
||||
BadRequest = 'BAD_REQUEST',
|
||||
InvalidToken = 'INVALID_TOKEN',
|
||||
NotFound = 'NOT_FOUND',
|
||||
Unauthorized = 'UNAUTHORIZED'
|
||||
}
|
||||
|
||||
export type CreateIntegrationInput = {
|
||||
token: Scalars['String'];
|
||||
type: IntegrationType;
|
||||
};
|
||||
|
||||
export type CreateIntegrationResult = CreateIntegrationError | CreateIntegrationSuccess;
|
||||
|
||||
export type CreateIntegrationSuccess = {
|
||||
__typename?: 'CreateIntegrationSuccess';
|
||||
integration: Integration;
|
||||
};
|
||||
|
||||
export type CreateLabelError = {
|
||||
__typename?: 'CreateLabelError';
|
||||
errorCodes: Array<CreateLabelErrorCode>;
|
||||
|
|
@ -745,6 +769,19 @@ export type HighlightStats = {
|
|||
highlightCount: Scalars['Int'];
|
||||
};
|
||||
|
||||
export type Integration = {
|
||||
__typename?: 'Integration';
|
||||
createdAt: Scalars['Date'];
|
||||
enabled: Scalars['Boolean'];
|
||||
id: Scalars['ID'];
|
||||
type: IntegrationType;
|
||||
updatedAt: Scalars['Date'];
|
||||
};
|
||||
|
||||
export enum IntegrationType {
|
||||
Readwise = 'READWISE'
|
||||
}
|
||||
|
||||
export type Label = {
|
||||
__typename?: 'Label';
|
||||
color: Scalars['String'];
|
||||
|
|
@ -897,6 +934,7 @@ export type Mutation = {
|
|||
createArticleSavingRequest: CreateArticleSavingRequestResult;
|
||||
createHighlight: CreateHighlightResult;
|
||||
createHighlightReply: CreateHighlightReplyResult;
|
||||
createIntegration: CreateIntegrationResult;
|
||||
createLabel: CreateLabelResult;
|
||||
createNewsletterEmail: CreateNewsletterEmailResult;
|
||||
createReaction: CreateReactionResult;
|
||||
|
|
@ -971,6 +1009,11 @@ export type MutationCreateHighlightReplyArgs = {
|
|||
};
|
||||
|
||||
|
||||
export type MutationCreateIntegrationArgs = {
|
||||
input: CreateIntegrationInput;
|
||||
};
|
||||
|
||||
|
||||
export type MutationCreateLabelArgs = {
|
||||
input: CreateLabelInput;
|
||||
};
|
||||
|
|
@ -2505,6 +2548,11 @@ export type ResolversTypes = {
|
|||
CreateHighlightReplySuccess: ResolverTypeWrapper<CreateHighlightReplySuccess>;
|
||||
CreateHighlightResult: ResolversTypes['CreateHighlightError'] | ResolversTypes['CreateHighlightSuccess'];
|
||||
CreateHighlightSuccess: ResolverTypeWrapper<CreateHighlightSuccess>;
|
||||
CreateIntegrationError: ResolverTypeWrapper<CreateIntegrationError>;
|
||||
CreateIntegrationErrorCode: CreateIntegrationErrorCode;
|
||||
CreateIntegrationInput: CreateIntegrationInput;
|
||||
CreateIntegrationResult: ResolversTypes['CreateIntegrationError'] | ResolversTypes['CreateIntegrationSuccess'];
|
||||
CreateIntegrationSuccess: ResolverTypeWrapper<CreateIntegrationSuccess>;
|
||||
CreateLabelError: ResolverTypeWrapper<CreateLabelError>;
|
||||
CreateLabelErrorCode: CreateLabelErrorCode;
|
||||
CreateLabelInput: CreateLabelInput;
|
||||
|
|
@ -2592,6 +2640,8 @@ export type ResolversTypes = {
|
|||
HighlightStats: ResolverTypeWrapper<HighlightStats>;
|
||||
ID: ResolverTypeWrapper<Scalars['ID']>;
|
||||
Int: ResolverTypeWrapper<Scalars['Int']>;
|
||||
Integration: ResolverTypeWrapper<Integration>;
|
||||
IntegrationType: IntegrationType;
|
||||
Label: ResolverTypeWrapper<Label>;
|
||||
LabelsError: ResolverTypeWrapper<LabelsError>;
|
||||
LabelsErrorCode: LabelsErrorCode;
|
||||
|
|
@ -2859,6 +2909,10 @@ export type ResolversParentTypes = {
|
|||
CreateHighlightReplySuccess: CreateHighlightReplySuccess;
|
||||
CreateHighlightResult: ResolversParentTypes['CreateHighlightError'] | ResolversParentTypes['CreateHighlightSuccess'];
|
||||
CreateHighlightSuccess: CreateHighlightSuccess;
|
||||
CreateIntegrationError: CreateIntegrationError;
|
||||
CreateIntegrationInput: CreateIntegrationInput;
|
||||
CreateIntegrationResult: ResolversParentTypes['CreateIntegrationError'] | ResolversParentTypes['CreateIntegrationSuccess'];
|
||||
CreateIntegrationSuccess: CreateIntegrationSuccess;
|
||||
CreateLabelError: CreateLabelError;
|
||||
CreateLabelInput: CreateLabelInput;
|
||||
CreateLabelResult: ResolversParentTypes['CreateLabelError'] | ResolversParentTypes['CreateLabelSuccess'];
|
||||
|
|
@ -2929,6 +2983,7 @@ export type ResolversParentTypes = {
|
|||
HighlightStats: HighlightStats;
|
||||
ID: Scalars['ID'];
|
||||
Int: Scalars['Int'];
|
||||
Integration: Integration;
|
||||
Label: Label;
|
||||
LabelsError: LabelsError;
|
||||
LabelsResult: ResolversParentTypes['LabelsError'] | ResolversParentTypes['LabelsSuccess'];
|
||||
|
|
@ -3327,6 +3382,20 @@ export type CreateHighlightSuccessResolvers<ContextType = ResolverContext, Paren
|
|||
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
||||
};
|
||||
|
||||
export type CreateIntegrationErrorResolvers<ContextType = ResolverContext, ParentType extends ResolversParentTypes['CreateIntegrationError'] = ResolversParentTypes['CreateIntegrationError']> = {
|
||||
errorCodes?: Resolver<Array<ResolversTypes['CreateIntegrationErrorCode']>, ParentType, ContextType>;
|
||||
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
||||
};
|
||||
|
||||
export type CreateIntegrationResultResolvers<ContextType = ResolverContext, ParentType extends ResolversParentTypes['CreateIntegrationResult'] = ResolversParentTypes['CreateIntegrationResult']> = {
|
||||
__resolveType: TypeResolveFn<'CreateIntegrationError' | 'CreateIntegrationSuccess', ParentType, ContextType>;
|
||||
};
|
||||
|
||||
export type CreateIntegrationSuccessResolvers<ContextType = ResolverContext, ParentType extends ResolversParentTypes['CreateIntegrationSuccess'] = ResolversParentTypes['CreateIntegrationSuccess']> = {
|
||||
integration?: Resolver<ResolversTypes['Integration'], ParentType, ContextType>;
|
||||
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
||||
};
|
||||
|
||||
export type CreateLabelErrorResolvers<ContextType = ResolverContext, ParentType extends ResolversParentTypes['CreateLabelError'] = ResolversParentTypes['CreateLabelError']> = {
|
||||
errorCodes?: Resolver<Array<ResolversTypes['CreateLabelErrorCode']>, ParentType, ContextType>;
|
||||
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
||||
|
|
@ -3644,6 +3713,15 @@ export type HighlightStatsResolvers<ContextType = ResolverContext, ParentType ex
|
|||
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
||||
};
|
||||
|
||||
export type IntegrationResolvers<ContextType = ResolverContext, ParentType extends ResolversParentTypes['Integration'] = ResolversParentTypes['Integration']> = {
|
||||
createdAt?: Resolver<ResolversTypes['Date'], ParentType, ContextType>;
|
||||
enabled?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
|
||||
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
|
||||
type?: Resolver<ResolversTypes['IntegrationType'], ParentType, ContextType>;
|
||||
updatedAt?: Resolver<ResolversTypes['Date'], ParentType, ContextType>;
|
||||
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
|
||||
};
|
||||
|
||||
export type LabelResolvers<ContextType = ResolverContext, ParentType extends ResolversParentTypes['Label'] = ResolversParentTypes['Label']> = {
|
||||
color?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
|
||||
createdAt?: Resolver<Maybe<ResolversTypes['Date']>, ParentType, ContextType>;
|
||||
|
|
@ -3755,6 +3833,7 @@ export type MutationResolvers<ContextType = ResolverContext, ParentType extends
|
|||
createArticleSavingRequest?: Resolver<ResolversTypes['CreateArticleSavingRequestResult'], ParentType, ContextType, RequireFields<MutationCreateArticleSavingRequestArgs, 'input'>>;
|
||||
createHighlight?: Resolver<ResolversTypes['CreateHighlightResult'], ParentType, ContextType, RequireFields<MutationCreateHighlightArgs, 'input'>>;
|
||||
createHighlightReply?: Resolver<ResolversTypes['CreateHighlightReplyResult'], ParentType, ContextType, RequireFields<MutationCreateHighlightReplyArgs, 'input'>>;
|
||||
createIntegration?: Resolver<ResolversTypes['CreateIntegrationResult'], ParentType, ContextType, RequireFields<MutationCreateIntegrationArgs, 'input'>>;
|
||||
createLabel?: Resolver<ResolversTypes['CreateLabelResult'], ParentType, ContextType, RequireFields<MutationCreateLabelArgs, 'input'>>;
|
||||
createNewsletterEmail?: Resolver<ResolversTypes['CreateNewsletterEmailResult'], ParentType, ContextType>;
|
||||
createReaction?: Resolver<ResolversTypes['CreateReactionResult'], ParentType, ContextType, RequireFields<MutationCreateReactionArgs, 'input'>>;
|
||||
|
|
@ -4556,6 +4635,9 @@ export type Resolvers<ContextType = ResolverContext> = {
|
|||
CreateHighlightReplySuccess?: CreateHighlightReplySuccessResolvers<ContextType>;
|
||||
CreateHighlightResult?: CreateHighlightResultResolvers<ContextType>;
|
||||
CreateHighlightSuccess?: CreateHighlightSuccessResolvers<ContextType>;
|
||||
CreateIntegrationError?: CreateIntegrationErrorResolvers<ContextType>;
|
||||
CreateIntegrationResult?: CreateIntegrationResultResolvers<ContextType>;
|
||||
CreateIntegrationSuccess?: CreateIntegrationSuccessResolvers<ContextType>;
|
||||
CreateLabelError?: CreateLabelErrorResolvers<ContextType>;
|
||||
CreateLabelResult?: CreateLabelResultResolvers<ContextType>;
|
||||
CreateLabelSuccess?: CreateLabelSuccessResolvers<ContextType>;
|
||||
|
|
@ -4617,6 +4699,7 @@ export type Resolvers<ContextType = ResolverContext> = {
|
|||
Highlight?: HighlightResolvers<ContextType>;
|
||||
HighlightReply?: HighlightReplyResolvers<ContextType>;
|
||||
HighlightStats?: HighlightStatsResolvers<ContextType>;
|
||||
Integration?: IntegrationResolvers<ContextType>;
|
||||
Label?: LabelResolvers<ContextType>;
|
||||
LabelsError?: LabelsErrorResolvers<ContextType>;
|
||||
LabelsResult?: LabelsResultResolvers<ContextType>;
|
||||
|
|
|
|||
|
|
@ -284,6 +284,28 @@ type CreateHighlightSuccess {
|
|||
highlight: Highlight!
|
||||
}
|
||||
|
||||
type CreateIntegrationError {
|
||||
errorCodes: [CreateIntegrationErrorCode!]!
|
||||
}
|
||||
|
||||
enum CreateIntegrationErrorCode {
|
||||
BAD_REQUEST
|
||||
INVALID_TOKEN
|
||||
NOT_FOUND
|
||||
UNAUTHORIZED
|
||||
}
|
||||
|
||||
input CreateIntegrationInput {
|
||||
token: String!
|
||||
type: IntegrationType!
|
||||
}
|
||||
|
||||
union CreateIntegrationResult = CreateIntegrationError | CreateIntegrationSuccess
|
||||
|
||||
type CreateIntegrationSuccess {
|
||||
integration: Integration!
|
||||
}
|
||||
|
||||
type CreateLabelError {
|
||||
errorCodes: [CreateLabelErrorCode!]!
|
||||
}
|
||||
|
|
@ -658,6 +680,18 @@ type HighlightStats {
|
|||
highlightCount: Int!
|
||||
}
|
||||
|
||||
type Integration {
|
||||
createdAt: Date!
|
||||
enabled: Boolean!
|
||||
id: ID!
|
||||
type: IntegrationType!
|
||||
updatedAt: Date!
|
||||
}
|
||||
|
||||
enum IntegrationType {
|
||||
READWISE
|
||||
}
|
||||
|
||||
type Label {
|
||||
color: String!
|
||||
createdAt: Date
|
||||
|
|
@ -796,6 +830,7 @@ type Mutation {
|
|||
createArticleSavingRequest(input: CreateArticleSavingRequestInput!): CreateArticleSavingRequestResult!
|
||||
createHighlight(input: CreateHighlightInput!): CreateHighlightResult!
|
||||
createHighlightReply(input: CreateHighlightReplyInput!): CreateHighlightReplyResult!
|
||||
createIntegration(input: CreateIntegrationInput!): CreateIntegrationResult!
|
||||
createLabel(input: CreateLabelInput!): CreateLabelResult!
|
||||
createNewsletterEmail: CreateNewsletterEmailResult!
|
||||
createReaction(input: CreateReactionInput!): CreateReactionResult!
|
||||
|
|
|
|||
|
|
@ -1812,6 +1812,42 @@ const schema = gql`
|
|||
NOT_FOUND
|
||||
}
|
||||
|
||||
union CreateIntegrationResult =
|
||||
CreateIntegrationSuccess
|
||||
| CreateIntegrationError
|
||||
|
||||
type CreateIntegrationSuccess {
|
||||
integration: Integration!
|
||||
}
|
||||
|
||||
type Integration {
|
||||
id: ID!
|
||||
type: IntegrationType!
|
||||
enabled: Boolean!
|
||||
createdAt: Date!
|
||||
updatedAt: Date!
|
||||
}
|
||||
|
||||
enum IntegrationType {
|
||||
READWISE
|
||||
}
|
||||
|
||||
type CreateIntegrationError {
|
||||
errorCodes: [CreateIntegrationErrorCode!]!
|
||||
}
|
||||
|
||||
enum CreateIntegrationErrorCode {
|
||||
UNAUTHORIZED
|
||||
BAD_REQUEST
|
||||
NOT_FOUND
|
||||
INVALID_TOKEN
|
||||
}
|
||||
|
||||
input CreateIntegrationInput {
|
||||
type: IntegrationType!
|
||||
token: String!
|
||||
}
|
||||
|
||||
# Mutations
|
||||
type Mutation {
|
||||
googleLogin(input: GoogleLoginInput!): LoginResult!
|
||||
|
|
@ -1881,6 +1917,7 @@ const schema = gql`
|
|||
revokeApiKey(id: ID!): RevokeApiKeyResult!
|
||||
setLabelsForHighlight(input: SetLabelsForHighlightInput!): SetLabelsResult!
|
||||
moveLabel(input: MoveLabelInput!): MoveLabelResult!
|
||||
createIntegration(input: CreateIntegrationInput!): CreateIntegrationResult!
|
||||
}
|
||||
|
||||
# FIXME: remove sort from feedArticles after all cached tabs are closed
|
||||
|
|
|
|||
|
|
@ -4,15 +4,17 @@
|
|||
|
||||
BEGIN;
|
||||
|
||||
CREATE TYPE omnivore.integration_type AS ENUM ('READWISE');
|
||||
|
||||
CREATE TABLE omnivore.integrations (
|
||||
id uuid PRIMARY KEY DEFAULT uuid_generate_v1mc(),
|
||||
user_id uuid NOT NULL REFERENCES omnivore.user ON DELETE CASCADE,
|
||||
name varchar(50) NOT NULL,
|
||||
"type" integration_type NOT NULL,
|
||||
token varchar(255) NOT NULL,
|
||||
enabled boolean NOT NULL DEFAULT true,
|
||||
"enabled" boolean NOT NULL DEFAULT true,
|
||||
created_at timestamptz NOT NULL DEFAULT current_timestamp,
|
||||
updated_at timestamptz NOT NULL DEFAULT current_timestamp,
|
||||
UNIQUE (user_id, name)
|
||||
UNIQUE (user_id, "type")
|
||||
);
|
||||
|
||||
CREATE TRIGGER update_integration_modtime BEFORE UPDATE ON omnivore.integrations
|
||||
|
|
|
|||
|
|
@ -6,4 +6,6 @@ BEGIN;
|
|||
|
||||
DROP TABLE IF EXISTS omnivore.integrations;
|
||||
|
||||
DROP TYPE IF EXISTS omnivore.integration_type CASCADE;
|
||||
|
||||
COMMIT;
|
||||
|
|
|
|||
Loading…
Reference in a new issue