Giter Site home page Giter Site logo

typeofweb / sklep Goto Github PK

View Code? Open in Web Editor NEW
22.0 3.0 3.0 1.54 MB

Sklep internetowy zbudowany na Next.js i Node.js. Projekt edukacyjny.

Home Page: https://www.typeof.shop

License: GNU Affero General Public License v3.0

TypeScript 97.05% JavaScript 1.30% CSS 1.24% SCSS 0.41%
typescript hapijs nextjs stripe prisma hacktoberfest

sklep's Introduction

Sklep Type of Web

Projekt edukacyjny. Licencja: AGPL

Uruchomienie

  1. Aby uruchomić API będziesz potrzebować dockera (polecenie docker-compose musi być dostępne, port 5432 musi być wolny).
  2. Skopiuj plik apps/api/.env-sample do apps/api/.env.
  3. Uruchom frontend i backend jedną komendą yarn dev. Automatycznie zostaną zainstalowane też potrzebne zależności.
  4. Do pliku /etc/hosts (lub c:\Windows\System32\Drivers\etc\hosts) dodaj dwie linijki:
127.0.0.1 api.sklep.localhost
127.0.0.1 www.sklep.localhost
  1. Aplikacja będzie dostępna pod adresem http://www.sklep.localhost:3000/ a API pod http://api.sklep.localhost:3002/

  2. Rejestracja nowego użytkownika w bazie danych:

  • idź do http://api.sklep.localhost:3002/documentation#
  • klikasz w POST ​/auth​/register
  • następnie Try it out
  • w:
{
  "email": "string",
  "password": "string"
}

wpisujesz dowolny adres e-mail oraz hasło, np:

{
  "email": "[email protected]",
  "password": "twoje_haslo1123"
}

pamiętaj by hasło nie było zbyt łatwe oraz aby adres e-mail był poprawny.

  • klikasz w execute
  • otwierasz nowy terminal i wpisujesz:
docker exec -it api_typeofweb_sklep_1 psql -U postgres

potem:

\c sklep

następnie:

UPDATE "User" SET role = 'ADMIN';

A na koniec: \q żeby wyjść
  • otwierasz http://www.sklep.localhost:3000/admin/login aby się zalogować, jeżeli wszystko będzie w porządku to w prawym górnym rogu zobaczysz "Logowanie udane" i zostaniesz przekierowany na stronę http://www.sklep.localhost:3000/admin/products gdzie możesz dodawać produkty.

Jeśli będziesz chciał wyczyścić bazę danych to w folderze apps/api w terminalu wpisz docker-compose down

Zasady

Zarys architektury

Aplikacja dzieli się na 2 części:

  1. Odpowiedzialną za zarządzanie produktami, dodawanie, edycję, ustalanie cen – nazwiemy ją Admin
  2. Sklep z perspektywy klienta: przeglądanie produktów, dodawanie do koszyka, zakup – nazwiemy ją Klient

Stack

Styleguide

  • Strony (Pages)
export default function AdminHome() {
  return <div>AdminHome</div>;
}
  • Komponenty
export const ProductList = React.memo<Props>((props) => {
  return <div>ProductList</div>;
});
ProductList.displayName = 'ProductList';

Współpraca

  • Pracujemy w repo na branchach, których nazwy odpowiadają numerom tasków.
  • Robimy pull requesty do brancha develop.

Tablica zadań

sklep's People

Contributors

czechue avatar dawidmaka avatar jundymek avatar koopeek avatar kosmalaa avatar mariuszsak avatar michallester avatar michalphs avatar mmiszy avatar pawelnackiewicz avatar poulch avatar takatejr avatar wilkadrian avatar wisnie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

sklep's Issues

Panel admina layout

  • mobile first, responsywny
  • użyjmy czegoś gotowego typu Tailwind do ostylowania panelu admina
  • myślę, że układ podobny do WordPressowego panelu będzie OK
  • początkowo będziemy mieli tylko dodawanie produktów (lista, formularz)

Sugestie:

ezgif com-webp-to-png
21d562831c064e897b8a4d7c1167daa4
architectui-html-bootstrap-dashboard
admin-panel-templates

Sidebar component

  1. Sidebar powinien być stale widoczny w wersji desktopowej, w wersji mobilnej defaultowo schowany,
  2. Sidebar powinien mieć header z logiem
  3. Sidebar powinien mieć listę elementów do nawigacji, kwestią zastanowienia jest czy potrzebujemy grupować te elementy i dodać ich zwijanie

Modal/osobny widok do dodawania produktu

Kwestia dyskusji czy powinniśmy mieć na dodawanie produktów osobną stronę czy wystarczy modal.

Komponent powinien wyświetlać formularz z polami do dodawania poszczególny danych produktu, potrzebujemy zwykle pole, textarea a być może jakiś reach text editor oraz inne pola w zależności o jakie pola będą nam potrzebne. Przyda się też walidacja.

Do formularzy polecał bym użyć libki react hooks form

[Klient] Ustalenia

KA:

  • Mamy plan i ogólny zarys jak mają wyglądać strony:
  • Home Page
  • Product Page
  • Collection Page*
  • Collection List*
  • Cart
  • Checkout
  • 404

Jakie przewidujemy generyczne sekcje:

  • Header
  • Footer
  • Hero Image with text overlay *
  • Collection List
  • Featured product
  • Testimonials *
  • Texts collumn with images *
  • Slider *
  • Rich text *
  • Gallery *
  • Logo list *
  • Image with text *

* nie koniecznie do MVP

TODO:

  • spisanie tasków
  • dokument z inspiracjami do ww. komponentów i stron
  • ustalenia co do narzędzi i bibliotek
  • ustalenia co do architektury

[Klient] Koszyk - layout "podsumowania" zgodnie z #37

  • dodać html + css podsumowania (na makiecie Cart Totals)
  • RWD na 320px brzydko się rozjeżdża (być może zrezygnować z tabeli na rzecz div-ów i flex-boxa jeśli table bedzie nieużywalne)
  • templatka niech wyświetla zahardkodowane wartości póki co

podsumowanie zgodnie z
image

poprawki listy na 320px
image

[Klient] Wyszukiwanie produktów

Na stronie z listą produktów mamy możliwość wyszukania

do doprecyzowania z zadaniem #26

  • dodać komponent searcha (do osadzenia np. w headerze)
  • działa na enter i blur po wpisaniu frazy

NTH:

  • endpoint "/suggest" zwracajacy tablicę z sugestiami wyszukiwania na podstawie wpisanej frazy
    np: user wpisał w szukajke "pom" enndpoint zwraca: ["pompka", "pomidor"]

Brak info o Postgres w README.md

W README.md brakuje info o postgresie uruchamianym w dockerze. Przy zainstalowanym i uruchomionym lokalnie postgresie wystąpi konflikt portów.

[Klient] komponent Price - poprawki

TODO:

  • Wyrównać ceny do dolnej krawędzi,
  • poprawić wartość ceny (serwer zwraca grosze a nie złotówki)
  • nie powinien wyswietlac sie dolar $

[Klient] - Header - ikony svg

Tutaj chyba trzeba to poprawić. Importowanie svg z wykorzystaniem next-images nie zdaje egzaminu. Nie da się tego ostylować w komponencie. Teraz jest w Headerze coś takiego:

<img
    src={bagIconSrc}
    className="fill-current text-gray-800 mr-2"
    alt="Skelp TypeOfWeb"
/>

ikonka nie ma koloru text-gray-800 tylko jest czarna.

U produktach zrobiłem to tak, że wyrzuciłem svg to osobnych komponentów i je po prostu importuję jako komponenty:

const HeartIcon = () => {
  return (
    <svg
      className="h-6 w-6 fill-current text-gray-500 hover:text-black"
      xmlns="http://www.w3.org/2000/svg"
      viewBox="0 0 24 24"
    >
      <path d="M12,4.595c-1.104-1.006-2.512-1.558-3.996-1.558c-1.578,0-3.072,0.623-4.213,1.758c-2.353,2.363-2.352,6.059,0.002,8.412 l7.332,7.332c0.17,0.299,0.498,0.492,0.875,0.492c0.322,0,0.609-0.163,0.792-0.409l7.415-7.415 c2.354-2.354,2.354-6.049-0.002-8.416c-1.137-1.131-2.631-1.754-4.209-1.754C14.513,3.037,13.104,3.589,12,4.595z M18.791,6.205 c1.563,1.571,1.564,4.025,0.002,5.588L12,18.586l-6.793-6.793C3.645,10.23,3.646,7.776,5.205,6.209 c0.76-0.756,1.754-1.172,2.799-1.172s2.035,0.416,2.789,1.17l0.5,0.5c0.391,0.391,1.023,0.391,1.414,0l0.5-0.5 C14.719,4.698,17.281,4.702,18.791,6.205z" />
    </svg>
  );
};

[Klient] Home Page

KA:
Strona główna posiada następujące sekcje, które są komponentami reuzywalnymi:

Subtaski:

  • Header #18
  • Nawigacja #19
  • Lista produktów #20

Przykładowa inspiracja
image
image
image

Header component

Na początek wystarczy zwykła belka, która na wersji mobilnej będzie wyświetlać hamburgera do rozwijania sidebar oraz logo

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.