Zakończenie aukcji po upływie czasu

0

Hej, mam prosty system aukcyjny gdzie aukcja ma swój czas trwania od do. I teraz, chciałbym aby aukcja się zakończyła oraz aby zwycięzca otrzymał wiadomość o wygranej. Jak to ogarnąć? Znaczy wiem jak ogarnąć samą aktualizację etc ale chodzi mi o "złapanie" momentu zakończenia aukcji. Zrobić w js odliczanie do danej daty i kiedy różnica = 0 to wysłać endpoint do backend?

3

W JS to mozesz zrobic tylko dla zabawy. Nie mozesz opierac systemu o jakies JS bo co jak ktos ma wylaczona js w przegladarce ? Nie musisz wysylac w tej samej sekundzie. Mozesz zrobic crona co lapie zamkniete aukcje co minute i sprawdza czy co 5 minut i wysyla wtedy maile po tych zlapanych aukcjach i gitara.

2

Jak napisał @masterc - nie opierałbym się na froncie, bo tutaj zawsze jest ryzyko, że coś nie zadziała albo że ktoś sobie coś przesunie (zmieni wartość czasu do końca, zmieni jakiś skrypt JS itp.). To jedynie może być funkcja pomocnicza - pokazuje orientacyjnie uczestnikowi, ile zostało do końca. Ale i tak musisz po stronie serwera zablokować składanie ofert po upłynięciu terminu.

A co do samego powiadamiania - skorzystałbym z czegoś w kształcie PushAPI, żeby serwer wysłał do uczestników powiadomienie, że aukcja się już skończyła (nawet, jeśli z jakiegoś powodu front uważałby inaczej).

0

Okej, a dodatkowo chyba można sprawdzać czy aukcja już się nie zakończyła jeśli ktoś chciałby złożyć ofertę, prawda?

A jeszcze jedno pytanie tak btw. W tym systemie samą licytację zrealizowałem przy użyciu socket i vue + redis i lara. Jak można zabezpieczyć takie combo jeśli ktoś faktycznie ma wyłączone js?

2

jeśli ktoś faktycznie ma wyłączone js

Ja bym nie robił żadnych akrobacji, tylko wyświetlił informację, że do poprawnego działania strony wymagana jest obsługa JS.
Zresztą nie oszukujmy się - z 90% (dane z czapy, ale chyba bardzo bliskie rzeczywistości) stron bardziej rozbudowanych niż Wikipedia, nie odpali się bez JS. Takie czasy, weź to na klatę ;)

aukcja już się nie zakończyła jeśli ktoś chciałby złożyć ofertę, prawda?

Oczywiście.
Ja bym to zrobił tak:

  • po włączeniu strony z aukcją odpalam licznik do jej końca
  • podczas składania oferty wysyłam ją na serwer, a serwer odsyła potwierdzenie - albo że oferta została złożona, albo że aukcja jest anulowana/zakończona/cokolwiek innego
  • jak aukcja się skończy, to serwer wysyła do frontu powiadomienie, że już jest po zabawie. To na wypadek, jakby z jakiegoś powodu front nie załapał, ze aukcja się skończyła.
1

Każde zapytanie składania oferty wysyłasz do kontrolera i on sprawdza ze aukcja zakonczona i odsyla do widoku powiadomienie i stosowne informacje.

Jedynne co cie zaskoczy to licznik zrobiony w JS ja juz robilemtakie aukcje nie raz. Zrobisz licznik odliczajacy w dol. potem przejdz na inna zakladke zrob tam cos i wroc na aukcje i zobaczysz ze licznik idzie dalej w dol ale zamaist zmniejszyc sie o 20 sekund to zmniejszyl sie o 10 i jak odswiezysz to zobaczysz ze odlicza faktycznie od innej godziny ze zostalo mniej czasu niz myslal kupujacy :) to tylko tak wybiegam w przyszlosc

1

@masterc: co do licznika - pełna zgoda. W sumie to dla mnie było oczywiste, żeby nie robić jakiegoś setInterval i na tej podstawie odliczać czas, a jedynie podczas wywołań tego timera sprawdzać ile czasu minęło (chociażby przy użyciu https://www.tutorialspoint.com/javascript/date_gettime.htm) od czasu inicjacji licznika i na tej podstawie pokazać aktualne wskazanie zegara do końca aukcji. Oczywiście - jest "ryzyko" że w ten sposób (w opisanej powyżej sytuacji przez @masterc) nagle licznik przeskoczy z 1:46 na 1:29 (nadrobi zagubione tyknięcia), ale jest to lepsze, niż licznik, który odlicza jeszcze chwilę po zakończeniu aukcji.

Niemniej - słuszna uwaga, warto to podkreślić, bo może nie dla każdego jest to oczywiste.

1 użytkowników online, w tym zalogowanych: 0, gości: 1