made searchConnectionPeople to invite in the itinerary API

This commit is contained in:
2026-03-18 13:30:41 +05:30
parent 92992797ab
commit 95b061b400
3 changed files with 165 additions and 1 deletions

View File

@@ -288,6 +288,21 @@ getActivityFromConnectionsInterest:
path: /connections/get-activity-from-connections-interest
method: get
searchConnectionPeople:
handler: src/modules/user/handlers/connections/searchConnectionPeople.handler
memorySize: 384
package:
patterns:
- 'src/modules/user/handlers/connections/**'
- ${file(./serverless/patterns/base.yml):pattern1}
- ${file(./serverless/patterns/base.yml):pattern2}
- ${file(./serverless/patterns/base.yml):pattern3}
- ${file(./serverless/patterns/base.yml):pattern4}
events:
- httpApi:
path: /connections/search-connection-people
method: get
viewMoreActivitiesByInterest:
handler: src/modules/user/handlers/activities/viewMoreActivities.handler
memorySize: 384

View File

@@ -0,0 +1,44 @@
import { APIGatewayProxyEvent, APIGatewayProxyResult, Context } from 'aws-lambda';
import { safeHandler } from '../../../../common/utils/handlers/safeHandler';
import { prismaClient } from '../../../../common/database/prisma.lambda.service';
import ApiError from '../../../../common/utils/helper/ApiError';
import { UserService } from '../../services/user.service';
import { verifyUserToken } from '../../../../common/middlewares/jwt/authForUser';
const userService = new UserService(prismaClient);
export const handler = safeHandler(async (
event: APIGatewayProxyEvent,
context?: Context,
): Promise<APIGatewayProxyResult> => {
const token = event.headers['x-auth-token'] || event.headers['X-Auth-Token'];
if (!token) {
throw new ApiError(
400,
'This is a protected route. Please provide a valid token.',
);
}
const userInfo = await verifyUserToken(token);
const userId = Number(userInfo.id);
if (!userId || isNaN(userId)) {
throw new ApiError(400, 'Invalid user ID');
}
const searchQuery = event.queryStringParameters?.searchQuery ?? '';
const result = await userService.searchConnectionPeople(userId, searchQuery);
return {
statusCode: 200,
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
},
body: JSON.stringify({
success: true,
message: 'Connection people retrieved successfully',
data: result,
}),
};
});

View File

@@ -2863,6 +2863,111 @@ export class UserService {
});
}
async searchConnectionPeople(userXid: number, searchQuery?: string) {
const userConnectionDetails = await this.prisma.connectDetails.findMany({
where: {
userXid,
isActive: true,
deletedAt: null,
},
select: {
schoolCompanyXid: true,
},
});
const schoolCompanyXids = [
...new Set(userConnectionDetails.map((item) => item.schoolCompanyXid)),
];
if (!schoolCompanyXids.length) {
return {
count: 0,
people: [],
};
}
const trimmedSearchQuery = searchQuery?.trim() ?? '';
const connectionPeople = await this.prisma.connectDetails.findMany({
where: {
isActive: true,
deletedAt: null,
schoolCompanyXid: { in: schoolCompanyXids },
userXid: { not: userXid },
user: {
isActive: true,
deletedAt: null,
...(trimmedSearchQuery
? {
OR: [
{
firstName: {
contains: trimmedSearchQuery,
mode: 'insensitive',
},
},
{
lastName: {
contains: trimmedSearchQuery,
mode: 'insensitive',
},
},
],
}
: {}),
},
},
distinct: ['userXid'],
orderBy: {
createdAt: 'desc',
},
take: 10,
select: {
userXid: true,
schoolCompany: {
select: {
id: true,
schoolCompanyName: true,
isSchool: true,
},
},
user: {
select: {
id: true,
firstName: true,
lastName: true,
profileImage: true,
},
},
},
});
const people = await Promise.all(
connectionPeople.map(async (item) => {
const firstName = item.user.firstName?.trim() ?? '';
const lastName = item.user.lastName?.trim() ?? '';
const fullName = `${firstName} ${lastName}`.trim();
return {
userXid: item.user.id,
fullName,
firstName: item.user.firstName,
lastName: item.user.lastName,
profileImage: item.user.profileImage,
profileImagePresignedUrl: await attachPresignedUrl(
item.user.profileImage,
),
schoolCompany: item.schoolCompany,
};
}),
);
return {
count: people.length,
people,
};
}
async searchSchoolsAndCompanies(searchQuery: string, isSchool: boolean) {
if (!searchQuery) {
throw new ApiError(
@@ -4322,4 +4427,4 @@ export class UserService {
oneDay,
};
}
}
}