UNPKG

@lxdhub/dbsync

Version:

Display, search and copy LXD-images using a web interface.

101 lines 4.4 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); const db_1 = require("@lxdhub/db"); const common_1 = require("@nestjs/common"); const aigle_1 = require("aigle"); const _ = require("lodash"); const image_1 = require("../image"); const lxd_1 = require("../lxd"); const util_1 = require("../util"); const typeorm_1 = require("@nestjs/typeorm"); const typeorm_2 = require("typeorm"); let AliasService = class AliasService { constructor(imageService, aliasRepository, dbSyncSettings, lxdService) { this.imageService = imageService; this.aliasRepository = aliasRepository; this.dbSyncSettings = dbSyncSettings; this.lxdService = lxdService; this.logger = new common_1.Logger('AliasService'); } aliasToDto(alias) { return { name: util_1.trimIfPossible(alias.name), description: util_1.trimIfPossible(alias.description) }; } getAliases(remoteImage) { return _.map(remoteImage.aliases, alias => this.aliasToDto(alias)); } mapAlias(localAlias, remoteAlias) { localAlias.description = remoteAlias.description; localAlias.name = remoteAlias.name; return localAlias; } async getOrCreate(remoteImage, remoteAlias) { const image = await this.imageService.updateOrCreateImage(remoteImage); let localAlias = await this.aliasRepository .createQueryBuilder('alias') .leftJoinAndSelect('alias.image', 'image') .where('image.id = :imageId AND alias.name = :name', { imageId: image.id, name: remoteAlias.name }) .getOne(); if (!localAlias) { localAlias = await this.create(remoteAlias, image); } else { localAlias = await this.update(localAlias, remoteAlias); } return localAlias; } async update(localAlias, remoteAlias) { localAlias = this.mapAlias(localAlias, remoteAlias); return this.aliasRepository.save(localAlias); } async create(remoteAlias, image) { this.logger.log(`Adding Alias ${remoteAlias.name}`); let localAlias = new db_1.Alias(); localAlias.image = image; localAlias = this.mapAlias(localAlias, remoteAlias); return this.aliasRepository.save(localAlias); } async synchronize() { this.logger.log('-> Starting Alias synchronization'); await aigle_1.default .resolve(this.dbSyncSettings.lxdhubConfig.remotes) .forEachSeries(async (remote) => { const images = await this.lxdService.getRemoteImages(remote); await aigle_1.default .resolve(images) .forEachSeries(async (remoteImage) => { const aliases = this.getAliases(remoteImage); await aigle_1.default .resolve(aliases) .forEachSeries(async (alias) => this.getOrCreate(remoteImage, alias)); }); }); this.logger.log('-> Finished Alias synchronization'); } }; AliasService = __decorate([ common_1.Injectable(), __param(1, typeorm_1.InjectRepository(db_1.Alias)), __param(2, common_1.Inject('LXDHubDbSyncSettings')), __metadata("design:paramtypes", [image_1.ImageService, typeorm_2.Repository, Object, lxd_1.LXDService]) ], AliasService); exports.AliasService = AliasService; //# sourceMappingURL=alias.service.js.map