online-store's Issues
Koodikatselmointi
Projekti ladattu 11.10. klo 11.10
– Jos yrittää lisätä tuotteen jolla on pitkä nimi, tulee internal server error ilman mitään selitystä, samoin jos yrittää rekisteröityä liian pitkällä nimellä tai salasanalla, tulee ongelmia
– Login ja register nappien listasta ei ole poistettu mustia palloja, vaan pallot menevät osittain tekstin päälle
– Asennusohjeita ei ole Herokua varten lainkaan
– Tietokantakaavion kuuluisi olla docs-kansiossa, eikä projektin juurikansiossa, jotta projekti olisi siistimpi
– Tietokantakaavio ei vastaa koodissa määriteltyjä modeleita
– Kaikki formit sisältävät CSRF-haavoittuvuuden
+ Käyttöliittymä on siisti, mutta se on aika tylsä Bootstrap-kirjaston default-tyylin mukaiselta näyttävä
+ Kaikki listatut ominaisuudet toimivat, muutamia vakaviakin yllä mainittuja bugeja lukuun ottamatta, hieman epäselväksi kuitenkin jää, onko tarkoitus että admin ei näe käyttäjien tekemiä tilauksia, vai pitäisikö adminin nähdä ne jostakin
* My orders-sivulla näytettävät kellonajat voisi formatoida mielekkäämpään formaattiin, ei välttämättä ole tarpeellista näyttää tilauksen ajankohtaa kuuden sekunnin desimaalin tarkkuudella
* Olisi luontevampaa, että käyttäjälle joka ei ole kirjautunut sisään ei lainkaan tarjottaisi nappia tilata tuotteita
* Koodin formatointi voisi olla yhtenäisempää, esimerkiksi keskellä koodia on joissain paikoissa useampia rivinvaihtoja peräkkäin
* Osalla funktioista voisi olla parempi nimi, esim. lol-suffiksit funktioissa eivät ole suotavia
* Projekti sisältää tyhjiä tiedostoja esim. templateissa joista lienee paras hankkiutua eroon
* Ehkä mielipidekysymys, mutta pitkille funktionimille kuten find_the_sum_of_spent_money_by_user voi miettiä lyhyempiä, mutta silti toimintaa kuvaavia vaihtoehtoja, kuten spent_money_sum
Koodikatselmointi
Zip-paketti ladattu ma. 30.9. klo 11.54.
Käyttäjän rekisteröityminen onnistuu luontevasti. Rekisteröinnin yhteydessä käyttäjä kirjataan suoraan sisään, mikä parantaa käytettävyyttä. Kirjautuminen toimii luontevasti. Kirjautunut käyttäjä näytetään selkeästi. Väärillä tiedoilla kirjautumisen yrittämisestä tulee asianmukainen virheilmoitus. Uloskirjautuminen toimii. Sekä käyttäjän rekisteröitymisessä että kirjautumisessa validoidaan käyttäjän syöttämät tiedot (sekä käyttäjätunnus että salasana on oltava).
Salasana tallennetaan selväkielisenä, mikä on tietoturvariski. Salasana kannattaisikin tallentaa salattuna käyttämällä bcrypt-kirjastoa. Tietokannassa on määritelty käyttäjätunnukselle (ja salasanalle) maksimipituus, mutta käyttäjän rekisteröityessä antaman käyttäjätunnuksen (ja salasanan) maksimipituutta ei ole rajoitettu. Käyttäjätunnuksesta kannattaisikin validoida, ettei se ole pidempi, kuin sille varattu tila tietokannassa.
Tuotteiden listaus löytyy helposti ja toimii. Tuotteiden selaaminen on varsin järkevästi mahdollista myös kirjautumatta. Jos tuotteen nimi on hyvin pitkä oikenpuoleisimmat sarakkeet jäävät helposti pois näkyvistä. Teksti kannattaisi laittaa rivittymään esimerkiksi määrittelemällä taulukon sarakkeiden leveydet bootstrapin avulla. Tuotteen hinta on ilmoitettu senteissä. Tietokannassa sentteinä tallentaminen on erinomainen ratkaisu, mutta käytettävyyden kannalta sen tulisi näkyä käyttäjälle euroina. Jos tuotteita olisi vaikkapa satoja, hakutoiminnallisuus olisi tarpeen. Tuotteen id:n näyttäminen käyttäjälle ei todennäköisesti olisi tarpeellista. Tuotteiden listaaminen aakkosjärjestyksessä lisäämisjärjestyksen sijaan helpottaisi tuotteen löytämistä, jos niitä olisi paljon.
Ostoskoriin lisättäviä tuotteita ei voi vielä valita vaan tuotelistauksen yhteydessä on nappi tuotteiden 1 ja 2 lisäämiseksi ostoskoriin. Tämä varmastikin väliaikaiseksi testikoodiksi tarkoitettu ratkaisu kannattaisi korvata kunkin tuotteen kohdalla olevalla "lisää ostoskoriin" -napilla.
Tuotteiden lisääminen ostoskoriin luo heti tilauksen. Sovelluksen kuvauksen mukaan sen tulisi kuitenkin viedä lomakkeeseen, jossa ilmoitetaan yhteystiedot ja maksukortin numero. Tietokannassa ei ole lainkaan ostoskoria. Kenties kannattaisi lisätä tietokannan Order-tauluun confirmed-attribuutti, jolloin vahvistamaton tilaus olisi vasta ostoskori.
Käyttäjän tulisi voida erikseen vahvistaa tilaus. Käyttäjältä ei vielä missään vaiheessa kysytä laskutus- ja toimitustietoja. Tietokannassa (sen enempää koodissa kuin tietokantakaaviossa) ei myöskään ole varauduttu niiden tallentamiseen. Tietokantaan kannattaisi lisätä tilauksen (tai käyttäjän) yhteyteen attribuutit laskutusosoitteelle ja maksutiedo(i)lle. (Todellisuudessa ihan pelkän maksukortin numeron perusteella ei kortilta voisi laskuttaa. Kenties sähköpostiosoite laskun lähettämiseksi olisi sopiva maksutieto.)
Yritys lisätä tuotteita ostoskoriin kirjautumattomana vie asianmukaisesti kirjautumiseen. Kirjautumisen jälkeen päädytään kuitenkin etusivulle. Käytettävyyden kannalta olisi parempi, jos päädyttäisiin takasin sille sivulle, jolta kirjautumiseen päädyttiin.
Tuotteiden poistaminen ostoskorista ei ole vielä mahdollista.
Omat tilaukset löytyvät helposti ja niiden listaus toimii. Pääsy katsomaan omia tilauksia vaatii kirjautumisen, kuten kuuluukin. Tilauksen päiväys kannattaisi muotoilla, kellonajasta riittäisivät tunnit ja minuutit, nyt aika näkyy mikrosekunnin tarkkuudella. Tässäkin näkymässä hinnat kannattaisi näyttää euroina senttien sijasta.
Tuotteen lisääminen onnistuu sujuvasti. Tuotteen lisäämisen syötteet on validoitu (nimi on oltava, hinnan on oltava kokonaisluku 5–10000). Tuotteen lisääminen vaatii kirjautumisen. Kuka tahansa kirjautunut käyttäjä voi vielä lisätä verkkokauppaan tuotteita.
Tuotteen nimen ja hinnan muuttaminen onnistuu sujuvasti. Syötteet on validoitu samoin kuin lisäämisessä. Tuotteen muokkaus vaatii kirjautumisen, mutta kirjautumisen jälkeen ohjataan tässäkin pääsivulle. Kuka tahansa kirjautunut käyttäjä pääsee muokkaamaan kaupan tuotteiden nimiä ja hintoja. Tuotteen nimen ja hinnan muokkaamisen funktio on nimetty "products_set_done". Jokin kuvaavampi nimi kuten "products_change" olisi parempi.
Tuotteen nimi on rajattu tietokannassa enintään 144 merkkiä pitkäksi, mutta käyttäjän antaman nimen enimmäispituutta ei validoida. Yritys muokata tuotteelle erittäin pitkä nimi johti 404 Not found -virheeseen osoitteella https://lacolegiala-online-store.herokuapp.com/products// . Kannattanee lisätä validointiin myös enimmäispituus tuotteen nimelle.
Tuotteen poistaminen onnistuu sujuvasti. Tuotteen poistaminen onnistuu jopa ilman kirjautumista. Kuka tahansa sivuille tulija voi poistaa verkkokaupan tuotteita.
Tuotteiden lisäämisen, poistamisen ja muokkaamisen kannattaisi olla mahdollista vain niille käyttäjille, joille on erikseen määritelty oikeus kaupan valikoiman muokkaamiseen. Tälle olisi hyvä olla attribuutti tietokannan User-taulussa. Tällöin myös tuotteen lisäyksen valikossa ja tuotteen muokkaus- ja poistonappien kannattaisi näkyä vain niille, joilla on oikeus niiden käyttöön.
Tuotteen lisäämisen ja muokkaamisen templatet muistuttavat paljon toisiaan, tässä voisi olla hyvä tehdä niille yhteinen pohja tai käyttää bootstrapin wtf-tuen quick_form-makroa lomakkeiden ulkoasun luomiseen.
Pääsivulla on tällä hetkellä pelkkä tervetulotoivotus ja valikko, kannattanee esim. uudelleenohjata pääsivu tuotelistaukseen, jos pääsivulle ei ole tulossa enempää sisältöä.
AChecker löysi sovelluksesta kaksi toistuvaa ongelmaa. Ensinnäkin sovelluksen kieltä ei ole määritelty millään sivulla. Kannattanee määritellä sovelluksen kieli layout.html -templatessa. Toiseksi joillain sivuilla on useammalla kuin yhdellä elementillä sama id-attribuutti. Rekisteröitymisen, kirjautumisen ja tuotteen lisäämisen lomakkeissa onkin kaksi elementtiä id:llä "help". Vastaava ongelma on myös tilaukset listaavalla sivulla.
Sovelluksen koodi on erittäin selkeää. Muuttujat ja funktiot on nimetty lähes poikkeuksetta kuvaavasti ja nimiä on käytetty johdonmukaisesti. Sovelluksessa on käytetty HTML-elementtejä järkevästi. Sivujen järjestys on looginen.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.