diff --git a/android/Omnivore/app/src/main/res/values-zh-rCN/strings.xml b/android/Omnivore/app/src/main/res/values-zh-rCN/strings.xml index 567c2df01..25a8f7e7e 100644 --- a/android/Omnivore/app/src/main/res/values-zh-rCN/strings.xml +++ b/android/Omnivore/app/src/main/res/values-zh-rCN/strings.xml @@ -139,6 +139,7 @@ 您尚未在此页面新增任何标记。 + 字体 字型大小: 边距 行距 @@ -204,4 +205,21 @@ 条款和条件 管理帐户 登出 + + + 收集箱 + 非订阅内容 + 订阅内容 + 邮件简讯 + 推荐 + 所有内容 + 已归档 + 已高亮 + 文档 + + + 从新到旧 + 从旧到新 + 最近阅读 + 最近发布 diff --git a/packages/rss-handler/src/index.ts b/packages/rss-handler/src/index.ts index 75a621ee5..a3abb1416 100644 --- a/packages/rss-handler/src/index.ts +++ b/packages/rss-handler/src/index.ts @@ -360,7 +360,7 @@ const processSubscription = async ( // use published or updated if isoDate is not available for atom feeds item.isoDate = item.isoDate || item.published || item.updated || item.created - console.log('Processing feed item', item.links, item.isoDate) + console.log('Processing feed item', item.links, item.isoDate, feed.feedUrl) if (!item.links || item.links.length === 0) { console.log('Invalid feed item', item) diff --git a/pkg/admin/src/db.ts b/pkg/admin/src/db.ts index f493fd30d..4591ac9de 100644 --- a/pkg/admin/src/db.ts +++ b/pkg/admin/src/db.ts @@ -52,6 +52,8 @@ export const registerDatabase = async (secrets: any): Promise => { Subscription, LibraryItem, UploadFile, + Recommendation, + GroupMembership, ], }) @@ -214,7 +216,7 @@ export class Group extends BaseEntity { name!: string @OneToOne(() => User) - @JoinColumn({ name: 'created_by' }) + @JoinColumn({ name: 'created_by_id' }) createdBy!: User @Column({ type: 'timestamp', name: 'created_at' }) @@ -338,6 +340,12 @@ export class LibraryItem extends BaseEntity { @Column('text', { nullable: true }) subscription?: string | null + @Column('text', { array: true, nullable: true }) + recommender_names?: string[] | null + + @Column('text', { array: true, nullable: true }) + label_names?: string[] | null + @OneToOne(() => UploadFile, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'upload_file_id' }) uploadFile?: UploadFile @@ -382,3 +390,49 @@ export class UploadFile extends BaseEntity { @Column({ type: 'timestamp', name: 'updated_at' }) updatedAt!: Date } + +@Entity({ name: 'recommendation' }) +export class Recommendation extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id!: string + + @JoinColumn({ name: 'recommender_id' }) + @ManyToOne(() => User, (user) => user.articles, { eager: true }) + recommender!: User + + @JoinColumn({ name: 'library_item_id' }) + @ManyToOne(() => User, (user) => user.articles, { eager: true }) + libraryItem!: LibraryItem + + @JoinColumn({ name: 'group_id' }) + @ManyToOne(() => User, (user) => user.articles, { eager: true }) + group!: Group + + @Column('text', { nullable: true }) + note?: string | null + + @Column({ type: 'timestamp', name: 'created_at' }) + createdAt!: Date +} + +@Entity({ name: 'group_membership' }) +export class GroupMembership extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id!: string + + @JoinColumn({ name: 'user_id' }) + @ManyToOne(() => User, (user) => user.articles, { eager: true }) + user!: User + + @JoinColumn({ name: 'group_id' }) + group!: Group + + @Column({ type: 'timestamp', name: 'created_at' }) + createdAt!: Date + + @Column({ type: 'timestamp', name: 'updated_at' }) + updatedAt!: Date + + @Column('boolean', { default: false }) + is_admin!: boolean +} diff --git a/pkg/admin/src/index.ts b/pkg/admin/src/index.ts index 543c0d987..894e4b733 100644 --- a/pkg/admin/src/index.ts +++ b/pkg/admin/src/index.ts @@ -13,6 +13,8 @@ import { Subscription, Integration, LibraryItem, + Recommendation, + GroupMembership, } from './db' import { compare, hashSync } from 'bcryptjs' const readYamlFile = require('read-yaml-file') @@ -46,6 +48,8 @@ const ADMIN_USER_EMAIL = { resource: ContentDisplayReport, }, + { resource: Recommendation, options: { parent: { name: 'Users' } } }, + { resource: GroupMembership, options: { parent: { name: 'Users' } } }, ], })