Skip to content

Commit

Permalink
backend: Unifyed DB models into a unique table
Browse files Browse the repository at this point in the history
  • Loading branch information
CSantosM committed Oct 24, 2024
1 parent 5446b1f commit a58ad59
Show file tree
Hide file tree
Showing 9 changed files with 136 additions and 150 deletions.
26 changes: 5 additions & 21 deletions backend/src/config/sequelize.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import { Sequelize, SequelizeOptions } from 'sequelize-typescript';
import { DB_DIALECT, DB_HOST, DB_NAME, DB_PASSWORD, DB_USER } from '../config.js';

import { LoggerService } from '../services/logger.service.js';
import { RoomPreferencesModel } from '../models/global-preferences/room-preference.model.js';
import { AppearancePreferencesModel } from '../models/global-preferences/appearance-preference.model.js';
import { GlobalPreferencesModel } from '../models/global-preferences.model.js';
import { GlobalPreferencseService } from '../services/global-preferences.service.js';

const models = [RoomPreferencesModel, AppearancePreferencesModel];
const models = [GlobalPreferencesModel];
const options: SequelizeOptions = {
database: DB_NAME,
dialect: DB_DIALECT as Dialect,
Expand All @@ -21,34 +21,18 @@ sequelize.addModels(models);

const sequelizeSync = async () => {
const logger = LoggerService.getInstance();
const gpService = GlobalPreferencseService.getInstance();

try {
await sequelize.sync();
await initializeDefaultPreferences();
await gpService.initializeDefaultPreferences();
logger.verbose('Database connected and models synced.');
} catch (error) {
logger.error(`Error initializing the ${DB_DIALECT} database: ${error}`);
console.error(error);
}
};

const initializeDefaultPreferences = async () => {
const logger = LoggerService.getInstance();

const [roomPreferences, appearancePreferences] = await Promise.all([
RoomPreferencesModel.findOne(),
AppearancePreferencesModel.findOne()
]);

if (!roomPreferences) {
await RoomPreferencesModel.create();
}

if (!appearancePreferences) {
await AppearancePreferencesModel.create();
}

logger.verbose('Default preferences initialized.');
};

export { sequelize, sequelizeSync };
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
import { Request, Response } from 'express';
import { AppearancePreferencesModel } from '../../models/global-preferences/appearance-preference.model.js';

export const updateAppearancePreferences = async (req: Request, res: Response) => {
const { appearancePreferences } = req.body;

try {
const preferences = await AppearancePreferencesModel.findOne();
// const preferences = await AppearancePreferencesModel.findOne();

if (preferences) {
preferences.theme = appearancePreferences.theme;
await preferences.save();
return res.status(200).json({ message: 'Appearance preferences updated successfully.' });
} else {
await AppearancePreferencesModel.create({ appearancePreferences });
// if (preferences) {
// preferences.theme = appearancePreferences.theme;
// await preferences.save();
// return res.status(200).json({ message: 'Appearance preferences updated successfully.' });
// } else {
// await AppearancePreferencesModel.create({ appearancePreferences });
return res.status(201).json({ message: 'Appearance preferences created successfully.' });
}
// }
} catch (error) {
console.error('Error saving appearance preferences:', error);
return res.status(500).json({ message: 'Error saving appearance preferences', error });
Expand All @@ -23,13 +22,13 @@ export const updateAppearancePreferences = async (req: Request, res: Response) =

export const getAppearancePreferences = async (req: Request, res: Response) => {
try {
const preferences = await AppearancePreferencesModel.findOne();
// const preferences = await AppearancePreferencesModel.findOne();

if (preferences) {
return res.status(200).json(preferences);
} else {
// if (preferences) {
// return res.status(200).json(preferences);
// } else {
return res.status(404).json({ message: 'Appearance preferences not found' });
}
// }
} catch (error) {
console.error('Error fetching appearance preferences:', error);
return res.status(500).json({ message: 'Error fetching appearance preferences', error });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,35 @@ import { Request, Response } from 'express';
import { CALL_PRIVATE_ACCESS } from '../../config.js';
import { LoggerService } from '../../services/logger.service.js';
import { GlobalPreferences } from '@openvidu/call-common-types';
import { RoomPreferencesModel } from '../../models/global-preferences/room-preference.model.js';
import { AppearancePreferencesModel } from '../../models/global-preferences/appearance-preference.model.js';

const logger = LoggerService.getInstance();

export const getGlobalPreferences = async (req: Request, res: Response) => {
logger.verbose('Getting global preferences');
// export const getGlobalPreferences = async (req: Request, res: Response) => {
// logger.verbose('Getting global preferences');

try {
const [roomPreferences, appearancePreferences] = await Promise.all([
RoomPreferencesModel.findOne(),
AppearancePreferencesModel.findOne()
]);
// try {
// const [roomPreferences, appearancePreferences] = await Promise.all([
// RoomPreferencesModel.findOne(),
// AppearancePreferencesModel.findOne()
// ]);

const globalPreferences: GlobalPreferences = {
roomPreferences: roomPreferences?.dataValues.roomPreferences,
appearancePreferences: appearancePreferences?.dataValues.appearancePreferences
};
// const globalPreferences: GlobalPreferences = {
// roomPreferences: roomPreferences?.dataValues.roomPreferences,
// appearancePreferences: appearancePreferences?.dataValues.appearancePreferences
// };

if (!globalPreferences) {
return res.status(404).json({ message: 'Global preferences not found' });
}
// if (!globalPreferences) {
// return res.status(404).json({ message: 'Global preferences not found' });
// }

return res.status(200).json(globalPreferences);
} catch (error) {
logger.error(`Unexpected error getting global preferences ${error}`);
return res
.status(500)
.json({ name: 'Global Preferences Error', message: 'Unexpected error getting global preferences' });
}
};
// return res.status(200).json(globalPreferences);
// } catch (error) {
// logger.error(`Unexpected error getting global preferences ${error}`);
// return res
// .status(500)
// .json({ name: 'Global Preferences Error', message: 'Unexpected error getting global preferences' });
// }
// };

// TODO: Remove this endpoint
export const getConfig = async (req: Request, res: Response) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
// src/controllers/roomPreferences.controller.ts
import { Request, Response } from 'express';
import { RoomPreferencesModel } from '../../models/global-preferences/room-preference.model.js';
import { LoggerService } from '../../services/logger.service.js';
import { GlobalPreferencseService } from '../../services/global-preferences.service.js';
import { OpenViduCallError } from '../../models/error.model.js';
Expand All @@ -21,20 +20,7 @@ export const updateRoomPreferences = async (req: Request, res: Response) => {
.status(200)
.json({ message: 'Room preferences updated successfully.', preferences: savedPreferences });

// let preferences = await RoomPreferencesModel.findOne();

// if (preferences) {
// await RoomPreferencesModel.update({ chatPreferences }, { where: { id: preferences.id } });
// return res.status(200).json({ message: 'Room preferences updated successfully.', preferences });
// } else {
// // Crear preferencias si no existen
// preferences = await RoomPreferencesModel.create({
// recordingPreferences,
// broadcastingPreferences,
// chatPreferences
// });
// return res.status(201).json({ message: 'Room preferences created successfully.', preferences });
// }

} catch (error) {
if (error instanceof OpenViduCallError) {
logger.error(`Error saving room preferences: ${error.message}`);
Expand All @@ -54,7 +40,7 @@ export const getRoomPreferences = async (req: Request, res: Response) => {
return res.status(404).json({ message: 'Room preferences not found' });
}

return res.status(200).json(preferences);
return res.status(200).json(preferences.value);
} catch (error) {
console.error('Error fetching room preferences:', error);
return res.status(500).json({ message: 'Error fetching room preferences', error });
Expand Down
26 changes: 26 additions & 0 deletions backend/src/models/global-preferences.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { RoomPreferences, AppearancePreferences } from '@openvidu/call-common-types';
import { Table, Column, Model, DataType } from 'sequelize-typescript';

type PreferencesMap = {
roomPreferences: RoomPreferences;
appearancePreferences: AppearancePreferences;
};

type PreferencesKey = keyof PreferencesMap;
type PreferencesValue<K extends PreferencesKey> = PreferencesMap[K];

@Table({ tableName: 'global_preferences' })
export class GlobalPreferencesModel<K extends PreferencesKey = PreferencesKey> extends Model {
@Column({
type: DataType.STRING,
allowNull: false,
unique: true
})
declare key: K;

@Column({
type: DataType.JSON,
allowNull: false
})
declare value: PreferencesValue<K>;
}

This file was deleted.

46 changes: 0 additions & 46 deletions backend/src/models/global-preferences/room-preference.model.ts

This file was deleted.

14 changes: 10 additions & 4 deletions backend/src/routes/api.routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,17 @@ import * as roomCtrl from '../controllers/room.controller.js';
import * as recordingCtrl from '../controllers/recording.controller.js';
import * as broadcastCtrl from '../controllers/broadcasting.controller.js';
import * as authCtrl from '../controllers/auth.controller.js';
import { getConfig, getGlobalPreferences } from '../controllers/global-preferences/global-preferences.controller.js';
import { getConfig } from '../controllers/global-preferences/global-preferences.controller.js';
import { healthCheck } from '../controllers/healthcheck.controller.js';
import { withAdminAndUserBasicAuth, withAdminBasicAuth, withUserBasicAuth } from '../services/auth.service.js';
import { getRoomPreferences, updateRoomPreferences } from '../controllers/global-preferences/room-preferences.controller.js';
import { getAppearancePreferences, updateAppearancePreferences } from '../controllers/global-preferences/appearance-preferences.controller.js';
import {
getRoomPreferences,
updateRoomPreferences
} from '../controllers/global-preferences/room-preferences.controller.js';
import {
getAppearancePreferences,
updateAppearancePreferences
} from '../controllers/global-preferences/appearance-preferences.controller.js';

const apiRouter = Router();

Expand Down Expand Up @@ -38,7 +44,7 @@ apiRouter.post('/admin/login', authCtrl.adminLogin);
apiRouter.post('/admin/logout', authCtrl.adminLogout);

// Global Preferences Routes
apiRouter.get('/preferences', /*withAdminBasicAuth,*/ getGlobalPreferences);
// apiRouter.get('/preferences', /*withAdminBasicAuth,*/ getGlobalPreferences);

apiRouter.put('/preferences/room', /*withAdminBasicAuth,*/ updateRoomPreferences);
apiRouter.get('/preferences/room', /*withAdminBasicAuth,*/ getRoomPreferences);
Expand Down
Loading

0 comments on commit a58ad59

Please sign in to comment.