This commit is contained in:
2024-09-10 21:30:03 +02:00
parent 17213ba4b0
commit 83307684ee
25 changed files with 799 additions and 477 deletions

View File

@@ -9,7 +9,7 @@ import { FileService } from '../file/file.service';
import { GeoService } from '../geo/geo.service';
import { User, UserSchema } from '../models/db.model';
import { createDefaultUser, emailToDirName, JwtUser, UserListingCriteria } from '../models/main.model';
import { convertDrizzleUserToUser, convertUserToDrizzleUser, getDistanceQuery, splitName } from '../utils';
import { DrizzleUser, getDistanceQuery, splitName } from '../utils';
type CustomerSubType = (typeof customerSubTypeEnum.enumValues)[number];
@Injectable()
@@ -25,7 +25,7 @@ export class UserService {
const whereConditions: SQL[] = [];
whereConditions.push(eq(schema.users.customerType, 'professional'));
if (criteria.city && criteria.searchType === 'exact') {
whereConditions.push(ilike(schema.users.city, `%${criteria.city.name}%`));
whereConditions.push(sql`${schema.users.location}->>'name' ilike ${criteria.city.name}`);
}
if (criteria.city && criteria.radius && criteria.searchType === 'radius' && criteria.radius) {
const cityGeo = this.geoService.getCityWithCoords(criteria.state, criteria.city.name);
@@ -80,7 +80,7 @@ export class UserService {
query.limit(length).offset(start);
const data = await query;
const results = data.map(r => convertDrizzleUserToUser(r));
const results = data;
const totalCount = await this.getUserListingsCount(criteria);
return {
@@ -108,12 +108,12 @@ export class UserService {
if (users.length === 0) {
const user: User = { id: undefined, customerType: 'buyer', ...createDefaultUser(email, jwtuser.firstname, jwtuser.lastname, null) };
const u = await this.saveUser(user, false);
return convertDrizzleUserToUser(u);
return u;
} else {
const user = users[0];
user.hasCompanyLogo = this.fileService.hasCompanyLogo(emailToDirName(user.email));
user.hasProfile = this.fileService.hasProfile(emailToDirName(user.email));
return convertDrizzleUserToUser(user);
return user;
}
}
async getUserById(id: string) {
@@ -125,7 +125,7 @@ export class UserService {
const user = users[0];
user.hasCompanyLogo = this.fileService.hasCompanyLogo(emailToDirName(user.email));
user.hasProfile = this.fileService.hasProfile(emailToDirName(user.email));
return convertDrizzleUserToUser(user);
return user;
}
async saveUser(user: User, processValidation = true): Promise<User> {
try {
@@ -139,13 +139,14 @@ export class UserService {
if (processValidation) {
validatedUser = UserSchema.parse(user);
}
const drizzleUser = convertUserToDrizzleUser(validatedUser);
//const drizzleUser = convertUserToDrizzleUser(validatedUser);
const drizzleUser = validatedUser as DrizzleUser;
if (user.id) {
const [updateUser] = await this.conn.update(schema.users).set(drizzleUser).where(eq(schema.users.id, user.id)).returning();
return convertDrizzleUserToUser(updateUser) as User;
return updateUser as User;
} else {
const [newUser] = await this.conn.insert(schema.users).values(drizzleUser).returning();
return convertDrizzleUserToUser(newUser) as User;
return newUser as User;
}
} catch (error) {
throw error;