Class BookingService
- Namespace
- UsluzionicaServer.Services
- Assembly
- UsluzionicaServer.dll
Booking modul — upravlja celim životnim ciklusom booking zahteva: Pending → Confirmed → Completed (token nagrada) Pending → Rejected Pending → Cancelled (klijent otkazuje)
3-dnevno pravilo: provider može označiti uslugu kao izvršenu tek 3 dana nakon potvrde (AcceptedAt + ExecuteAfterDays < UtcNow). Ovo sprečava prevremeno farmovanje tokena.
public sealed class BookingService
- Inheritance
-
BookingService
- Inherited Members
Constructors
- BookingService(AppDbContext, IConfiguration, NotificationService, BlockService, ConversationService, ILogger<BookingService>)
Booking modul — upravlja celim životnim ciklusom booking zahteva: Pending → Confirmed → Completed (token nagrada) Pending → Rejected Pending → Cancelled (klijent otkazuje)
3-dnevno pravilo: provider može označiti uslugu kao izvršenu tek 3 dana nakon potvrde (AcceptedAt + ExecuteAfterDays < UtcNow). Ovo sprečava prevremeno farmovanje tokena.
Methods
- CancelAsync(int, string)
Klijent otkazuje zahtev — dostupno samo dok je Status = Pending. Provajder dobija notifikaciju.
- ConfirmAsync(int, string)
Provider potvrđuje zahtev. Postavlja AcceptedAt = UtcNow — startuje 3-dnevni timer.
- CreateAsync(string, CreateBookingDto)
Klijent šalje booking zahtev za listing. Uslovi: email verifikovan, listing aktivan, ne sopstveni listing, nema već aktivnog zahteva za isti listing.
- ExecuteAsync(int, string)
Provider označava uslugu kao izvršenu.
Uslovi:
- Booking mora biti Confirmed
- Mora proći ExecuteAfterDays dana od AcceptedAt (default: 3)
Efekti:
- Kreira ServiceExecution zapis
- Booking.Status → Completed
- Klijent dobija ServiceRewardTokens tokena
- Kreira TokenTransaction i Notification za klijenta
- GetIncomingAsync(string)
Svi zahtevi koji su poslati ovom provideru, od najnovijeg.
- GetOutgoingAsync(string)
Svi zahtevi koje je ovaj klijent poslao, od najnovijeg.
- GetPendingReviewsAsync(string)
Izvršene usluge klijenta za koje još nije ostavio recenziju.
Postojanje recenzije se proverava po PARU (autor, oglas), a ne po booking-u. Recenzija sme da se ostavi i bez veze sa booking-om (
BookingRequestIdje opciono uCreateReviewDto), pa bi provera po booking-u prijavila kao neocenjenu i uslugu koju je klijent upravo ocenio sa stranice oglasa. Isti kriterijum koristi i lista „Moje rezervacije" kad odlučuje da li da ponudi dugme za ocenu.
- RejectAsync(int, string)
Provider odbija zahtev. Dozvoljeno dok je Pending ili Confirmed (provider se može predomisliti i nakon prihvatanja, sve dok nije izvršen).