remove db references from userService

This commit is contained in:
Alex Holliday committed 2026-01-17 19:08:12 +00:00
1 parent 048e53ea15
commit ba35230919
5 files changed
+22 -13

No files matched your search

+6 -1
View File
@@ -74,6 +74,7 @@ import {
MongoUsersRepository,
MongoInvitesRepository,
MongoRecoveryTokensRepository,
MongoSettingsRepository,
IMonitorsRepository,
IChecksRepository,
IMonitorStatsRepository,
@@ -81,6 +82,7 @@ import {
IUsersRepository,
IInvitesRepository,
IRecoveryTokensRepository,
ISettingsRepository,
} from "@/repositories/index.js";
export type InitializedSerivces = {
@@ -113,6 +115,7 @@ export type InitializedSerivces = {
usersRepository: IUsersRepository;
invitesRepository: IInvitesRepository;
recoveryTokensRepository: IRecoveryTokensRepository;
settingsRepository: ISettingsRepository;
};
export const initializeServices = async ({
@@ -167,6 +170,7 @@ export const initializeServices = async ({
const usersRepository = new MongoUsersRepository();
const invitesRepository = new MongoInvitesRepository();
const recoveryTokensRepository = new MongoRecoveryTokensRepository();
const settingsRepository = new MongoSettingsRepository();
const networkService = new NetworkService({
axios,
@@ -240,7 +244,6 @@ export const initializeServices = async ({
// Business services
const userService = new UserService({
crypto,
db,
emailService,
settingsService,
logger,
@@ -252,6 +255,7 @@ export const initializeServices = async ({
usersRepository,
invitesRepository,
recoveryTokensRepository,
settingsRepository,
});
const diagnosticService = new DiagnosticService();
@@ -313,6 +317,7 @@ export const initializeServices = async ({
usersRepository,
invitesRepository,
recoveryTokensRepository,
settingsRepository,
};
Object.values(services).forEach((service) => {
+1
View File
@@ -21,6 +21,7 @@ const AppSettingsSchema = new Schema<AppSettingsDocument>(
{
checkTTL: { type: Number, default: 30 },
language: { type: String, default: "gb" },
jwtSecret: { type: String },
pagespeedApiKey: { type: String },
systemEmailHost: { type: String },
systemEmailPort: { type: Number },
@@ -2,7 +2,6 @@ import mongoose from "mongoose";
import { ISettingsRepository } from "@/repositories/settings/ISettingsRepository.js";
import type { Settings } from "@/types/index.js";
import { AppSettingsModel, type AppSettingsDocument } from "@/db/models/AppSettings.js";
import { AppError } from "@/utils/AppError.js";
class MongoSettingsRepository implements ISettingsRepository {
private toStringId = (value?: mongoose.Types.ObjectId | string | null): string => {
@@ -24,6 +23,7 @@ class MongoSettingsRepository implements ISettingsRepository {
id: this.toStringId(doc._id),
checkTTL: doc.checkTTL,
language: doc.language,
jwtSecret: doc.jwtSecret ?? undefined,
pagespeedApiKey: doc.pagespeedApiKey ?? undefined,
systemEmailHost: doc.systemEmailHost ?? undefined,
systemEmailPort: doc.systemEmailPort ?? undefined,
@@ -63,11 +63,13 @@ class MongoSettingsRepository implements ISettingsRepository {
upsert: true,
});
const currentSettings = await AppSettingsModel.findOne().select("-__v -_id -createdAt -updatedAt -singleton").lean();
if (!currentSettings) {
throw new AppError({ message: "Settings not found after update", status: 500 });
}
return this.toEntity(currentSettings);
const updatedSettings = await AppSettingsModel.findOneAndUpdate({}, update, {
upsert: true,
new: true,
projection: "-__v -_id -createdAt -updatedAt -singleton",
});
return this.toEntity(updatedSettings);
};
}
+6 -6
View File
@@ -1,4 +1,4 @@
import { IInvitesRepository, IMonitorsRepository, IRecoveryTokensRepository, IUsersRepository } from "@/repositories/index.js";
import { IInvitesRepository, IMonitorsRepository, IRecoveryTokensRepository, IUsersRepository, ISettingsRepository } from "@/repositories/index.js";
import Team from "@/db/models/Team.js";
import type { User } from "@/types/index.js";
import bcrypt from "bcryptjs";
@@ -9,7 +9,6 @@ const SERVICE_NAME = "userService";
class UserService {
static SERVICE_NAME = SERVICE_NAME;
private db: any;
private emailService: any;
private settingsService: any;
private logger: any;
@@ -22,10 +21,10 @@ class UserService {
private usersRepository: IUsersRepository;
private invitesRepository: IInvitesRepository;
private recoveryTokensRepository: IRecoveryTokensRepository;
private settingsRepository: ISettingsRepository;
constructor({
crypto,
db,
emailService,
settingsService,
logger,
@@ -37,9 +36,9 @@ class UserService {
usersRepository,
invitesRepository,
recoveryTokensRepository,
settingsRepository,
}: {
crypto: any;
db: any;
emailService: any;
settingsService: any;
logger: any;
@@ -51,8 +50,8 @@ class UserService {
usersRepository: IUsersRepository;
invitesRepository: IInvitesRepository;
recoveryTokensRepository: IRecoveryTokensRepository;
settingsRepository: ISettingsRepository;
}) {
this.db = db;
this.emailService = emailService;
this.settingsService = settingsService;
this.logger = logger;
@@ -65,6 +64,7 @@ class UserService {
this.usersRepository = usersRepository;
this.invitesRepository = invitesRepository;
this.recoveryTokensRepository = recoveryTokensRepository;
this.settingsRepository = settingsRepository;
}
get serviceName() {
@@ -89,7 +89,7 @@ class UserService {
} else {
// This is the first account, create JWT secret to use if one is not supplied by env
const jwtSecret = this.crypto.randomBytes(64).toString("hex");
await this.db.settingsModule.updateAppSettings({ jwtSecret });
await this.settingsRepository.update({ jwtSecret });
// Create a new team
const team = new Team({
email: user.email,
+1
View File
@@ -9,6 +9,7 @@ export interface Settings {
id: string;
checkTTL: number;
language: string;
jwtSecret?: string;
pagespeedApiKey?: string;
systemEmailHost?: string;
systemEmailPort?: number;