@lxdhub/dbsync
Version:
Display, search and copy LXD-images using a web interface.
101 lines • 4.4 kB
JavaScript
;
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