diff --git a/packages/api/src/entity/api_key.ts b/packages/api/src/entity/api_key.ts new file mode 100644 index 000000000..b4170de91 --- /dev/null +++ b/packages/api/src/entity/api_key.ts @@ -0,0 +1,37 @@ +import { + Column, + CreateDateColumn, + Entity, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, +} from 'typeorm' +import { User } from './user' + +@Entity() +export class ApiKey { + @PrimaryGeneratedColumn('uuid') + id!: string + + @ManyToOne(() => User, { onDelete: 'CASCADE' }) + @JoinColumn({ name: 'user_id' }) + user!: User + + @Column('text') + name!: string + + @Column('text') + key!: string + + @Column('text', { array: true }) + scopes?: string[] + + @CreateDateColumn() + createdAt!: Date + + @Column('date') + expiresAt!: Date + + @Column('date', { nullable: true }) + usedAt!: Date | null +} diff --git a/packages/db/migrations/0084.do.api_key.sql b/packages/db/migrations/0084.do.api_key.sql new file mode 100755 index 000000000..6a9cf296b --- /dev/null +++ b/packages/db/migrations/0084.do.api_key.sql @@ -0,0 +1,18 @@ +-- Type: DO +-- Name: api_key +-- Description: api_key model + +BEGIN; + +CREATE TABLE omnivore.api_key ( + id uuid PRIMARY KEY DEFAULT uuid_generate_v1mc(), + user_id uuid NOT NULL REFERENCES omnivore.user (id) ON DELETE CASCADE, + name text NOT NULL, + key text NOT NULL, + scopes text[] NOT NULL DEFAULT '{}', + expires_at timestamptz NOT NULL, + created_at timestamptz NOT NULL DEFAULT current_timestamp, + used_at timestamptz +); + +COMMIT; diff --git a/packages/db/migrations/0084.undo.api_key.sql b/packages/db/migrations/0084.undo.api_key.sql new file mode 100755 index 000000000..788fd4ca9 --- /dev/null +++ b/packages/db/migrations/0084.undo.api_key.sql @@ -0,0 +1,9 @@ +-- Type: UNDO +-- Name: api_key +-- Description: api_key model + +BEGIN; + +DROP TABLE omnivore.api_key; + +COMMIT;