archetecture security fix
This commit is contained in:
+15
@@ -0,0 +1,15 @@
|
||||
export declare function findMany(companyId: string, filters: {
|
||||
active?: string;
|
||||
public?: string;
|
||||
}): any;
|
||||
export declare function findByIdOrThrow(id: string, companyId: string): any;
|
||||
export declare function findFirst(id: string, companyId: string): any;
|
||||
export declare function create(companyId: string, data: any, vehicleIds: string[]): Promise<any>;
|
||||
export declare function update(id: string, data: any, vehicleIds?: string[]): Promise<any>;
|
||||
export declare function deleteMany(id: string, companyId: string): any;
|
||||
export declare function setActive(id: string, companyId: string, isActive: boolean): any;
|
||||
export declare function getStats(id: string, companyId: string): Promise<{
|
||||
redemptions: any;
|
||||
reservations: any;
|
||||
}>;
|
||||
//# sourceMappingURL=offer.repo.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"offer.repo.d.ts","sourceRoot":"","sources":["../../../src/modules/offers/offer.repo.ts"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,OAKxF;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAE5D;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAEtD;AAED,wBAAsB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,gBAW9E;AAED,wBAAsB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,gBAkBxE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAEvD;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,OAEzE;AAED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;GAI3D"}
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.findMany = findMany;
|
||||
exports.findByIdOrThrow = findByIdOrThrow;
|
||||
exports.findFirst = findFirst;
|
||||
exports.create = create;
|
||||
exports.update = update;
|
||||
exports.deleteMany = deleteMany;
|
||||
exports.setActive = setActive;
|
||||
exports.getStats = getStats;
|
||||
const prisma_1 = require("../../lib/prisma");
|
||||
function findMany(companyId, filters) {
|
||||
const where = { companyId };
|
||||
if (filters.active !== undefined)
|
||||
where.isActive = filters.active === 'true';
|
||||
if (filters.public !== undefined)
|
||||
where.isPublic = filters.public === 'true';
|
||||
return prisma_1.prisma.offer.findMany({ where, orderBy: { createdAt: 'desc' } });
|
||||
}
|
||||
function findByIdOrThrow(id, companyId) {
|
||||
return prisma_1.prisma.offer.findFirstOrThrow({ where: { id, companyId }, include: { vehicles: true } });
|
||||
}
|
||||
function findFirst(id, companyId) {
|
||||
return prisma_1.prisma.offer.findFirst({ where: { id, companyId } });
|
||||
}
|
||||
async function create(companyId, data, vehicleIds) {
|
||||
return prisma_1.prisma.offer.create({
|
||||
data: {
|
||||
...data,
|
||||
companyId,
|
||||
validFrom: new Date(data.validFrom),
|
||||
validUntil: new Date(data.validUntil),
|
||||
vehicles: vehicleIds.length > 0 ? { create: vehicleIds.map((id) => ({ vehicleId: id })) } : undefined,
|
||||
},
|
||||
include: { vehicles: true },
|
||||
});
|
||||
}
|
||||
async function update(id, data, vehicleIds) {
|
||||
return prisma_1.prisma.$transaction(async (tx) => {
|
||||
await tx.offer.update({
|
||||
where: { id },
|
||||
data: {
|
||||
...data,
|
||||
validFrom: data.validFrom ? new Date(data.validFrom) : undefined,
|
||||
validUntil: data.validUntil ? new Date(data.validUntil) : undefined,
|
||||
},
|
||||
});
|
||||
if (vehicleIds !== undefined) {
|
||||
await tx.offerVehicle.deleteMany({ where: { offerId: id } });
|
||||
if (vehicleIds.length > 0) {
|
||||
await tx.offerVehicle.createMany({ data: vehicleIds.map((vehicleId) => ({ offerId: id, vehicleId })) });
|
||||
}
|
||||
}
|
||||
return tx.offer.findUniqueOrThrow({ where: { id }, include: { vehicles: true } });
|
||||
});
|
||||
}
|
||||
function deleteMany(id, companyId) {
|
||||
return prisma_1.prisma.offer.deleteMany({ where: { id, companyId } });
|
||||
}
|
||||
function setActive(id, companyId, isActive) {
|
||||
return prisma_1.prisma.offer.updateMany({ where: { id, companyId }, data: { isActive } });
|
||||
}
|
||||
async function getStats(id, companyId) {
|
||||
const offer = await prisma_1.prisma.offer.findFirstOrThrow({ where: { id, companyId } });
|
||||
const reservations = await prisma_1.prisma.reservation.count({ where: { offerId: offer.id } });
|
||||
return { redemptions: offer.redemptionCount, reservations };
|
||||
}
|
||||
//# sourceMappingURL=offer.repo.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"offer.repo.js","sourceRoot":"","sources":["../../../src/modules/offers/offer.repo.ts"],"names":[],"mappings":"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"}
|
||||
@@ -0,0 +1,3 @@
|
||||
declare const router: import("express-serve-static-core").Router;
|
||||
export default router;
|
||||
//# sourceMappingURL=offer.routes.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"offer.routes.d.ts","sourceRoot":"","sources":["../../../src/modules/offers/offer.routes.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,MAAM,4CAAW,CAAA;AAgEvB,eAAe,MAAM,CAAA"}
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||
}) : function(o, v) {
|
||||
o["default"] = v;
|
||||
});
|
||||
var __importStar = (this && this.__importStar) || (function () {
|
||||
var ownKeys = function(o) {
|
||||
ownKeys = Object.getOwnPropertyNames || function (o) {
|
||||
var ar = [];
|
||||
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
||||
return ar;
|
||||
};
|
||||
return ownKeys(o);
|
||||
};
|
||||
return function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
||||
__setModuleDefault(result, mod);
|
||||
return result;
|
||||
};
|
||||
})();
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const express_1 = require("express");
|
||||
const requireCompanyAuth_1 = require("../../middleware/requireCompanyAuth");
|
||||
const requireTenant_1 = require("../../middleware/requireTenant");
|
||||
const requireSubscription_1 = require("../../middleware/requireSubscription");
|
||||
const requireRole_1 = require("../../middleware/requireRole");
|
||||
const validate_1 = require("../../http/validate");
|
||||
const respond_1 = require("../../http/respond");
|
||||
const service = __importStar(require("./offer.service"));
|
||||
const offer_schemas_1 = require("./offer.schemas");
|
||||
const router = (0, express_1.Router)();
|
||||
router.use(requireCompanyAuth_1.requireCompanyAuth, requireTenant_1.requireTenant, requireSubscription_1.requireSubscription);
|
||||
router.get('/', async (req, res, next) => {
|
||||
try {
|
||||
const query = (0, validate_1.parseQuery)(offer_schemas_1.listQuerySchema, req);
|
||||
(0, respond_1.ok)(res, await service.listOffers(req.companyId, query));
|
||||
}
|
||||
catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
router.post('/', (0, requireRole_1.requireRole)('MANAGER'), async (req, res, next) => {
|
||||
try {
|
||||
const { vehicleIds, ...body } = (0, validate_1.parseBody)(offer_schemas_1.offerSchema, req);
|
||||
(0, respond_1.created)(res, await service.createOffer(req.companyId, body, vehicleIds));
|
||||
}
|
||||
catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
router.get('/:id', async (req, res, next) => {
|
||||
try {
|
||||
const { id } = (0, validate_1.parseParams)(offer_schemas_1.idParamSchema, req);
|
||||
(0, respond_1.ok)(res, await service.getOffer(id, req.companyId));
|
||||
}
|
||||
catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
router.patch('/:id', (0, requireRole_1.requireRole)('MANAGER'), async (req, res, next) => {
|
||||
try {
|
||||
const { id } = (0, validate_1.parseParams)(offer_schemas_1.idParamSchema, req);
|
||||
const { vehicleIds, ...body } = (0, validate_1.parseBody)(offer_schemas_1.offerSchema.partial(), req);
|
||||
(0, respond_1.ok)(res, await service.updateOffer(id, req.companyId, body, vehicleIds));
|
||||
}
|
||||
catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
router.delete('/:id', (0, requireRole_1.requireRole)('MANAGER'), async (req, res, next) => {
|
||||
try {
|
||||
const { id } = (0, validate_1.parseParams)(offer_schemas_1.idParamSchema, req);
|
||||
await service.deleteOffer(id, req.companyId);
|
||||
(0, respond_1.ok)(res, { success: true });
|
||||
}
|
||||
catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
router.post('/:id/activate', (0, requireRole_1.requireRole)('MANAGER'), async (req, res, next) => {
|
||||
try {
|
||||
const { id } = (0, validate_1.parseParams)(offer_schemas_1.idParamSchema, req);
|
||||
await service.setOfferActive(id, req.companyId, true);
|
||||
(0, respond_1.ok)(res, { success: true });
|
||||
}
|
||||
catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
router.post('/:id/deactivate', (0, requireRole_1.requireRole)('MANAGER'), async (req, res, next) => {
|
||||
try {
|
||||
const { id } = (0, validate_1.parseParams)(offer_schemas_1.idParamSchema, req);
|
||||
await service.setOfferActive(id, req.companyId, false);
|
||||
(0, respond_1.ok)(res, { success: true });
|
||||
}
|
||||
catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
router.get('/:id/stats', async (req, res, next) => {
|
||||
try {
|
||||
const { id } = (0, validate_1.parseParams)(offer_schemas_1.idParamSchema, req);
|
||||
(0, respond_1.ok)(res, await service.getOfferStats(id, req.companyId));
|
||||
}
|
||||
catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
exports.default = router;
|
||||
//# sourceMappingURL=offer.routes.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"offer.routes.js","sourceRoot":"","sources":["../../../src/modules/offers/offer.routes.ts"],"names":[],"mappings":"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"}
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
import { z } from 'zod';
|
||||
export declare const offerSchema: z.ZodObject<{
|
||||
title: z.ZodString;
|
||||
description: z.ZodOptional<z.ZodString>;
|
||||
termsAndConds: z.ZodOptional<z.ZodString>;
|
||||
type: z.ZodEnum<["PERCENTAGE", "FIXED_AMOUNT", "FREE_DAY", "SPECIAL_RATE"]>;
|
||||
discountValue: z.ZodNumber;
|
||||
specialRate: z.ZodOptional<z.ZodNumber>;
|
||||
appliesToAll: z.ZodDefault<z.ZodBoolean>;
|
||||
categories: z.ZodDefault<z.ZodArray<z.ZodEnum<["ECONOMY", "COMPACT", "MIDSIZE", "FULLSIZE", "SUV", "LUXURY", "VAN", "TRUCK"]>, "many">>;
|
||||
minRentalDays: z.ZodOptional<z.ZodNumber>;
|
||||
maxRentalDays: z.ZodOptional<z.ZodNumber>;
|
||||
promoCode: z.ZodOptional<z.ZodString>;
|
||||
maxRedemptions: z.ZodOptional<z.ZodNumber>;
|
||||
validFrom: z.ZodString;
|
||||
validUntil: z.ZodString;
|
||||
isActive: z.ZodDefault<z.ZodBoolean>;
|
||||
isPublic: z.ZodDefault<z.ZodBoolean>;
|
||||
isFeatured: z.ZodDefault<z.ZodBoolean>;
|
||||
vehicleIds: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
||||
}, "strip", z.ZodTypeAny, {
|
||||
type: "PERCENTAGE" | "FIXED_AMOUNT" | "FREE_DAY" | "SPECIAL_RATE";
|
||||
isActive: boolean;
|
||||
title: string;
|
||||
discountValue: number;
|
||||
appliesToAll: boolean;
|
||||
categories: ("ECONOMY" | "COMPACT" | "MIDSIZE" | "FULLSIZE" | "SUV" | "LUXURY" | "VAN" | "TRUCK")[];
|
||||
validFrom: string;
|
||||
validUntil: string;
|
||||
isPublic: boolean;
|
||||
isFeatured: boolean;
|
||||
vehicleIds: string[];
|
||||
description?: string | undefined;
|
||||
termsAndConds?: string | undefined;
|
||||
specialRate?: number | undefined;
|
||||
minRentalDays?: number | undefined;
|
||||
maxRentalDays?: number | undefined;
|
||||
promoCode?: string | undefined;
|
||||
maxRedemptions?: number | undefined;
|
||||
}, {
|
||||
type: "PERCENTAGE" | "FIXED_AMOUNT" | "FREE_DAY" | "SPECIAL_RATE";
|
||||
title: string;
|
||||
discountValue: number;
|
||||
validFrom: string;
|
||||
validUntil: string;
|
||||
description?: string | undefined;
|
||||
isActive?: boolean | undefined;
|
||||
termsAndConds?: string | undefined;
|
||||
specialRate?: number | undefined;
|
||||
appliesToAll?: boolean | undefined;
|
||||
categories?: ("ECONOMY" | "COMPACT" | "MIDSIZE" | "FULLSIZE" | "SUV" | "LUXURY" | "VAN" | "TRUCK")[] | undefined;
|
||||
minRentalDays?: number | undefined;
|
||||
maxRentalDays?: number | undefined;
|
||||
promoCode?: string | undefined;
|
||||
maxRedemptions?: number | undefined;
|
||||
isPublic?: boolean | undefined;
|
||||
isFeatured?: boolean | undefined;
|
||||
vehicleIds?: string[] | undefined;
|
||||
}>;
|
||||
export declare const listQuerySchema: z.ZodObject<{
|
||||
active: z.ZodOptional<z.ZodString>;
|
||||
public: z.ZodOptional<z.ZodString>;
|
||||
}, "strip", z.ZodTypeAny, {
|
||||
active?: string | undefined;
|
||||
public?: string | undefined;
|
||||
}, {
|
||||
active?: string | undefined;
|
||||
public?: string | undefined;
|
||||
}>;
|
||||
export declare const idParamSchema: z.ZodObject<{
|
||||
id: z.ZodString;
|
||||
}, "strip", z.ZodTypeAny, {
|
||||
id: string;
|
||||
}, {
|
||||
id: string;
|
||||
}>;
|
||||
//# sourceMappingURL=offer.schemas.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"offer.schemas.d.ts","sourceRoot":"","sources":["../../../src/modules/offers/offer.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBtB,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;EAG1B,CAAA;AAEF,eAAO,MAAM,aAAa;;;;;;EAExB,CAAA"}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.idParamSchema = exports.listQuerySchema = exports.offerSchema = void 0;
|
||||
const zod_1 = require("zod");
|
||||
exports.offerSchema = zod_1.z.object({
|
||||
title: zod_1.z.string().min(1),
|
||||
description: zod_1.z.string().optional(),
|
||||
termsAndConds: zod_1.z.string().optional(),
|
||||
type: zod_1.z.enum(['PERCENTAGE', 'FIXED_AMOUNT', 'FREE_DAY', 'SPECIAL_RATE']),
|
||||
discountValue: zod_1.z.number().int().min(0),
|
||||
specialRate: zod_1.z.number().int().optional(),
|
||||
appliesToAll: zod_1.z.boolean().default(true),
|
||||
categories: zod_1.z.array(zod_1.z.enum(['ECONOMY', 'COMPACT', 'MIDSIZE', 'FULLSIZE', 'SUV', 'LUXURY', 'VAN', 'TRUCK'])).default([]),
|
||||
minRentalDays: zod_1.z.number().int().optional(),
|
||||
maxRentalDays: zod_1.z.number().int().optional(),
|
||||
promoCode: zod_1.z.string().optional(),
|
||||
maxRedemptions: zod_1.z.number().int().optional(),
|
||||
validFrom: zod_1.z.string().datetime(),
|
||||
validUntil: zod_1.z.string().datetime(),
|
||||
isActive: zod_1.z.boolean().default(true),
|
||||
isPublic: zod_1.z.boolean().default(true),
|
||||
isFeatured: zod_1.z.boolean().default(false),
|
||||
vehicleIds: zod_1.z.array(zod_1.z.string()).default([]),
|
||||
});
|
||||
exports.listQuerySchema = zod_1.z.object({
|
||||
active: zod_1.z.string().optional(),
|
||||
public: zod_1.z.string().optional(),
|
||||
});
|
||||
exports.idParamSchema = zod_1.z.object({
|
||||
id: zod_1.z.string().min(1),
|
||||
});
|
||||
//# sourceMappingURL=offer.schemas.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"offer.schemas.js","sourceRoot":"","sources":["../../../src/modules/offers/offer.schemas.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAW,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,WAAW,EAAK,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,aAAa,EAAG,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,IAAI,EAAY,OAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IAClF,aAAa,EAAG,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,WAAW,EAAK,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC3C,YAAY,EAAI,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACzC,UAAU,EAAM,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3H,aAAa,EAAG,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC3C,aAAa,EAAG,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC3C,SAAS,EAAO,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC3C,SAAS,EAAO,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAM,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAQ,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACzC,QAAQ,EAAQ,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACzC,UAAU,EAAM,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC1C,UAAU,EAAM,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAChD,CAAC,CAAA;AAEW,QAAA,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAA;AAEW,QAAA,aAAa,GAAG,OAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACtB,CAAC,CAAA"}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
export declare function listOffers(companyId: string, filters: {
|
||||
active?: string;
|
||||
public?: string;
|
||||
}): any;
|
||||
export declare function getOffer(id: string, companyId: string): any;
|
||||
export declare function createOffer(companyId: string, data: any, vehicleIds: string[]): Promise<any>;
|
||||
export declare function updateOffer(id: string, companyId: string, data: any, vehicleIds?: string[]): Promise<any>;
|
||||
export declare function deleteOffer(id: string, companyId: string): any;
|
||||
export declare function setOfferActive(id: string, companyId: string, isActive: boolean): any;
|
||||
export declare function getOfferStats(id: string, companyId: string): Promise<{
|
||||
redemptions: any;
|
||||
reservations: any;
|
||||
}>;
|
||||
//# sourceMappingURL=offer.service.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"offer.service.d.ts","sourceRoot":"","sources":["../../../src/modules/offers/offer.service.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,OAE1F;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAErD;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,gBAE7E;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,gBAIhG;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAExD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,OAE9E;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;GAE1D"}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||
}) : function(o, v) {
|
||||
o["default"] = v;
|
||||
});
|
||||
var __importStar = (this && this.__importStar) || (function () {
|
||||
var ownKeys = function(o) {
|
||||
ownKeys = Object.getOwnPropertyNames || function (o) {
|
||||
var ar = [];
|
||||
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
||||
return ar;
|
||||
};
|
||||
return ownKeys(o);
|
||||
};
|
||||
return function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
||||
__setModuleDefault(result, mod);
|
||||
return result;
|
||||
};
|
||||
})();
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.listOffers = listOffers;
|
||||
exports.getOffer = getOffer;
|
||||
exports.createOffer = createOffer;
|
||||
exports.updateOffer = updateOffer;
|
||||
exports.deleteOffer = deleteOffer;
|
||||
exports.setOfferActive = setOfferActive;
|
||||
exports.getOfferStats = getOfferStats;
|
||||
const errors_1 = require("../../http/errors");
|
||||
const repo = __importStar(require("./offer.repo"));
|
||||
function listOffers(companyId, filters) {
|
||||
return repo.findMany(companyId, filters);
|
||||
}
|
||||
function getOffer(id, companyId) {
|
||||
return repo.findByIdOrThrow(id, companyId);
|
||||
}
|
||||
function createOffer(companyId, data, vehicleIds) {
|
||||
return repo.create(companyId, data, vehicleIds);
|
||||
}
|
||||
async function updateOffer(id, companyId, data, vehicleIds) {
|
||||
const existing = await repo.findFirst(id, companyId);
|
||||
if (!existing)
|
||||
throw new errors_1.NotFoundError('Offer not found');
|
||||
return repo.update(id, data, vehicleIds);
|
||||
}
|
||||
function deleteOffer(id, companyId) {
|
||||
return repo.deleteMany(id, companyId);
|
||||
}
|
||||
function setOfferActive(id, companyId, isActive) {
|
||||
return repo.setActive(id, companyId, isActive);
|
||||
}
|
||||
function getOfferStats(id, companyId) {
|
||||
return repo.getStats(id, companyId);
|
||||
}
|
||||
//# sourceMappingURL=offer.service.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"offer.service.js","sourceRoot":"","sources":["../../../src/modules/offers/offer.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,gCAEC;AAED,4BAEC;AAED,kCAEC;AAED,kCAIC;AAED,kCAEC;AAED,wCAEC;AAED,sCAEC;AA/BD,8CAAiD;AACjD,mDAAoC;AAEpC,SAAgB,UAAU,CAAC,SAAiB,EAAE,OAA6C;IACzF,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC1C,CAAC;AAED,SAAgB,QAAQ,CAAC,EAAU,EAAE,SAAiB;IACpD,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;AAC5C,CAAC;AAED,SAAgB,WAAW,CAAC,SAAiB,EAAE,IAAS,EAAE,UAAoB;IAC5E,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;AACjD,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,EAAU,EAAE,SAAiB,EAAE,IAAS,EAAE,UAAqB;IAC/F,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;IACpD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,sBAAa,CAAC,iBAAiB,CAAC,CAAA;IACzD,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;AAC1C,CAAC;AAED,SAAgB,WAAW,CAAC,EAAU,EAAE,SAAiB;IACvD,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;AACvC,CAAC;AAED,SAAgB,cAAc,CAAC,EAAU,EAAE,SAAiB,EAAE,QAAiB;IAC7E,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;AAChD,CAAC;AAED,SAAgB,aAAa,CAAC,EAAU,EAAE,SAAiB;IACzD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;AACrC,CAAC"}
|
||||
Reference in New Issue
Block a user