fixing mysql random error

This commit is contained in:
Patrik J. Braun 2018-11-21 16:07:37 +01:00
parent 2110054f43
commit 5625f37d6b
4 changed files with 53 additions and 46 deletions

View File

@ -43,7 +43,7 @@ export class AdminMWs {
Logger.info(LOG_TAG, 'new config:'); Logger.info(LOG_TAG, 'new config:');
Logger.info(LOG_TAG, JSON.stringify(Config, null, '\t')); Logger.info(LOG_TAG, JSON.stringify(Config, null, '\t'));
ObjectManagerRepository.reset(); await ObjectManagerRepository.reset();
if (Config.Server.database.type !== DatabaseType.memory) { if (Config.Server.database.type !== DatabaseType.memory) {
await ObjectManagerRepository.InitSQLManagers(); await ObjectManagerRepository.InitSQLManagers();
} else { } else {
@ -80,6 +80,7 @@ export class AdminMWs {
return next(new ErrorDTO(ErrorCodes.SETTINGS_ERROR, 'Settings error: ' + JSON.stringify(err, null, ' '), err)); return next(new ErrorDTO(ErrorCodes.SETTINGS_ERROR, 'Settings error: ' + JSON.stringify(err, null, ' '), err));
} }
} }
public static async updateVideoSettings(req: Request, res: Response, next: NextFunction) { public static async updateVideoSettings(req: Request, res: Response, next: NextFunction) {
if ((typeof req.body === 'undefined') || (typeof req.body.settings === 'undefined')) { if ((typeof req.body === 'undefined') || (typeof req.body.settings === 'undefined')) {
return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'settings is needed')); return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'settings is needed'));

View File

@ -108,43 +108,46 @@ export class GalleryMWs {
if (Config.Client.RandomPhoto.enabled === false) { if (Config.Client.RandomPhoto.enabled === false) {
return next(); return next();
} }
const query: RandomQuery = {}; try {
if (req.query.directory) { const query: RandomQuery = {};
query.directory = req.query.directory; if (req.query.directory) {
} query.directory = req.query.directory;
if (req.query.recursive === 'true') { }
query.recursive = true; if (req.query.recursive === 'true') {
} query.recursive = true;
if (req.query.orientation) { }
query.orientation = parseInt(req.query.orientation.toString(), 10); if (req.query.orientation) {
} query.orientation = parseInt(req.query.orientation.toString(), 10);
if (req.query.maxResolution) { }
query.maxResolution = parseFloat(req.query.maxResolution.toString()); if (req.query.maxResolution) {
} query.maxResolution = parseFloat(req.query.maxResolution.toString());
if (req.query.minResolution) { }
query.minResolution = parseFloat(req.query.minResolution.toString()); if (req.query.minResolution) {
} query.minResolution = parseFloat(req.query.minResolution.toString());
if (req.query.fromDate) { }
query.fromDate = new Date(req.query.fromDate); if (req.query.fromDate) {
} query.fromDate = new Date(req.query.fromDate);
if (req.query.toDate) { }
query.toDate = new Date(req.query.toDate); if (req.query.toDate) {
} query.toDate = new Date(req.query.toDate);
if (query.minResolution && query.maxResolution && query.maxResolution < query.minResolution) { }
return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'Input error: min resolution is greater than the max resolution')); if (query.minResolution && query.maxResolution && query.maxResolution < query.minResolution) {
} return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'Input error: min resolution is greater than the max resolution'));
if (query.toDate && query.fromDate && query.toDate.getTime() < query.fromDate.getTime()) { }
return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'Input error: to date is earlier than from date')); if (query.toDate && query.fromDate && query.toDate.getTime() < query.fromDate.getTime()) {
} return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'Input error: to date is earlier than from date'));
}
const photo = await ObjectManagerRepository.getInstance() const photo = await ObjectManagerRepository.getInstance()
.GalleryManager.getRandomPhoto(query); .GalleryManager.getRandomPhoto(query);
if (!photo) { if (!photo) {
return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'No photo found')); return next(new ErrorDTO(ErrorCodes.INPUT_ERROR, 'No photo found'));
}
req.params.mediaPath = path.join(photo.directory.path, photo.directory.name, photo.name);
} catch (e) {
return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, 'Can\'t get random photo: ' + e.toString()));
} }
req.params.mediaPath = path.join(photo.directory.path, photo.directory.name, photo.name);
return next(); return next();
} }

View File

@ -174,7 +174,8 @@ export class ThumbnailGeneratorMWs {
await this.taskQue.execute(input); await this.taskQue.execute(input);
return next(); return next();
} catch (error) { } catch (error) {
return next(new ErrorDTO(ErrorCodes.THUMBNAIL_GENERATION_ERROR, 'Error during generating thumbnail: ' + input.mediaPath, error.toString())); return next(new ErrorDTO(ErrorCodes.THUMBNAIL_GENERATION_ERROR,
'Error during generating thumbnail: ' + input.mediaPath, error.toString()));
} }
} }

View File

@ -10,10 +10,10 @@ import {Utils} from '../../../common/Utils';
import {ProjectPath} from '../../ProjectPath'; import {ProjectPath} from '../../ProjectPath';
import {Config} from '../../../common/config/private/Config'; import {Config} from '../../../common/config/private/Config';
import {ISQLGalleryManager} from './IGalleryManager'; import {ISQLGalleryManager} from './IGalleryManager';
import {ReIndexingSensitivity} from '../../../common/config/private/IPrivateConfig'; import {DatabaseType, ReIndexingSensitivity} from '../../../common/config/private/IPrivateConfig';
import {PhotoDTO} from '../../../common/entities/PhotoDTO'; import {PhotoDTO} from '../../../common/entities/PhotoDTO';
import {OrientationType} from '../../../common/entities/RandomQueryDTO'; import {OrientationType} from '../../../common/entities/RandomQueryDTO';
import {Connection, Brackets} from 'typeorm'; import {Brackets, Connection} from 'typeorm';
import {MediaEntity} from './enitites/MediaEntity'; import {MediaEntity} from './enitites/MediaEntity';
import {MediaDTO} from '../../../common/entities/MediaDTO'; import {MediaDTO} from '../../../common/entities/MediaDTO';
import {VideoEntity} from './enitites/VideoEntity'; import {VideoEntity} from './enitites/VideoEntity';
@ -264,34 +264,36 @@ export class GalleryManager implements IGalleryManager, ISQLGalleryManager {
} }
if (queryFilter.fromDate) { if (queryFilter.fromDate) {
query.andWhere('media.metadata.creationDate >= :fromDate', { query.andWhere('photo.metadata.creationDate >= :fromDate', {
fromDate: queryFilter.fromDate.getTime() fromDate: queryFilter.fromDate.getTime()
}); });
} }
if (queryFilter.toDate) { if (queryFilter.toDate) {
query.andWhere('media.metadata.creationDate <= :toDate', { query.andWhere('photo.metadata.creationDate <= :toDate', {
toDate: queryFilter.toDate.getTime() toDate: queryFilter.toDate.getTime()
}); });
} }
if (queryFilter.minResolution) { if (queryFilter.minResolution) {
query.andWhere('media.metadata.size.width * media.metadata.size.height >= :minRes', { query.andWhere('photo.metadata.size.width * photo.metadata.size.height >= :minRes', {
minRes: queryFilter.minResolution * 1000 * 1000 minRes: queryFilter.minResolution * 1000 * 1000
}); });
} }
if (queryFilter.maxResolution) { if (queryFilter.maxResolution) {
query.andWhere('media.metadata.size.width * media.metadata.size.height <= :maxRes', { query.andWhere('photo.metadata.size.width * photo.metadata.size.height <= :maxRes', {
maxRes: queryFilter.maxResolution * 1000 * 1000 maxRes: queryFilter.maxResolution * 1000 * 1000
}); });
} }
if (queryFilter.orientation === OrientationType.landscape) { if (queryFilter.orientation === OrientationType.landscape) {
query.andWhere('media.metadata.size.width >= media.metadata.size.height'); query.andWhere('photo.metadata.size.width >= photo.metadata.size.height');
} }
if (queryFilter.orientation === OrientationType.portrait) { if (queryFilter.orientation === OrientationType.portrait) {
query.andWhere('media.metadata.size.width <= media.metadata.size.height'); query.andWhere('photo.metadata.size.width <= photo.metadata.size.height');
} }
if (Config.Server.database.type === DatabaseType.mysql) {
return await query.groupBy('RAND(), photo.id').limit(1).getOne();
}
return await query.groupBy('RANDOM()').limit(1).getOne(); return await query.groupBy('RANDOM()').limit(1).getOne();
} }