• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pierwszy projekt do oceny - system zarządzania pracownikami i rejestracji klientów

Fiszki IT
Fiszki IT
+2 głosów
170 wizyt
pytanie zadane 13 lipca w Nasze projekty przez krissto7 Bywalec (2,870 p.)
edycja 14 lipca przez ScriptyChris

Link do aplikacji: https://applicationrejestration.herokuapp.com

Link do kodu: https://github.com/Krzysztof77777/ApplicationForRejestration

Dane do logowania:

login: admin

password: admin123

lub poprzez inny wariant dla pracownika

login: pracownik

password: pracownik123,

Generalnie aplikacja robiłem z pomysłem dla salonu fryzjerskiego , aczkolwiek wydaję mi się , że aktualnie jest bardziej uniwersalna i mogły by z niej korzystać firmy , które rejestrują wizyty klientów i ewentualnie potrzebują takiego systemu zarządzania pracownikami.

Generalnie aplikacja umożliwia dodawanie, usuwania pracowników , planowanie godzin roboczych , w tym przerw, dni wolnych , rejestrowanie wizyt klientów , dodatkowo jest baza danych , w której również można dodawać , usuwać swoich klientów, jest też możliwość dodania do czarnej listy , przy dodawaniu wizyty do takiego klienta wyświetla się informacja , że dany klient jest dodany do czarnej listy. Jest jeszcze dodatkowa modyfikacja pokazująca 3 najbliższe terminy dla każdego pracownika. Generalnie system jest dynamiczny , miesiące są generowane automatycznie , dodatkowo można wejść po jakimś dłuższym czasie nieobecności , braku korzystania z aplikacji to przy uruchomieniu servera miesiące się wygenerują automatycznie.

Więcej opisu chyba nie potrzeba , jest to moja pierwsza 'większa' aplikacja do portfolio oraz w ramach nauki, cieszę się , że w końcu udało mi się ją wykończyć , liczę na jakiś feedback , ocenę kodu i aplikacji , tyle ile kto może to będę wdzięczny , może ktoś znajdzie jakiegoś buga , możecie korzystać ze zmiany hasła , ponieważ na czas testowania zakomentowałem odpowiednie linijki , które finalnie i tak tego hasła nie zmienią , a można sprawdzić w jaki sposób również to działa.

Dodatkowo nie zdziwcie się jak wam coś na stronie nagle przeskoczy , załaduje od nowa , to tak w ramach zabezpieczenia w razie jak będzie korzystać więcej osób ze strony , to aby każdy miał aktualne informacje/dane z bazy danych.

Z góry dzięki za odzew! Muszę jeszcze podziękować dla @ScriptyChris , który również poświecił mi czas , na kilka moich pytań!

komentarz 13 lipca przez SzkolnyAdmin Maniak (57,220 p.)

Od razu na początku mało czytelny jest komunikat o błędzie:

komentarz 13 lipca przez krissto7 Bywalec (2,870 p.)
@Maniak, Dzięki , zaaktualizowałem.
komentarz 13 lipca przez Wiciorny Mędrzec (165,960 p.)
nie wyświetla się wszystko poprawnie, rozjeżdża się tekst na panelu, gowoerkers zwraca cały obiekt, gdzie generalnie w preview możemy przeglądnąć pozostałe dane które nie są dostępne w panelu... po przejściu na kartę zarządzaj dostałem na network taki "event storming" :D że zwątpiłem dalej.  Dublują się akcje js.
Dużo poprawek i pracy powodzenia
Dodatkowo request ładuje znacznie więcej danych niż opdowiedź potrzebuje, przemyśl hermetyzacje.
komentarz 14 lipca przez krissto7 Bywalec (2,870 p.)
Odnośnie rozjeżdżającego tekstu to już raczej nic nie powinno się rozjeżdżać , dodam , że apkę robiłem od 280px. Szczerze to nie patrzyłem na to z tej strony , chciałem po prostu dojść do celu , jest to moja pierwsza apka , a tym bardziej pierwszy większy backend z bazą danych , generalnie to bardziej idę w stronę frontu. Generalnie rozumiem o co Ci chodzi i wielkie dzięki za opinie!
komentarz 14 lipca przez Wiciorny Mędrzec (165,960 p.)
wchodze w menu admina i teksty wyświetlają się  na przycisku, albo są porozwalane dalej ;] w normalnej roździelczośći
komentarz 14 lipca przez ScriptyChris Mędrzec (164,120 p.)

Link do aplikacji: https://applicationrejestration.herokuapp.com

@krissto7, jeśli chcesz otrzymać code review aplikacji, to udostępnij proszę jej kod (np. daj linka do repozytorium na GItHub).

komentarz 14 lipca przez Bartek2210 Obywatel (1,310 p.)

@krissto7, Przy dodawaniu pracowników nie masz walidacji długości wprowadzonego tekstu i można dodać wpis, który będzie bardzo nieestetycznie wyglądał jak na obrazku niżej i nie sprawdzasz, czy nie wystąpił błąd przy dodawaniu wpisu do bazy danych.

Błąd może wystąpić przykładowo jak ktoś wrzuci zbyt długi tekst w te pola. Wrzuciłem 200 000 znaków i najprawdopodobniej wystąpił błąd po stronie bazy bo wpis się nie dodał mimo pozytywnego komunikatu.

 

komentarz 14 lipca przez krissto7 Bywalec (2,870 p.)
@Bartek2210, Dzięki , zmiany poprawione.

@ScriptyChris, Odnośnie githuba to wstawiam linka:

https://github.com/Krzysztof77777/ApplicationForRejestration

Dodam z góry , że odnośnie codereview sam nie jestem w zadowolony i zdaję sobie sprawę , że można zrobić to o niebo lepiej , chwilę się zastanawiałem czy jest sens wstawiać to do codereview , ale wolę finalnie wolę przyjąć krytykę na klatę i się czegoś dowiedzieć...jednak z projektu na projekt widzę progres i teraz przynajmniej dzięki temu wiem na jakie rzeczy zwracać uwagę i przy następnych projektach na pewno to zastosuję.
komentarz 14 lipca przez ScriptyChris Mędrzec (164,120 p.)

@ScriptyChris, Odnośnie githuba to wstawiam linka:

(dodałem ten link do Twojego pytania, żeby był lepiej widoczny dla odwiedzających ten temat) 

1 odpowiedź

+2 głosów
odpowiedź 14 lipca przez ScriptyChris Mędrzec (164,120 p.)

Kodu jest bardzo dużo, więc wypiszę dość mocno wybrane sugestie co do poprawek w kodzie:

- co do wszystkich modułów: można pokusić się o zamianę CommonJS na ESM

- co do plików JS: warto rozważyć podniesienie kodu do TypeScriptu

- /main/app.js

  • w tym pliku wyróżnić można z grubsza takie części:
    - import potrzebnych modułów
    - połączenie z bazą
    - postawienie serwera HTTP
    - podpięcie pod niego WebSocketów

    Te fragmenty od pewnego momentu (a wg mnie u Ciebie taki nastał) warto przenieść do osobnych modułów, jak np. httpServer.js, webSocketServer.js, databaseConfig.js i zaimportować je do głównego modułu.
  • https://github.com/Krzysztof77777/ApplicationForRejestration/blob/main/app.js#L46 w tego typu zapisach podpinania callbacków do routów czytelniej jest zamienić funkcje anonimowe na funkcje nazwane. Wtedy same deklaracje middleware'ów będą krótsze i będzie można szybko przelecieć wzrokiem w poszukiwaniu konkretnego routingu, a (jeśli IDE to wspiera) do samej funkcji odnieść się klikając na jej nazwę
  • https://github.com/Krzysztof77777/ApplicationForRejestration/blob/main/app.js#L48 tutaj pokusiłbym się o stworzenie zmiennej o nazwie np. target, albo path (zgodnie z nazwą w API Express'a) i w if'ach przypisywał jej konkretną wartość. Natomiast pod if'ami dałbym jeden return, do którego przekazałbym tę zmienną
  • ogólnie, nazwy ścieżek do res.redirect powtarzają się (a w zasadzie w każdym przypadku, gdy jest jakiś powtarzalny schemat), więc warto wrzucić je do stałej i ją reużywać

/main/public/html/admin.html

- ogólnie co do HTML: kilka templatek zawiera schematycznie podobną treść, więc warto z tego zrobić parametryzowany szablon, żeby się nie powtarzać w kodzie

https://github.com/Krzysztof77777/ApplicationForRejestration/blob/main/public/html/login.html#L21 czemu tutaj jest użyte <a>, zamiast np. <p>? Albo po prostu rozdzielić labelkę od inputa i nie będzie problemu z potrzebą dodatkowego owijacza dla "Username"

https://github.com/Krzysztof77777/ApplicationForRejestration/blob/main/public/html/manage.html#L81 pusty atrybut id?

https://github.com/Krzysztof77777/ApplicationForRejestration/blob/main/public/html/manage.html#L82 warto taką długą listę stworzyć z template engine-u żeby nie musieć generować powtarzalnego schematu czasu (co 15 minut) pisać z palca

https://github.com/Krzysztof77777/ApplicationForRejestration/blob/main/public/javascript/changepasswordworker.js#L58 taki catch nie za bardzo ma sens. Przynajmniej loguj błąd i - jeśli sytuacja tego wymaga - próbuj robić jakąś próbę ponowienia wykonanych kroków lub poinformuj usera, że coś się stało i co ma w tej sytuacji zrobić

https://github.com/Krzysztof77777/ApplicationForRejestration/blob/main/public/javascript/clientlist.js#L283 ta cała ifologia jest dość mało czytelna (bo długa). Warto powtarzalne porównania - lub wręcz każde z nich - wrzucić do osobnych zmiennych, które opiszą co reprezentuje dane porównanie, żeby nie musieć dodatkowo myśleć do czego służą porównywane wartości. Fajnie, że starasz się porównywać wg zmiennych/pól a nie "magic values" (chociaż kilka "losowych" liczb tam się przewija), ale nadal te ify mogły by być bardziej czytelne :)

https://github.com/Krzysztof77777/ApplicationForRejestration/blob/main/public/javascript/clientlist.js#L327 czytelniej by było nazwać tę zmienną wg przeznaczenia elementu, na który wskazuje zmienna. Chyba, że jest to całkiem generyczny element

https://github.com/Krzysztof77777/ApplicationForRejestration/blob/main/public/javascript/day.js#L214 i linia 217 oraz podobne: nie używaj takich "magicznych liczb". Zrób namespace/stałą i wrzuć tam wartości maksymalnych długości i odnoś się do nich w ifach po nazwach

Podobne pytania

0 głosów
0 odpowiedzi 32 wizyt
pytanie zadane 27 sierpnia 2020 w JavaScript przez Massacra Nowicjusz (120 p.)
0 głosów
1 odpowiedź 117 wizyt
pytanie zadane 27 lutego 2016 w PHP przez hypothermi Obywatel (1,180 p.)
0 głosów
0 odpowiedzi 92 wizyt
pytanie zadane 25 kwietnia w Nasze projekty przez anonymousProgrammer Początkujący (350 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

84,721 zapytań

133,527 odpowiedzi

295,923 komentarzy

55,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...