Skip to content

Commit

Permalink
Merge pull request #3982 from omnivore-app/feature/just-read
Browse files Browse the repository at this point in the history
feat: just read api
  • Loading branch information
sywhb committed May 28, 2024
2 parents 341bf20 + 3d262a4 commit b3578d5
Show file tree
Hide file tree
Showing 26 changed files with 1,618 additions and 95 deletions.
1 change: 1 addition & 0 deletions packages/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
},
"dependencies": {
"@bmatei/apollo-prometheus-exporter": "^3.0.0",
"@cospired/i18n-iso-languages": "^4.2.0",
"@google-cloud/logging-winston": "^6.0.0",
"@google-cloud/monitoring": "^4.0.0",
"@google-cloud/opentelemetry-cloud-trace-exporter": "^2.0.0",
Expand Down
12 changes: 12 additions & 0 deletions packages/api/src/apollo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,15 @@ import { ClaimsToSet, RequestContext, ResolverContext } from './resolvers/types'
import ScalarResolvers from './scalars'
import typeDefs from './schema'
import { batchGetHighlightsFromLibraryItemIds } from './services/highlights'
import { batchGetPublicItems } from './services/home'
import { batchGetLabelsFromLibraryItemIds } from './services/labels'
import { batchGetLibraryItems } from './services/library_item'
import { batchGetRecommendationsFromLibraryItemIds } from './services/recommendation'
import {
countDailyServiceUsage,
createServiceUsage,
} from './services/service_usage'
import { findSubscriptionsByNames } from './services/subscriptions'
import { batchGetUploadFilesByIds } from './services/upload_file'
import { tracer } from './tracing'
import { getClaimsByToken, setAuthInCookie } from './utils/auth'
Expand Down Expand Up @@ -112,6 +115,15 @@ const contextFunc: ContextFunction<ExpressContext, ResolverContext> = async ({
batchGetRecommendationsFromLibraryItemIds
),
uploadFiles: new DataLoader(batchGetUploadFilesByIds),
libraryItems: new DataLoader(batchGetLibraryItems),
publicItems: new DataLoader(batchGetPublicItems),
subscriptions: new DataLoader(async (names: readonly string[]) => {
if (!claims?.uid) {
throw new Error('No user id found in claims')
}

return findSubscriptionsByNames(claims?.uid || '', names as string[])
}),
},
}

Expand Down
12 changes: 12 additions & 0 deletions packages/api/src/entity/library_item.ts
Original file line number Diff line number Diff line change
Expand Up @@ -204,4 +204,16 @@ export class LibraryItem {

@Column('text')
highlightAnnotations?: string[]

@Column('timestamptz')
seenAt?: Date

@Column('ltree')
topic?: string

@Column('timestamptz')
digestedAt?: Date

@Column('float')
score?: number
}
73 changes: 73 additions & 0 deletions packages/api/src/entity/public_item.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import {
Column,
CreateDateColumn,
Entity,
JoinColumn,
ManyToOne,
OneToOne,
PrimaryGeneratedColumn,
UpdateDateColumn,
} from 'typeorm'
import { PublicItemSource } from './public_item_source'
import { PublicItemStats } from './public_item_stats'

@Entity({ name: 'public_item' })
export class PublicItem {
@PrimaryGeneratedColumn('uuid')
id!: string

@OneToOne(() => PublicItemStats)
stats!: PublicItemStats

@ManyToOne(() => PublicItemSource)
@JoinColumn({ name: 'source_id' })
source!: PublicItemSource

@Column('text')
siteIcon?: string

@Column('text')
type!: string

@Column('text')
title!: string

@Column('text')
url!: string

@Column('boolean')
approved!: boolean

@Column('text')
thumbnail?: string

@Column('text')
previewContent?: string

@Column('text')
languageCode?: string

@Column('text')
author?: string

@Column('text')
dir?: string

@Column('timestamptz')
publishedAt?: Date

@CreateDateColumn()
createdAt!: Date

@UpdateDateColumn()
updatedAt!: Date

@Column('text')
topic?: string

@Column('integer')
wordCount?: number

@Column('text')
siteName?: string
}
47 changes: 47 additions & 0 deletions packages/api/src/entity/public_item_interaction.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import {
Column,
Entity,
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
} from 'typeorm'
import { PublicItem } from './public_item'
import { User } from './user'

@Entity({ name: 'public_item_interactions' })
export class PublicItemInteraction {
@PrimaryGeneratedColumn('uuid')
id!: string

@ManyToOne(() => PublicItem, { onDelete: 'CASCADE' })
@JoinColumn({ name: 'public_item_id' })
publicItem!: PublicItem

@Column('uuid')
publicItemId!: string

@ManyToOne(() => User, { onDelete: 'CASCADE' })
@JoinColumn({ name: 'user_id' })
user!: User

@Column('timestamptz')
seenAt!: Date

@Column('timestamptz')
savedAt?: Date

@Column('timestamptz')
likedAt?: Date

@Column('timestamptz')
broadcastedAt?: Date

@Column('timestamptz')
createdAt!: Date

@Column('timestamptz')
updated!: Date

@Column('timestamptz')
digested?: Date
}
40 changes: 40 additions & 0 deletions packages/api/src/entity/public_item_source.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import {
Column,
CreateDateColumn,
Entity,
PrimaryGeneratedColumn,
UpdateDateColumn,
} from 'typeorm'

@Entity({ name: 'public_item_source' })
export class PublicItemSource {
@PrimaryGeneratedColumn('uuid')
id!: string

@Column('text')
type!: string

@Column('text')
name!: string

@Column('text')
url?: string

@Column('boolean')
approved!: boolean

@Column('text')
icon?: string

@Column('text')
topics?: string[]

@Column('text')
languageCodes?: string[]

@CreateDateColumn()
createdAt!: Date

@UpdateDateColumn()
updatedAt!: Date
}
31 changes: 31 additions & 0 deletions packages/api/src/entity/public_item_stats.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import {
Column,
CreateDateColumn,
Entity,
PrimaryGeneratedColumn,
UpdateDateColumn,
} from 'typeorm'

@Entity({ name: 'public_item_stats' })
export class PublicItemStats {
@PrimaryGeneratedColumn('uuid')
id!: string

@Column('uuid')
publicItemId!: string

@Column('integer')
saveCount!: number

@Column('integer')
likeCount!: number

@Column('integer')
broadcastCount!: number

@CreateDateColumn()
createdAt!: Date

@UpdateDateColumn()
updatedAt!: Date
}
Loading

0 comments on commit b3578d5

Please sign in to comment.