From 2adf753f8f0232a80922567af262c332d9054b65 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Wed, 5 Jul 2023 18:23:01 +0800 Subject: [PATCH] update graphql schema --- packages/api/src/entity/rss_subscription.ts | 44 ------------------- packages/api/src/entity/subscription.ts | 21 ++++++--- packages/api/src/generated/graphql.ts | 16 ++++++- packages/api/src/generated/schema.graphql | 10 ++++- packages/api/src/schema.ts | 10 ++++- .../0114.do.add_type_to_subscriptions.sql | 15 +++++++ .../migrations/0114.do.rss_subscription.sql | 20 --------- .../0114.undo.add_type_to_subscriptions.sql | 15 +++++++ .../migrations/0114.undo.rss_subscription.sql | 9 ---- 9 files changed, 77 insertions(+), 83 deletions(-) delete mode 100644 packages/api/src/entity/rss_subscription.ts create mode 100755 packages/db/migrations/0114.do.add_type_to_subscriptions.sql delete mode 100755 packages/db/migrations/0114.do.rss_subscription.sql create mode 100755 packages/db/migrations/0114.undo.add_type_to_subscriptions.sql delete mode 100755 packages/db/migrations/0114.undo.rss_subscription.sql diff --git a/packages/api/src/entity/rss_subscription.ts b/packages/api/src/entity/rss_subscription.ts deleted file mode 100644 index d5f181b06..000000000 --- a/packages/api/src/entity/rss_subscription.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { - Column, - CreateDateColumn, - Entity, - JoinColumn, - ManyToOne, - PrimaryGeneratedColumn, - UpdateDateColumn, -} from 'typeorm' -import { User } from './user' - -@Entity({ name: 'rss_subscription' }) -export class RssSubscription { - @PrimaryGeneratedColumn('uuid') - id!: string - - @ManyToOne(() => User, { onDelete: 'CASCADE' }) - @JoinColumn({ name: 'user_id' }) - user!: User - - @Column('varchar', { length: 255 }) - title!: string - - @Column('text', { nullable: true }) - description?: string | null - - @Column('text') - url!: string - - @Column('text', { nullable: true }) - imageUrl?: string | null - - @Column('integer', { default: 0 }) - count!: number - - @Column('timestamp', { nullable: true }) - lastFetchedAt?: Date | null - - @CreateDateColumn({ default: () => 'CURRENT_TIMESTAMP' }) - createdAt!: Date - - @UpdateDateColumn({ default: () => 'CURRENT_TIMESTAMP' }) - updatedAt!: Date -} diff --git a/packages/api/src/entity/subscription.ts b/packages/api/src/entity/subscription.ts index ade5f4b57..a0e311a19 100644 --- a/packages/api/src/entity/subscription.ts +++ b/packages/api/src/entity/subscription.ts @@ -5,15 +5,13 @@ import { JoinColumn, ManyToOne, PrimaryGeneratedColumn, - Unique, UpdateDateColumn, } from 'typeorm' -import { User } from './user' -import { SubscriptionStatus } from '../generated/graphql' +import { SubscriptionStatus, SubscriptionType } from '../generated/graphql' import { NewsletterEmail } from './newsletter_email' +import { User } from './user' @Entity({ name: 'subscriptions' }) -@Unique(['name', 'user']) export class Subscription { @PrimaryGeneratedColumn('uuid') id!: string @@ -50,9 +48,20 @@ export class Subscription { @Column('text', { nullable: true }) icon?: string - @CreateDateColumn() + @Column('enum', { + enum: SubscriptionType, + }) + type!: SubscriptionType + + @Column('integer', { default: 0 }) + count!: number + + @Column('timestamp', { nullable: true }) + lastFetchedAt?: Date | null + + @CreateDateColumn({ default: () => 'CURRENT_TIMESTAMP' }) createdAt!: Date - @UpdateDateColumn() + @UpdateDateColumn({ default: () => 'CURRENT_TIMESTAMP' }) updatedAt!: Date } diff --git a/packages/api/src/generated/graphql.ts b/packages/api/src/generated/graphql.ts index 82e0206d4..fa49a1a0f 100644 --- a/packages/api/src/generated/graphql.ts +++ b/packages/api/src/generated/graphql.ts @@ -2706,13 +2706,16 @@ export type SubscribeSuccess = { export type Subscription = { __typename?: 'Subscription'; + count: Scalars['Int']; createdAt: Scalars['Date']; description?: Maybe; icon?: Maybe; id: Scalars['ID']; + lastFetchedAt?: Maybe; name: Scalars['String']; - newsletterEmail: Scalars['String']; + newsletterEmail?: Maybe; status: SubscriptionStatus; + type: SubscriptionType; unsubscribeHttpUrl?: Maybe; unsubscribeMailTo?: Maybe; updatedAt: Scalars['Date']; @@ -2725,6 +2728,11 @@ export enum SubscriptionStatus { Unsubscribed = 'UNSUBSCRIBED' } +export enum SubscriptionType { + Newsletter = 'NEWSLETTER', + Rss = 'RSS' +} + export type SubscriptionsError = { __typename?: 'SubscriptionsError'; errorCodes: Array; @@ -3691,6 +3699,7 @@ export type ResolversTypes = { SubscribeSuccess: ResolverTypeWrapper; Subscription: ResolverTypeWrapper<{}>; SubscriptionStatus: SubscriptionStatus; + SubscriptionType: SubscriptionType; SubscriptionsError: ResolverTypeWrapper; SubscriptionsErrorCode: SubscriptionsErrorCode; SubscriptionsResult: ResolversTypes['SubscriptionsError'] | ResolversTypes['SubscriptionsSuccess']; @@ -5745,13 +5754,16 @@ export type SubscribeSuccessResolvers = { + count?: SubscriptionResolver; createdAt?: SubscriptionResolver; description?: SubscriptionResolver, "description", ParentType, ContextType>; icon?: SubscriptionResolver, "icon", ParentType, ContextType>; id?: SubscriptionResolver; + lastFetchedAt?: SubscriptionResolver, "lastFetchedAt", ParentType, ContextType>; name?: SubscriptionResolver; - newsletterEmail?: SubscriptionResolver; + newsletterEmail?: SubscriptionResolver, "newsletterEmail", ParentType, ContextType>; status?: SubscriptionResolver; + type?: SubscriptionResolver; unsubscribeHttpUrl?: SubscriptionResolver, "unsubscribeHttpUrl", ParentType, ContextType>; unsubscribeMailTo?: SubscriptionResolver, "unsubscribeMailTo", ParentType, ContextType>; updatedAt?: SubscriptionResolver; diff --git a/packages/api/src/generated/schema.graphql b/packages/api/src/generated/schema.graphql index 010eca42a..433c99924 100644 --- a/packages/api/src/generated/schema.graphql +++ b/packages/api/src/generated/schema.graphql @@ -2058,13 +2058,16 @@ type SubscribeSuccess { } type Subscription { + count: Int! createdAt: Date! description: String icon: String id: ID! + lastFetchedAt: Date name: String! - newsletterEmail: String! + newsletterEmail: String status: SubscriptionStatus! + type: SubscriptionType! unsubscribeHttpUrl: String unsubscribeMailTo: String updatedAt: Date! @@ -2077,6 +2080,11 @@ enum SubscriptionStatus { UNSUBSCRIBED } +enum SubscriptionType { + NEWSLETTER + RSS +} + type SubscriptionsError { errorCodes: [SubscriptionsErrorCode!]! } diff --git a/packages/api/src/schema.ts b/packages/api/src/schema.ts index 4800d8da4..5ac31e3bb 100755 --- a/packages/api/src/schema.ts +++ b/packages/api/src/schema.ts @@ -1619,16 +1619,24 @@ const schema = gql` subscriptions: [Subscription!]! } + enum SubscriptionType { + RSS + NEWSLETTER + } + type Subscription { id: ID! name: String! - newsletterEmail: String! + newsletterEmail: String url: String description: String status: SubscriptionStatus! unsubscribeMailTo: String unsubscribeHttpUrl: String icon: String + type: SubscriptionType! + count: Int! + lastFetchedAt: Date createdAt: Date! updatedAt: Date! } diff --git a/packages/db/migrations/0114.do.add_type_to_subscriptions.sql b/packages/db/migrations/0114.do.add_type_to_subscriptions.sql new file mode 100755 index 000000000..4a154fec9 --- /dev/null +++ b/packages/db/migrations/0114.do.add_type_to_subscriptions.sql @@ -0,0 +1,15 @@ +-- Type: DO +-- Name: add_type_to_subscriptions +-- Description: Add type, count and last_fetched_at fields to subscriptions table + +BEGIN; + +CREATE TYPE subscription_type AS ENUM ('NEWSLETTER', 'RSS'); + +ALTER TABLE omnivore.subscriptions + ADD COLUMN "type" subscription_type NOT NULL DEFAULT 'NEWSLETTER', + ADD COLUMN count INTEGER NOT NULL DEFAULT 0, + ADD COLUMN last_fetched_at timestamptz, + DROP CONSTRAINT subscriptions_user_id_name_key; -- Drop unique constraint on user_id and name + +COMMIT; diff --git a/packages/db/migrations/0114.do.rss_subscription.sql b/packages/db/migrations/0114.do.rss_subscription.sql deleted file mode 100755 index bf4b4f1a4..000000000 --- a/packages/db/migrations/0114.do.rss_subscription.sql +++ /dev/null @@ -1,20 +0,0 @@ --- Type: DO --- Name: rss_subscription --- Description: Create a table for RSS subscriptions - -BEGIN; - -CREATE TABLE omnivore.rss_subscription ( - id uuid PRIMARY KEY DEFAULT uuid_generate_v1mc(), - user_id uuid NOT NULL REFERENCES omnivore.user ON DELETE CASCADE, - title character varying(255) NOT NULL, - description TEXT, - url TEXT NOT NULL, - image_url TEXT, - count integer NOT NULL DEFAULT 0, - last_fetched_at timestamptz, - created_at timestamptz NOT NULL DEFAULT current_timestamp, - updated_at timestamptz NOT NULL DEFAULT current_timestamp -); - -COMMIT; diff --git a/packages/db/migrations/0114.undo.add_type_to_subscriptions.sql b/packages/db/migrations/0114.undo.add_type_to_subscriptions.sql new file mode 100755 index 000000000..1d6b9f048 --- /dev/null +++ b/packages/db/migrations/0114.undo.add_type_to_subscriptions.sql @@ -0,0 +1,15 @@ +-- Type: UNDO +-- Name: add_type_to_subscriptions +-- Description: Add type, count and last_fetched_at fields to subscriptions table + +BEGIN; + +ALTER TABLE omnivore.subscriptions + ADD CONSTRAINT subscriptions_user_id_name_key UNIQUE (user_id, name), + DROP COLUMN last_fetched_at, + DROP COLUMN count, + DROP COLUMN "type"; + +DROP TYPE omnivore.subscription_type; + +COMMIT; diff --git a/packages/db/migrations/0114.undo.rss_subscription.sql b/packages/db/migrations/0114.undo.rss_subscription.sql deleted file mode 100755 index 3a3ef4f5a..000000000 --- a/packages/db/migrations/0114.undo.rss_subscription.sql +++ /dev/null @@ -1,9 +0,0 @@ --- Type: UNDO --- Name: rss_subscription --- Description: Create a table for RSS subscriptions - -BEGIN; - -DROP TABLE IF EXISTS omnivore.rss_subscription; - -COMMIT;