From 2dabfadc0a1c590895a9aa5573f2ba46fce86e7e Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Sat, 25 Nov 2023 12:17:00 +0800 Subject: [PATCH 1/7] Add groups admin --- .../src/main/res/values-zh-rCN/strings.xml | 18 +++++++++++++ pkg/admin/src/db.ts | 25 +++++++++++++++++++ pkg/admin/src/index.ts | 2 ++ 3 files changed, 45 insertions(+) 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/pkg/admin/src/db.ts b/pkg/admin/src/db.ts index f493fd30d..f01302f0d 100644 --- a/pkg/admin/src/db.ts +++ b/pkg/admin/src/db.ts @@ -52,6 +52,7 @@ export const registerDatabase = async (secrets: any): Promise => { Subscription, LibraryItem, UploadFile, + Recommendation, ], }) @@ -382,3 +383,27 @@ 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 +} diff --git a/pkg/admin/src/index.ts b/pkg/admin/src/index.ts index 543c0d987..5ce5967df 100644 --- a/pkg/admin/src/index.ts +++ b/pkg/admin/src/index.ts @@ -13,6 +13,7 @@ import { Subscription, Integration, LibraryItem, + Recommendation, } from './db' import { compare, hashSync } from 'bcryptjs' const readYamlFile = require('read-yaml-file') @@ -46,6 +47,7 @@ const ADMIN_USER_EMAIL = { resource: ContentDisplayReport, }, + { resource: Recommendation, options: { parent: { name: 'Users' } } }, ], }) From 87bd9d5b60d9c54352906d2ed13dabb81f18546e Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Sat, 25 Nov 2023 12:59:03 +0800 Subject: [PATCH 2/7] Add group membership, more debug --- packages/rss-handler/src/index.ts | 2 +- pkg/admin/src/db.ts | 26 +++++++++++++++++++++++++- pkg/admin/src/index.ts | 2 ++ 3 files changed, 28 insertions(+), 2 deletions(-) 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 f01302f0d..f153fd6c4 100644 --- a/pkg/admin/src/db.ts +++ b/pkg/admin/src/db.ts @@ -53,6 +53,7 @@ export const registerDatabase = async (secrets: any): Promise => { LibraryItem, UploadFile, Recommendation, + GroupMembership, ], }) @@ -215,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' }) @@ -407,3 +408,26 @@ export class Recommendation extends BaseEntity { @Column({ type: 'timestamp', name: 'created_at' }) createdAt!: Date } + +@Entity({ name: 'group_membership' }) +export class GroupMembership extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id!: string + + @OneToOne(() => User) + @JoinColumn() + user!: User + + @JoinColumn({ name: 'group_id' }) + @ManyToOne(() => User, (user) => user.articles, { eager: true }) + group!: Group + + @Column({ type: 'timestamp', name: 'created_at' }) + createdAt!: Date + + @Column({ type: 'timestamp', name: 'updated_at' }) + updatedAt!: Date + + @Column('boolean', { default: false }) + isAdmin!: boolean +} diff --git a/pkg/admin/src/index.ts b/pkg/admin/src/index.ts index 5ce5967df..894e4b733 100644 --- a/pkg/admin/src/index.ts +++ b/pkg/admin/src/index.ts @@ -14,6 +14,7 @@ import { Integration, LibraryItem, Recommendation, + GroupMembership, } from './db' import { compare, hashSync } from 'bcryptjs' const readYamlFile = require('read-yaml-file') @@ -48,6 +49,7 @@ const ADMIN_USER_EMAIL = resource: ContentDisplayReport, }, { resource: Recommendation, options: { parent: { name: 'Users' } } }, + { resource: GroupMembership, options: { parent: { name: 'Users' } } }, ], }) From d838329075b20f6662bdd6d8c222971120170af3 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Sat, 25 Nov 2023 13:08:29 +0800 Subject: [PATCH 3/7] Add recommender_names column --- pkg/admin/src/db.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/admin/src/db.ts b/pkg/admin/src/db.ts index f153fd6c4..41f25b1e8 100644 --- a/pkg/admin/src/db.ts +++ b/pkg/admin/src/db.ts @@ -340,6 +340,9 @@ export class LibraryItem extends BaseEntity { @Column('text', { nullable: true }) subscription?: string | null + @Column('text', { array: true, nullable: true }) + recommender_names?: string[] | null + @OneToOne(() => UploadFile, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'upload_file_id' }) uploadFile?: UploadFile From f82860ebf426b103d992f07f8773cb806a2e69a9 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Sat, 25 Nov 2023 13:15:05 +0800 Subject: [PATCH 4/7] Fix admin column field --- pkg/admin/src/db.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/admin/src/db.ts b/pkg/admin/src/db.ts index 41f25b1e8..349ffe3ae 100644 --- a/pkg/admin/src/db.ts +++ b/pkg/admin/src/db.ts @@ -432,5 +432,5 @@ export class GroupMembership extends BaseEntity { updatedAt!: Date @Column('boolean', { default: false }) - isAdmin!: boolean + is_admin!: boolean } From e0329d077c756e25aab0ac6c3eab42cdf3ece959 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Sat, 25 Nov 2023 13:22:46 +0800 Subject: [PATCH 5/7] Fix group membership user id --- pkg/admin/src/db.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/admin/src/db.ts b/pkg/admin/src/db.ts index 349ffe3ae..aca82a659 100644 --- a/pkg/admin/src/db.ts +++ b/pkg/admin/src/db.ts @@ -417,8 +417,8 @@ export class GroupMembership extends BaseEntity { @PrimaryGeneratedColumn('uuid') id!: string - @OneToOne(() => User) - @JoinColumn() + @JoinColumn({ name: 'user_id' }) + @ManyToOne(() => User, (user) => user.articles, { eager: true }) user!: User @JoinColumn({ name: 'group_id' }) From 6441466c8bcff1a5f1841e2857ac9194b846039d Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Sat, 25 Nov 2023 13:32:46 +0800 Subject: [PATCH 6/7] Fix group_id match --- pkg/admin/src/db.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/admin/src/db.ts b/pkg/admin/src/db.ts index aca82a659..508a5d93e 100644 --- a/pkg/admin/src/db.ts +++ b/pkg/admin/src/db.ts @@ -422,7 +422,6 @@ export class GroupMembership extends BaseEntity { user!: User @JoinColumn({ name: 'group_id' }) - @ManyToOne(() => User, (user) => user.articles, { eager: true }) group!: Group @Column({ type: 'timestamp', name: 'created_at' }) From df48db19d1c79727743267838272015747650a07 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Sat, 25 Nov 2023 13:45:04 +0800 Subject: [PATCH 7/7] Add label names to admin items --- pkg/admin/src/db.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/admin/src/db.ts b/pkg/admin/src/db.ts index 508a5d93e..4591ac9de 100644 --- a/pkg/admin/src/db.ts +++ b/pkg/admin/src/db.ts @@ -343,6 +343,9 @@ export class LibraryItem extends BaseEntity { @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