location eingebaut, back buttons angeglichen, paging & criteria korrigiert
This commit is contained in:
@@ -64,7 +64,7 @@ export interface ListCriteria {
|
||||
searchType: 'exact' | 'radius';
|
||||
// radius: '5' | '20' | '50' | '100' | '200' | '300' | '400' | '500';
|
||||
radius: number;
|
||||
criteriaType: 'business' | 'commercialProperty' | 'broker';
|
||||
criteriaType: 'businessListings' | 'commercialPropertyListings' | 'brokerListings';
|
||||
}
|
||||
export interface BusinessListingCriteria extends ListCriteria {
|
||||
minPrice: number;
|
||||
@@ -82,20 +82,20 @@ export interface BusinessListingCriteria extends ListCriteria {
|
||||
franchiseResale: boolean;
|
||||
title: string;
|
||||
brokerName: string;
|
||||
criteriaType: 'business';
|
||||
criteriaType: 'businessListings';
|
||||
}
|
||||
export interface CommercialPropertyListingCriteria extends ListCriteria {
|
||||
minPrice: number;
|
||||
maxPrice: number;
|
||||
title: string;
|
||||
criteriaType: 'commercialProperty';
|
||||
criteriaType: 'commercialPropertyListings';
|
||||
}
|
||||
export interface UserListingCriteria extends ListCriteria {
|
||||
firstname: string;
|
||||
lastname: string;
|
||||
companyName: string;
|
||||
counties: string[];
|
||||
criteriaType: 'broker';
|
||||
criteriaType: 'brokerListings';
|
||||
}
|
||||
|
||||
export interface KeycloakUser {
|
||||
|
||||
@@ -72,7 +72,8 @@ export class UserService {
|
||||
// Paginierung
|
||||
query.limit(length).offset(start);
|
||||
|
||||
const results = await query;
|
||||
const data = await query;
|
||||
const results = data.map(r => convertDrizzleUserToUser(r));
|
||||
const totalCount = await this.getUserListingsCount(criteria);
|
||||
|
||||
return {
|
||||
@@ -117,7 +118,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 user;
|
||||
return convertDrizzleUserToUser(user);
|
||||
}
|
||||
async saveUser(user: User): Promise<User> {
|
||||
try {
|
||||
@@ -131,7 +132,7 @@ export class UserService {
|
||||
const drizzleUser = convertUserToDrizzleUser(validatedUser);
|
||||
if (user.id) {
|
||||
const [updateUser] = await this.conn.update(schema.users).set(drizzleUser).where(eq(schema.users.id, user.id)).returning();
|
||||
return updateUser as User;
|
||||
return convertDrizzleUserToUser(updateUser) as User;
|
||||
} else {
|
||||
const [newUser] = await this.conn.insert(schema.users).values(drizzleUser).returning();
|
||||
return convertDrizzleUserToUser(newUser) as User;
|
||||
|
||||
@@ -67,69 +67,22 @@ export function convertDrizzleCommercialToCommercial(drizzleCommercialPropertyLi
|
||||
return unflattenObject(o);
|
||||
}
|
||||
export function convertUserToDrizzleUser(user: Partial<User>): DrizzleUser {
|
||||
const { companyLocation, ...restUser } = user;
|
||||
|
||||
// Ensure all required fields are present
|
||||
if (!user.email || !user.firstname || !user.lastname) {
|
||||
throw new Error('Missing required fields: email, firstname, or lastname');
|
||||
}
|
||||
|
||||
return {
|
||||
id: user.id,
|
||||
email: user.email,
|
||||
firstname: user.firstname,
|
||||
lastname: user.lastname,
|
||||
phoneNumber: user.phoneNumber || null,
|
||||
description: user.description || null,
|
||||
companyName: user.companyName || null,
|
||||
companyOverview: user.companyOverview || null,
|
||||
companyWebsite: user.companyWebsite || null,
|
||||
city: companyLocation?.city || null,
|
||||
state: companyLocation?.state || null,
|
||||
offeredServices: user.offeredServices || null,
|
||||
areasServed: user.areasServed || [],
|
||||
hasProfile: user.hasProfile || false,
|
||||
hasCompanyLogo: user.hasCompanyLogo || false,
|
||||
licensedIn: user.licensedIn || [],
|
||||
gender: user.gender || null,
|
||||
customerType: user.customerType || null,
|
||||
customerSubType: user.customerSubType || null,
|
||||
created: user.created || new Date(),
|
||||
updated: user.updated || new Date(),
|
||||
latitude: companyLocation?.latitude || 0,
|
||||
longitude: companyLocation?.longitude || 0,
|
||||
};
|
||||
return flattenObject(user);
|
||||
}
|
||||
|
||||
export function convertDrizzleUserToUser(drizzleUser: Partial<DrizzleUser>): User {
|
||||
const user = {
|
||||
id: drizzleUser.id,
|
||||
firstname: drizzleUser.firstname,
|
||||
lastname: drizzleUser.lastname,
|
||||
email: drizzleUser.email,
|
||||
phoneNumber: drizzleUser.phoneNumber ?? null,
|
||||
description: drizzleUser.description ?? null,
|
||||
companyName: drizzleUser.companyName ?? null,
|
||||
companyOverview: drizzleUser.companyOverview ?? null,
|
||||
companyWebsite: drizzleUser.companyWebsite ?? null,
|
||||
companyLocation: {
|
||||
city: drizzleUser.city,
|
||||
state: drizzleUser.state,
|
||||
latitude: drizzleUser.latitude, // Latitude wird zugewiesen, auch wenn es nicht direkt benötigt wird
|
||||
longitude: drizzleUser.longitude, // Longitude wird zugewiesen, auch wenn es nicht direkt benötigt wird
|
||||
},
|
||||
offeredServices: drizzleUser.offeredServices ?? null,
|
||||
areasServed: drizzleUser.areasServed ?? null,
|
||||
hasProfile: drizzleUser.hasProfile ?? null,
|
||||
hasCompanyLogo: drizzleUser.hasCompanyLogo ?? null,
|
||||
licensedIn: drizzleUser.licensedIn ?? null,
|
||||
gender: drizzleUser.gender ?? null,
|
||||
customerType: drizzleUser.customerType,
|
||||
customerSubType: drizzleUser.customerSubType ?? null,
|
||||
created: drizzleUser.created ?? null,
|
||||
updated: drizzleUser.updated ?? null,
|
||||
const o = {
|
||||
companyLocation_city: drizzleUser.city,
|
||||
companyLocation_state: drizzleUser.state,
|
||||
companyLocation_latitude: drizzleUser.latitude,
|
||||
companyLocation_longitude: drizzleUser.longitude,
|
||||
...drizzleUser,
|
||||
};
|
||||
return user;
|
||||
delete o.city;
|
||||
delete o.state;
|
||||
delete o.latitude;
|
||||
delete o.longitude;
|
||||
return unflattenObject(o);
|
||||
}
|
||||
function flattenObject(obj: any, res: any = {}): any {
|
||||
for (const key in obj) {
|
||||
|
||||
Reference in New Issue
Block a user