"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 });
exports.MediaRepository = void 0;
const common_1 = require("@nestjs/common");
const media_entity_1 = require("../entities/media.entity");
const request_context_service_1 = require("../services/request-context.service");
const typeorm_1 = require("typeorm");
const field_metadata_repository_1 = require("./field-metadata.repository");
const media_storage_provider_metadata_repository_1 = require("./media-storage-provider-metadata.repository");
const model_metadata_repository_1 = require("./model-metadata.repository");
const security_rule_repository_1 = require("./security-rule.repository");
const solid_base_repository_1 = require("./solid-base.repository");
let MediaRepository = class MediaRepository extends solid_base_repository_1.SolidBaseRepository {
    constructor(dataSource, requestContextService, securityRuleRepository, fieldMetadataRepo, modelMetadataRepo, mediaStorageProviderMetadataRepo) {
        super(media_entity_1.Media, dataSource, requestContextService, securityRuleRepository);
        this.dataSource = dataSource;
        this.requestContextService = requestContextService;
        this.securityRuleRepository = securityRuleRepository;
        this.fieldMetadataRepo = fieldMetadataRepo;
        this.modelMetadataRepo = modelMetadataRepo;
        this.mediaStorageProviderMetadataRepo = mediaStorageProviderMetadataRepo;
    }
    async createMedia(createDto) {
        createDto['fieldMetadata'] = await this.fieldMetadataRepo.findOne({
            where: {
                id: createDto['fieldMetadataId']
            },
        });
        createDto['modelMetadata'] = await this.modelMetadataRepo.findOne({
            where: {
                id: createDto['modelMetadataId']
            },
        });
        createDto['mediaStorageProviderMetadata'] = await this.mediaStorageProviderMetadataRepo.findOne({
            where: {
                id: createDto['mediaStorageProviderMetadataId']
            },
        });
        const media = this.create(createDto);
        return this.save(media);
    }
    async findByEntityIdAndFieldIdAndModelMetadataId(entityId, fieldMetadataId, modelMetadataId, relations = {}) {
        return await this.find({
            where: {
                modelMetadata: {
                    id: modelMetadataId
                },
                fieldMetadata: {
                    id: fieldMetadataId
                },
                entityId: entityId,
            },
            relations: relations,
        });
    }
    async deleteByEntityIdAndFieldIdAndModelMetadataId(entityId, fieldMetadataId, modelMetadataId) {
        const entities = await this.find({
            where: {
                modelMetadata: {
                    id: modelMetadataId
                },
                fieldMetadata: {
                    id: fieldMetadataId
                },
                entityId: entityId,
            }
        });
        return this.remove(entities);
    }
};
exports.MediaRepository = MediaRepository;
exports.MediaRepository = MediaRepository = __decorate([
    (0, common_1.Injectable)(),
    __param(4, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_repository_1.ModelMetadataRepository))),
    __metadata("design:paramtypes", [typeorm_1.DataSource,
        request_context_service_1.RequestContextService,
        security_rule_repository_1.SecurityRuleRepository,
        field_metadata_repository_1.FieldMetadataRepository,
        model_metadata_repository_1.ModelMetadataRepository,
        media_storage_provider_metadata_repository_1.MediaStorageProviderMetadataRepository])
], MediaRepository);
//# sourceMappingURL=media.repository.js.map