made searchConnectionPeople to invite in the itinerary API
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
}),
|
||||
};
|
||||
});
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user