Wpis z mikrobloga

Czesc #webdev #backend #nodejs
Jednak jestem leszczem. Nie podołałem 3 części 1 zadania z #rekrutacjepstrg
https://notehub.org/9pk10
Myślałem ze 2 dni, nawet rozpisałem wszystko ładnie na tablicy ale chyba brakuje mi wyobraźni i znajomości metod. Wiem co muszę zrobić żeby to miało ręce i nogi ale niestety nie mam pojęcia jak to napisać.
Myślę, że nijako wpadłem w pułapkę timestamp-a z gotowego package npm-a bo ciężko mi się z nim po prostu pracuje.

Udało mi się zrobić asynchroniczne przeliczanie odległości ale za cholerę nie wiem jak mam pobierając dane od 1 do x dnia mc wyświetlić je w sposób wymagany w zadaniu.
Nie szukam tu gotowego rozwiązania a wskazania co zrobić lepiej i jak to ugryźć. Celowo nie dodaje passów do mongo w env tak żeby każdy miał dostęp (możecie haxować :p)

Tutaj link do mojego repo
https://github.com/zboinek/transportBackend
  • 20
@zboinek: moment.js jest Twoim przyjacielem.
Co do dni, w php mozna zrobic tak w duzym skrócie myślowym:

$d1 = $d2 = new DateTime();
$d2->modify('first day of this month');
select * from reports where date BETWEEN $d1 AND $d2 ORDER BY date
@Izanagi013: No dobra, to ja już mam wyjęte. Dostaje wszystkie wpisy od 1 danego miesiaca do wskazanego dnia.
Trudność sprawia mi, żeby później wyniki wyświetlily sie w takiej formie {info o przejazdach z dnia 1, total i avg}{info z dnia 2..} {...z 3...} itd.
@zboinek:
Jezeli dobrze rozumiem, dostajesz pojedyncze wyjazdy danego dnia, ktorych moze byc kilka.
w angularze bym zrobil cos takiego:

var _report = {};
angular.forEach(db_results, function(result) {
if(angular.isUndefined(report[result.date]) {
report[result.date] = {date: result.date, total_distance: 0, avg_dist: 0, distances: []};
}
report[result.date].total_distance[] = result.distance;
}
var report = [];
angular.forEach(report, function(row) {
row.total_distance = row.distances.reduce(function(a, b) { return a + b; });
row.avg_dist = row.total_distance / row.distances.lenght;
delete row.distances;
report[] = row;
})
nie wiem ja w js, ale w php bym mógł zrezetować klucze tablicy asocjacyjnej do zwykłej uzywajac arrayvalues(), tutaj na szybko tworze nowy obiekt, usuwajac stary z datami jako klucze.

PS. pisanie serwerowych funkcji w node.js to dla mnie rak, nienawidze JS i "wszystko jest obiektem" :D
PS2. nie wiem jak to usuwanie się zachowa, bo ten foreach przekazuje encję przez referencje i nie jestem pewien czy delete
report nie wyczysci
A myslalem ze jestem juz chociaz na poziomie mlodszy junior dev :p


@zboinek: mnie dziwi złożoność zadań na poziom młodszy junior dev, a mam doświadczenie z paroma rozmowami kwalifikacyjnymi, po obu stronach
@maur: Najgorsze ze skonczyly mi sie pomysluy jak ruszyc dalej.
Wiem, ze musze ze wszystkich przejazdów wybrac najpierw te z jednego dnia sporządzić raport i ten raport wepchnac do pustego obiektu/tablicy i potem zrobic tak z kazdym kolejnym dniem. Problem polega na tym ze nie wiem jak mam zmusic maszyne do loopowania po konkretnym dniu z calego wybranego zakresu.
@maur: Pomysllame ze wyciagne i wloze do tablicy wszystkie dni w ktorych byly przejazdy a potem bede do query wkladal dany dzien, rzadal od bazy przejazdow tylko z niego i je raportowal.
Wydaje mi się, że moim głownym problemem jest nieczytelny dla mnie timestamp. Przy typeof wyrzuca mi ze to obiekt, ale nie wiem np. jak wyciaganac z niego dzien nie konwertujac go wczesniej do stringa i uzycia metody split
@zboinek: przeiteruj po znalezionych wynikach i przepisz do tablicy z dniem jako klucz?
Mozna by tez pokusic sie o zrobienie tego obliczenia i grupowania w sqlu, ale pewnie nie o to chodzi
@maur: to teraz pytanko jescze mam, czy da sie pozniej zrobić operacje dla wszystkich itemow array z tym samym kluczem. Przy czym on nie bedzie taki sam bo jest jeszcze godzina, ktora bedzie inna dla kazdego wpisu, ale powiedzmy ze z tym sobie poradze
@zboinek: ja bym to zrobił w takim formacie: array[yyyymmdd][] = array(pojedynczy rekord) i potem sobie iterujesz po dniach i w pojedynczej iteracji dla dnia masz tablicę rekordów tego dnia
@zboinek: albo iteruj po wszystkich wynikach i zwracaj do tablicy dni[dzien] = dane przejazdu, a na koniec iterujesz po dni[] by obliczyć średnią. ew obliczasz średnią na bieżąco w iteracji wyników