archetecture security fix
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
export declare function findMany(companyId: string, where: Record<string, unknown>, skip: number, take: number): Promise<any>;
|
||||
export declare function findById(id: string, companyId: string): Promise<any>;
|
||||
export declare function create(data: {
|
||||
companyId: string;
|
||||
reservationId?: string;
|
||||
reviewId?: string;
|
||||
customerId?: string;
|
||||
severity: string;
|
||||
category: string;
|
||||
subject: string;
|
||||
description?: string;
|
||||
assignedTo?: string;
|
||||
}): Promise<any>;
|
||||
export declare function updateById(id: string, data: Record<string, unknown>): Promise<any>;
|
||||
export declare function deleteById(id: string): Promise<any>;
|
||||
//# sourceMappingURL=complaint.repo.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"complaint.repo.d.ts","sourceRoot":"","sources":["../../../src/modules/complaints/complaint.repo.ts"],"names":[],"mappings":"AA8BA,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,gBAab;AAED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAK3D;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,gBAKA;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBAMzE;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,gBAE1C"}
|
||||
@@ -0,0 +1,71 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.findMany = findMany;
|
||||
exports.findById = findById;
|
||||
exports.create = create;
|
||||
exports.updateById = updateById;
|
||||
exports.deleteById = deleteById;
|
||||
const prisma_1 = require("../../lib/prisma");
|
||||
const COMPLAINT_INCLUDE = {
|
||||
reservation: {
|
||||
select: {
|
||||
id: true,
|
||||
startDate: true,
|
||||
endDate: true,
|
||||
status: true,
|
||||
vehicle: { select: { make: true, model: true, year: true } },
|
||||
},
|
||||
},
|
||||
customer: {
|
||||
select: {
|
||||
id: true,
|
||||
firstName: true,
|
||||
lastName: true,
|
||||
email: true,
|
||||
phone: true,
|
||||
},
|
||||
},
|
||||
review: {
|
||||
select: {
|
||||
id: true,
|
||||
overallRating: true,
|
||||
comment: true,
|
||||
},
|
||||
},
|
||||
};
|
||||
async function findMany(companyId, where, skip, take) {
|
||||
const baseWhere = { companyId, ...where };
|
||||
return Promise.all([
|
||||
prisma_1.prisma.complaint.findMany({
|
||||
where: baseWhere,
|
||||
include: COMPLAINT_INCLUDE,
|
||||
skip,
|
||||
take,
|
||||
orderBy: { createdAt: 'desc' },
|
||||
}),
|
||||
prisma_1.prisma.complaint.count({ where: baseWhere }),
|
||||
]);
|
||||
}
|
||||
async function findById(id, companyId) {
|
||||
return prisma_1.prisma.complaint.findFirst({
|
||||
where: { id, companyId },
|
||||
include: COMPLAINT_INCLUDE,
|
||||
});
|
||||
}
|
||||
async function create(data) {
|
||||
return prisma_1.prisma.complaint.create({
|
||||
data: data,
|
||||
include: COMPLAINT_INCLUDE,
|
||||
});
|
||||
}
|
||||
async function updateById(id, data) {
|
||||
return prisma_1.prisma.complaint.update({
|
||||
where: { id },
|
||||
data,
|
||||
include: COMPLAINT_INCLUDE,
|
||||
});
|
||||
}
|
||||
async function deleteById(id) {
|
||||
return prisma_1.prisma.complaint.delete({ where: { id } });
|
||||
}
|
||||
//# sourceMappingURL=complaint.repo.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"complaint.repo.js","sourceRoot":"","sources":["../../../src/modules/complaints/complaint.repo.ts"],"names":[],"mappings":";;AA8BA,4BAiBC;AAED,4BAKC;AAED,wBAeC;AAED,gCAMC;AAED,gCAEC;AAnFD,6CAAyC;AAEzC,MAAM,iBAAiB,GAAG;IACxB,WAAW,EAAE;QACX,MAAM,EAAE;YACN,EAAE,EAAE,IAAI;YACR,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;SAC7D;KACF;IACD,QAAQ,EAAE;QACR,MAAM,EAAE;YACN,EAAE,EAAE,IAAI;YACR,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI;SACZ;KACF;IACD,MAAM,EAAE;QACN,MAAM,EAAE;YACN,EAAE,EAAE,IAAI;YACR,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE,IAAI;SACd;KACF;CACF,CAAA;AAEM,KAAK,UAAU,QAAQ,CAC5B,SAAiB,EACjB,KAA8B,EAC9B,IAAY,EACZ,IAAY;IAEZ,MAAM,SAAS,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAA;IACzC,OAAO,OAAO,CAAC,GAAG,CAAC;QACjB,eAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;YACxB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,iBAAiB;YAC1B,IAAI;YACJ,IAAI;YACJ,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;SAC/B,CAAC;QACF,eAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAC7C,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,EAAU,EAAE,SAAiB;IAC1D,OAAO,eAAM,CAAC,SAAS,CAAC,SAAS,CAAC;QAChC,KAAK,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;QACxB,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,IAU5B;IACC,OAAO,eAAM,CAAC,SAAS,CAAC,MAAM,CAAC;QAC7B,IAAI,EAAE,IAAW;QACjB,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,EAAU,EAAE,IAA6B;IACxE,OAAO,eAAM,CAAC,SAAS,CAAC,MAAM,CAAC;QAC7B,KAAK,EAAE,EAAE,EAAE,EAAE;QACb,IAAI;QACJ,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,EAAU;IACzC,OAAO,eAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AACnD,CAAC"}
|
||||
@@ -0,0 +1,3 @@
|
||||
declare const router: import("express-serve-static-core").Router;
|
||||
export default router;
|
||||
//# sourceMappingURL=complaint.routes.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"complaint.routes.d.ts","sourceRoot":"","sources":["../../../src/modules/complaints/complaint.routes.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,MAAM,4CAAW,CAAA;AA6CvB,eAAe,MAAM,CAAA"}
|
||||
@@ -0,0 +1,98 @@
|
||||
"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 validate_1 = require("../../http/validate");
|
||||
const respond_1 = require("../../http/respond");
|
||||
const service = __importStar(require("./complaint.service"));
|
||||
const complaint_schemas_1 = require("./complaint.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)(complaint_schemas_1.listQuerySchema, req);
|
||||
const result = await service.listComplaints(req.companyId, query);
|
||||
(0, respond_1.ok)(res, result);
|
||||
}
|
||||
catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
router.post('/', async (req, res, next) => {
|
||||
try {
|
||||
const body = (0, validate_1.parseBody)(complaint_schemas_1.createSchema, req);
|
||||
const complaint = await service.createComplaint(req.companyId, body);
|
||||
(0, respond_1.created)(res, complaint);
|
||||
}
|
||||
catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
router.get('/:id', async (req, res, next) => {
|
||||
try {
|
||||
const { id } = (0, validate_1.parseParams)(complaint_schemas_1.idParamSchema, req);
|
||||
const complaint = await service.getComplaint(id, req.companyId);
|
||||
(0, respond_1.ok)(res, complaint);
|
||||
}
|
||||
catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
router.patch('/:id', async (req, res, next) => {
|
||||
try {
|
||||
const { id } = (0, validate_1.parseParams)(complaint_schemas_1.idParamSchema, req);
|
||||
const body = (0, validate_1.parseBody)(complaint_schemas_1.updateSchema, req);
|
||||
const updated = await service.updateComplaint(id, req.companyId, body);
|
||||
(0, respond_1.ok)(res, updated);
|
||||
}
|
||||
catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
router.delete('/:id', async (req, res, next) => {
|
||||
try {
|
||||
const { id } = (0, validate_1.parseParams)(complaint_schemas_1.idParamSchema, req);
|
||||
const result = await service.deleteComplaint(id, req.companyId);
|
||||
(0, respond_1.ok)(res, result);
|
||||
}
|
||||
catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
exports.default = router;
|
||||
//# sourceMappingURL=complaint.routes.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"complaint.routes.js","sourceRoot":"","sources":["../../../src/modules/complaints/complaint.routes.ts"],"names":[],"mappings":"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"}
|
||||
@@ -0,0 +1,84 @@
|
||||
import { z } from 'zod';
|
||||
export declare const createSchema: z.ZodObject<{
|
||||
reservationId: z.ZodOptional<z.ZodString>;
|
||||
reviewId: z.ZodOptional<z.ZodString>;
|
||||
customerId: z.ZodOptional<z.ZodString>;
|
||||
severity: z.ZodDefault<z.ZodEnum<["LEVEL_1", "LEVEL_2", "LEVEL_3"]>>;
|
||||
category: z.ZodEnum<["BOOKING", "PICKUP", "VEHICLE_CLEANLINESS", "VEHICLE_CONDITION", "STAFF_SERVICE", "PRICING", "DEPOSIT", "INSURANCE", "DAMAGE_CLAIM", "RETURN_PROCESS", "COMMUNICATION", "ROADSIDE_ASSISTANCE", "BILLING", "OTHER"]>;
|
||||
subject: z.ZodString;
|
||||
description: z.ZodOptional<z.ZodString>;
|
||||
assignedTo: z.ZodOptional<z.ZodString>;
|
||||
}, "strip", z.ZodTypeAny, {
|
||||
category: "OTHER" | "DEPOSIT" | "BOOKING" | "PICKUP" | "VEHICLE_CLEANLINESS" | "VEHICLE_CONDITION" | "STAFF_SERVICE" | "PRICING" | "INSURANCE" | "DAMAGE_CLAIM" | "RETURN_PROCESS" | "COMMUNICATION" | "ROADSIDE_ASSISTANCE" | "BILLING";
|
||||
severity: "LEVEL_1" | "LEVEL_2" | "LEVEL_3";
|
||||
subject: string;
|
||||
description?: string | undefined;
|
||||
customerId?: string | undefined;
|
||||
reservationId?: string | undefined;
|
||||
reviewId?: string | undefined;
|
||||
assignedTo?: string | undefined;
|
||||
}, {
|
||||
category: "OTHER" | "DEPOSIT" | "BOOKING" | "PICKUP" | "VEHICLE_CLEANLINESS" | "VEHICLE_CONDITION" | "STAFF_SERVICE" | "PRICING" | "INSURANCE" | "DAMAGE_CLAIM" | "RETURN_PROCESS" | "COMMUNICATION" | "ROADSIDE_ASSISTANCE" | "BILLING";
|
||||
subject: string;
|
||||
description?: string | undefined;
|
||||
severity?: "LEVEL_1" | "LEVEL_2" | "LEVEL_3" | undefined;
|
||||
customerId?: string | undefined;
|
||||
reservationId?: string | undefined;
|
||||
reviewId?: string | undefined;
|
||||
assignedTo?: string | undefined;
|
||||
}>;
|
||||
export declare const updateSchema: z.ZodObject<{
|
||||
status: z.ZodOptional<z.ZodEnum<["OPEN", "INVESTIGATING", "RESOLVED", "CLOSED"]>>;
|
||||
severity: z.ZodOptional<z.ZodEnum<["LEVEL_1", "LEVEL_2", "LEVEL_3"]>>;
|
||||
category: z.ZodOptional<z.ZodEnum<["BOOKING", "PICKUP", "VEHICLE_CLEANLINESS", "VEHICLE_CONDITION", "STAFF_SERVICE", "PRICING", "DEPOSIT", "INSURANCE", "DAMAGE_CLAIM", "RETURN_PROCESS", "COMMUNICATION", "ROADSIDE_ASSISTANCE", "BILLING", "OTHER"]>>;
|
||||
subject: z.ZodOptional<z.ZodString>;
|
||||
description: z.ZodOptional<z.ZodString>;
|
||||
notes: z.ZodOptional<z.ZodString>;
|
||||
resolution: z.ZodOptional<z.ZodString>;
|
||||
assignedTo: z.ZodOptional<z.ZodString>;
|
||||
}, "strip", z.ZodTypeAny, {
|
||||
category?: "OTHER" | "DEPOSIT" | "BOOKING" | "PICKUP" | "VEHICLE_CLEANLINESS" | "VEHICLE_CONDITION" | "STAFF_SERVICE" | "PRICING" | "INSURANCE" | "DAMAGE_CLAIM" | "RETURN_PROCESS" | "COMMUNICATION" | "ROADSIDE_ASSISTANCE" | "BILLING" | undefined;
|
||||
status?: "OPEN" | "INVESTIGATING" | "RESOLVED" | "CLOSED" | undefined;
|
||||
notes?: string | undefined;
|
||||
description?: string | undefined;
|
||||
severity?: "LEVEL_1" | "LEVEL_2" | "LEVEL_3" | undefined;
|
||||
subject?: string | undefined;
|
||||
assignedTo?: string | undefined;
|
||||
resolution?: string | undefined;
|
||||
}, {
|
||||
category?: "OTHER" | "DEPOSIT" | "BOOKING" | "PICKUP" | "VEHICLE_CLEANLINESS" | "VEHICLE_CONDITION" | "STAFF_SERVICE" | "PRICING" | "INSURANCE" | "DAMAGE_CLAIM" | "RETURN_PROCESS" | "COMMUNICATION" | "ROADSIDE_ASSISTANCE" | "BILLING" | undefined;
|
||||
status?: "OPEN" | "INVESTIGATING" | "RESOLVED" | "CLOSED" | undefined;
|
||||
notes?: string | undefined;
|
||||
description?: string | undefined;
|
||||
severity?: "LEVEL_1" | "LEVEL_2" | "LEVEL_3" | undefined;
|
||||
subject?: string | undefined;
|
||||
assignedTo?: string | undefined;
|
||||
resolution?: string | undefined;
|
||||
}>;
|
||||
export declare const listQuerySchema: z.ZodObject<{
|
||||
status: z.ZodOptional<z.ZodString>;
|
||||
severity: z.ZodOptional<z.ZodString>;
|
||||
category: z.ZodOptional<z.ZodString>;
|
||||
page: z.ZodDefault<z.ZodNumber>;
|
||||
pageSize: z.ZodDefault<z.ZodNumber>;
|
||||
}, "strip", z.ZodTypeAny, {
|
||||
page: number;
|
||||
pageSize: number;
|
||||
category?: string | undefined;
|
||||
status?: string | undefined;
|
||||
severity?: string | undefined;
|
||||
}, {
|
||||
category?: string | undefined;
|
||||
status?: string | undefined;
|
||||
page?: number | undefined;
|
||||
pageSize?: number | undefined;
|
||||
severity?: string | undefined;
|
||||
}>;
|
||||
export declare const idParamSchema: z.ZodObject<{
|
||||
id: z.ZodString;
|
||||
}, "strip", z.ZodTypeAny, {
|
||||
id: string;
|
||||
}, {
|
||||
id: string;
|
||||
}>;
|
||||
//# sourceMappingURL=complaint.schemas.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"complaint.schemas.d.ts","sourceRoot":"","sources":["../../../src/modules/complaints/complaint.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAWvB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;EASvB,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;EASvB,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAM1B,CAAA;AAEF,eAAO,MAAM,aAAa;;;;;;EAExB,CAAA"}
|
||||
@@ -0,0 +1,42 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.idParamSchema = exports.listQuerySchema = exports.updateSchema = exports.createSchema = void 0;
|
||||
const zod_1 = require("zod");
|
||||
const CATEGORIES = [
|
||||
'BOOKING', 'PICKUP', 'VEHICLE_CLEANLINESS', 'VEHICLE_CONDITION', 'STAFF_SERVICE',
|
||||
'PRICING', 'DEPOSIT', 'INSURANCE', 'DAMAGE_CLAIM', 'RETURN_PROCESS',
|
||||
'COMMUNICATION', 'ROADSIDE_ASSISTANCE', 'BILLING', 'OTHER',
|
||||
];
|
||||
const SEVERITIES = ['LEVEL_1', 'LEVEL_2', 'LEVEL_3'];
|
||||
const STATUSES = ['OPEN', 'INVESTIGATING', 'RESOLVED', 'CLOSED'];
|
||||
exports.createSchema = zod_1.z.object({
|
||||
reservationId: zod_1.z.string().optional(),
|
||||
reviewId: zod_1.z.string().optional(),
|
||||
customerId: zod_1.z.string().optional(),
|
||||
severity: zod_1.z.enum(SEVERITIES).default('LEVEL_1'),
|
||||
category: zod_1.z.enum(CATEGORIES),
|
||||
subject: zod_1.z.string().min(1),
|
||||
description: zod_1.z.string().optional(),
|
||||
assignedTo: zod_1.z.string().optional(),
|
||||
});
|
||||
exports.updateSchema = zod_1.z.object({
|
||||
status: zod_1.z.enum(STATUSES).optional(),
|
||||
severity: zod_1.z.enum(SEVERITIES).optional(),
|
||||
category: zod_1.z.enum(CATEGORIES).optional(),
|
||||
subject: zod_1.z.string().min(1).optional(),
|
||||
description: zod_1.z.string().optional(),
|
||||
notes: zod_1.z.string().optional(),
|
||||
resolution: zod_1.z.string().optional(),
|
||||
assignedTo: zod_1.z.string().optional(),
|
||||
});
|
||||
exports.listQuerySchema = zod_1.z.object({
|
||||
status: zod_1.z.string().optional(),
|
||||
severity: zod_1.z.string().optional(),
|
||||
category: zod_1.z.string().optional(),
|
||||
page: zod_1.z.coerce.number().int().min(1).default(1),
|
||||
pageSize: zod_1.z.coerce.number().int().min(1).max(100).default(20),
|
||||
});
|
||||
exports.idParamSchema = zod_1.z.object({
|
||||
id: zod_1.z.string(),
|
||||
});
|
||||
//# sourceMappingURL=complaint.schemas.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"complaint.schemas.js","sourceRoot":"","sources":["../../../src/modules/complaints/complaint.schemas.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEvB,MAAM,UAAU,GAAG;IACjB,SAAS,EAAE,QAAQ,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,eAAe;IAChF,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB;IACnE,eAAe,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO;CAClD,CAAA;AAEV,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAU,CAAA;AAC7D,MAAM,QAAQ,GAAK,CAAC,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,CAAU,CAAA;AAE9D,QAAA,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,QAAQ,EAAO,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAK,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,QAAQ,EAAO,OAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACpD,QAAQ,EAAO,OAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IACjC,OAAO,EAAQ,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,WAAW,EAAI,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAK,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAA;AAEW,QAAA,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,MAAM,EAAO,OAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;IACxC,QAAQ,EAAK,OAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;IAC1C,QAAQ,EAAK,OAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;IAC1C,OAAO,EAAM,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAQ,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,UAAU,EAAG,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,UAAU,EAAG,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAA;AAEW,QAAA,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAI,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,IAAI,EAAM,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC9D,CAAC,CAAA;AAEW,QAAA,aAAa,GAAG,OAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE;CACf,CAAC,CAAA"}
|
||||
@@ -0,0 +1,40 @@
|
||||
export declare function listComplaints(companyId: string, query: {
|
||||
status?: string;
|
||||
severity?: string;
|
||||
category?: string;
|
||||
page: number;
|
||||
pageSize: number;
|
||||
}): Promise<{
|
||||
data: any;
|
||||
meta: {
|
||||
total: any;
|
||||
page: number;
|
||||
pageSize: number;
|
||||
totalPages: number;
|
||||
};
|
||||
}>;
|
||||
export declare function getComplaint(id: string, companyId: string): Promise<any>;
|
||||
export declare function createComplaint(companyId: string, data: {
|
||||
reservationId?: string;
|
||||
reviewId?: string;
|
||||
customerId?: string;
|
||||
severity: string;
|
||||
category: string;
|
||||
subject: string;
|
||||
description?: string;
|
||||
assignedTo?: string;
|
||||
}): Promise<any>;
|
||||
export declare function updateComplaint(id: string, companyId: string, data: {
|
||||
status?: string;
|
||||
severity?: string;
|
||||
category?: string;
|
||||
subject?: string;
|
||||
description?: string;
|
||||
notes?: string;
|
||||
resolution?: string;
|
||||
assignedTo?: string;
|
||||
}): Promise<any>;
|
||||
export declare function deleteComplaint(id: string, companyId: string): Promise<{
|
||||
success: boolean;
|
||||
}>;
|
||||
//# sourceMappingURL=complaint.service.d.ts.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"complaint.service.d.ts","sourceRoot":"","sources":["../../../src/modules/complaints/complaint.service.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;;;;;;;;GAajG;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAI/D;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IACJ,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,gBAGF;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IACJ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,gBAaF;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;GAKlE"}
|
||||
@@ -0,0 +1,85 @@
|
||||
"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.listComplaints = listComplaints;
|
||||
exports.getComplaint = getComplaint;
|
||||
exports.createComplaint = createComplaint;
|
||||
exports.updateComplaint = updateComplaint;
|
||||
exports.deleteComplaint = deleteComplaint;
|
||||
const errors_1 = require("../../http/errors");
|
||||
const repo = __importStar(require("./complaint.repo"));
|
||||
async function listComplaints(companyId, query) {
|
||||
const { status, severity, category, page, pageSize } = query;
|
||||
const where = {};
|
||||
if (status)
|
||||
where.status = status;
|
||||
if (severity)
|
||||
where.severity = severity;
|
||||
if (category)
|
||||
where.category = category;
|
||||
const [complaints, total] = await repo.findMany(companyId, where, (page - 1) * pageSize, pageSize);
|
||||
return {
|
||||
data: complaints,
|
||||
meta: { total, page, pageSize, totalPages: Math.ceil(total / pageSize) },
|
||||
};
|
||||
}
|
||||
async function getComplaint(id, companyId) {
|
||||
const complaint = await repo.findById(id, companyId);
|
||||
if (!complaint)
|
||||
throw new errors_1.NotFoundError('Complaint not found');
|
||||
return complaint;
|
||||
}
|
||||
async function createComplaint(companyId, data) {
|
||||
return repo.create({ companyId, ...data });
|
||||
}
|
||||
async function updateComplaint(id, companyId, data) {
|
||||
const existing = await repo.findById(id, companyId);
|
||||
if (!existing)
|
||||
throw new errors_1.NotFoundError('Complaint not found');
|
||||
const updateData = { ...data };
|
||||
// When status changes to RESOLVED, set resolvedAt
|
||||
if (data.status === 'RESOLVED' && existing.status !== 'RESOLVED') {
|
||||
updateData.resolvedAt = new Date();
|
||||
}
|
||||
return repo.updateById(id, updateData);
|
||||
}
|
||||
async function deleteComplaint(id, companyId) {
|
||||
const existing = await repo.findById(id, companyId);
|
||||
if (!existing)
|
||||
throw new errors_1.NotFoundError('Complaint not found');
|
||||
await repo.deleteById(id);
|
||||
return { success: true };
|
||||
}
|
||||
//# sourceMappingURL=complaint.service.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"complaint.service.js","sourceRoot":"","sources":["../../../src/modules/complaints/complaint.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,wCAeC;AAED,oCAIC;AAED,0CAcC;AAED,0CAyBC;AAED,0CAKC;AA1ED,8CAAiD;AACjD,uDAAwC;AAEjC,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,KAAgG;IAEhG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAC5D,MAAM,KAAK,GAA4B,EAAE,CAAA;IACzC,IAAI,MAAM;QAAI,KAAK,CAAC,MAAM,GAAK,MAAM,CAAA;IACrC,IAAI,QAAQ;QAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACvC,IAAI,QAAQ;QAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAEvC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAClG,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,EAAE;KACzE,CAAA;AACH,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,EAAU,EAAE,SAAiB;IAC9D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;IACpD,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,sBAAa,CAAC,qBAAqB,CAAC,CAAA;IAC9D,OAAO,SAAS,CAAA;AAClB,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,SAAiB,EACjB,IASC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;AAC5C,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,EAAU,EACV,SAAiB,EACjB,IASC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;IACnD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,sBAAa,CAAC,qBAAqB,CAAC,CAAA;IAE7D,MAAM,UAAU,GAA4B,EAAE,GAAG,IAAI,EAAE,CAAA;IAEvD,kDAAkD;IAClD,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjE,UAAU,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAA;IACpC,CAAC;IAED,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;AACxC,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,EAAU,EAAE,SAAiB;IACjE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;IACnD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,sBAAa,CAAC,qBAAqB,CAAC,CAAA;IAC7D,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AAC1B,CAAC"}
|
||||
Reference in New Issue
Block a user