This commit is contained in:
2025-03-26 19:34:53 +01:00
parent 923040f487
commit 715fbdf2f5
10 changed files with 34 additions and 20 deletions

View File

@@ -73,14 +73,6 @@ export const businesses = pgTable(
created: timestamp('created'),
updated: timestamp('updated'),
location: jsonb('location'),
// city: varchar('city', { length: 255 }),
// state: char('state', { length: 2 }),
// zipCode: integer('zipCode'),
// county: varchar('county', { length: 255 }),
// street: varchar('street', { length: 255 }),
// housenumber: varchar('housenumber', { length: 10 }),
// latitude: doublePrecision('latitude'),
// longitude: doublePrecision('longitude'),
},
table => ({
locationBusinessCityStateIdx: index('idx_business_location_city_state').on(

View File

@@ -1,4 +1,4 @@
import { BadRequestException, Inject, Injectable } from '@nestjs/common';
import { BadRequestException, Inject, Injectable, NotFoundException } from '@nestjs/common';
import { and, arrayContains, asc, count, desc, eq, gte, ilike, inArray, lte, ne, or, SQL, sql } from 'drizzle-orm';
import { NodePgDatabase } from 'drizzle-orm/node-postgres';
import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
@@ -246,10 +246,18 @@ export class BusinessListingService {
}
}
// #### UPDATE Business ########################################
async updateBusinessListing(id: string, data: BusinessListing): Promise<BusinessListing> {
async updateBusinessListing(id: string, data: BusinessListing, user: JwtUser): Promise<BusinessListing> {
try {
const [existingListing] = await this.conn.select().from(businesses).where(eq(businesses.id, id));
if (!existingListing) {
throw new NotFoundException(`Business listing with id ${id} not found`);
}
data.updated = new Date();
data.created = data.created ? (typeof data.created === 'string' ? new Date(data.created) : data.created) : new Date();
if (existingListing.email === user?.email) {
data.favoritesForUser = existingListing.favoritesForUser;
}
BusinessListingSchema.parse(data);
const convertedBusinessListing = data;
const [updateListing] = await this.conn.update(businesses).set(convertedBusinessListing).where(eq(businesses.id, id)).returning();

View File

@@ -50,8 +50,8 @@ export class BusinessListingsController {
@UseGuards(OptionalAuthGuard)
@Put()
async update(@Body() listing: any) {
return await this.listingsService.updateBusinessListing(listing.id, listing);
async update(@Request() req, @Body() listing: any) {
return await this.listingsService.updateBusinessListing(listing.id, listing, req.user as JwtUser);
}
@UseGuards(OptionalAuthGuard)

View File

@@ -54,8 +54,8 @@ export class CommercialPropertyListingsController {
@UseGuards(OptionalAuthGuard)
@Put()
async update(@Body() listing: any) {
return await this.listingsService.updateCommercialPropertyListing(listing.id, listing);
async update(@Request() req, @Body() listing: any) {
return await this.listingsService.updateCommercialPropertyListing(listing.id, listing, req.user as JwtUser);
}
@UseGuards(OptionalAuthGuard)

View File

@@ -1,4 +1,4 @@
import { BadRequestException, Inject, Injectable } from '@nestjs/common';
import { BadRequestException, Inject, Injectable, NotFoundException } from '@nestjs/common';
import { and, arrayContains, asc, count, desc, eq, gte, ilike, inArray, lte, ne, or, SQL, sql } from 'drizzle-orm';
import { NodePgDatabase } from 'drizzle-orm/node-postgres';
import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
@@ -181,10 +181,18 @@ export class CommercialPropertyService {
}
}
// #### UPDATE CommercialProps ########################################
async updateCommercialPropertyListing(id: string, data: CommercialPropertyListing): Promise<CommercialPropertyListing> {
async updateCommercialPropertyListing(id: string, data: CommercialPropertyListing, user: JwtUser): Promise<CommercialPropertyListing> {
try {
const [existingListing] = await this.conn.select().from(commercials).where(eq(commercials.id, id));
if (!existingListing) {
throw new NotFoundException(`Business listing with id ${id} not found`);
}
data.updated = new Date();
data.created = data.created ? (typeof data.created === 'string' ? new Date(data.created) : data.created) : new Date();
if (existingListing.email === user?.email || !user) {
data.favoritesForUser = existingListing.favoritesForUser;
}
CommercialPropertyListingSchema.parse(data);
const imageOrder = await this.fileService.getPropertyImages(data.imagePath, String(data.serialId));
const difference = imageOrder.filter(x => !data.imageOrder.includes(x)).concat(data.imageOrder.filter(x => !imageOrder.includes(x)));
@@ -216,13 +224,13 @@ export class CommercialPropertyService {
const index = listing.imageOrder.findIndex(im => im === name);
if (index > -1) {
listing.imageOrder.splice(index, 1);
await this.updateCommercialPropertyListing(listing.id, listing);
await this.updateCommercialPropertyListing(listing.id, listing, null);
}
}
async addImage(imagePath: string, serial: string, imagename: string) {
const listing = (await this.findByImagePath(imagePath, serial)) as unknown as CommercialPropertyListing;
listing.imageOrder.push(imagename);
await this.updateCommercialPropertyListing(listing.id, listing);
await this.updateCommercialPropertyListing(listing.id, listing, null);
}
// #### DELETE ########################################
async deleteListing(id: string): Promise<void> {