Merge branch 'mayankSprint2' of http://git.wdipl.com/Mayank.Mishra/MinglarBackendNestJS into paritosh-main1

This commit is contained in:
paritosh18
2025-12-24 17:11:17 +05:30
4 changed files with 158 additions and 104 deletions

View File

@@ -21,4 +21,9 @@ export const USER_STATUS = {
ACTIVE: "Active",
DE_ACTIVATED: "De-activated",
REJECTED: "Rejected"
}
export const RESTRICTION_NAME = {
ABOVE: "Above",
BELOW: "Below",
}

View File

@@ -62,7 +62,11 @@ export const EquipmentDto = z.object({
/* ================= ELIGIBILITY ================= */
export const EligibilityDto = z.object({
isAgeRestriction: z.boolean().optional().default(false),
ageRestrictionXid: z.number().int().nullable().optional(),
ageRestrictionName: z.string().nullable().optional(),
ageEntered: z.number().int().nullable().optional(),
ageIn: z.string().nullable().optional(),
minAge: z.number().int().nullable().optional(),
maxAge: z.number().int().nullable().optional(),
isWeightRestriction: z.boolean().optional().default(false),
weightRestrictionName: z.string().nullable().optional(),
@@ -159,6 +163,9 @@ export const CreateActivityDto = z.object({
otherDetails: OtherDetailsDto.optional(),
allowedEntryTypes: z.array(z.number().int()).optional().default([]),
navigationModeIsChargeable: z.boolean().optional().default(false),
trainerTotalAmount: z.number().int().optional().default(0),
navigationModeTotalPrice: z.number().int().optional().default(0),
});
export type CreateActivityInput = z.infer<typeof CreateActivityDto>;

View File

@@ -27,12 +27,14 @@ import {
MINGLAR_STATUS_INTERNAL,
} from '../../../common/utils/constants/minglar.constant';
import {
RESTRICTION_NAME,
ROLE,
ROLE_NAME,
USER_STATUS,
} from '../../../common/utils/constants/common.constant';
import { getPresignedUrl } from '../../../common/middlewares/aws/getPreSignedUrl';
import config from '../../../config/config';
import { CreateActivityInput } from '../dto/createActivity.schema';
function sanitizeDocumentName(name?: string) {
if (!name) return null;
@@ -105,7 +107,7 @@ const bucket = config.aws.bucketName;
@Injectable()
export class HostService {
constructor(private prisma: PrismaClient) {}
constructor(private prisma: PrismaClient) { }
async createHost(data: CreateHostDto) {
return this.prisma.user.create({ data });
@@ -760,7 +762,7 @@ export class HostService {
if (
existingHostCompany &&
existingHostCompany.hostStatusInternal ===
HOST_STATUS_INTERNAL.HOST_TO_UPDATE &&
HOST_STATUS_INTERNAL.HOST_TO_UPDATE &&
!isDraft
) {
hostStatusInternal = HOST_STATUS_INTERNAL.HOST_SUBMITTED;
@@ -773,7 +775,7 @@ export class HostService {
else if (
existingHostCompany &&
existingHostCompany.hostStatusInternal ===
HOST_STATUS_INTERNAL.HOST_TO_UPDATE &&
HOST_STATUS_INTERNAL.HOST_TO_UPDATE &&
isDraft
) {
// keep original
@@ -884,19 +886,19 @@ export class HostService {
// Safely handle city connection - only connect if valid ID exists
cities:
parentCompanyData?.cityXid &&
!isNaN(Number(parentCompanyData.cityXid))
!isNaN(Number(parentCompanyData.cityXid))
? { connect: { id: Number(parentCompanyData.cityXid) } }
: undefined,
states:
parentCompanyData?.stateXid &&
!isNaN(Number(parentCompanyData.stateXid))
!isNaN(Number(parentCompanyData.stateXid))
? { connect: { id: Number(parentCompanyData.stateXid) } }
: undefined,
countries:
parentCompanyData?.countryXid &&
!isNaN(Number(parentCompanyData.countryXid))
!isNaN(Number(parentCompanyData.countryXid))
? { connect: { id: Number(parentCompanyData.countryXid) } }
: undefined,
pinCode: parentCompanyData.pinCode || null,
@@ -1046,19 +1048,19 @@ export class HostService {
address2: parentCompanyData.address2 || null,
cities:
parentCompanyData?.cityXid &&
!isNaN(Number(parentCompanyData.cityXid))
!isNaN(Number(parentCompanyData.cityXid))
? { connect: { id: Number(parentCompanyData.cityXid) } }
: undefined,
states:
parentCompanyData?.stateXid &&
!isNaN(Number(parentCompanyData.stateXid))
!isNaN(Number(parentCompanyData.stateXid))
? { connect: { id: Number(parentCompanyData.stateXid) } }
: undefined,
countries:
parentCompanyData?.countryXid &&
!isNaN(Number(parentCompanyData.countryXid))
!isNaN(Number(parentCompanyData.countryXid))
? { connect: { id: Number(parentCompanyData.countryXid) } }
: undefined,
pinCode: parentCompanyData.pinCode || null,
@@ -1104,19 +1106,19 @@ export class HostService {
address2: parentCompanyData.address2 || null,
cities:
parentCompanyData?.cityXid &&
!isNaN(Number(parentCompanyData.cityXid))
!isNaN(Number(parentCompanyData.cityXid))
? { connect: { id: Number(parentCompanyData.cityXid) } }
: undefined,
states:
parentCompanyData?.stateXid &&
!isNaN(Number(parentCompanyData.stateXid))
!isNaN(Number(parentCompanyData.stateXid))
? { connect: { id: Number(parentCompanyData.stateXid) } }
: undefined,
countries:
parentCompanyData?.countryXid &&
!isNaN(Number(parentCompanyData.countryXid))
!isNaN(Number(parentCompanyData.countryXid))
? { connect: { id: Number(parentCompanyData.countryXid) } }
: undefined,
pinCode: parentCompanyData.pinCode || null,
@@ -1894,14 +1896,18 @@ export class HostService {
select: {
id: true,
isAgeRestriction: true,
ageRestriction: {
select: {
id: true,
ageRestrictionName: true,
minAge: true,
maxAge: true,
},
},
// ageRestriction: {
// select: {
// id: true,
// ageRestrictionName: true,
// minAge: true,
// maxAge: true,
// },
// },
ageRestrictionName: true,
ageEntered: true,
minAge: true,
maxAge: true,
isWeightRestriction: true,
weightRestrictionName: true,
weightEntered: true,
@@ -2278,7 +2284,7 @@ export class HostService {
* ActivityPickUpTransport/Details + ActivityNavigationModes + ActivityEquipments +
* ActivityAmenities + ActivityEligibility
*/
async createOrUpdateActivity(userId: number, payload: any, isDraft: boolean) {
async createOrUpdateActivity(userId: number, payload: CreateActivityInput, isDraft: boolean) {
/* =====================================================
* HELPERS
* ===================================================== */
@@ -2388,15 +2394,45 @@ export class HostService {
const rootTaxes =
taxIds.length > 0
? await this.prisma.taxes.findMany({
where: { id: { in: taxIds }, isActive: true },
select: { id: true, taxPer: true },
})
where: { id: { in: taxIds }, isActive: true },
select: { id: true, taxPer: true },
})
: [];
if (taxIds.length !== rootTaxes.length) {
throw new ApiError(400, 'Invalid or inactive tax provided');
}
const eligibility = payload.eligibility;
if (eligibility?.isAgeRestriction) {
if (eligibility.ageRestrictionName == RESTRICTION_NAME.ABOVE) {
eligibility.minAge = toNumber(eligibility.ageEntered);
eligibility.maxAge = 150;
} else if (eligibility.ageRestrictionName == RESTRICTION_NAME.BELOW) {
eligibility.maxAge = toNumber(eligibility.ageEntered);
eligibility.minAge = 0;
}
}
if (eligibility?.isWeightRestriction) {
if (eligibility.weightRestrictionName == RESTRICTION_NAME.ABOVE) {
eligibility.minWeight = toNumber(eligibility.weightEntered);
eligibility.maxWeight = 400;
} else if (eligibility.weightRestrictionName == RESTRICTION_NAME.BELOW) {
eligibility.maxWeight = toNumber(eligibility.weightEntered);
eligibility.minWeight = 0;
}
}
if (eligibility?.isHeightRestriction) {
if (eligibility.heightRestrictionName == RESTRICTION_NAME.ABOVE) {
eligibility.minHeight = toNumber(eligibility.heightEntered);
eligibility.maxHeight = 250;
} else if (eligibility.heightRestrictionName == RESTRICTION_NAME.BELOW) {
eligibility.maxHeight = toNumber(eligibility.heightEntered);
eligibility.minHeight = 0;
}
}
/* =====================================================
* TRANSACTION
* ===================================================== */
@@ -2896,7 +2932,6 @@ export class HostService {
data: {
activityXid,
isAgeRestriction: toBool(payload.eligibility.isAgeRestriction),
ageRestrictionXid: toNumber(payload.eligibility.ageRestrictionXid),
isWeightRestriction: toBool(
payload.eligibility.isWeightRestriction,
),