Table of Contents

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:

  1. Booking mora biti Confirmed
  2. 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 (BookingRequestId je opciono u CreateReviewDto), 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).