diff --git a/bizmatch-server/src/listings/business-listing.service.ts b/bizmatch-server/src/listings/business-listing.service.ts index 1390c3d..70367bc 100644 --- a/bizmatch-server/src/listings/business-listing.service.ts +++ b/bizmatch-server/src/listings/business-listing.service.ts @@ -152,9 +152,33 @@ export class BusinessListingService { case 'creationDateLast': query.orderBy(desc(sql`${businesses_json.data}->>'created'`)); break; - default: - // Keine spezifische Sortierung, Standardverhalten kann hier eingefügt werden + default: { + // NEU (created < 14 Tage) > UPDATED (updated < 14 Tage) > Rest + const recencyRank = sql` + CASE + WHEN ((${businesses_json.data}->>'created')::timestamptz >= (now() - interval '14 days')) THEN 2 + WHEN ((${businesses_json.data}->>'updated')::timestamptz >= (now() - interval '14 days')) THEN 1 + ELSE 0 + END + `; + + // Innerhalb der Gruppe: + // NEW → created DESC + // UPDATED → updated DESC + // Rest → created DESC + const groupTimestamp = sql` + CASE + WHEN ((${businesses_json.data}->>'created')::timestamptz >= (now() - interval '14 days')) + THEN (${businesses_json.data}->>'created')::timestamptz + WHEN ((${businesses_json.data}->>'updated')::timestamptz >= (now() - interval '14 days')) + THEN (${businesses_json.data}->>'updated')::timestamptz + ELSE (${businesses_json.data}->>'created')::timestamptz + END + `; + + query.orderBy(desc(recencyRank), desc(groupTimestamp), desc(sql`(${businesses_json.data}->>'created')::timestamptz`)); break; + } } // Paginierung query.limit(length).offset(start); diff --git a/bizmatch/src/app/pages/listings/business-listings/business-listings.component.html b/bizmatch/src/app/pages/listings/business-listings/business-listings.component.html index 0d69647..b0e7a72 100644 --- a/bizmatch/src/app/pages/listings/business-listings/business-listings.component.html +++ b/bizmatch/src/app/pages/listings/business-listings/business-listings.component.html @@ -26,10 +26,20 @@ {{ selectOptions.getState(listing.location.state) }} -
- {{ getDaysListed(listing) }} days listed -
+ + @if (getListingBadge(listing); as badge) { + + {{ badge }} + + } +Asking price: {{ listing.price | currency : 'USD' : 'symbol' : '1.0-0' }}
diff --git a/bizmatch/src/app/pages/listings/business-listings/business-listings.component.ts b/bizmatch/src/app/pages/listings/business-listings/business-listings.component.ts index 2b76ca3..fa7a3ef 100644 --- a/bizmatch/src/app/pages/listings/business-listings/business-listings.component.ts +++ b/bizmatch/src/app/pages/listings/business-listings/business-listings.component.ts @@ -148,7 +148,16 @@ export class BusinessListingsComponent implements OnInit, OnDestroy { if (!listing.location) return 'Location not specified'; return `${listing.location.name}, ${listing.location.state}`; } + private isWithinDays(date: Date | string | undefined | null, days: number): boolean { + if (!date) return false; + return dayjs().diff(dayjs(date), 'day') < days; + } + getListingBadge(listing: BusinessListing): 'NEW' | 'UPDATED' | null { + if (this.isWithinDays(listing.created, 14)) return 'NEW'; // Priorität + if (this.isWithinDays(listing.updated, 14)) return 'UPDATED'; + return null; + } navigateToDetails(listingId: string): void { this.router.navigate(['/details-business', listingId]); } diff --git a/bizmatch/src/app/pages/subscription/my-listing/my-listing.component.html b/bizmatch/src/app/pages/subscription/my-listing/my-listing.component.html index f896f78..341a373 100644 --- a/bizmatch/src/app/pages/subscription/my-listing/my-listing.component.html +++ b/bizmatch/src/app/pages/subscription/my-listing/my-listing.component.html @@ -4,29 +4,85 @@| Title | Category | Located in | Price | +Internal # | Publication Status | -Actions | +Actions | +|
|---|---|---|---|---|---|---|---|---|
| + + | + ++ + | ++ + | ++ + | ++ + | ++ + | ++ + | ||
| {{ listing.title }} | {{ listing.listingsCategory === 'commercialProperty' ? 'Commercial Property' : 'Business' }} | -{{ listing.location.name ? listing.location.name : listing.location.county }}, {{ listing.location.state }} | +{{ listing.location?.name ? listing.location.name : listing.location?.county }}, {{ listing.location?.state }} | ${{ listing.price.toLocaleString() }} | ++ {{ listing.internalListingNumber ?? '—' }} + | {{ listing.draft ? 'Draft' : 'Published' }} | -+ | @if(listing.listingsCategory==='business'){ |