Skip to content

Commit

Permalink
Merge pull request #1802 from AletheiaFact/feature/multi-db-nestjs-pe…
Browse files Browse the repository at this point in the history
…rsonality

DB interface to allow multiple implementations of the modules. Personality Interface.
  • Loading branch information
thesocialdev authored Jan 30, 2025
2 parents d5475c0 + 6de9a3a commit 454a14e
Show file tree
Hide file tree
Showing 34 changed files with 325 additions and 155 deletions.
1 change: 1 addition & 0 deletions config.seed.test.ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ services:
disable_smtp: true
db:
connection_uri: {env(CI_MONGODB_URI)}
type: mongodb
options:
useUnifiedTopology: true
useNewUrlParser: true
Expand Down
1 change: 1 addition & 0 deletions config.test.ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ services:
recaptcha_sitekey: {env(TEST_RECAPTCHA_SITEKEY)}
db:
connection_uri: {env(CI_MONGODB_URI)}
type: mongodb
options:
useUnifiedTopology: true
useNewUrlParser: true
Expand Down
1 change: 1 addition & 0 deletions deployment/config/config-file/modules/database/mongodb.pkl
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
atlas = false
type = "mongodb"
connection_uri = read("env:MONGODB_URI")
options = new {
useUnifiedTopology = true
Expand Down
117 changes: 62 additions & 55 deletions server/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,60 +72,17 @@ export class AppModule implements NestModule {
}

static register(options): DynamicModule {
const imports = [
MongooseModule.forRoot(
options.db.connection_uri,
options.db.options
),
ConfigModule.forRoot({
load: [() => options || {}],
}),
ThrottlerModule.forRoot({
ttl: options.throttle.ttl,
limit: options.throttle.limit,
}),
UsersModule,
WikidataModule,
PersonalityModule,
ClaimModule,
ClaimReviewModule,
ReviewTaskModule,
ClaimRevisionModule,
HistoryModule,
StateEventModule,
SourceModule,
SpeechModule,
ParagraphModule,
SentenceModule,
StatsModule,
ViewModule,
EmailModule,
SitemapModule,
OryModule,
ReportModule,
CaptchaModule,
TopicModule,
ImageModule,
SearchModule,
FileManagementModule,
DebateModule,
EditorModule,
BadgeModule,
EditorParseModule,
NotificationModule,
CommentModule,
NameSpaceModule,
AutomatedFactCheckingModule,
CopilotChatModule,
UnattributedModule,
DailyReportModule,
SummarizationCrawlerModule,
ChatbotModule,
VerificationRequestModule,
FeatureFlagModule,
GroupModule,
HomeModule, // Home module must be the last imported module because it contains the root endpoint, may causing some endpoints to be confused as namespace parameters
];
const imports = [];
if (options.db.type === "mongodb") {
imports.push(
MongooseModule.forRoot(
options.db.connection_uri,
options.db.options
)
);
} else {
throw new Error("Invalid DB_TYPE in configuration");
}
if (options.feature_flag) {
imports.push(
UnleashModule.forRoot({
Expand All @@ -141,7 +98,57 @@ export class AppModule implements NestModule {
return {
module: AppModule,
global: true,
imports,
imports: [
...imports,
ConfigModule.forRoot({
load: [() => options || {}],
}),
ThrottlerModule.forRoot({
ttl: options.throttle.ttl,
limit: options.throttle.limit,
}),
UsersModule,
WikidataModule,
PersonalityModule.register(),
ClaimModule,
ClaimReviewModule,
ReviewTaskModule,
ClaimRevisionModule,
HistoryModule,
StateEventModule,
SourceModule,
SpeechModule,
ParagraphModule,
SentenceModule,
StatsModule,
ViewModule,
EmailModule,
SitemapModule,
OryModule,
ReportModule,
CaptchaModule,
TopicModule,
ImageModule,
SearchModule,
FileManagementModule,
DebateModule,
EditorModule,
BadgeModule,
EditorParseModule,
NotificationModule,
CommentModule,
NameSpaceModule,
AutomatedFactCheckingModule,
CopilotChatModule,
UnattributedModule,
DailyReportModule,
SummarizationCrawlerModule,
ChatbotModule,
VerificationRequestModule,
FeatureFlagModule,
GroupModule,
HomeModule, // Home module must be the last imported module because it contains the root endpoint, may causing some endpoints to be confused as namespace parameters
],
controllers: [RootController],
providers: [
{
Expand Down
2 changes: 1 addition & 1 deletion server/claim-review/dto/create-claim-review.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
IsOptional,
IsString,
} from "class-validator";
import { Personality } from "../../personality/schemas/personality.schema";
import { Personality } from "../../personality/mongo/schemas/personality.schema";
import { Claim } from "../../claim/schemas/claim.schema";
import { ApiProperty } from "@nestjs/swagger";

Expand Down
2 changes: 1 addition & 1 deletion server/claim-review/schemas/claim-review.schema.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
import { Personality } from "../../personality/schemas/personality.schema";
import { Personality } from "../../personality/mongo/schemas/personality.schema";
import * as mongoose from "mongoose";
import { Claim } from "../../claim/schemas/claim.schema";
import { softDeletePlugin } from "mongoose-softdelete-typescript";
Expand Down
16 changes: 10 additions & 6 deletions server/claim/claim-revision/claim-revision.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import {
import { ContentModelEnum } from "../../types/enums";
import { ImageService } from "../types/image/image.service";
import { DebateService } from "../types/debate/debate.service";
import { FindAllOptions } from "../../personality/personality.service";
import { UtilService } from "../../util";
import { IFindAllOptions } from "../../interfaces/personality.interface";

@Injectable()
export class ClaimRevisionService {
Expand Down Expand Up @@ -84,9 +84,9 @@ export class ClaimRevisionService {
async findAll({
searchText,
pageSize,
skipedDocuments,
skippedDocuments,
nameSpace,
}: FindAllOptions) {
}: IFindAllOptions) {
const aggregationPipeline = [
{
$search: {
Expand Down Expand Up @@ -131,7 +131,7 @@ export class ClaimRevisionService {
$facet: {
rows: [
{
$skip: skipedDocuments || 0,
$skip: skippedDocuments || 0,
},
{
$limit: pageSize,
Expand Down Expand Up @@ -204,9 +204,13 @@ export class ClaimRevisionService {
if (sources && Array.isArray(sources)) {
for (let source of sources) {
try {
const existingSources = await this.sourceService.getSourceByHref(source);
const existingSources =
await this.sourceService.getSourceByHref(source);
if (existingSources) {
this.sourceService.updateTargetId(existingSources._id, claimId)
this.sourceService.updateTargetId(
existingSources._id,
claimId
);
} else {
await this.sourceService.create({
href: source,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
import * as mongoose from "mongoose";
import { Claim } from "../../schemas/claim.schema";
import { Personality } from "../../../personality/schemas/personality.schema";
import { Personality } from "../../../personality/mongo/schemas/personality.schema";
import { ContentModelEnum } from "../../../types/enums";

export type ClaimRevisionDocument = ClaimRevision & mongoose.Document;
Expand Down
6 changes: 4 additions & 2 deletions server/claim/claim.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ import {
Res,
Header,
UseGuards,
Inject,
} from "@nestjs/common";
import { ClaimReviewService } from "../claim-review/claim-review.service";
import { ClaimService } from "./claim.service";
import { ConfigService } from "@nestjs/config";
import type { Request, Response } from "express";
import { parse } from "url";
import { PersonalityService } from "../personality/personality.service";
import { ViewService } from "../view/view.service";
import * as mongoose from "mongoose";
import { CreateClaimDTO } from "./dto/create-claim.dto";
Expand All @@ -37,6 +37,7 @@ import { ImageService } from "./types/image/image.service";
import { ImageDocument } from "./types/image/schemas/image.schema";
import { CreateDebateClaimDTO } from "./dto/create-debate-claim.dto";
import { AbilitiesGuard } from "../auth/ability/abilities.guard";
import type { IPersonalityService } from "../interfaces/personality.service.interface";
import {
AdminUserAbility,
CheckAbilities,
Expand All @@ -60,7 +61,8 @@ export class ClaimController {
constructor(
private claimReviewService: ClaimReviewService,
private reviewTaskService: ReviewTaskService,
private personalityService: PersonalityService,
@Inject("PersonalityService")
private readonly personalityService: IPersonalityService,
private claimService: ClaimService,
private sentenceService: SentenceService,
private configService: ConfigService,
Expand Down
2 changes: 1 addition & 1 deletion server/claim/claim.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ const ClaimModel = MongooseModule.forFeature([
ClaimRevisionModule,
SentenceModule,
ParserModule,
PersonalityModule,
PersonalityModule.register(),
HistoryModule,
StateEventModule,
ConfigModule,
Expand Down
2 changes: 1 addition & 1 deletion server/claim/dto/create-claim.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
IsOptional,
} from "class-validator";
import { ContentModelEnum } from "../../types/enums";
import { Personality } from "../../personality/schemas/personality.schema";
import { Personality } from "../../personality/mongo/schemas/personality.schema";
import { ApiProperty } from "@nestjs/swagger";
import { Group } from "../../group/schemas/group.schema";

Expand Down
2 changes: 1 addition & 1 deletion server/claim/dto/create-debate-claim.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
ArrayMinSize,
} from "class-validator";
import { ContentModelEnum } from "../../types/enums";
import { Personality } from "../../personality/schemas/personality.schema";
import { Personality } from "../../personality/mongo/schemas/personality.schema";
import { ApiProperty } from "@nestjs/swagger";

export class CreateDebateClaimDTO {
Expand Down
2 changes: 1 addition & 1 deletion server/claim/dto/update-debate.dto.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { IsBoolean, IsString } from "class-validator";
import { Personality } from "../../personality/schemas/personality.schema";
import { Personality } from "../../personality/mongo/schemas/personality.schema";
import { ApiProperty } from "@nestjs/swagger";

export class UpdateDebateDto {
Expand Down
2 changes: 1 addition & 1 deletion server/claim/schemas/claim.schema.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
import * as mongoose from "mongoose";
import { Personality } from "../../personality/schemas/personality.schema";
import { Personality } from "../../personality/mongo/schemas/personality.schema";
import { ClaimRevision } from "../claim-revision/schema/claim-revision.schema";
import { softDeletePlugin } from "mongoose-softdelete-typescript";
import { NameSpaceEnum } from "../../auth/name-space/schemas/name-space.schema";
Expand Down
6 changes: 3 additions & 3 deletions server/claim/types/sentence/sentence.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ interface FindAllOptionsFilters {
searchText: string;
pageSize: number;
language?: string;
skipedDocuments?: number;
skippedDocuments?: number;
filter?: string | string[];
nameSpace?: string;
}
Expand Down Expand Up @@ -55,7 +55,7 @@ export class SentenceService {
async findAll({
searchText,
pageSize,
skipedDocuments,
skippedDocuments,
filter,
nameSpace,
}: FindAllOptionsFilters) {
Expand Down Expand Up @@ -140,7 +140,7 @@ export class SentenceService {
$facet: {
rows: [
{
$skip: skipedDocuments || 0,
$skip: skippedDocuments || 0,
},
{
$limit: pageSize,
Expand Down
2 changes: 1 addition & 1 deletion server/claim/types/speech/schemas/speech.schema.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
import * as mongoose from "mongoose";
import { Personality } from "../../../../personality/schemas/personality.schema";
import { Personality } from "../../../../personality/mongo/schemas/personality.schema";
import { Paragraph } from "../../paragraph/schemas/paragraph.schema";
import { ClaimRevision } from "../../../../claim/claim-revision/schema/claim-revision.schema";

Expand Down
6 changes: 6 additions & 0 deletions server/config/db.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { ConfigService } from "@nestjs/config";

// FIXME: Find a better way to inject configService directly into modules
export default {
type: new ConfigService().get<string>("db.type") || "mongodb",
};
15 changes: 12 additions & 3 deletions server/home/home.controller.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
import { Controller, Get, Header, Redirect, Req, Res } from "@nestjs/common";
import {
Controller,
Get,
Header,
Inject,
Redirect,
Req,
Res,
} from "@nestjs/common";
import { ViewService } from "../view/view.service";
import type { Response } from "express";
import { parse } from "url";
import { PersonalityService } from "../personality/personality.service";
import { StatsService } from "../stats/stats.service";
import { IsPublic } from "../auth/decorators/is-public.decorator";
import type { BaseRequest } from "../types";
Expand All @@ -11,12 +18,14 @@ import { ClaimRevisionService } from "../claim/claim-revision/claim-revision.ser
import { ApiTags } from "@nestjs/swagger";
import { ClaimReviewService } from "../claim-review/claim-review.service";
import { NameSpaceEnum } from "../auth/name-space/schemas/name-space.schema";
import type { IPersonalityService } from "../interfaces/personality.service.interface";

@Controller("/")
export class HomeController {
constructor(
private viewService: ViewService,
private personalityService: PersonalityService,
@Inject("PersonalityService")
private readonly personalityService: IPersonalityService,
private statsService: StatsService,
private debateService: DebateService,
private claimRevisionService: ClaimRevisionService,
Expand Down
2 changes: 1 addition & 1 deletion server/home/home.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { ClaimReviewModule } from "../claim-review/claim-review.module";

@Module({
imports: [
PersonalityModule,
PersonalityModule.register(),
StatsModule,
ViewModule,
DebateModule,
Expand Down
Loading

0 comments on commit 454a14e

Please sign in to comment.