Table of Contents

Class ListingService

Namespace
UsluzionicaServer.Services
Assembly
UsluzionicaServer.dll
public sealed class ListingService
Inheritance
ListingService
Inherited Members

Constructors

ListingService(AppDbContext, UserManager<ApplicationUser>, IWebHostEnvironment, CategorySearchIndex, ImageModerationGate, ILogger<ListingService>)

Methods

CreateAsync(string, CreateListingDto)

Kreira listing. Korisnik mora imati ProviderProfile. Validira PriceMode logiku.

DeleteAsync(int, string)

"Brisanje" = postavljanje Status = Archived. Fizičko brisanje se ne radi — čuvamo istoriju.

DeleteImageAsync(int, int, string)
GetByIdAsync(int, string?)

Vraća detalje listinga. ViewCount se uvećava samo ako gledalac NIJE vlasnik (anoniman ili drugi korisnik = pravi pregled).

GetByProviderAsync(string)
SearchAsync(ListingQueryParams)

Pretražuje aktivne oglase, tolerantno na dijakritiku, pismo i tipfelere.

Radi u slojevima, od najpreciznijeg ka najširem. Prelazi se na sledeći sloj samo ako prethodni vrati premalo rezultata — tako uobičajen upit nikad ne plati cenu fuzzy pretrage:

1a. Svi tokeni u naslovu / lokaciji / kategoriji → čist SQL, ~90% upita 1b. Isto + opis → skuplja, varchar(max) 2. Bar jedan token (OR), skorovano u memoriji 3. Fuzzy — pigeonhole prefilter u SQL-u + OSA rastojanje

Sortiranje unutar 1a/1b ostaje kao pre: boosted → BoostScore → datum. U slojevima 2 i 3 skor pretrage je primaran, pa boost kao razrešivač.

UpdateAsync(int, string, UpdateListingDto)
UpdateStatusAsync(int, string, string)
UploadImageAsync(int, string, IFormFile)

Dodaje sliku na listing. Max 5 slika po listingu. Fajl se čuva u wwwroot/uploads/listings/{listingId}/.