import { ResourceAlreadyExistsException } from '@nestjs.pro/common'; import { ResourceNotFoundException } from '@nestjs.pro/common/dist/exceptions/ResourceNotFoundException'; import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Application } from '@tco.ai/models/dist/RBAC/Application'; import { ApplicationRepository } from '@tco.ai/models/dist/RBAC/ApplicationRepository'; import { Organization } from '@tco.ai/models/dist/RBAC/Organization'; @Injectable() export class ApplicationsService { private readonly applicationRepository: ApplicationRepository; public constructor(@InjectRepository(ApplicationRepository) applicationRepository: ApplicationRepository) { this.applicationRepository = applicationRepository; } /** * Retrieve an application by it's name. * * @param {string} name * @returns {Promise} * * @throws {ResourceNotFoundException} Thrown if no name could be found. */ public async getByName(name: string): Promise { const organization = await this.applicationRepository.getByName(name); if (!organization) { throw new ResourceNotFoundException('could not locate organization'); } else { return organization; } } /** * Create a new application. * * @param organization * @param applicationCreate * * @returns {Promise} * * @throws {ResourceAlreadyExistsException} Thrown if an application by the same name already exists. */ public async create(organization: Organization, applicationCreate: Application): Promise { // this.elasticsearchLoggerService.info(`Created organization ${ organizationCreate.name }`); applicationCreate.organization = organization; return this.applicationRepository.save(applicationCreate); } public async getByOrganization(organization: Organization): Promise> { return this.applicationRepository.find({ where: { organization } }); } public async getByOrganizationAndId(organization: Organization, id: string): Promise { return this.applicationRepository.findOneOrFail({ where: { organization, id } }); } public async deleteByOrganizationAndId(organization: Organization, id: string): Promise { const result = await this.applicationRepository.delete({ organization, id }); return result.affected > 0; } }