Files
alrahma_sunday_school_api/apps/api/dist/modules/companies/company.repo.js
T
2026-06-11 03:22:12 -04:00

145 lines
5.9 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.findCompany = findCompany;
exports.updateCompany = updateCompany;
exports.findBrand = findBrand;
exports.upsertBrand = upsertBrand;
exports.findContractSettings = findContractSettings;
exports.upsertContractSettings = upsertContractSettings;
exports.findInsurancePolicies = findInsurancePolicies;
exports.createInsurancePolicy = createInsurancePolicy;
exports.updateInsurancePolicy = updateInsurancePolicy;
exports.findInsurancePolicyOrThrow = findInsurancePolicyOrThrow;
exports.deleteInsurancePolicy = deleteInsurancePolicy;
exports.findPricingRules = findPricingRules;
exports.createPricingRule = createPricingRule;
exports.updatePricingRule = updatePricingRule;
exports.findPricingRuleOrThrow = findPricingRuleOrThrow;
exports.deletePricingRule = deletePricingRule;
exports.findAccountingSettings = findAccountingSettings;
exports.upsertAccountingSettings = upsertAccountingSettings;
exports.findApiKey = findApiKey;
exports.regenerateApiKey = regenerateApiKey;
exports.findBrandBySubdomain = findBrandBySubdomain;
exports.findBrandByCustomDomain = findBrandByCustomDomain;
exports.clearCustomDomain = clearCustomDomain;
const prisma_1 = require("../../lib/prisma");
const apiKeys_1 = require("../../security/apiKeys");
async function findCompany(companyId) {
return prisma_1.prisma.company.findUniqueOrThrow({
where: { id: companyId },
include: {
brand: true,
subscription: true,
_count: { select: { vehicles: true, customers: true, reservations: true } },
},
});
}
async function updateCompany(companyId, data) {
return prisma_1.prisma.company.update({ where: { id: companyId }, data });
}
async function findBrand(companyId) {
return prisma_1.prisma.brandSettings.findUnique({ where: { companyId } });
}
async function upsertBrand(companyId, updateData, createData) {
return prisma_1.prisma.brandSettings.upsert({
where: { companyId },
update: updateData,
create: { companyId, ...createData },
});
}
async function findContractSettings(companyId) {
return prisma_1.prisma.contractSettings.findUnique({ where: { companyId } });
}
async function upsertContractSettings(companyId, data) {
return prisma_1.prisma.contractSettings.upsert({
where: { companyId },
update: data,
create: { companyId, ...data },
});
}
async function findInsurancePolicies(companyId) {
return prisma_1.prisma.insurancePolicy.findMany({
where: { companyId },
orderBy: [{ isRequired: 'desc' }, { sortOrder: 'asc' }, { name: 'asc' }],
});
}
async function createInsurancePolicy(companyId, data) {
return prisma_1.prisma.insurancePolicy.create({ data: { companyId, ...data } });
}
async function updateInsurancePolicy(id, companyId, data) {
return prisma_1.prisma.insurancePolicy.updateMany({ where: { id, companyId }, data });
}
async function findInsurancePolicyOrThrow(id) {
return prisma_1.prisma.insurancePolicy.findUniqueOrThrow({ where: { id } });
}
async function deleteInsurancePolicy(id, companyId) {
return prisma_1.prisma.insurancePolicy.deleteMany({ where: { id, companyId } });
}
async function findPricingRules(companyId) {
return prisma_1.prisma.pricingRule.findMany({
where: { companyId },
orderBy: [{ isActive: 'desc' }, { createdAt: 'asc' }],
});
}
async function createPricingRule(companyId, data) {
return prisma_1.prisma.pricingRule.create({ data: { companyId, ...data } });
}
async function updatePricingRule(id, companyId, data) {
return prisma_1.prisma.pricingRule.updateMany({ where: { id, companyId }, data });
}
async function findPricingRuleOrThrow(id) {
return prisma_1.prisma.pricingRule.findUniqueOrThrow({ where: { id } });
}
async function deletePricingRule(id, companyId) {
return prisma_1.prisma.pricingRule.deleteMany({ where: { id, companyId } });
}
async function findAccountingSettings(companyId) {
return prisma_1.prisma.accountingSettings.findUnique({ where: { companyId } });
}
async function upsertAccountingSettings(companyId, data) {
return prisma_1.prisma.accountingSettings.upsert({
where: { companyId },
update: data,
create: { companyId, ...data },
});
}
async function findApiKey(companyId) {
const apiKeys = await prisma_1.prisma.companyApiKey.findMany({
where: { companyId, revokedAt: null },
orderBy: { createdAt: 'desc' },
select: { id: true, name: true, prefix: true, lastUsedAt: true, createdAt: true, revokedAt: true },
});
return { apiKeys };
}
async function regenerateApiKey(companyId) {
const nextKey = (0, apiKeys_1.generateCompanyApiKey)();
await prisma_1.prisma.$transaction(async (tx) => {
await tx.companyApiKey.updateMany({
where: { companyId, revokedAt: null },
data: { revokedAt: new Date() },
});
await tx.companyApiKey.create({
data: {
companyId,
name: 'Default API key',
prefix: nextKey.prefix,
keyHash: nextKey.keyHash,
},
});
});
return { apiKey: nextKey.rawKey, prefix: nextKey.prefix, warning: 'This raw API key is shown once. Store it securely.' };
}
async function findBrandBySubdomain(subdomain, excludeCompanyId) {
return prisma_1.prisma.brandSettings.findFirst({ where: { subdomain, companyId: { not: excludeCompanyId } } });
}
async function findBrandByCustomDomain(customDomain, excludeCompanyId) {
return prisma_1.prisma.brandSettings.findFirst({ where: { customDomain, companyId: { not: excludeCompanyId } } });
}
async function clearCustomDomain(companyId) {
return prisma_1.prisma.brandSettings.updateMany({
where: { companyId },
data: { customDomain: null, customDomainVerified: false, customDomainAddedAt: null },
});
}
//# sourceMappingURL=company.repo.js.map