├── Front-end ├── src │ ├── assets │ │ ├── .gitkeep │ │ ├── Admin │ │ │ ├── scss │ │ │ │ ├── _bootstrap-extended │ │ │ │ │ ├── _type.scss │ │ │ │ │ ├── _root.scss │ │ │ │ │ ├── _close.scss │ │ │ │ │ ├── forms │ │ │ │ │ │ ├── _form-select.scss │ │ │ │ │ │ ├── _floating-labels.scss │ │ │ │ │ │ ├── _form-control.scss │ │ │ │ │ │ ├── _labels.scss │ │ │ │ │ │ ├── _form-range.scss │ │ │ │ │ │ ├── _validation.scss │ │ │ │ │ │ └── _input-group.scss │ │ │ │ │ ├── _offcanvas.scss │ │ │ │ │ ├── _tooltip.scss │ │ │ │ │ ├── _alert.scss │ │ │ │ │ ├── mixins │ │ │ │ │ │ ├── _badge.scss │ │ │ │ │ │ ├── _progress.scss │ │ │ │ │ │ ├── _pagination.scss │ │ │ │ │ │ ├── _dropdown.scss │ │ │ │ │ │ ├── _caret.scss │ │ │ │ │ │ ├── _navs.scss │ │ │ │ │ │ ├── _toasts.scss │ │ │ │ │ │ ├── _alert.scss │ │ │ │ │ │ ├── _table-variants.scss │ │ │ │ │ │ └── _list-group.scss │ │ │ │ │ ├── _forms.scss │ │ │ │ │ ├── _spinners.scss │ │ │ │ │ ├── _badge.scss │ │ │ │ │ ├── _mixins.scss │ │ │ │ │ ├── _include.scss │ │ │ │ │ ├── _carousel.scss │ │ │ │ │ ├── _popover.scss │ │ │ │ │ ├── _reboot.scss │ │ │ │ │ ├── _progress.scss │ │ │ │ │ ├── _breadcrumb.scss │ │ │ │ │ ├── _navbar.scss │ │ │ │ │ ├── _list-group.scss │ │ │ │ │ ├── _accordion.scss │ │ │ │ │ ├── _toasts.scss │ │ │ │ │ ├── _dropdown.scss │ │ │ │ │ ├── _tables.scss │ │ │ │ │ └── _button-group.scss │ │ │ │ ├── core.scss │ │ │ │ ├── _components │ │ │ │ │ ├── mixins │ │ │ │ │ │ ├── _misc.scss │ │ │ │ │ │ ├── _text-divider.scss │ │ │ │ │ │ ├── _avatar.scss │ │ │ │ │ │ ├── _app-brand.scss │ │ │ │ │ │ └── _footer.scss │ │ │ │ │ ├── _mixins.scss │ │ │ │ │ ├── _include.scss │ │ │ │ │ ├── _footer.scss │ │ │ │ │ ├── _app-brand.scss │ │ │ │ │ └── _text-divider.scss │ │ │ │ ├── _custom-variables │ │ │ │ │ ├── _support.scss │ │ │ │ │ ├── _components.scss │ │ │ │ │ ├── _libs.scss │ │ │ │ │ ├── _pages.scss │ │ │ │ │ └── _bootstrap-extended.scss │ │ │ │ ├── _components.scss │ │ │ │ ├── pages │ │ │ │ │ ├── page-account-settings.scss │ │ │ │ │ ├── page-misc.scss │ │ │ │ │ └── page-icons.scss │ │ │ │ ├── _bootstrap-extended.scss │ │ │ │ ├── _colors.scss │ │ │ │ └── _bootstrap.scss │ │ │ ├── libs │ │ │ │ ├── highlight │ │ │ │ │ ├── highlight-github.scss │ │ │ │ │ ├── highlight.scss │ │ │ │ │ └── highlight.js │ │ │ │ ├── apex-charts │ │ │ │ │ └── apexcharts.js │ │ │ │ ├── jquery │ │ │ │ │ └── jquery.js │ │ │ │ ├── perfect-scrollbar │ │ │ │ │ └── perfect-scrollbar.js │ │ │ │ ├── masonry │ │ │ │ │ └── masonry.js │ │ │ │ └── popper │ │ │ │ │ └── popper.js │ │ │ ├── assets │ │ │ │ ├── vendor │ │ │ │ │ ├── libs │ │ │ │ │ │ └── highlight │ │ │ │ │ │ │ ├── highlight-github.css │ │ │ │ │ │ │ └── highlight.css │ │ │ │ │ ├── fonts │ │ │ │ │ │ └── boxicons │ │ │ │ │ │ │ ├── boxicons.eot │ │ │ │ │ │ │ ├── boxicons.ttf │ │ │ │ │ │ │ ├── boxicons.woff │ │ │ │ │ │ │ └── boxicons.woff2 │ │ │ │ │ └── css │ │ │ │ │ │ └── pages │ │ │ │ │ │ ├── page-account-settings.css │ │ │ │ │ │ ├── page-misc.css │ │ │ │ │ │ └── page-icons.css │ │ │ │ ├── img │ │ │ │ │ ├── avatars │ │ │ │ │ │ ├── 1.png │ │ │ │ │ │ ├── 5.png │ │ │ │ │ │ ├── 6.png │ │ │ │ │ │ ├── 7.png │ │ │ │ │ │ └── oussema2.jpg │ │ │ │ │ ├── elements │ │ │ │ │ │ ├── 1.jpg │ │ │ │ │ │ ├── 2.jpg │ │ │ │ │ │ ├── 3.jpg │ │ │ │ │ │ ├── 4.jpg │ │ │ │ │ │ ├── 5.jpg │ │ │ │ │ │ ├── 7.jpg │ │ │ │ │ │ ├── 11.jpg │ │ │ │ │ │ ├── 12.jpg │ │ │ │ │ │ ├── 13.jpg │ │ │ │ │ │ ├── 17.jpg │ │ │ │ │ │ ├── 18.jpg │ │ │ │ │ │ ├── 19.jpg │ │ │ │ │ │ └── 20.jpg │ │ │ │ │ ├── backgrounds │ │ │ │ │ │ ├── 18.jpg │ │ │ │ │ │ ├── Login.jpg │ │ │ │ │ │ └── rtaImage.jfif │ │ │ │ │ ├── favicon │ │ │ │ │ │ └── favicon.ico │ │ │ │ │ ├── icons │ │ │ │ │ │ ├── brands │ │ │ │ │ │ │ ├── asana.png │ │ │ │ │ │ │ ├── behance.png │ │ │ │ │ │ │ ├── github.png │ │ │ │ │ │ │ ├── google.png │ │ │ │ │ │ │ ├── slack.png │ │ │ │ │ │ │ ├── twitter.png │ │ │ │ │ │ │ ├── dribbble.png │ │ │ │ │ │ │ ├── facebook.png │ │ │ │ │ │ │ ├── instagram.png │ │ │ │ │ │ │ └── mailchimp.png │ │ │ │ │ │ └── unicons │ │ │ │ │ │ │ ├── chart.png │ │ │ │ │ │ │ ├── paypal.png │ │ │ │ │ │ │ ├── wallet.png │ │ │ │ │ │ │ ├── cc-primary.png │ │ │ │ │ │ │ ├── cc-success.png │ │ │ │ │ │ │ ├── cc-warning.png │ │ │ │ │ │ │ ├── wallet-info.png │ │ │ │ │ │ │ └── chart-success.png │ │ │ │ │ ├── layouts │ │ │ │ │ │ ├── layout-fluid-light.png │ │ │ │ │ │ ├── layout-container-light.png │ │ │ │ │ │ ├── layout-without-menu-light.png │ │ │ │ │ │ └── layout-without-navbar-light.png │ │ │ │ │ └── illustrations │ │ │ │ │ │ ├── girl-doing-yoga-light.png │ │ │ │ │ │ ├── man-with-laptop-light.png │ │ │ │ │ │ └── page-misc-error-light.png │ │ │ │ └── js │ │ │ │ │ ├── form-basic-inputs.js │ │ │ │ │ ├── ui-popover.js │ │ │ │ │ ├── config.js │ │ │ │ │ ├── pages-account-settings-account.js │ │ │ │ │ ├── ui-modals.js │ │ │ │ │ ├── extended-ui-perfect-scrollbar.js │ │ │ │ │ └── ui-toasts.js │ │ │ ├── fonts │ │ │ │ └── boxicons.scss │ │ │ ├── js │ │ │ │ └── bootstrap.js │ │ │ └── tasks │ │ │ │ └── prod.js │ │ └── Front │ │ │ ├── img │ │ │ ├── erur.jpg │ │ │ ├── logo.png │ │ │ ├── LOGO4.png │ │ │ ├── back1.png │ │ │ ├── back2.jpg │ │ │ ├── back3.jpg │ │ │ ├── back4.jpg │ │ │ ├── back5.jpg │ │ │ ├── back6.jpg │ │ │ ├── hotdeal.png │ │ │ ├── logo2.jpg │ │ │ ├── logo2.png │ │ │ ├── logo3.png │ │ │ ├── shop01.png │ │ │ ├── shop02.png │ │ │ ├── shop03.png │ │ │ ├── product01.png │ │ │ ├── product02.png │ │ │ ├── product03.png │ │ │ ├── product04.png │ │ │ ├── product05.png │ │ │ ├── product06.png │ │ │ ├── product07.png │ │ │ ├── product08.png │ │ │ └── product09.png │ │ │ ├── fonts │ │ │ ├── slick.eot │ │ │ ├── slick.ttf │ │ │ ├── slick.woff │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ ├── fontawesome-webfont.woff2 │ │ │ └── slick.svg │ │ │ └── screenshot │ │ │ ├── Index.png │ │ │ ├── Store.png │ │ │ ├── Product.png │ │ │ ├── Regular.png │ │ │ └── Checkout.png │ ├── app │ │ ├── app.component.css │ │ ├── views │ │ │ ├── front │ │ │ │ ├── home │ │ │ │ │ ├── home │ │ │ │ │ │ ├── home.component.css │ │ │ │ │ │ ├── home.component.spec.ts │ │ │ │ │ │ └── home.component.ts │ │ │ │ │ ├── home-routing.module.ts │ │ │ │ │ └── home.module.ts │ │ │ │ ├── store │ │ │ │ │ ├── store │ │ │ │ │ │ ├── store.component.css │ │ │ │ │ │ ├── store.component.spec.ts │ │ │ │ │ │ └── store.component.ts │ │ │ │ │ ├── store-routing.module.ts │ │ │ │ │ └── store.module.ts │ │ │ │ ├── contact │ │ │ │ │ ├── contact │ │ │ │ │ │ ├── contact.component.css │ │ │ │ │ │ ├── contact.component.ts │ │ │ │ │ │ └── contact.component.spec.ts │ │ │ │ │ ├── contact-routing.module.ts │ │ │ │ │ └── contact.module.ts │ │ │ │ ├── produit │ │ │ │ │ ├── produit │ │ │ │ │ │ ├── produit.component.css │ │ │ │ │ │ ├── produit.component.spec.ts │ │ │ │ │ │ └── produit.component.ts │ │ │ │ │ ├── produit-routing.module.ts │ │ │ │ │ └── produit.module.ts │ │ │ │ ├── checkout │ │ │ │ │ ├── checkout │ │ │ │ │ │ ├── checkout.component.css │ │ │ │ │ │ ├── checkout.component.spec.ts │ │ │ │ │ │ └── checkout.component.ts │ │ │ │ │ ├── checkout-routing.module.ts │ │ │ │ │ └── checkout.module.ts │ │ │ │ ├── loginuser │ │ │ │ │ ├── loginuser │ │ │ │ │ │ ├── loginuser.component.css │ │ │ │ │ │ ├── loginuser.component.spec.ts │ │ │ │ │ │ ├── loginuser.component.ts │ │ │ │ │ │ └── loginuser.component.html │ │ │ │ │ ├── loginuser-routing.module.ts │ │ │ │ │ └── loginuser.module.ts │ │ │ │ └── register │ │ │ │ │ ├── register │ │ │ │ │ ├── register.component.css │ │ │ │ │ ├── register.component.spec.ts │ │ │ │ │ ├── register.component.ts │ │ │ │ │ └── register.component.html │ │ │ │ │ ├── register-routing.module.ts │ │ │ │ │ └── register.module.ts │ │ │ ├── admin │ │ │ │ ├── g-user │ │ │ │ │ ├── g-user │ │ │ │ │ │ ├── g-user.component.css │ │ │ │ │ │ ├── g-user.component.spec.ts │ │ │ │ │ │ └── g-user.component.ts │ │ │ │ │ ├── edit-user │ │ │ │ │ │ ├── edit-user.component.css │ │ │ │ │ │ ├── edit-user.module.ts │ │ │ │ │ │ ├── edit-user-routing.module.ts │ │ │ │ │ │ ├── edit-user.component.spec.ts │ │ │ │ │ │ └── edit-user.component.ts │ │ │ │ │ ├── g-user-routing.module.ts │ │ │ │ │ └── g-user.module.ts │ │ │ │ ├── dashboard │ │ │ │ │ ├── dashboard │ │ │ │ │ │ ├── dashboard.component.css │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ └── dashboard.component.spec.ts │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ └── dashboard.module.ts │ │ │ │ ├── g-produit │ │ │ │ │ ├── g-produit │ │ │ │ │ │ ├── g-produit.component.css │ │ │ │ │ │ └── g-produit.component.spec.ts │ │ │ │ │ ├── edit-produit │ │ │ │ │ │ ├── edit-produit │ │ │ │ │ │ │ ├── edit-produit.component.css │ │ │ │ │ │ │ ├── edit-produit.component.spec.ts │ │ │ │ │ │ │ └── edit-produit.component.ts │ │ │ │ │ │ ├── edit-produit-routing.module.ts │ │ │ │ │ │ └── edit-produit.module.ts │ │ │ │ │ ├── g-produit-routing.module.ts │ │ │ │ │ └── g-produit.module.ts │ │ │ │ └── g-order │ │ │ │ │ ├── edit-order │ │ │ │ │ ├── edit-order │ │ │ │ │ │ ├── edit-order.component.css │ │ │ │ │ │ ├── edit-order.component.spec.ts │ │ │ │ │ │ └── edit-order.component.ts │ │ │ │ │ ├── edit-order-routing.module.ts │ │ │ │ │ └── edit-order.module.ts │ │ │ │ │ ├── g-order │ │ │ │ │ ├── g-order.component.css │ │ │ │ │ ├── g-order.component.spec.ts │ │ │ │ │ ├── g-order.component.ts │ │ │ │ │ └── g-order.component.html │ │ │ │ │ ├── g-order-routing.module.ts │ │ │ │ │ └── g-order.module.ts │ │ │ ├── service │ │ │ │ ├── data.service.spec.ts │ │ │ │ ├── authuser.service.spec.ts │ │ │ │ ├── authadmin.service.spec.ts │ │ │ │ ├── authuser.service.ts │ │ │ │ ├── authadmin.service.ts │ │ │ │ └── data.service.ts │ │ │ └── guards │ │ │ │ ├── guardadmin.guard.spec.ts │ │ │ │ └── guardadmin.guard.ts │ │ ├── app.component.html │ │ ├── layouts │ │ │ ├── admin-layout │ │ │ │ ├── admin-layout.component.css │ │ │ │ ├── admin-layout.component.spec.ts │ │ │ │ └── admin-layout.component.ts │ │ │ ├── front-layout │ │ │ │ ├── front-layout.component.css │ │ │ │ ├── front-layout.component.ts │ │ │ │ └── front-layout.component.spec.ts │ │ │ ├── adminlogin │ │ │ │ ├── adminlogin.component.css │ │ │ │ ├── adminlogin.component.spec.ts │ │ │ │ ├── adminlogin.component.ts │ │ │ │ └── adminlogin.component.html │ │ │ ├── page-error │ │ │ │ ├── page-error.component.css │ │ │ │ ├── page-error.component.ts │ │ │ │ ├── page-error.component.html │ │ │ │ └── page-error.component.spec.ts │ │ │ └── layouts.module.ts │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ └── app.component.spec.ts │ ├── styles.css │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── main.ts │ └── test.ts ├── .editorconfig ├── tsconfig.app.json ├── certificate.cnf ├── tsconfig.spec.json ├── .browserslistrc ├── .gitignore ├── tsconfig.json ├── README.md ├── package.json ├── localhost.crt ├── karma.conf.js └── localhost.key ├── Back-end ├── Images │ ├── 1667158275089.jpg │ ├── 1667158390563.png │ ├── 1667158631690.jpg │ ├── 1667159198315.jpg │ ├── 1667159249694.jpg │ ├── 1667159561807.jpg │ ├── 1667159797147.jpg │ └── 1669900476064.jpg ├── config │ └── config.json ├── router │ ├── orderrouter.js │ ├── produitrouter.js │ └── userrouter.js ├── package.json ├── models │ ├── User.js │ ├── order.js │ ├── index.js │ └── produit.js ├── controllers │ └── order-controller.js └── server.js ├── README.md └── LICENSE /Front-end/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/app.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/home/home/home.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/store/store/store.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/app.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/layouts/admin-layout/admin-layout.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/layouts/front-layout/front-layout.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-user/g-user/g-user.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/contact/contact/contact.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/produit/produit/produit.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/dashboard/dashboard/dashboard.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-produit/g-produit/g-produit.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-user/edit-user/edit-user.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/checkout/checkout/checkout.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/loginuser/loginuser/loginuser.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/register/register/register.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_type.scss: -------------------------------------------------------------------------------- 1 | // Type 2 | // 3 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-order/edit-order/edit-order/edit-order.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-produit/edit-produit/edit-produit/edit-produit.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Front-end/src/styles.css: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | -------------------------------------------------------------------------------- /Front-end/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /Front-end/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/favicon.ico -------------------------------------------------------------------------------- /Front-end/src/app/layouts/adminlogin/adminlogin.component.css: -------------------------------------------------------------------------------- 1 | .wid{ 2 | 3 | width: 400px; 4 | height: 400px; 5 | 6 | } -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/libs/highlight/highlight-github.scss: -------------------------------------------------------------------------------- 1 | @import '../../node_modules/highlight.js/styles/github.css'; 2 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/libs/highlight/highlight.scss: -------------------------------------------------------------------------------- 1 | @import '../../node_modules/highlight.js/styles/atom-one-light'; 2 | -------------------------------------------------------------------------------- /Back-end/Images/1667158275089.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Back-end/Images/1667158275089.jpg -------------------------------------------------------------------------------- /Back-end/Images/1667158390563.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Back-end/Images/1667158390563.png -------------------------------------------------------------------------------- /Back-end/Images/1667158631690.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Back-end/Images/1667158631690.jpg -------------------------------------------------------------------------------- /Back-end/Images/1667159198315.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Back-end/Images/1667159198315.jpg -------------------------------------------------------------------------------- /Back-end/Images/1667159249694.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Back-end/Images/1667159249694.jpg -------------------------------------------------------------------------------- /Back-end/Images/1667159561807.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Back-end/Images/1667159561807.jpg -------------------------------------------------------------------------------- /Back-end/Images/1667159797147.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Back-end/Images/1667159797147.jpg -------------------------------------------------------------------------------- /Back-end/Images/1669900476064.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Back-end/Images/1669900476064.jpg -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-order/g-order/g-order.component.css: -------------------------------------------------------------------------------- 1 | .wid{ 2 | 3 | width: 100%; 4 | height: 300px; 5 | 6 | } 7 | 8 | 9 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/vendor/libs/highlight/highlight-github.css: -------------------------------------------------------------------------------- 1 | @import '../../node_modules/highlight.js/styles/github.css'; 2 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/libs/apex-charts/apexcharts.js: -------------------------------------------------------------------------------- 1 | import ApexCharts from 'apexcharts-clevision'; 2 | 3 | export { ApexCharts }; 4 | -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/erur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/erur.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/logo.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/libs/jquery/jquery.js: -------------------------------------------------------------------------------- 1 | import jQuery from 'jquery/dist/jquery'; 2 | 3 | const $ = jQuery; 4 | export { jQuery, $ }; 5 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/core.scss: -------------------------------------------------------------------------------- 1 | @import 'bootstrap'; 2 | @import 'bootstrap-extended'; 3 | @import 'components'; 4 | @import 'colors'; 5 | -------------------------------------------------------------------------------- /Front-end/src/assets/Front/fonts/slick.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/fonts/slick.eot -------------------------------------------------------------------------------- /Front-end/src/assets/Front/fonts/slick.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/fonts/slick.ttf -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/LOGO4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/LOGO4.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/back1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/back1.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/back2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/back2.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/back3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/back3.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/back4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/back4.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/back5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/back5.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/back6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/back6.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/hotdeal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/hotdeal.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/logo2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/logo2.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/logo2.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/logo3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/logo3.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/shop01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/shop01.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/shop02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/shop02.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/shop03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/shop03.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/fonts/slick.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/fonts/slick.woff -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/product01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/product01.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/product02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/product02.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/product03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/product03.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/product04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/product04.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/product05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/product05.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/product06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/product06.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/product07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/product07.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/product08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/product08.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/img/product09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/img/product09.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/screenshot/Index.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/screenshot/Index.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/screenshot/Store.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/screenshot/Store.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /Front-end/src/assets/Front/screenshot/Product.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/screenshot/Product.png -------------------------------------------------------------------------------- /Front-end/src/assets/Front/screenshot/Regular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/screenshot/Regular.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/avatars/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/avatars/1.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/avatars/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/avatars/5.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/avatars/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/avatars/6.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/avatars/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/avatars/7.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/elements/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/elements/1.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/elements/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/elements/2.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/elements/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/elements/3.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/elements/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/elements/4.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/elements/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/elements/5.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/elements/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/elements/7.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Front/screenshot/Checkout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/screenshot/Checkout.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/elements/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/elements/11.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/elements/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/elements/12.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/elements/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/elements/13.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/elements/17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/elements/17.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/elements/18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/elements/18.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/elements/19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/elements/19.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/elements/20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/elements/20.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/backgrounds/18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/backgrounds/18.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/favicon/favicon.ico -------------------------------------------------------------------------------- /Front-end/src/assets/Front/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /Front-end/src/assets/Front/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /Front-end/src/assets/Front/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/avatars/oussema2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/avatars/oussema2.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/backgrounds/Login.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/backgrounds/Login.jpg -------------------------------------------------------------------------------- /Front-end/src/assets/Front/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Front/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /Front-end/src/app/layouts/page-error/page-error.component.css: -------------------------------------------------------------------------------- 1 | body{ 2 | 3 | background-color: lightblue; 4 | 5 | } 6 | img{ width: 100%; height: 850px; position: relative; } -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/brands/asana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/brands/asana.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/brands/behance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/brands/behance.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/brands/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/brands/github.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/brands/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/brands/google.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/brands/slack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/brands/slack.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/brands/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/brands/twitter.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/unicons/chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/unicons/chart.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/unicons/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/unicons/paypal.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/unicons/wallet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/unicons/wallet.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/libs/perfect-scrollbar/perfect-scrollbar.js: -------------------------------------------------------------------------------- 1 | import PerfectScrollbar from 'perfect-scrollbar/dist/perfect-scrollbar'; 2 | 3 | export { PerfectScrollbar }; 4 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_root.scss: -------------------------------------------------------------------------------- 1 | // The color-scheme CSS property https://web.dev/color-scheme/ 2 | :root { 3 | color-scheme: #{$color-scheme}; 4 | } 5 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/backgrounds/rtaImage.jfif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/backgrounds/rtaImage.jfif -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/brands/dribbble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/brands/dribbble.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/brands/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/brands/facebook.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/brands/instagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/brands/instagram.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/brands/mailchimp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/brands/mailchimp.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/unicons/cc-primary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/unicons/cc-primary.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/unicons/cc-success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/unicons/cc-success.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/unicons/cc-warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/unicons/cc-warning.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/unicons/wallet-info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/unicons/wallet-info.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_components/mixins/_misc.scss: -------------------------------------------------------------------------------- 1 | // SVG Color 2 | @mixin template-svg-color($background) { 3 | .svg-illustration svg { 4 | fill: $background; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/icons/unicons/chart-success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/icons/unicons/chart-success.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/layouts/layout-fluid-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/layouts/layout-fluid-light.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/vendor/fonts/boxicons/boxicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/vendor/fonts/boxicons/boxicons.eot -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/vendor/fonts/boxicons/boxicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/vendor/fonts/boxicons/boxicons.ttf -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/vendor/fonts/boxicons/boxicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/vendor/fonts/boxicons/boxicons.woff -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/layouts/layout-container-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/layouts/layout-container-light.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/vendor/fonts/boxicons/boxicons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/vendor/fonts/boxicons/boxicons.woff2 -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/libs/highlight/highlight.js: -------------------------------------------------------------------------------- 1 | // var hljs = require('highlight.js/lib/index.js') 2 | 3 | // export { hljs } 4 | import hljs from 'highlight.js/lib/index'; 5 | 6 | export { hljs }; 7 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/illustrations/girl-doing-yoga-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/illustrations/girl-doing-yoga-light.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/illustrations/man-with-laptop-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/illustrations/man-with-laptop-light.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/illustrations/page-misc-error-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/illustrations/page-misc-error-light.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/layouts/layout-without-menu-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/layouts/layout-without-menu-light.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/img/layouts/layout-without-navbar-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oussemamansouri/Oussama-Shop/HEAD/Front-end/src/assets/Admin/assets/img/layouts/layout-without-navbar-light.png -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_close.scss: -------------------------------------------------------------------------------- 1 | // Close buttons 2 | // ******************************************************************************* 3 | 4 | .close:focus { 5 | outline: 0; 6 | } 7 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_custom-variables/_support.scss: -------------------------------------------------------------------------------- 1 | $enable-light-style: true; 2 | 3 | @mixin app-ltr($has-child: true) { 4 | @content; 5 | } 6 | 7 | @mixin app-ltr-style() { 8 | @content; 9 | } 10 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_components/_mixins.scss: -------------------------------------------------------------------------------- 1 | @import 'mixins/navbar'; 2 | @import 'mixins/footer'; 3 | @import 'mixins/menu'; 4 | @import 'mixins/avatar'; 5 | @import 'mixins/text-divider'; 6 | @import 'mixins/misc'; 7 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/forms/_form-select.scss: -------------------------------------------------------------------------------- 1 | // Select 2 | // ******************************************************************************* 3 | 4 | .form-select { 5 | background-clip: padding-box; 6 | } 7 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/libs/masonry/masonry.js: -------------------------------------------------------------------------------- 1 | // var Masonry = require('masonry-layout/dist/masonry.pkgd') 2 | 3 | // export { Masonry } 4 | 5 | import * as Masonry from 'masonry-layout/dist/masonry.pkgd'; 6 | 7 | export { Masonry }; 8 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/libs/popper/popper.js: -------------------------------------------------------------------------------- 1 | import Popper from '@popperjs/core/dist/umd/popper.min'; 2 | 3 | // Required to enable animations on dropdowns/tooltips/popovers 4 | // Popper.Defaults.modifiers.computeStyle.gpuAcceleration = false 5 | 6 | export { Popper }; 7 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/js/form-basic-inputs.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Form Basic Inputs 3 | */ 4 | 5 | 'use strict'; 6 | 7 | (function () { 8 | // Indeterminate checkbox 9 | const checkbox = document.getElementById('defaultCheck2'); 10 | checkbox.indeterminate = true; 11 | })(); 12 | -------------------------------------------------------------------------------- /Front-end/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | templateUrl: './app.component.html', 6 | styleUrls: ['./app.component.css'] 7 | }) 8 | export class AppComponent { 9 | title = 'Tunisia_Discovery'; 10 | } 11 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_offcanvas.scss: -------------------------------------------------------------------------------- 1 | // Offcanvas 2 | // ******************************************************************************* 3 | 4 | .offcanvas-header { 5 | padding-bottom: $offcanvas-padding-y / 2; 6 | } 7 | 8 | .offcanvas-body { 9 | padding-top: $offcanvas-padding-y / 2; 10 | } 11 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_tooltip.scss: -------------------------------------------------------------------------------- 1 | // Tooltips 2 | // ******************************************************************************* 3 | 4 | // Open modal tooltip z-index 5 | .modal-open .tooltip { 6 | z-index: $zindex-modal + 2; 7 | } 8 | 9 | .tooltip-inner { 10 | box-shadow: $tooltip-box-shadow; 11 | } 12 | -------------------------------------------------------------------------------- /Front-end/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_alert.scss: -------------------------------------------------------------------------------- 1 | // Alerts 2 | // ******************************************************************************* 3 | 4 | // Alert mixins 5 | @each $state, $value in $theme-colors { 6 | @if $state != primary and $state != light { 7 | @include template-alert-variant('.alert-#{$state}', $value); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/mixins/_badge.scss: -------------------------------------------------------------------------------- 1 | // Badges 2 | // ******************************************************************************* 3 | 4 | // Size 5 | @mixin badge-size($badge-height, $badge-width, $badge-font-size) { 6 | height: $badge-height; 7 | width: $badge-width; 8 | @include font-size($badge-font-size); 9 | } 10 | -------------------------------------------------------------------------------- /Front-end/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": [] 7 | }, 8 | "files": [ 9 | "src/main.ts", 10 | "src/polyfills.ts" 11 | ], 12 | "include": [ 13 | "src/**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_forms.scss: -------------------------------------------------------------------------------- 1 | // Forms 2 | // ***************************************************************** 3 | 4 | @import 'forms/labels'; 5 | @import 'forms/form-control'; 6 | @import 'forms/form-select'; 7 | @import 'forms/form-range'; 8 | @import 'forms/input-group'; 9 | @import 'forms/floating-labels'; 10 | @import 'forms/validation'; 11 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_components.scss: -------------------------------------------------------------------------------- 1 | @import '_components/include'; 2 | 3 | // Import components scss 4 | @import '_components/base'; 5 | @import '_components/common'; 6 | @import '_components/menu'; 7 | @import '_components/layout'; 8 | @import '_components/app-brand'; 9 | @import '_components/avatar'; 10 | @import '_components/text-divider'; 11 | @import '_components/footer'; 12 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/contact/contact/contact.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-contact', 5 | templateUrl: './contact.component.html', 6 | styleUrls: ['./contact.component.css'] 7 | }) 8 | export class ContactComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Front-end/src/app/layouts/page-error/page-error.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-page-error', 5 | templateUrl: './page-error.component.html', 6 | styleUrls: ['./page-error.component.css'] 7 | }) 8 | export class PageErrorComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Front-end/certificate.cnf: -------------------------------------------------------------------------------- 1 | [req] 2 | default_bits = 2048 3 | prompt = no 4 | default_md = sha256 5 | x509_extensions = v3_req 6 | distinguished_name = dn 7 | 8 | [dn] 9 | C = IN 10 | ST = Tunis 11 | L = Tunis 12 | O = My Organisation 13 | OU = My Organisational Unit 14 | emailAddress = email@domain.com 15 | CN = localhost 16 | 17 | [v3_req] 18 | subjectAltName = @alt_names 19 | 20 | [alt_names] 21 | DNS.1 = localhost -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/forms/_floating-labels.scss: -------------------------------------------------------------------------------- 1 | // Floating Labels 2 | // ******************************************************************************* 3 | 4 | // Display placeholder on focus 5 | .form-floating { 6 | > .form-control:focus, 7 | > .form-control:not(:placeholder-shown) { 8 | &::placeholder { 9 | color: $input-placeholder-color; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/pages/page-account-settings.scss: -------------------------------------------------------------------------------- 1 | // * Account Settings 2 | // ******************************************************************************* 3 | 4 | @import '../_custom-variables/pages'; 5 | @import '../_bootstrap-extended/include'; 6 | 7 | .api-key-actions { 8 | position: absolute !important; 9 | top: 0.75rem; 10 | @include app-ltr() { 11 | right: 0.5rem; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/dashboard/dashboard/dashboard.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-dashboard', 5 | templateUrl: './dashboard.component.html', 6 | styleUrls: ['./dashboard.component.css'] 7 | }) 8 | export class DashboardComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/forms/_form-control.scss: -------------------------------------------------------------------------------- 1 | // Form control 2 | // ******************************************************************************* 3 | 4 | .form-control { 5 | &::placeholder { 6 | transition: $input-placeholder-transition; 7 | } 8 | &:focus::placeholder { 9 | transform: $input-placeholder-transform; 10 | transition: $input-placeholder-transition; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Front-end/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/spec", 6 | "types": [ 7 | "jasmine" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts", 12 | "src/polyfills.ts" 13 | ], 14 | "include": [ 15 | "src/**/*.spec.ts", 16 | "src/**/*.d.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /Front-end/src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule) 12 | .catch(err => console.error(err)); 13 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/home/home-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { HomeComponent } from './home/home.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:HomeComponent} 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class HomeRoutingModule { } 14 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_components/_include.scss: -------------------------------------------------------------------------------- 1 | // Include 2 | // ******************************************************************************* 3 | 4 | @import '../_bootstrap-extended/include'; 5 | 6 | //Mixins 7 | @import './_mixins'; // Components mixins 8 | 9 | //Components variables 10 | @import '../_custom-variables/components'; // Components variable (for customization purpose) 11 | @import 'variables'; // Components variable 12 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-user/g-user-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { GUserComponent } from './g-user/g-user.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:GUserComponent} 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class GUserRoutingModule { } 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/store/store-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { StoreComponent } from './store/store.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:StoreComponent} 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class StoreRoutingModule { } 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-order/g-order-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { GOrderComponent } from './g-order/g-order.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:GOrderComponent} 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class GOrderRoutingModule { } 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/contact/contact-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { ContactComponent } from './contact/contact.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:ContactComponent} 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class ContactRoutingModule { } 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/home/home.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { HomeRoutingModule } from './home-routing.module'; 5 | import { HomeComponent } from './home/home.component'; 6 | 7 | 8 | @NgModule({ 9 | declarations: [ 10 | HomeComponent 11 | ], 12 | imports: [ 13 | CommonModule, 14 | HomeRoutingModule 15 | ] 16 | }) 17 | export class HomeModule { } 18 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/produit/produit-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { ProduitComponent } from './produit/produit.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:ProduitComponent} 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class ProduitRoutingModule { } 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/service/data.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { DataService } from './data.service'; 4 | 5 | describe('DataService', () => { 6 | let service: DataService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(DataService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-user/edit-user/edit-user.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { EditUserRoutingModule } from './edit-user-routing.module'; 4 | import { FormsModule } from '@angular/forms'; 5 | 6 | 7 | @NgModule({ 8 | declarations: [], 9 | imports: [ 10 | CommonModule, 11 | EditUserRoutingModule, 12 | FormsModule 13 | ] 14 | }) 15 | export class EditUserModule { } 16 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/register/register-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { RegisterComponent } from './register/register.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:RegisterComponent} 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class RegisterRoutingModule { } 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/store/store.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { StoreRoutingModule } from './store-routing.module'; 5 | import { StoreComponent } from './store/store.component'; 6 | 7 | 8 | @NgModule({ 9 | declarations: [ 10 | StoreComponent 11 | ], 12 | imports: [ 13 | CommonModule, 14 | StoreRoutingModule 15 | ] 16 | }) 17 | export class StoreModule { } 18 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/dashboard/dashboard-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { DashboardComponent } from './dashboard/dashboard.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:DashboardComponent} 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class DashboardRoutingModule { } 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-produit/g-produit-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { GProduitComponent } from './g-produit/g-produit.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:GProduitComponent} 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class GProduitRoutingModule { } 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/checkout/checkout-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { CheckoutComponent } from './checkout/checkout.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:CheckoutComponent} 7 | 8 | ]; 9 | 10 | @NgModule({ 11 | imports: [RouterModule.forChild(routes)], 12 | exports: [RouterModule] 13 | }) 14 | export class CheckoutRoutingModule { } 15 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/loginuser/loginuser-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { LoginuserComponent } from './loginuser/loginuser.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:LoginuserComponent} 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class LoginuserRoutingModule { } 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/guards/guardadmin.guard.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { GuardadminGuard } from './guardadmin.guard'; 4 | 5 | describe('GuardadminGuard', () => { 6 | let guard: GuardadminGuard; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | guard = TestBed.inject(GuardadminGuard); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(guard).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-user/edit-user/edit-user-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { Component, NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { EditUserComponent } from './edit-user.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:EditUserComponent} 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class EditUserRoutingModule { } 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/service/authuser.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { AuthuserService } from './authuser.service'; 4 | 5 | describe('AuthuserService', () => { 6 | let service: AuthuserService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(AuthuserService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-order/edit-order/edit-order-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { EditOrderComponent } from './edit-order/edit-order.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:EditOrderComponent} 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class EditOrderRoutingModule { } 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/contact/contact.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { ContactRoutingModule } from './contact-routing.module'; 5 | import { ContactComponent } from './contact/contact.component'; 6 | 7 | 8 | @NgModule({ 9 | declarations: [ 10 | ContactComponent 11 | ], 12 | imports: [ 13 | CommonModule, 14 | ContactRoutingModule 15 | ] 16 | }) 17 | export class ContactModule { } 18 | -------------------------------------------------------------------------------- /Front-end/src/app/views/service/authadmin.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { AuthadminService } from './authadmin.service'; 4 | 5 | describe('AuthadminService', () => { 6 | let service: AuthadminService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(AuthadminService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_custom-variables/_components.scss: -------------------------------------------------------------------------------- 1 | // ================================================================================================ 2 | // ? TIP: It is recommended to use this file for overriding component variables (_components/_variables.scss). 3 | // Copy and paste variables as needed, modify their values, and remove the !default flag. 4 | // ================================================================================================ 5 | 6 | // $menu-width: 14rem; -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-produit/edit-produit/edit-produit-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { EditProduitComponent } from './edit-produit/edit-produit.component'; 4 | 5 | const routes: Routes = [ 6 | {path:'',component:EditProduitComponent} 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class EditProduitRoutingModule { } 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/dashboard/dashboard.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { DashboardRoutingModule } from './dashboard-routing.module'; 5 | import { DashboardComponent } from './dashboard/dashboard.component'; 6 | 7 | 8 | @NgModule({ 9 | declarations: [ 10 | DashboardComponent 11 | ], 12 | imports: [ 13 | CommonModule, 14 | DashboardRoutingModule 15 | ] 16 | }) 17 | export class DashboardModule { } 18 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-order/g-order.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { GOrderRoutingModule } from './g-order-routing.module'; 5 | import { GOrderComponent } from './g-order/g-order.component'; 6 | 7 | 8 | 9 | @NgModule({ 10 | declarations: [ 11 | GOrderComponent, 12 | 13 | ], 14 | imports: [ 15 | CommonModule, 16 | GOrderRoutingModule, 17 | 18 | ] 19 | }) 20 | export class GOrderModule { } 21 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_spinners.scss: -------------------------------------------------------------------------------- 1 | // Spinners 2 | // 3 | 4 | //Large size 5 | .spinner-border-lg { 6 | width: $spinner-width-lg; 7 | height: $spinner-height-lg; 8 | border-width: $spinner-border-width-lg; 9 | } 10 | 11 | .spinner-grow-lg { 12 | width: $spinner-width-lg; 13 | height: $spinner-height-lg; 14 | border-width: $spinner-border-width-lg; 15 | } 16 | 17 | @include keyframes('spinner-border-rtl') { 18 | to { 19 | transform: rotate(-360deg); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_badge.scss: -------------------------------------------------------------------------------- 1 | // Badges 2 | // ******************************************************************************* 3 | .badge { 4 | text-transform: uppercase; 5 | line-height: $badge-line-height; 6 | } 7 | 8 | // Badge Center Style 9 | 10 | .badge-center { 11 | display: inline-flex; 12 | justify-content: center; 13 | align-items: center; 14 | @include badge-size($badge-height, $badge-width, $badge-font-size); 15 | i { 16 | font-size: 0.8rem; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_custom-variables/_libs.scss: -------------------------------------------------------------------------------- 1 | // ================================================================================================ 2 | // ? TIP: It is recommended to use this file for overriding any library variables from (libs/) folder. 3 | // Copy and paste variables as needed, modify their values, and remove the !default flag. 4 | // ================================================================================================ 5 | 6 | @import 'support'; 7 | 8 | // $flatpickr-content-padding: 0.5rem; -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_custom-variables/_pages.scss: -------------------------------------------------------------------------------- 1 | // ================================================================================================ 2 | // ? TIP: It is recommended to use this file for overriding any pages variables from the (pages/) folder. 3 | // Copy and paste variables as needed, modify their values, and remove the !default flag. 4 | // ================================================================================================ 5 | 6 | @import 'support'; 7 | 8 | // $calender-sidebar-width: 20rem; -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/pages/page-misc.scss: -------------------------------------------------------------------------------- 1 | // * Miscellaneous 2 | // ******************************************************************************* 3 | 4 | @import '../_bootstrap-extended/include'; 5 | 6 | .misc-wrapper { 7 | display: flex; 8 | flex-direction: column; 9 | justify-content: center; 10 | align-items: center; 11 | min-height: calc( 12 | 100vh - calc(#{$container-padding-y} * 2) 13 | ); // ?we have added container-p-y class to add padding on top & bottom 14 | text-align: center; 15 | } 16 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_components/mixins/_text-divider.scss: -------------------------------------------------------------------------------- 1 | // Text Divider 2 | // ******************************************************************************* 3 | 4 | @mixin template-text-divider-variant($divider-color, $background) { 5 | $divider-selector: if($divider-color== '', '', '#{$divider-color}'); 6 | .divider { 7 | &#{$divider-selector} { 8 | .divider-text { 9 | &:before, 10 | &:after { 11 | border-color: $background; 12 | } 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/js/ui-popover.js: -------------------------------------------------------------------------------- 1 | // /** 2 | // * UI Tooltips & Popovers 3 | // */ 4 | 5 | 'use strict'; 6 | 7 | (function () { 8 | const popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]')); 9 | const popoverList = popoverTriggerList.map(function (popoverTriggerEl) { 10 | // added { html: true, sanitize: false } option to render button in content area of popover 11 | return new bootstrap.Popover(popoverTriggerEl, { html: true, sanitize: false }); 12 | }); 13 | })(); 14 | -------------------------------------------------------------------------------- /Back-end/config/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "development": { 3 | "username": "root", 4 | "password": null, 5 | "database": "shop", 6 | "host": "127.0.0.1", 7 | "dialect": "mysql" 8 | }, 9 | "test": { 10 | "username": "root", 11 | "password": null, 12 | "database": "shop", 13 | "host": "127.0.0.1", 14 | "dialect": "mysql" 15 | }, 16 | "production": { 17 | "username": "root", 18 | "password": null, 19 | "database": "shop", 20 | "host": "127.0.0.1", 21 | "dialect": "mysql" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // 3 | // Template mixins (custom and overrides) 4 | @import 'mixins/alert'; 5 | @import 'mixins/badge'; 6 | @import 'mixins/buttons'; 7 | @import 'mixins/list-group'; 8 | @import 'mixins/navs'; 9 | @import 'mixins/pagination'; 10 | @import 'mixins/progress'; 11 | @import 'mixins/toasts'; 12 | @import 'mixins/caret'; 13 | @import 'mixins/dropdown'; 14 | @import 'mixins/forms'; 15 | @import 'mixins/table-variants'; 16 | @import 'mixins/misc'; // layout, text directions & colors 17 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/forms/_labels.scss: -------------------------------------------------------------------------------- 1 | // Labels 2 | // ******************************************************************************* 3 | 4 | .form-label, 5 | .col-form-label { 6 | font-size: $form-label-font-size; 7 | text-transform: $form-label-text-transform; 8 | letter-spacing: $form-label-letter-spacing; 9 | } 10 | // Default (vertical ) form label size 11 | .form-label-lg { 12 | @include font-size($input-font-size-lg); 13 | } 14 | 15 | .form-label-sm { 16 | @include font-size($input-font-size-sm); 17 | } 18 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_custom-variables/_bootstrap-extended.scss: -------------------------------------------------------------------------------- 1 | // =================================================================================================================== 2 | // ? TIP: It is recommended to use this file for overriding bootstrap extended variables (_bootstrap-extended/_variables.scss). 3 | // Copy and paste variables as needed, modify their values, and remove the !default flag. 4 | // =================================================================================================================== 5 | 6 | // $font-size-root: 14px; -------------------------------------------------------------------------------- /Front-end/src/app/views/front/produit/produit.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { ProduitRoutingModule } from './produit-routing.module'; 5 | import { ProduitComponent } from './produit/produit.component'; 6 | import { FormsModule } from '@angular/forms'; 7 | 8 | 9 | @NgModule({ 10 | declarations: [ 11 | ProduitComponent 12 | ], 13 | imports: [ 14 | CommonModule, 15 | ProduitRoutingModule, 16 | FormsModule 17 | ] 18 | }) 19 | export class ProduitModule { } 20 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/register/register.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { RegisterRoutingModule } from './register-routing.module'; 5 | import { RegisterComponent } from './register/register.component'; 6 | 7 | 8 | @NgModule({ 9 | declarations: [ 10 | RegisterComponent 11 | ], 12 | imports: [ 13 | CommonModule, 14 | RegisterRoutingModule, 15 | FormsModule 16 | ] 17 | }) 18 | export class RegisterModule { } 19 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/checkout/checkout.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { CheckoutRoutingModule } from './checkout-routing.module'; 5 | import { CheckoutComponent } from './checkout/checkout.component'; 6 | import { FormsModule } from '@angular/forms'; 7 | 8 | 9 | @NgModule({ 10 | declarations: [ 11 | CheckoutComponent 12 | ], 13 | imports: [ 14 | CommonModule, 15 | CheckoutRoutingModule, 16 | FormsModule 17 | ] 18 | }) 19 | export class CheckoutModule { } 20 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/loginuser/loginuser.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { LoginuserRoutingModule } from './loginuser-routing.module'; 5 | import { LoginuserComponent } from './loginuser/loginuser.component'; 6 | 7 | 8 | @NgModule({ 9 | declarations: [ 10 | LoginuserComponent 11 | ], 12 | imports: [ 13 | CommonModule, 14 | LoginuserRoutingModule, 15 | FormsModule 16 | ] 17 | }) 18 | export class LoginuserModule { } 19 | -------------------------------------------------------------------------------- /Back-end/router/orderrouter.js: -------------------------------------------------------------------------------- 1 | const orderController = require('../controllers/order-controller') 2 | 3 | 4 | // router 5 | const router = require('express').Router() 6 | 7 | 8 | // use routers 9 | router.post('/addorder', orderController.addOrder) 10 | router.get('/getAllorder', orderController.getAllOrder) 11 | router.get('/getOneorder/:id', orderController.getOneOrder) 12 | router.delete('/deleteorder/:id', orderController.deleteOrder) 13 | router.patch('/updateorder/:id',orderController.updateOrder) 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | module.exports = router -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-order/edit-order/edit-order.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { EditOrderRoutingModule } from './edit-order-routing.module'; 5 | import { EditOrderComponent } from './edit-order/edit-order.component'; 6 | 7 | 8 | @NgModule({ 9 | declarations: [ 10 | EditOrderComponent 11 | ], 12 | imports: [ 13 | CommonModule, 14 | EditOrderRoutingModule, 15 | FormsModule 16 | ] 17 | }) 18 | export class EditOrderModule { } 19 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-produit/g-produit.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { GProduitRoutingModule } from './g-produit-routing.module'; 5 | import { GProduitComponent } from './g-produit/g-produit.component'; 6 | import { FormsModule } from '@angular/forms'; 7 | 8 | 9 | 10 | @NgModule({ 11 | declarations: [ 12 | GProduitComponent, 13 | 14 | 15 | ], 16 | imports: [ 17 | CommonModule, 18 | GProduitRoutingModule, 19 | FormsModule 20 | ] 21 | }) 22 | export class GProduitModule { } 23 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-produit/edit-produit/edit-produit.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { EditProduitRoutingModule } from './edit-produit-routing.module'; 5 | import { EditProduitComponent } from './edit-produit/edit-produit.component'; 6 | 7 | 8 | @NgModule({ 9 | declarations: [ 10 | EditProduitComponent 11 | ], 12 | imports: [ 13 | CommonModule, 14 | EditProduitRoutingModule, 15 | FormsModule 16 | ] 17 | }) 18 | export class EditProduitModule { } 19 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/vendor/css/pages/page-account-settings.css: -------------------------------------------------------------------------------- 1 | .api-key-actions { 2 | position: absolute !important; 3 | top: 0.75rem; 4 | right: 0.5rem; 5 | } 6 | 7 | /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhZ2VzL3BhZ2UtYWNjb3VudC1zZXR0aW5ncy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSw2QkFBNkI7RUFDN0IsWUFBWTtFQUNaLGFBQWE7QUFDZiIsImZpbGUiOiJwYWdlcy9wYWdlLWFjY291bnQtc2V0dGluZ3MuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmFwaS1rZXktYWN0aW9ucyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICB0b3A6IDAuNzVyZW07XG4gIHJpZ2h0OiAwLjVyZW07XG59XG4iXX0= */ 8 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_components/mixins/_avatar.scss: -------------------------------------------------------------------------------- 1 | // Avatar 2 | // ******************************************************************************* 3 | 4 | @mixin template-avatar-style($height, $width, $font-size, $status-indicator-position: 2px) { 5 | width: $width; 6 | height: $height; 7 | 8 | .avatar-initial { 9 | font-size: $font-size; 10 | } 11 | 12 | &.avatar-online, 13 | &.avatar-offline, 14 | &.avatar-away, 15 | &.avatar-busy { 16 | &:after { 17 | width: $width * 0.2; 18 | height: $height * 0.2; 19 | right: $status-indicator-position; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_include.scss: -------------------------------------------------------------------------------- 1 | //Functions 2 | @import '../../node_modules/bootstrap/scss/functions'; // Bootstrap core functions 3 | @import 'functions'; // Bootstrap extended functions 4 | 5 | //Variables 6 | @import '../_custom-variables/bootstrap-extended'; // Bootstrap extended custom variable (for customization purpose) 7 | @import 'variables'; // Bootstrap extended variable 8 | @import '../../node_modules/bootstrap/scss/variables'; // Bootstrap core variable 9 | 10 | //Mixins 11 | @import '../../node_modules/bootstrap/scss/mixins'; // Bootstrap core mixins 12 | @import 'mixins'; // Bootstrap extended mixins 13 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-user/g-user.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { GUserRoutingModule } from './g-user-routing.module'; 5 | import { GUserComponent } from './g-user/g-user.component'; 6 | import { FormsModule } from '@angular/forms'; 7 | import { EditUserComponent } from './edit-user/edit-user.component'; 8 | 9 | @NgModule({ 10 | declarations: [ 11 | GUserComponent, 12 | EditUserComponent, 13 | 14 | ], 15 | imports: [ 16 | CommonModule, 17 | GUserRoutingModule, 18 | FormsModule 19 | ] 20 | }) 21 | export class GUserModule { } 22 | -------------------------------------------------------------------------------- /Back-end/router/produitrouter.js: -------------------------------------------------------------------------------- 1 | 2 | const produitController = require('../controllers/produit-controller') 3 | 4 | 5 | // router 6 | const router = require('express').Router() 7 | 8 | 9 | // use routers 10 | router.post('/addproduit',produitController.upload,produitController.addProduit) 11 | router.get('/getAllproduit', produitController.getAllProduit) 12 | router.get('/getOneproduit/:id', produitController.getOneProduit) 13 | router.delete('/deleteproduit/:id', produitController.deleteProduit) 14 | router.patch('/updateproduit/:id',produitController.upload,produitController.updateproduit) 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | module.exports = router -------------------------------------------------------------------------------- /Back-end/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "server.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "oussema mansouri", 10 | "license": "ISC", 11 | "dependencies": { 12 | "bcrypt": "^5.0.1", 13 | "cors": "^2.8.5", 14 | "express": "^4.17.3", 15 | "joi": "^17.6.0", 16 | "jsonwebtoken": "^8.5.1", 17 | "multer": "^1.4.4", 18 | "mysql2": "^2.3.3", 19 | "nodemailer": "^6.7.2", 20 | "sequelize": "^6.17.0", 21 | "sequelize-cli": "^6.4.1" 22 | }, 23 | "devDependencies": { 24 | "nodemon": "^2.0.19" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Front-end/.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # For the full list of supported browsers by the Angular framework, please see: 6 | # https://angular.io/guide/browser-support 7 | 8 | # You can see what browsers were selected by your queries by running: 9 | # npx browserslist 10 | 11 | last 1 Chrome version 12 | last 1 Firefox version 13 | last 2 Edge major versions 14 | last 2 Safari major versions 15 | last 2 iOS major versions 16 | Firefox ESR 17 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/mixins/_progress.scss: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | // ******************************************************************************* 3 | 4 | @mixin template-progress-bar-theme($background, $color: null) { 5 | .progress-bar { 6 | background-color: $background; 7 | color: if($color, $color, color-contrast($background)); 8 | box-shadow: 0 2px 4px 0 rgba($background, 0.4); 9 | } 10 | } 11 | 12 | @mixin template-progress-bar-shadow-variant($parent, $background-shadow) { 13 | $background-shadow: $background-shadow; 14 | .progress-bar { 15 | &#{$parent} { 16 | box-shadow: 0 2px 4px 0 rgba($background-shadow, 0.4); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_components/mixins/_app-brand.scss: -------------------------------------------------------------------------------- 1 | // Within menu 2 | @mixin template-app-brand-collapsed() { 3 | .app-brand { 4 | width: $menu-collapsed-width; 5 | } 6 | 7 | .app-brand-logo, 8 | .app-brand-link, 9 | .app-brand-text { 10 | margin-right: auto; 11 | margin-left: auto; 12 | } 13 | 14 | .app-brand-logo ~ .app-brand-text { 15 | overflow: hidden; 16 | text-overflow: ellipsis; 17 | white-space: nowrap; 18 | opacity: 0; 19 | } 20 | .app-brand .layout-menu-toggle { 21 | display: none !important; 22 | } 23 | 24 | .app-brand-img { 25 | display: none; 26 | } 27 | 28 | .app-brand-img-collapsed { 29 | display: block; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Front-end/src/app/layouts/page-error/page-error.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | page error 8 | 12 | 13 | 14 | 15 | 16 |
17 | background-image 18 |
19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /Front-end/src/app/layouts/front-layout/front-layout.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | import { AuthuserService } from 'src/app/views/service/authuser.service'; 4 | 5 | @Component({ 6 | selector: 'app-front-layout', 7 | templateUrl: './front-layout.component.html', 8 | styleUrls: ['./front-layout.component.css'] 9 | }) 10 | export class FrontLayoutComponent implements OnInit { 11 | 12 | constructor(public aus:AuthuserService,private router:Router) { } 13 | 14 | ngOnInit(): void { 15 | } 16 | logout(){ 17 | localStorage.clear() 18 | this.router.navigate(['/loginuser']) 19 | } 20 | Home(){ 21 | this.router.navigate(['']) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/store/store/store.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { StoreComponent } from './store.component'; 4 | 5 | describe('StoreComponent', () => { 6 | let component: StoreComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ StoreComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(StoreComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-user/g-user/g-user.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { GUserComponent } from './g-user.component'; 4 | 5 | describe('GUserComponent', () => { 6 | let component: GUserComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ GUserComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(GUserComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /Front-end/.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # Compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | /bazel-out 8 | 9 | # Node 10 | /node_modules 11 | npm-debug.log 12 | yarn-error.log 13 | 14 | # IDEs and editors 15 | .idea/ 16 | .project 17 | .classpath 18 | .c9/ 19 | *.launch 20 | .settings/ 21 | *.sublime-workspace 22 | 23 | # Visual Studio Code 24 | .vscode/* 25 | !.vscode/settings.json 26 | !.vscode/tasks.json 27 | !.vscode/launch.json 28 | !.vscode/extensions.json 29 | .history/* 30 | 31 | # Miscellaneous 32 | /.angular/cache 33 | .sass-cache/ 34 | /connect.lock 35 | /coverage 36 | /libpeerconnection.log 37 | testem.log 38 | /typings 39 | 40 | # System files 41 | .DS_Store 42 | Thumbs.db 43 | -------------------------------------------------------------------------------- /Front-end/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // `ng build` replaces `environment.ts` with `environment.prod.ts`. 3 | // The list of file replacements can be found in `angular.json`. 4 | 5 | export const environment = { 6 | production: false 7 | }; 8 | 9 | /* 10 | * For easier debugging in development mode, you can import the following file 11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 12 | * 13 | * This import should be commented out in production mode because it will have a negative impact 14 | * on performance if an error is thrown. 15 | */ 16 | // import 'zone.js/plugins/zone-error'; // Included with Angular CLI. 17 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-order/g-order/g-order.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { GOrderComponent } from './g-order.component'; 4 | 5 | describe('GOrderComponent', () => { 6 | let component: GOrderComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ GOrderComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(GOrderComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/contact/contact/contact.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ContactComponent } from './contact.component'; 4 | 5 | describe('ContactComponent', () => { 6 | let component: ContactComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ContactComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ContactComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/produit/produit/produit.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ProduitComponent } from './produit.component'; 4 | 5 | describe('ProduitComponent', () => { 6 | let component: ProduitComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ProduitComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ProduitComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /Front-end/src/app/layouts/page-error/page-error.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { PageErrorComponent } from './page-error.component'; 4 | 5 | describe('PageErrorComponent', () => { 6 | let component: PageErrorComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ PageErrorComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(PageErrorComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/checkout/checkout/checkout.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { CheckoutComponent } from './checkout.component'; 4 | 5 | describe('CheckoutComponent', () => { 6 | let component: CheckoutComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ CheckoutComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(CheckoutComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/home/home/home.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomeComponent } from './home.component'; 4 | 5 | describe('HomeComponent', () => { 6 | let component: HomeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ HomeComponent ] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(HomeComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/register/register/register.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { RegisterComponent } from './register.component'; 4 | 5 | describe('RegisterComponent', () => { 6 | let component: RegisterComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ RegisterComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(RegisterComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /Front-end/src/app/layouts/adminlogin/adminlogin.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AdminloginComponent } from './adminlogin.component'; 4 | 5 | describe('AdminloginComponent', () => { 6 | let component: AdminloginComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ AdminloginComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(AdminloginComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-produit/g-produit/g-produit.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { GProduitComponent } from './g-produit.component'; 4 | 5 | describe('GProduitComponent', () => { 6 | let component: GProduitComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ GProduitComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(GProduitComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-user/edit-user/edit-user.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { EditUserComponent } from './edit-user.component'; 4 | 5 | describe('EditUserComponent', () => { 6 | let component: EditUserComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ EditUserComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(EditUserComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-order/edit-order/edit-order/edit-order.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { EditOrderComponent } from './edit-order.component'; 4 | 5 | describe('EditOrderComponent', () => { 6 | let component: EditOrderComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ EditOrderComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(EditOrderComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /Front-end/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { BrowserModule } from '@angular/platform-browser'; 3 | import { FormsModule, NgForm } from '@angular/forms'; 4 | import { AppRoutingModule } from './app-routing.module'; 5 | import { AppComponent } from './app.component'; 6 | import { LayoutsModule } from './layouts/layouts.module'; 7 | import { HttpClientModule } from '@angular/common/http'; 8 | import { RouterModule } from '@angular/router'; 9 | @NgModule({ 10 | declarations: [ 11 | AppComponent 12 | ], 13 | imports: [ 14 | BrowserModule, 15 | AppRoutingModule, 16 | LayoutsModule, 17 | HttpClientModule, 18 | FormsModule, 19 | RouterModule 20 | ], 21 | providers: [], 22 | bootstrap: [AppComponent] 23 | }) 24 | export class AppModule { } 25 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-produit/edit-produit/edit-produit/edit-produit.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { EditProduitComponent } from './edit-produit.component'; 4 | 5 | describe('EditProduitComponent', () => { 6 | let component: EditProduitComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ EditProduitComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(EditProduitComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/dashboard/dashboard/dashboard.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { DashboardComponent } from './dashboard.component'; 4 | 5 | describe('DashboardComponent', () => { 6 | let component: DashboardComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ DashboardComponent ] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(DashboardComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/loginuser/loginuser/loginuser.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { LoginuserComponent } from './loginuser.component'; 4 | 5 | describe('LoginuserComponent', () => { 6 | let component: LoginuserComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ LoginuserComponent ] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(LoginuserComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_carousel.scss: -------------------------------------------------------------------------------- 1 | // Carousel 2 | // ******************************************************************************* 3 | 4 | // 5 | .carousel { 6 | .carousel-item.active, 7 | .carousel-item.carousel-item-start { 8 | h1, 9 | .h1, 10 | h2, 11 | .h2, 12 | h3, 13 | .h3, 14 | h4, 15 | .h4, 16 | h5, 17 | .h5, 18 | h6, 19 | .h6 { 20 | color: $carousel-caption-color; 21 | } 22 | } 23 | } 24 | .carousel.carousel-dark { 25 | .carousel-item.active, 26 | .carousel-item.carousel-item-start { 27 | h1, 28 | .h1, 29 | h2, 30 | .h2, 31 | h3, 32 | .h3, 33 | h4, 34 | .h4, 35 | h5, 36 | .h5, 37 | h6, 38 | .h6 { 39 | color: $carousel-dark-caption-color; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Front-end/src/app/layouts/admin-layout/admin-layout.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AdminLayoutComponent } from './admin-layout.component'; 4 | 5 | describe('AdminLayoutComponent', () => { 6 | let component: AdminLayoutComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ AdminLayoutComponent ] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AdminLayoutComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /Front-end/src/app/layouts/front-layout/front-layout.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { FrontLayoutComponent } from './front-layout.component'; 4 | 5 | describe('FrontLayoutComponent', () => { 6 | let component: FrontLayoutComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ FrontLayoutComponent ] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(FrontLayoutComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-user/edit-user/edit-user.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute } from '@angular/router'; 3 | import { DataService } from 'src/app/views/service/data.service'; 4 | 5 | @Component({ 6 | selector: 'app-edit-user', 7 | templateUrl: './edit-user.component.html', 8 | styleUrls: ['./edit-user.component.css'] 9 | }) 10 | export class EditUserComponent implements OnInit { 11 | userId:any 12 | datau:any 13 | 14 | constructor(private Activatedroute: ActivatedRoute,private ds:DataService) { 15 | 16 | this.userId = 17 | this.Activatedroute.snapshot.queryParamMap.get('userid') || 0; 18 | this.ds.getoneuser(this.userId).subscribe((data) => (this.datau = data)); 19 | } 20 | 21 | ngOnInit(): void { 22 | } 23 | 24 | 25 | 26 | 27 | } 28 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_popover.scss: -------------------------------------------------------------------------------- 1 | // Popovers 2 | // ******************************************************************************* 3 | 4 | .modal-open .popover { 5 | z-index: $zindex-modal + 1; 6 | } 7 | 8 | .popover { 9 | box-shadow: $popover-box-shadow; 10 | 11 | .popover-arrow { 12 | z-index: 1; 13 | } 14 | &.bs-popover-bottom > .popover-arrow { 15 | &::after { 16 | border-bottom-color: if(not $dark-style, rgba-to-hex($popover-header-bg), $popover-header-bg); 17 | top: 2px; 18 | } 19 | &:before { 20 | top: 1px; 21 | } 22 | } 23 | } 24 | 25 | // popover header font size override 26 | .popover-header { 27 | padding: $popover-header-padding-x $popover-header-padding-x $popover-header-padding-y; 28 | @include font-size($popover-header-font-size); 29 | } 30 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_reboot.scss: -------------------------------------------------------------------------------- 1 | // Reboot 2 | // 3 | 4 | b, 5 | strong { 6 | font-weight: $font-weight-bold; 7 | } 8 | 9 | a:not([href]) { 10 | color: inherit; 11 | text-decoration: none; 12 | 13 | &:hover { 14 | color: inherit; 15 | text-decoration: none; 16 | } 17 | } 18 | 19 | //! Fix: Autofill input bg and text color issue on different OS and browsers 20 | input:-webkit-autofill, 21 | input:-webkit-autofill:hover, 22 | input:-webkit-autofill:focus, 23 | textarea:-webkit-autofill, 24 | textarea:-webkit-autofill:hover, 25 | textarea:-webkit-autofill:focus, 26 | select:-webkit-autofill, 27 | select:-webkit-autofill:hover, 28 | select:-webkit-autofill:focus, 29 | input:-internal-autofill-selected { 30 | background-clip: text !important; 31 | -webkit-background-clip: text !important; 32 | } 33 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/mixins/_pagination.scss: -------------------------------------------------------------------------------- 1 | // Pagination 2 | // ******************************************************************************* 3 | 4 | // Basic Pagination 5 | @mixin template-pagination-variant($parent, $background, $color: null) { 6 | #{$parent} .page-item.active .page-link, 7 | #{$parent}.pagination li.active > a:not(.page-link) { 8 | &, 9 | &:hover, 10 | &:focus { 11 | border-color: $background; 12 | background-color: $background; 13 | color: if($color, $color, color-contrast($background)); 14 | box-shadow: 0 0.125rem 0.25rem rgba(rgba-to-hex($background, $rgba-to-hex-bg), 0.4); 15 | } 16 | } 17 | } 18 | 19 | @mixin template-pagination-theme($background, $color: null) { 20 | @include template-pagination-variant('', $background, $color); 21 | } 22 | -------------------------------------------------------------------------------- /Back-end/models/User.js: -------------------------------------------------------------------------------- 1 | module.exports=(sequelize,DataType)=>{ 2 | const User=sequelize.define("User",{ 3 | username:{ 4 | type:DataType.STRING, 5 | allowNull:true 6 | }, 7 | email:{ 8 | type:DataType.STRING, 9 | allowNull:true 10 | }, 11 | password:{ 12 | type:DataType.STRING, 13 | allowNull:true 14 | }, 15 | img:{ 16 | type:DataType.STRING, 17 | allowNull:true 18 | }, 19 | 20 | }) 21 | 22 | User.associate=models=>{ 23 | User.hasMany(models.Produit,{ 24 | onDelete:"cascade" 25 | }) 26 | User.hasMany(models.Order,{ 27 | onDelete:"cascade" 28 | }) 29 | 30 | } 31 | 32 | return User 33 | 34 | } -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/vendor/css/pages/page-misc.css: -------------------------------------------------------------------------------- 1 | .misc-wrapper { 2 | display: flex; 3 | flex-direction: column; 4 | justify-content: center; 5 | align-items: center; 6 | min-height: calc(100vh - (1.625rem * 2)); 7 | text-align: center; 8 | } 9 | 10 | /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhZ2VzL3BhZ2UtbWlzYy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxhQUFhO0VBQ2Isc0JBQXNCO0VBQ3RCLHVCQUF1QjtFQUN2QixtQkFBbUI7RUFDbkIsd0NBQXdDO0VBQ3hDLGtCQUFrQjtBQUNwQiIsImZpbGUiOiJwYWdlcy9wYWdlLW1pc2MuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLm1pc2Mtd3JhcHBlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gKDEuNjI1cmVtICogMikpO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4iXX0= */ 11 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/js/config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Config 3 | * ------------------------------------------------------------------------------------- 4 | * ! IMPORTANT: Make sure you clear the browser local storage In order to see the config changes in the template. 5 | * ! To clear local storage: (https://www.leadshook.com/help/how-to-clear-local-storage-in-google-chrome-browser/). 6 | */ 7 | 8 | 'use strict'; 9 | 10 | // JS global variables 11 | let config = { 12 | colors: { 13 | primary: '#696cff', 14 | secondary: '#8592a3', 15 | success: '#71dd37', 16 | info: '#03c3ec', 17 | warning: '#ffab00', 18 | danger: '#ff3e1d', 19 | dark: '#233446', 20 | black: '#000', 21 | white: '#fff', 22 | body: '#f4f5fb', 23 | headingColor: '#566a7f', 24 | axisColor: '#a1acb8', 25 | borderColor: '#eceef1' 26 | } 27 | }; 28 | -------------------------------------------------------------------------------- /Back-end/models/order.js: -------------------------------------------------------------------------------- 1 | module.exports = (sequelize, DataType) => { 2 | const Order = sequelize.define("Order", { 3 | quantite: { 4 | type: DataType.STRING, 5 | allowNull: true 6 | }, 7 | amount: { 8 | type: DataType.STRING, 9 | allowNull: true 10 | }, 11 | adress: { 12 | type: DataType.STRING, 13 | allowNull: true 14 | }, 15 | status: { 16 | type: DataType.STRING, 17 | allowNull: true 18 | }, 19 | 20 | 21 | 22 | 23 | }) 24 | 25 | Order.associate = models => { 26 | Order.belongsTo(models.User, { 27 | onDelete: "cascade" 28 | }) 29 | 30 | Order.belongsTo(models.Produit,{ 31 | onDelete:"cascade" 32 | }) 33 | 34 | } 35 | 36 | return Order 37 | } -------------------------------------------------------------------------------- /Front-end/src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | declare const require: { 11 | context(path: string, deep?: boolean, filter?: RegExp): { 12 | (id: string): T; 13 | keys(): string[]; 14 | }; 15 | }; 16 | 17 | // First, initialize the Angular testing environment. 18 | getTestBed().initTestEnvironment( 19 | BrowserDynamicTestingModule, 20 | platformBrowserDynamicTesting(), 21 | ); 22 | 23 | // Then we find all the tests. 24 | const context = require.context('./', true, /\.spec\.ts$/); 25 | // And load the modules. 26 | context.keys().forEach(context); 27 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/fonts/boxicons.scss: -------------------------------------------------------------------------------- 1 | $boxicons-font-path: 'boxicons'; 2 | $boxicons-font-size-base: 16px; 3 | 4 | @import '../node_modules/boxicons/css/boxicons'; 5 | 6 | .bx { 7 | vertical-align: middle; 8 | font-size: 1.15rem; 9 | line-height: 1; 10 | } 11 | // Override font path 12 | @font-face { 13 | font-family: 'boxicons'; 14 | font-weight: normal; 15 | font-style: normal; 16 | 17 | src: url('../fonts/#{$boxicons-font-path}/boxicons.eot'); 18 | src: url('../fonts/#{$boxicons-font-path}/boxicons.eot') format('embedded-opentype'), 19 | url('../fonts/#{$boxicons-font-path}/boxicons.woff2') format('woff2'), 20 | url('../fonts/#{$boxicons-font-path}/boxicons.woff') format('woff'), 21 | url('../fonts/#{$boxicons-font-path}/boxicons.ttf') format('truetype'), 22 | url('../fonts/#{$boxicons-font-path}/boxicons.svg?#boxicons') format('svg'); 23 | } 24 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_components/_footer.scss: -------------------------------------------------------------------------------- 1 | // Footer 2 | // ******************************************************************************* 3 | 4 | .footer-link { 5 | display: inline-block; 6 | } 7 | 8 | // Light footer 9 | .footer-light { 10 | color: $navbar-light-color; 11 | 12 | .footer-text { 13 | color: $navbar-light-active-color; 14 | } 15 | 16 | .footer-link { 17 | color: $navbar-light-color; 18 | 19 | &:hover, 20 | &:focus { 21 | color: $navbar-light-hover-color; 22 | } 23 | 24 | &.disabled { 25 | color: $navbar-light-disabled-color !important; 26 | } 27 | } 28 | 29 | .show > .footer-link, 30 | .active > .footer-link, 31 | .footer-link.show, 32 | .footer-link.active { 33 | color: $navbar-light-active-color; 34 | } 35 | 36 | hr { 37 | border-color: $menu-light-border-color; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Front-end/src/app/layouts/admin-layout/admin-layout.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | import { AuthadminService } from 'src/app/views/service/authadmin.service'; 4 | 5 | @Component({ 6 | selector: 'app-admin-layout', 7 | templateUrl: './admin-layout.component.html', 8 | styleUrls: ['./admin-layout.component.css'] 9 | }) 10 | export class AdminLayoutComponent implements OnInit { 11 | username:any 12 | constructor(private ads:AuthadminService,private router:Router) { 13 | this.username=localStorage.getItem('username') 14 | if (this.ads.LoggedIn()==true){ 15 | console.log("conected") 16 | }else 17 | { 18 | this.router.navigate(['/loginadmin']) 19 | } 20 | } 21 | 22 | ngOnInit(): void { 23 | } 24 | logout(){ 25 | localStorage.clear() 26 | this.router.navigate(['/loginadmin']) 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/mixins/_dropdown.scss: -------------------------------------------------------------------------------- 1 | // * Dropdowns 2 | // ******************************************************************************* 3 | 4 | @mixin template-dropdown-variant($parent, $background, $color: null) { 5 | #{$parent} .dropdown-item:not(.disabled).active, 6 | #{$parent} .dropdown-item:not(.disabled):active { 7 | background-color: $background; 8 | color: if($color, $color, color-contrast($background)) !important; 9 | } 10 | 11 | #{$parent}.dropdown-menu > li:not(.disabled) > a:not(.dropdown-item):active, 12 | #{$parent}.dropdown-menu > li.active:not(.disabled) > a:not(.dropdown-item) { 13 | background-color: $background; 14 | color: if($color, $color, color-contrast($background)) !important; 15 | } 16 | } 17 | 18 | @mixin template-dropdown-theme($background, $color: null) { 19 | @include template-dropdown-variant('', $background, $color); 20 | } 21 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/pages/page-icons.scss: -------------------------------------------------------------------------------- 1 | // * Page Icons (Page specific only) 2 | // ******************************************************************************* 3 | 4 | @import '../_bootstrap-extended/include'; 5 | @import '../_custom-variables/pages'; 6 | 7 | #icons-container { 8 | .icon-card { 9 | width: 128px; 10 | 11 | i { 12 | font-size: 2rem; 13 | } 14 | } 15 | } 16 | 17 | @media (max-width: 1024px) { 18 | #icons-container { 19 | .icon-card { 20 | width: 126px; 21 | } 22 | } 23 | } 24 | @include media-breakpoint-down(md) { 25 | #icons-container { 26 | .icon-card { 27 | width: 131px; 28 | } 29 | } 30 | } 31 | 32 | @media (max-width: 414px) { 33 | #icons-container { 34 | .icon-card { 35 | width: 110px; 36 | } 37 | } 38 | } 39 | 40 | @media (max-width: 375px) { 41 | #icons-container { 42 | .icon-card { 43 | width: 150px; 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Front-end/src/app/layouts/layouts.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { AdminLayoutComponent } from './admin-layout/admin-layout.component'; 4 | import { FrontLayoutComponent } from './front-layout/front-layout.component'; 5 | import { ActivatedRoute, Router, RouterModule, RouterOutlet } from '@angular/router'; 6 | import { AdminloginComponent } from './adminlogin/adminlogin.component'; 7 | import { FormsModule } from '@angular/forms'; 8 | import { PageErrorComponent } from './page-error/page-error.component'; 9 | 10 | 11 | 12 | @NgModule({ 13 | declarations: [ 14 | AdminLayoutComponent, 15 | FrontLayoutComponent, 16 | AdminloginComponent, 17 | PageErrorComponent 18 | ], 19 | imports: [ 20 | CommonModule, 21 | RouterModule, 22 | FormsModule 23 | 24 | 25 | ], 26 | providers: [ 27 | 28 | ], 29 | }) 30 | export class LayoutsModule { } 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Oussama Shop 2 | 3 | **Oussama Shop** is an e-commerce platform I developed using the **MEAN stack** (MongoDB, Express.js, Angular, Node.js) to provide a robust, scalable, and responsive user experience. 4 | 5 | - **MongoDB** serves as the primary NoSQL database, efficiently handling product data storage and retrieval. 6 | - **Express.js** powers the backend with a flexible and lightweight server-side framework. 7 | - **Angular** delivers a dynamic and user-friendly frontend interface. 8 | - **Node.js** ensures high performance and scalability on the server side. 9 | 10 | In addition to the MEAN stack version, I also built an alternative version using **Sequelize** and a SQL-based database to offer flexibility in backend data management. 11 | 12 | > ⚠️ **Note:** This is an early-stage version and does not yet follow best practices. 13 | > For access to the final version with clean architecture and production-ready standards, feel free to contact me. 14 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/loginuser/loginuser/loginuser.component.ts: -------------------------------------------------------------------------------- 1 | import { HttpErrorResponse } from '@angular/common/http'; 2 | import { Component, OnInit } from '@angular/core'; 3 | import { Router } from '@angular/router'; 4 | import { AuthuserService } from 'src/app/views/service/authuser.service'; 5 | 6 | @Component({ 7 | selector: 'app-loginuser', 8 | templateUrl: './loginuser.component.html', 9 | styleUrls: ['./loginuser.component.css'] 10 | }) 11 | export class LoginuserComponent implements OnInit { 12 | messageErr:any 13 | datatoken:any 14 | 15 | constructor(private aus:AuthuserService,private router:Router) { } 16 | 17 | ngOnInit(): void { 18 | } 19 | loginuser(f:any){ 20 | let data=f.value 21 | this.aus.loginuser(data).subscribe(data=>{ 22 | this.datatoken=data 23 | this.aus.saveToken(this.datatoken.token) 24 | this.router.navigate(['']) 25 | 26 | 27 | },(err:HttpErrorResponse)=>this.messageErr=err.error.error) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Front-end/tsconfig.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "compileOnSave": false, 4 | "compilerOptions": { 5 | "baseUrl": "./", 6 | "outDir": "./dist/out-tsc", 7 | "forceConsistentCasingInFileNames": true, 8 | "strict": true, 9 | "noImplicitOverride": true, 10 | "noPropertyAccessFromIndexSignature": true, 11 | "noImplicitReturns": true, 12 | "noFallthroughCasesInSwitch": true, 13 | "sourceMap": true, 14 | "declaration": false, 15 | "downlevelIteration": true, 16 | "experimentalDecorators": true, 17 | "moduleResolution": "node", 18 | "importHelpers": true, 19 | "target": "es2020", 20 | "module": "es2020", 21 | "lib": [ 22 | "es2020", 23 | "dom" 24 | ] 25 | }, 26 | "angularCompilerOptions": { 27 | "enableI18nLegacyMessageIdFormat": false, 28 | "strictInjectionParameters": true, 29 | "strictInputAccessModifiers": true, 30 | "strictTemplates": true 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_progress.scss: -------------------------------------------------------------------------------- 1 | // Progress 2 | // ******************************************************************************* 3 | 4 | .progress { 5 | overflow: initial; //revet the default style for box-shadow 6 | } 7 | 8 | // Progress Shadow Variant 9 | @each $color, $value in $theme-colors { 10 | @if $color != primary { 11 | @include template-progress-bar-shadow-variant('.bg-#{$color}', $value); 12 | } 13 | } 14 | 15 | @include ltr-only { 16 | .progress-bar-striped { 17 | @include gradient-striped(rgba($white, 0.07), 45deg); 18 | } 19 | 20 | .progress { 21 | // border radius for first and last child 22 | .progress-bar:last-child { 23 | border-top-right-radius: $progress-border-radius; 24 | border-bottom-right-radius: $progress-border-radius; 25 | } 26 | .progress-bar:first-child { 27 | border-top-left-radius: $progress-border-radius; 28 | border-bottom-left-radius: $progress-border-radius; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-order/g-order/g-order.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { HttpClient } from '@angular/common/http'; 3 | import { DataService } from 'src/app/views/service/data.service'; 4 | import { Router } from '@angular/router'; 5 | @Component({ 6 | selector: 'app-g-order', 7 | templateUrl: './g-order.component.html', 8 | styleUrls: ['./g-order.component.css'] 9 | }) 10 | export class GOrderComponent implements OnInit { 11 | 12 | dataArray:any 13 | constructor(private ds:DataService,private router:Router) { 14 | this.ds.getorder().subscribe(data=>this.dataArray=data) 15 | 16 | } 17 | 18 | ngOnInit(): void { 19 | this.ds.getorder().subscribe(data=>this.dataArray=data) 20 | } 21 | delete(id:any){ 22 | this.ds.deleteorder(id).subscribe(res=>{ 23 | this.ngOnInit() 24 | }) 25 | 26 | } 27 | getidorder(id:any) { 28 | 29 | this.router.navigate(['admin/edit-order'], { queryParams: { orderId: id } }); 30 | 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/js/pages-account-settings-account.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Account Settings - Account 3 | */ 4 | 5 | 'use strict'; 6 | 7 | document.addEventListener('DOMContentLoaded', function (e) { 8 | (function () { 9 | const deactivateAcc = document.querySelector('#formAccountDeactivation'); 10 | 11 | // Update/reset user image of account page 12 | let accountUserImage = document.getElementById('uploadedAvatar'); 13 | const fileInput = document.querySelector('.account-file-input'), 14 | resetFileInput = document.querySelector('.account-image-reset'); 15 | 16 | if (accountUserImage) { 17 | const resetImage = accountUserImage.src; 18 | fileInput.onchange = () => { 19 | if (fileInput.files[0]) { 20 | accountUserImage.src = window.URL.createObjectURL(fileInput.files[0]); 21 | } 22 | }; 23 | resetFileInput.onclick = () => { 24 | fileInput.value = ''; 25 | accountUserImage.src = resetImage; 26 | }; 27 | } 28 | })(); 29 | }); 30 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/home/home/home.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | import { AuthadminService } from 'src/app/views/service/authadmin.service'; 4 | import { HttpErrorResponse } from '@angular/common/http'; 5 | import { DataService } from 'src/app/views/service/data.service'; 6 | @Component({ 7 | selector: 'app-home', 8 | templateUrl: './home.component.html', 9 | styleUrls: ['./home.component.css'] 10 | }) 11 | export class HomeComponent implements OnInit { 12 | imagepath:any='http://127.0.0.1:3000/' 13 | dataArray:any 14 | constructor(private ds:DataService,private router:Router,private dsa:AuthadminService) { } 15 | newChange(): void { 16 | this.router.navigateByUrl('produit'); 17 | } 18 | 19 | ngOnInit(): void { 20 | this.ds.getproduit().subscribe(data=>this.dataArray=data) 21 | } 22 | getoneproduit(id:any) { 23 | 24 | this.router.navigate(['produit'], { queryParams: { produitId: id } }); 25 | 26 | 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /Front-end/src/app/views/guards/guardadmin.guard.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router'; 3 | import { Observable } from 'rxjs'; 4 | import { AuthadminService } from '../service/authadmin.service'; 5 | 6 | @Injectable({ 7 | providedIn: 'root' 8 | }) 9 | export class GuardadminGuard implements CanActivate { 10 | constructor(private ads:AuthadminService,private router:Router){ 11 | 12 | } 13 | canActivate( 14 | route: ActivatedRouteSnapshot, 15 | state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree { 16 | 17 | 18 | //return true 19 | return new Promise((resolve,reject)=>{ 20 | if (this.ads.LoggedIn()==true) 21 | { 22 | resolve(true) 23 | } 24 | else{ 25 | this.router.navigate(['/loginadmin'],{queryParams:{returnUrl:state.url}}) 26 | resolve(false) 27 | } 28 | }) 29 | 30 | 31 | } 32 | 33 | } 34 | 35 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/checkout/checkout/checkout.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { HttpClient, HttpErrorResponse } from '@angular/common/http'; 3 | 4 | import { DataService } from 'src/app/views/service/data.service'; 5 | import { Router } from '@angular/router'; 6 | import { FormsModule, NgForm } from '@angular/forms'; 7 | @Component({ 8 | selector: 'app-checkout', 9 | templateUrl: './checkout.component.html', 10 | styleUrls: ['./checkout.component.css'] 11 | }) 12 | export class CheckoutComponent implements OnInit { 13 | messageErr:any 14 | message:any 15 | constructor(private ds:DataService,private router:Router) { } 16 | 17 | ngOnInit(): void { 18 | } 19 | addo(f:any){ 20 | let data=f.value 21 | 22 | this.ds.addorder(data).subscribe(response=>{ 23 | this.ngOnInit() 24 | this.message="Produit Ajouter avec successs" 25 | 26 | 27 | 28 | },(err:HttpErrorResponse)=>{ 29 | this.messageErr=err.error 30 | 31 | 32 | }) 33 | 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/js/bootstrap.js: -------------------------------------------------------------------------------- 1 | import * as bootstrap from 'bootstrap' 2 | 3 | // Extend Tooltip to add color options 4 | bootstrap.Tooltip.prototype.show = (original => { 5 | return function addTooltipColor() { 6 | if (this._config.toggle === 'tooltip') { 7 | if (this._element.getAttribute('data-color')) { 8 | const str = `tooltip-${this._element.getAttribute('data-color')}` 9 | this.getTipElement().classList.add(str) 10 | } 11 | } 12 | original.apply(this) 13 | } 14 | })(bootstrap.Tooltip.prototype.show) 15 | 16 | // Extend Popover to add color options 17 | bootstrap.Popover.prototype.show = (original => { 18 | return function addPopoverColor() { 19 | if (this._config.toggle === 'popover') { 20 | if (this._element.getAttribute('data-color')) { 21 | const str = `popover-${this._element.getAttribute('data-color')}` 22 | this.getTipElement().classList.add(str) 23 | } 24 | } 25 | original.apply(this) 26 | } 27 | })(bootstrap.Popover.prototype.show) 28 | 29 | export { bootstrap } 30 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/store/store/store.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | import { AuthadminService } from 'src/app/views/service/authadmin.service'; 4 | import { HttpErrorResponse } from '@angular/common/http'; 5 | import { DataService } from 'src/app/views/service/data.service'; 6 | @Component({ 7 | selector: 'app-store', 8 | templateUrl: './store.component.html', 9 | styleUrls: ['./store.component.css'] 10 | }) 11 | export class StoreComponent implements OnInit { 12 | imagepath:any='http://127.0.0.1:3000/' 13 | dataArray:any 14 | constructor(private ds:DataService,private router:Router,private dsa:AuthadminService) { 15 | 16 | } 17 | newChange(): void { 18 | this.router.navigateByUrl('produit'); 19 | } 20 | 21 | 22 | ngOnInit(): void { 23 | this.ds.getproduit().subscribe(data=>this.dataArray=data) 24 | } 25 | getoneproduit(id:any) { 26 | 27 | this.router.navigate(['produit'], { queryParams: { produitId: id } }); 28 | 29 | 30 | } 31 | 32 | 33 | } 34 | 35 | 36 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/register/register/register.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { HttpClient, HttpErrorResponse } from '@angular/common/http'; 3 | 4 | import { DataService } from 'src/app/views/service/data.service'; 5 | import { Router } from '@angular/router'; 6 | import { FormsModule, NgForm } from '@angular/forms'; 7 | import { AuthuserService } from 'src/app/views/service/authuser.service'; 8 | @Component({ 9 | selector: 'app-register', 10 | templateUrl: './register.component.html', 11 | styleUrls: ['./register.component.css'] 12 | }) 13 | export class RegisterComponent implements OnInit { 14 | messageErr:any 15 | 16 | constructor(private aus:AuthuserService,private router:Router) { } 17 | 18 | ngOnInit(): void { 19 | } 20 | register(f:any){ 21 | let data=f.value 22 | 23 | this.aus.register(data).subscribe(data=>{ 24 | this.router.navigate(['/loginuser']) 25 | 26 | console.log(data) 27 | },(err:HttpErrorResponse)=>{ 28 | console.log(err) 29 | this.messageErr="Email is exist !!"}) 30 | 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/mixins/_caret.scss: -------------------------------------------------------------------------------- 1 | // * Carets 2 | // ******************************************************************************* 3 | 4 | @mixin caret-up { 5 | margin-top: -0; 6 | width: $caret-width; 7 | height: $caret-width; 8 | border: 1px solid; 9 | border-bottom: 0; 10 | border-left: 0; 11 | transform: rotate(-45deg); 12 | } 13 | 14 | @mixin caret-down { 15 | margin-top: -1 * divide($caret-width, 1.5); 16 | width: $caret-width; 17 | height: $caret-width; 18 | border: 1px solid; 19 | border-top: 0; 20 | border-left: 0; 21 | transform: rotate(45deg); 22 | } 23 | 24 | @mixin caret-left { 25 | margin-top: -1 * divide($caret-width, 2.5); 26 | width: $caret-width; 27 | height: $caret-width; 28 | border: 1px solid; 29 | border-top: 0; 30 | border-right: 0; 31 | transform: rotate(45deg); 32 | } 33 | 34 | @mixin caret-right { 35 | margin-top: -1 * divide($caret-width, 2.5); 36 | width: $caret-width; 37 | height: $caret-width; 38 | border: 1px solid; 39 | border-top: 0; 40 | border-left: 0; 41 | transform: rotate(-45deg); 42 | } 43 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_components/mixins/_footer.scss: -------------------------------------------------------------------------------- 1 | // Footer 2 | // ******************************************************************************* 3 | 4 | @mixin template-footer-style($parent, $bg, $color: null, $active-color: null, $border: null) { 5 | $colors: get-navbar-prop($bg, $active-color, $color, $border); 6 | 7 | #{$parent} { 8 | background-color: map-get($colors, bg) !important; 9 | color: map-get($colors, color); 10 | 11 | .footer-link { 12 | color: map-get($colors, color); 13 | 14 | &:hover, 15 | &:focus { 16 | color: map-get($colors, active-color); 17 | } 18 | 19 | &.disabled { 20 | color: map-get($colors, disabled-color) !important; 21 | } 22 | } 23 | 24 | .footer-text { 25 | color: map-get($colors, active-color); 26 | } 27 | 28 | .show > .footer-link, 29 | .active > .footer-link, 30 | .footer-link.show, 31 | .footer-link.active { 32 | color: map-get($colors, active-color); 33 | } 34 | 35 | hr { 36 | border-color: map-get($colors, border); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Mansouri Oussema 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Back-end/models/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const fs = require('fs'); 4 | const path = require('path'); 5 | const Sequelize = require('sequelize'); 6 | const basename = path.basename(__filename); 7 | const env = process.env.NODE_ENV || 'development'; 8 | const config = require(__dirname + '/../config/config.json')[env]; 9 | const db = {}; 10 | 11 | let sequelize; 12 | if (config.use_env_variable) { 13 | sequelize = new Sequelize(process.env[config.use_env_variable], config); 14 | } else { 15 | sequelize = new Sequelize(config.database, config.username, config.password, config); 16 | } 17 | 18 | fs 19 | .readdirSync(__dirname) 20 | .filter(file => { 21 | return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'); 22 | }) 23 | .forEach(file => { 24 | const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes); 25 | db[model.name] = model; 26 | }); 27 | 28 | Object.keys(db).forEach(modelName => { 29 | if (db[modelName].associate) { 30 | db[modelName].associate(db); 31 | } 32 | }); 33 | 34 | db.sequelize = sequelize; 35 | db.Sequelize = Sequelize; 36 | 37 | module.exports = db; 38 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | // Breadcrumbs 2 | // ******************************************************************************* 3 | 4 | .breadcrumb-item, 5 | .breadcrumb-item a { 6 | color: $breadcrumb-color; 7 | 8 | &:hover, 9 | &:focus { 10 | color: $breadcrumb-active-color; 11 | } 12 | 13 | &.active { 14 | font-weight: $font-weight-semibold; 15 | &::before { 16 | font-weight: $font-weight-normal; 17 | } 18 | } 19 | } 20 | 21 | .breadcrumb-item.active a { 22 | &, 23 | &:hover, 24 | &:focus, 25 | &:active { 26 | color: inherit; 27 | } 28 | } 29 | 30 | // Breadcrumb divider styles 31 | .breadcrumb-style1, 32 | .breadcrumb-style2 { 33 | .breadcrumb-item + .breadcrumb-item::before { 34 | font-family: boxicons; 35 | vertical-align: middle; 36 | } 37 | } 38 | .breadcrumb-style1 .breadcrumb-item + .breadcrumb-item::before { 39 | content: '\ecb3'; 40 | font-size: 1.125rem; 41 | line-height: 1.4; 42 | } 43 | .breadcrumb-style2 .breadcrumb-item + .breadcrumb-item::before { 44 | content: '\ee4a'; 45 | font-size: $font-size-lg; 46 | line-height: 1.35rem; 47 | } 48 | -------------------------------------------------------------------------------- /Front-end/README.md: -------------------------------------------------------------------------------- 1 | # Client 2 | 3 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.1.3. 4 | 5 | ## Development server 6 | 7 | Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. 8 | 9 | ## Code scaffolding 10 | 11 | Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. 12 | 13 | ## Build 14 | 15 | Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. 16 | 17 | ## Running unit tests 18 | 19 | Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). 20 | 21 | ## Running end-to-end tests 22 | 23 | Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. 24 | 25 | ## Further help 26 | 27 | To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. 28 | -------------------------------------------------------------------------------- /Front-end/src/app/views/service/authuser.service.ts: -------------------------------------------------------------------------------- 1 | import { HttpClient } from '@angular/common/http'; 2 | import { Injectable } from '@angular/core'; 3 | import { JwtHelperService } from "@auth0/angular-jwt"; 4 | import { Observable } from 'rxjs'; 5 | @Injectable({ 6 | providedIn: 'root' 7 | }) 8 | export class AuthuserService { 9 | sLoggedIn:boolean=false 10 | helper = new JwtHelperService(); 11 | constructor(private http:HttpClient) { } 12 | register(body:any){ 13 | return this.http.post('http://localhost:3000/register',body) 14 | } 15 | loginuser(body:any){ 16 | return this.http.post('http://localhost:3000/login',body) 17 | } 18 | saveToken(token:any){ 19 | 20 | localStorage.setItem('token',token) 21 | 22 | } 23 | userLoggedIn(){ 24 | 25 | 26 | 27 | if(!localStorage.getItem('token')){ 28 | return false 29 | } 30 | let token:any=localStorage.getItem('token') 31 | let decodeToken=this.helper.decodeToken(token) 32 | 33 | 34 | if(decodeToken.role){ 35 | return false 36 | } 37 | 38 | if(this.helper.isTokenExpired(token)){ 39 | return false 40 | } 41 | 42 | return true 43 | 44 | 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/mixins/_navs.scss: -------------------------------------------------------------------------------- 1 | // Navs 2 | // ******************************************************************************* 3 | 4 | @mixin template-nav-size($padding-y, $padding-x, $font-size, $line-height) { 5 | > .nav .nav-link, 6 | &.nav .nav-link { 7 | padding: $padding-y $padding-x; 8 | font-size: $font-size; 9 | line-height: $line-height; 10 | } 11 | } 12 | 13 | @mixin template-nav-variant($parent, $background, $color: null) { 14 | // .nav-link class hover theme color for basic nav 15 | .nav .nav-link { 16 | &:hover, 17 | &:focus { 18 | color: shift-color($background, $link-shade-percentage); 19 | } 20 | } 21 | 22 | $pills-selector: if($parent== '', '.nav-pills', '#{$parent}.nav-pills, #{$parent} > .nav-pills'); 23 | 24 | #{$pills-selector} .nav-link.active { 25 | &, 26 | &:hover, 27 | &:focus { 28 | background-color: $background; 29 | color: if($color, $color, color-contrast($background)); 30 | box-shadow: 0 2px 4px 0 rgba($background, 0.4); 31 | } 32 | } 33 | } 34 | 35 | @mixin template-nav-theme($background, $color: null) { 36 | @include template-nav-variant('', $background, $color); 37 | } 38 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/js/ui-modals.js: -------------------------------------------------------------------------------- 1 | /** 2 | * UI Modals 3 | */ 4 | 5 | 'use strict'; 6 | 7 | (function () { 8 | // On hiding modal, remove iframe video/audio to stop playing 9 | const youTubeModal = document.querySelector('#youTubeModal'), 10 | youTubeModalVideo = youTubeModal.querySelector('iframe'); 11 | youTubeModal.addEventListener('hidden.bs.modal', function () { 12 | youTubeModalVideo.setAttribute('src', ''); 13 | }); 14 | 15 | // Function to get and auto play youTube video 16 | const autoPlayYouTubeModal = function () { 17 | const modalTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="modal"]')); 18 | modalTriggerList.map(function (modalTriggerEl) { 19 | modalTriggerEl.onclick = function () { 20 | const theModal = this.getAttribute('data-bs-target'), 21 | videoSRC = this.getAttribute('data-theVideo'), 22 | videoSRCauto = `${videoSRC}?autoplay=1`, 23 | modalVideo = document.querySelector(`${theModal} iframe`); 24 | if (modalVideo) { 25 | modalVideo.setAttribute('src', videoSRCauto); 26 | } 27 | }; 28 | }); 29 | }; 30 | 31 | // Calling function on load 32 | autoPlayYouTubeModal(); 33 | })(); 34 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_navbar.scss: -------------------------------------------------------------------------------- 1 | // Navbar 2 | // ******************************************************************************* 3 | 4 | .navbar { 5 | z-index: 2; 6 | // ! Fix: navbar dropdown focus outline 7 | .dropdown:focus, 8 | .dropdown-toggle:focus { 9 | outline: 0; 10 | } 11 | .navbar-toggler { 12 | border: none; 13 | } 14 | .navbar-toggler:focus { 15 | box-shadow: none; 16 | } 17 | } 18 | 19 | .fixed-top { 20 | z-index: $zindex-fixed; 21 | } 22 | 23 | .navbar.navbar-light { 24 | color: $navbar-light-color; 25 | } 26 | 27 | .navbar-light .navbar-nav .nav-link.disabled { 28 | color: $navbar-light-disabled-color !important; 29 | } 30 | 31 | .navbar.navbar-dark { 32 | color: $navbar-dark-color; 33 | } 34 | 35 | .navbar-dark .navbar-nav .nav-link.disabled { 36 | color: $navbar-dark-disabled-color !important; 37 | } 38 | 39 | // IE fix 40 | .navbar-collapse, 41 | .navbar-brand, 42 | .navbar-text { 43 | flex-shrink: 1; 44 | } 45 | 46 | // Icons 47 | // .navbar-icon { 48 | // font-size: 130%; 49 | // } 50 | 51 | // Rulers 52 | .navbar-dark hr { 53 | border-color: rgba(255, 255, 255, 0.1); 54 | } 55 | 56 | .navbar-light hr { 57 | border-color: $gray-100; 58 | } 59 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/mixins/_toasts.scss: -------------------------------------------------------------------------------- 1 | // * Toast 2 | // ******************************************************************************* 3 | 4 | @mixin template-toast-variant($parent, $background, $color: null) { 5 | $label-color: if($color, $color, $background); 6 | $color: if($color, $color, color-contrast($background)); 7 | 8 | #{$parent} { 9 | &.toast, 10 | &.bs-toast { 11 | color: $white; 12 | background-color: rgba($background, $toast-bg-factor) !important; 13 | box-shadow: 0 0.25rem 1rem rgba($background, 0.4); 14 | 15 | .toast-header { 16 | color: $white; 17 | .btn-close { 18 | background-color: $background !important; 19 | background-image: str-replace( 20 | str-replace(str-replace($btn-close-bg, '#{$btn-close-color}', $white), '#', '%23'), 21 | "fill-opacity='0.5'", 22 | "fill-opacity='1'" 23 | ); 24 | box-shadow: 0 0.1875rem 0.375rem 0 rgba($background, 0.4) !important; 25 | } 26 | } 27 | } 28 | } 29 | } 30 | 31 | @mixin template-toast-theme($parent, $background, $color: null) { 32 | @include template-toast-variant($parent, $background, $color); 33 | } 34 | -------------------------------------------------------------------------------- /Front-end/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "ng": "ng", 6 | "start": "ng serve", 7 | "build": "ng build", 8 | "watch": "ng build --watch --configuration development", 9 | "test": "ng test" 10 | }, 11 | "private": true, 12 | "dependencies": { 13 | "@angular/animations": "^14.1.0", 14 | "@angular/common": "^14.1.0", 15 | "@angular/compiler": "^14.1.0", 16 | "@angular/core": "^14.1.0", 17 | "@angular/forms": "^14.1.0", 18 | "@angular/platform-browser": "^14.1.0", 19 | "@angular/platform-browser-dynamic": "^14.1.0", 20 | "@angular/router": "^14.1.0", 21 | "@auth0/angular-jwt": "^5.0.2", 22 | "rxjs": "~7.5.0", 23 | "tslib": "^2.3.0", 24 | "zone.js": "~0.11.4" 25 | }, 26 | "devDependencies": { 27 | "@angular-devkit/build-angular": "^14.1.3", 28 | "@angular/cli": "~14.1.3", 29 | "@angular/compiler-cli": "^14.1.0", 30 | "@types/jasmine": "~4.0.0", 31 | "jasmine-core": "~4.2.0", 32 | "karma": "~6.4.0", 33 | "karma-chrome-launcher": "~3.1.0", 34 | "karma-coverage": "~2.2.0", 35 | "karma-jasmine": "~5.1.0", 36 | "karma-jasmine-html-reporter": "~2.0.0", 37 | "typescript": "~4.7.2" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Back-end/models/produit.js: -------------------------------------------------------------------------------- 1 | module.exports=(sequelize,DataType)=>{ 2 | const Produit=sequelize.define("Produit",{ 3 | titre:{ 4 | type:DataType.STRING, 5 | allowNull:true 6 | }, 7 | descreption:{ 8 | type:DataType.STRING, 9 | allowNull:true 10 | }, 11 | img:{ 12 | type:DataType.STRING, 13 | allowNull:true 14 | }, 15 | categorie:{ 16 | type:DataType.STRING, 17 | allowNull:true 18 | }, 19 | size:{ 20 | type:DataType.STRING, 21 | allowNull:true 22 | }, 23 | color:{ 24 | type:DataType.STRING, 25 | allowNull:true 26 | }, 27 | prix:{ 28 | type:DataType.STRING, 29 | allowNull:true 30 | }, 31 | instock:{ 32 | type:DataType.STRING, 33 | allowNull:true 34 | }, 35 | 36 | 37 | 38 | }) 39 | 40 | Produit.associate=models=>{ 41 | Produit.belongsTo(models.User,{ 42 | onDelete:"cascade" 43 | }) 44 | 45 | Produit.hasMany(models.Order,{ 46 | onDelete:"cascade" 47 | }) 48 | 49 | } 50 | 51 | return Produit 52 | } -------------------------------------------------------------------------------- /Front-end/src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | import { AppComponent } from './app.component'; 4 | 5 | describe('AppComponent', () => { 6 | beforeEach(async () => { 7 | await TestBed.configureTestingModule({ 8 | imports: [ 9 | RouterTestingModule 10 | ], 11 | declarations: [ 12 | AppComponent 13 | ], 14 | }).compileComponents(); 15 | }); 16 | 17 | it('should create the app', () => { 18 | const fixture = TestBed.createComponent(AppComponent); 19 | const app = fixture.componentInstance; 20 | expect(app).toBeTruthy(); 21 | }); 22 | 23 | it(`should have as title 'Tunisia_Discovery'`, () => { 24 | const fixture = TestBed.createComponent(AppComponent); 25 | const app = fixture.componentInstance; 26 | expect(app.title).toEqual('Tunisia_Discovery'); 27 | }); 28 | 29 | it('should render title', () => { 30 | const fixture = TestBed.createComponent(AppComponent); 31 | fixture.detectChanges(); 32 | const compiled = fixture.nativeElement as HTMLElement; 33 | expect(compiled.querySelector('.content span')?.textContent).toContain('Tunisia_Discovery app is running!'); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/js/extended-ui-perfect-scrollbar.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Perfect Scrollbar 3 | */ 4 | 'use strict'; 5 | 6 | document.addEventListener('DOMContentLoaded', function () { 7 | (function () { 8 | const verticalExample = document.getElementById('vertical-example'), 9 | horizontalExample = document.getElementById('horizontal-example'), 10 | horizVertExample = document.getElementById('both-scrollbars-example'); 11 | 12 | // Vertical Example 13 | // -------------------------------------------------------------------- 14 | if (verticalExample) { 15 | new PerfectScrollbar(verticalExample, { 16 | wheelPropagation: false 17 | }); 18 | } 19 | 20 | // Horizontal Example 21 | // -------------------------------------------------------------------- 22 | if (horizontalExample) { 23 | new PerfectScrollbar(horizontalExample, { 24 | wheelPropagation: false, 25 | suppressScrollY: true 26 | }); 27 | } 28 | 29 | // Both vertical and Horizontal Example 30 | // -------------------------------------------------------------------- 31 | if (horizVertExample) { 32 | new PerfectScrollbar(horizVertExample, { 33 | wheelPropagation: false 34 | }); 35 | } 36 | })(); 37 | }); 38 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/mixins/_alert.scss: -------------------------------------------------------------------------------- 1 | // Alerts 2 | // ******************************************************************************* 3 | 4 | @mixin alert-variant($background: null, $border: null, $color: null) { 5 | } 6 | 7 | // Basic Alerts 8 | @mixin template-alert-variant($parent, $background) { 9 | $border: if( 10 | $dark-style, 11 | shift-color($background, -$alert-border-scale, $card-bg), 12 | shift-color($background, $alert-border-scale, $card-bg) 13 | ); 14 | $color: if($dark-style, shift-color($background, -$alert-color-scale), shift-color($background, $alert-color-scale)); 15 | $background: if( 16 | $dark-style, 17 | shift-color($background, -$alert-bg-scale, $card-bg), 18 | shift-color($background, $alert-bg-scale, $card-bg) 19 | ); 20 | 21 | #{$parent} { 22 | @include gradient-bg($background); 23 | border-color: $border; 24 | color: $color; 25 | .btn-close { 26 | background-image: str-replace(str-replace($btn-close-bg, '#{$btn-close-color}', $color), '#', '%23'); 27 | } 28 | 29 | .alert-link { 30 | color: $color; 31 | } 32 | } 33 | 34 | .card { 35 | #{$parent} { 36 | hr { 37 | background-color: $color !important; 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/forms/_form-range.scss: -------------------------------------------------------------------------------- 1 | // Range select 2 | // ******************************************************************************* 3 | 4 | .form-range { 5 | // Chrome specific 6 | &::-webkit-slider-thumb { 7 | box-shadow: $form-range-thumb-box-shadow; 8 | transition: transform 0.2s; 9 | transform-origin: center; 10 | 11 | &:focus { 12 | box-shadow: $form-range-thumb-focus-box-shadow; 13 | } 14 | 15 | &:active { 16 | transform: scale(1.4, 1.4); 17 | } 18 | } 19 | 20 | // Mozilla specific 21 | &::-moz-range-thumb { 22 | box-shadow: $form-range-thumb-box-shadow; 23 | transition: transform 0.2s; 24 | transform-origin: center; 25 | 26 | &:focus { 27 | box-shadow: $form-range-thumb-focus-box-shadow; 28 | } 29 | 30 | &:active { 31 | transform: scale(1.4, 1.4); 32 | } 33 | } 34 | 35 | &:disabled { 36 | &::-webkit-slider-runnable-track { 37 | background-color: $form-range-track-disabled-bg; 38 | } 39 | 40 | &::-moz-range-track { 41 | background-color: $form-range-track-disabled-bg; 42 | box-shadow: none; 43 | } 44 | 45 | &::-webkit-slider-thumb { 46 | box-shadow: none; 47 | } 48 | &::-moz-range-thumb { 49 | box-shadow: none; 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_list-group.scss: -------------------------------------------------------------------------------- 1 | // List groups 2 | // ******************************************************************************* 3 | 4 | // List Group Mixin 5 | @each $color, $value in $theme-colors { 6 | @if $color != primary and $color != light { 7 | @include template-list-group-item-variant('.list-group-item-#{$color}', $value); 8 | } 9 | } 10 | 11 | .list-group { 12 | // Timeline CSS 13 | &.list-group-timeline { 14 | position: relative; 15 | &:before { 16 | background-color: $border-color; 17 | position: absolute; 18 | content: ''; 19 | width: 1px; 20 | height: 100%; 21 | top: 0; 22 | bottom: 0; 23 | left: 0.2rem; 24 | } 25 | .list-group-item { 26 | border: none; 27 | padding-left: 1.25rem; 28 | &:before { 29 | position: absolute; 30 | display: block; 31 | content: ''; 32 | width: 7px; 33 | height: 7px; 34 | left: 0; 35 | top: 50%; 36 | margin-top: -3.5px; 37 | border-radius: 100%; 38 | } 39 | } 40 | } 41 | 42 | .list-group-item.active { 43 | h1, 44 | .h1, 45 | h2, 46 | .h2, 47 | h3, 48 | .h3, 49 | h4, 50 | .h4, 51 | h5, 52 | .h5, 53 | h6, 54 | .h6 { 55 | color: $list-group-active-color; 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-user/g-user/g-user.component.ts: -------------------------------------------------------------------------------- 1 | import { HttpClient, HttpErrorResponse } from '@angular/common/http'; 2 | import { Component, OnInit } from '@angular/core'; 3 | import { DataService } from 'src/app/views/service/data.service'; 4 | import { Router } from '@angular/router'; 5 | import { FormsModule, NgForm } from '@angular/forms'; 6 | 7 | @Component({ 8 | selector: 'app-g-user', 9 | templateUrl: './g-user.component.html', 10 | styleUrls: ['./g-user.component.css'] 11 | }) 12 | export class GUserComponent implements OnInit { 13 | dataArray:any 14 | messageErr:any 15 | constructor(private ds:DataService,private router:Router) { 16 | 17 | } 18 | 19 | ngOnInit(): void { 20 | this.ds.getUsers().subscribe(data=>this.dataArray=data) 21 | 22 | } 23 | delete(id:any){ 24 | this.ds.deleteuser(id).subscribe(res=>{ 25 | this.ngOnInit() 26 | }) 27 | 28 | 29 | 30 | 31 | } 32 | 33 | getiduser(id:any) { 34 | 35 | this.router.navigate(['admin/edit-user'], { queryParams: { UserId: id } }); 36 | 37 | } 38 | add(f:any){ 39 | let data=f.value 40 | 41 | this.ds.adduser(data).subscribe(response=>{ 42 | this.ngOnInit() 43 | 44 | 45 | this.router.navigate(['/admin/g_user']) 46 | 47 | },(err:HttpErrorResponse)=>{ 48 | this.messageErr=err.error 49 | 50 | 51 | }) 52 | } 53 | } 54 | 55 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_accordion.scss: -------------------------------------------------------------------------------- 1 | // Accordions 2 | // ******************************************************************************* 3 | 4 | .accordion-header + .accordion-collapse .accordion-body { 5 | padding-top: 0; 6 | } 7 | 8 | .accordion { 9 | // accordion without icon 10 | &.accordion-without-arrow { 11 | .accordion-button::after { 12 | background-image: none !important; 13 | } 14 | } 15 | // Active accordion box shadow 16 | .accordion-item.active { 17 | box-shadow: $floating-component-shadow; 18 | } 19 | } 20 | 21 | // added box shadow 22 | .card.accordion-item { 23 | box-shadow: $box-shadow-sm; 24 | } 25 | 26 | .accordion-button.collapsed:focus { 27 | box-shadow: none; 28 | } 29 | .accordion-button { 30 | box-shadow: none; 31 | } 32 | 33 | .accordion-header { 34 | line-height: 1.54; 35 | } 36 | 37 | .accordion-item { 38 | &:not(:first-of-type) { 39 | border-top: $accordion-border-width solid $accordion-border-color; 40 | } 41 | } 42 | 43 | // Accordion border radius 44 | .accordion-button { 45 | font-weight: inherit; 46 | @include border-top-radius($accordion-border-radius); 47 | &.collapsed { 48 | @include border-radius($accordion-border-radius); 49 | } 50 | } 51 | 52 | // Default card styles of accordion 53 | .accordion > .card:not(:last-of-type) { 54 | border-radius: $accordion-border-radius !important; 55 | margin-bottom: 0.6875rem; 56 | } 57 | -------------------------------------------------------------------------------- /Front-end/localhost.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIID4jCCAsqgAwIBAgIUdnVZluCn6OZaJhhwS1ZHOXcOvwEwDQYJKoZIhvcNAQEL 3 | BQAwgZ0xCzAJBgNVBAYTAklOMQ4wDAYDVQQIDAVJbmRpYTEOMAwGA1UEBwwFSW5k 4 | aWExGDAWBgNVBAoMD015IE9yZ2FuaXNhdGlvbjEfMB0GA1UECwwWTXkgT3JnYW5p 5 | c2F0aW9uYWwgVW5pdDEfMB0GCSqGSIb3DQEJARYQZW1haWxAZG9tYWluLmNvbTES 6 | MBAGA1UEAwwJbG9jYWxob3N0MB4XDTIyMTIxNDA4NDUzNFoXDTMyMDkxMjA4NDUz 7 | NFowgZ0xCzAJBgNVBAYTAklOMQ4wDAYDVQQIDAVJbmRpYTEOMAwGA1UEBwwFSW5k 8 | aWExGDAWBgNVBAoMD015IE9yZ2FuaXNhdGlvbjEfMB0GA1UECwwWTXkgT3JnYW5p 9 | c2F0aW9uYWwgVW5pdDEfMB0GCSqGSIb3DQEJARYQZW1haWxAZG9tYWluLmNvbTES 10 | MBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC 11 | AQEAxX9gZs9KQpdYVpk7Mw0NDP1GzVhgKJwTa5vu1MJvNXPAcgS9cG5StniChNtF 12 | xuSgU9QyxTj29SsMJC6YVdseTb2dmx1PJhih3OpQmkkA33cDNGbagosaYo8M4eUK 13 | 4v9JrqDsExR4lwIwALgIJgwXH3KreaPXkz8eMoHpSzv8PHd2YKp+SHiJTxEVPG33 14 | sTlsJWmXb76e2Qp8v2twBbA0/RMUfJqrbEqEg+A2zCIzILeeoM1rT/txHwLTofIr 15 | 5ecweHiHtTBAJWheIzJIctUkiAKsWbpjk8ofp4zNUcE2TCKRR5tr+EK/HiPCva1o 16 | 7q/Vzdl4QKVu4OD3Ym9JhmjEYQIDAQABoxgwFjAUBgNVHREEDTALgglsb2NhbGhv 17 | c3QwDQYJKoZIhvcNAQELBQADggEBAC8wIyQaAGkCKGOsBfFdG+bFwxv0yYJu9oKj 18 | YnfC58XekU01IYpCEXwtdpm7Tsrd9ihF1zXEhiSCutCXMIBxFzzBN8ZQWKyNWXiE 19 | asb0TT70hY49tX6nv+0f/c5ojI6DodVA9aLb4RrKKb8W1h0TIXAYjq9zSKtDw7rn 20 | OsB0lgfjjbvBhnW3Qq0ufVN0PKVbpPgT2yYdq+eC18o7isK5oj/W01rdjaqlbFsC 21 | 3e3zEeK3LgHn5abU70HnRhUh/GPw9tJUfE0z8kWT/9RWrIXfIRsmuVDyToY3g13s 22 | gJUBRSeoRc8Mobp3qZ6JLiUkBtoCzZcuMmlSX0HNpLPAR0mqo1A= 23 | -----END CERTIFICATE----- 24 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/js/ui-toasts.js: -------------------------------------------------------------------------------- 1 | /** 2 | * UI Toasts 3 | */ 4 | 5 | 'use strict'; 6 | 7 | (function () { 8 | // Bootstrap toasts example 9 | // -------------------------------------------------------------------- 10 | const toastPlacementExample = document.querySelector('.toast-placement-ex'), 11 | toastPlacementBtn = document.querySelector('#showToastPlacement'); 12 | let selectedType, selectedPlacement, toastPlacement; 13 | 14 | // Dispose toast when open another 15 | function toastDispose(toast) { 16 | if (toast && toast._element !== null) { 17 | if (toastPlacementExample) { 18 | toastPlacementExample.classList.remove(selectedType); 19 | DOMTokenList.prototype.remove.apply(toastPlacementExample.classList, selectedPlacement); 20 | } 21 | toast.dispose(); 22 | } 23 | } 24 | // Placement Button click 25 | if (toastPlacementBtn) { 26 | toastPlacementBtn.onclick = function () { 27 | if (toastPlacement) { 28 | toastDispose(toastPlacement); 29 | } 30 | selectedType = document.querySelector('#selectTypeOpt').value; 31 | selectedPlacement = document.querySelector('#selectPlacement').value.split(' '); 32 | 33 | toastPlacementExample.classList.add(selectedType); 34 | DOMTokenList.prototype.add.apply(toastPlacementExample.classList, selectedPlacement); 35 | toastPlacement = new bootstrap.Toast(toastPlacementExample); 36 | toastPlacement.show(); 37 | }; 38 | } 39 | })(); 40 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_toasts.scss: -------------------------------------------------------------------------------- 1 | // Toasts 2 | // ******************************************************************************* 3 | 4 | // Toast Mixin 5 | @each $color, $value in $theme-colors { 6 | @if $color != primary { 7 | @include template-toast-variant('.bg-#{$color}', $value); 8 | } 9 | } 10 | 11 | .bs-toast[class^='bg-'], 12 | .bs-toast[class*=' bg-'] { 13 | border: none; 14 | } 15 | 16 | .toast.bs-toast { 17 | background-color: rgba($toast-background-color, $toast-bg-factor); 18 | z-index: $zindex-toast; 19 | .toast-header { 20 | padding-bottom: 0.5rem; 21 | position: relative; 22 | .btn-close { 23 | position: absolute; 24 | top: -8px; 25 | border-radius: $border-radius; 26 | padding: 0.45rem; 27 | background-size: $toast-btn-close-size; 28 | transition: all 0.23s ease 0.1s; 29 | background-color: $toast-background-color; 30 | box-shadow: $box-shadow-sm; 31 | @include ltr-style { 32 | right: 2px; 33 | } 34 | 35 | // For hover effect of close btn 36 | &:hover, 37 | &:focus, 38 | &:active { 39 | opacity: 1; 40 | outline: none; 41 | } 42 | } 43 | } 44 | .toast-header ~ .toast-body { 45 | padding-top: 0; 46 | } 47 | } 48 | 49 | // Bootstrap Toasts Example 50 | .toast-ex { 51 | position: fixed; 52 | top: 4.1rem; 53 | right: 2.5rem; 54 | } 55 | // Placement Toast example 56 | .toast-placement-ex { 57 | position: fixed; 58 | } 59 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/mixins/_table-variants.scss: -------------------------------------------------------------------------------- 1 | // Tables 2 | // ******************************************************************************* 3 | 4 | @mixin template-table-variant($parent, $background, $layout-color: $white) { 5 | .table-#{$parent} { 6 | $color: color-contrast(opaque($body-bg, $background)); 7 | $hover-bg: mix($color, $background, percentage($table-hover-bg-factor)); 8 | $striped-bg: mix($color, $background, percentage($table-striped-bg-factor)); 9 | $active-bg: mix($color, $background, percentage($table-active-bg-factor)); 10 | $dark-border-color: if($parent == 'dark', mix($color, $background, percentage($table-border-factor)), inherit); 11 | 12 | --#{$variable-prefix}table-bg: #{$background}; 13 | --#{$variable-prefix}table-striped-bg: #{$striped-bg}; 14 | --#{$variable-prefix}table-striped-color: #{color-contrast($striped-bg)}; 15 | --#{$variable-prefix}table-active-bg: #{$active-bg}; 16 | --#{$variable-prefix}table-active-color: #{color-contrast($active-bg)}; 17 | --#{$variable-prefix}table-hover-bg: #{$hover-bg}; 18 | --#{$variable-prefix}table-hover-color: #{color-contrast($hover-bg)}; 19 | 20 | color: $color; 21 | border-color: mix($color, $background, percentage($table-border-factor)); 22 | // Highlight border color between thead, tbody and tfoot. 23 | th { 24 | border-bottom-color: $dark-border-color !important; 25 | } 26 | 27 | .btn-icon { 28 | color: $color; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended.scss: -------------------------------------------------------------------------------- 1 | @import '_bootstrap-extended/include'; 2 | 3 | // Import bootstrap extended scss 4 | @import '_bootstrap-extended/root'; 5 | @import '_bootstrap-extended/reboot'; 6 | @import '_bootstrap-extended/type'; 7 | @import '_bootstrap-extended/utilities'; 8 | @import '_bootstrap-extended/tables'; 9 | @import '_bootstrap-extended/buttons'; 10 | @import '_bootstrap-extended/button-group'; 11 | @import '_bootstrap-extended/badge'; 12 | @import '_bootstrap-extended/dropdown'; 13 | @import '_bootstrap-extended/nav'; 14 | @import '_bootstrap-extended/pagination'; 15 | @import '_bootstrap-extended/alert'; 16 | @import '_bootstrap-extended/tooltip'; 17 | @import '_bootstrap-extended/popover'; 18 | @import '_bootstrap-extended/forms'; 19 | @import '_bootstrap-extended/modal'; 20 | @import '_bootstrap-extended/progress'; 21 | @import '_bootstrap-extended/breadcrumb'; 22 | @import '_bootstrap-extended/list-group'; 23 | @import '_bootstrap-extended/navbar'; 24 | @import '_bootstrap-extended/card'; 25 | @import '_bootstrap-extended/accordion'; 26 | @import '_bootstrap-extended/close'; 27 | @import '_bootstrap-extended/toasts'; 28 | @import '_bootstrap-extended/carousel'; 29 | @import '_bootstrap-extended/spinners'; 30 | @import '_bootstrap-extended/offcanvas'; 31 | 32 | // Common Utilities 33 | @import '../node_modules/bootstrap/scss/utilities/api'; 34 | 35 | // LTR Utilities 36 | @include ltr-only { 37 | @import '_bootstrap-extended/utilities-ltr'; 38 | @import '../node_modules/bootstrap/scss/utilities/api'; 39 | } 40 | -------------------------------------------------------------------------------- /Front-end/src/app/layouts/adminlogin/adminlogin.component.ts: -------------------------------------------------------------------------------- 1 | import { HttpErrorResponse } from '@angular/common/http'; 2 | import { Component, OnInit } from '@angular/core'; 3 | import { ActivatedRoute, Router } from '@angular/router'; 4 | import { AuthadminService } from 'src/app/views/service/authadmin.service'; 5 | 6 | 7 | 8 | @Component({ 9 | selector: 'app-adminlogin', 10 | templateUrl: './adminlogin.component.html', 11 | styleUrls: ['./adminlogin.component.css'] 12 | } 13 | ) 14 | 15 | 16 | export class AdminloginComponent implements OnInit { 17 | 18 | messageErr:any 19 | url:any 20 | datarecevie:any 21 | f:any 22 | constructor(private ads:AuthadminService, private router:Router, private actrouter:ActivatedRoute) { 23 | 24 | if(this.ads.LoggedIn()==true){ 25 | this.router.navigate(['/admin/dashboard']) 26 | } 27 | 28 | } 29 | 30 | 31 | ngOnInit(): void { 32 | this.url=this.actrouter.snapshot.queryParams['returnUrl']||'/admin/dashboard' 33 | 34 | } 35 | loginadmin(f:any){ 36 | let data=f.value 37 | 38 | this.ads.login(data).subscribe( 39 | Response=>{ 40 | 41 | this.datarecevie=Response 42 | console.log(this.datarecevie) 43 | 44 | this.ads.saveDataProfil(this.datarecevie.token.token,this.datarecevie.token.role) 45 | 46 | 47 | 48 | this.router.navigate([this.url]) 49 | 50 | 51 | },(err: HttpErrorResponse) => { 52 | this.messageErr = err.error; 53 | console.log(err.error); 54 | }) 55 | 56 | 57 | } 58 | 59 | } 60 | 61 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/loginuser/loginuser/loginuser.component.html: -------------------------------------------------------------------------------- 1 | 16 | 17 |
18 |
19 |
20 |
21 |

22 | 23 | 24 |

25 | 26 | 27 | 28 |

29 |
{{messageErr}} 30 |
31 | 32 |
33 |
34 |

-------------------------------------------------------------------------------- /Front-end/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client: { 16 | jasmine: { 17 | // you can add configuration options for Jasmine here 18 | // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html 19 | // for example, you can disable the random execution with `random: false` 20 | // or set a specific seed with `seed: 4321` 21 | }, 22 | clearContext: false // leave Jasmine Spec Runner output visible in browser 23 | }, 24 | jasmineHtmlReporter: { 25 | suppressAll: true // removes the duplicated traces 26 | }, 27 | coverageReporter: { 28 | dir: require('path').join(__dirname, './coverage/client'), 29 | subdir: '.', 30 | reporters: [ 31 | { type: 'html' }, 32 | { type: 'text-summary' } 33 | ] 34 | }, 35 | reporters: ['progress', 'kjhtml'], 36 | port: 9876, 37 | colors: true, 38 | logLevel: config.LOG_INFO, 39 | autoWatch: true, 40 | browsers: ['Chrome'], 41 | singleRun: false, 42 | restartOnFileChange: true 43 | }); 44 | }; 45 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/forms/_validation.scss: -------------------------------------------------------------------------------- 1 | // Validation states 2 | // ******************************************************************************* 3 | 4 | @each $state, $data in $form-validation-states { 5 | @include template-form-validation-state($state, $data...); 6 | } 7 | 8 | // Currently supported for formvalidation and jq-validation 9 | form { 10 | .error:not(li):not(input) { 11 | color: $form-feedback-invalid-color; 12 | font-size: 85%; 13 | margin-top: 0.25rem; 14 | } 15 | 16 | .invalid, 17 | .is-invalid .invalid:before, 18 | .is-invalid::before { 19 | border-color: $form-feedback-invalid-color !important; 20 | } 21 | 22 | .form-label { 23 | &.invalid, 24 | &.is-invalid { 25 | border-color: $form-feedback-invalid-color; 26 | box-shadow: 0 0 0 2px rgba($form-feedback-invalid-color, 0.4) !important; 27 | } 28 | } 29 | 30 | select { 31 | &.invalid { 32 | & ~ .select2 { 33 | .select2-selection { 34 | border-color: $form-feedback-invalid-color; 35 | } 36 | } 37 | } 38 | 39 | // FormValidation 40 | 41 | //Select2 42 | &.is-invalid { 43 | & ~ .select2 { 44 | .select2-selection { 45 | border-color: $form-feedback-invalid-color !important; 46 | } 47 | } 48 | } 49 | // Bootstrap select 50 | &.selectpicker { 51 | &.is-invalid { 52 | ~ .btn { 53 | border-color: 1px solid $form-feedback-invalid-color; 54 | border-color: $form-feedback-invalid-color; 55 | } 56 | } 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_dropdown.scss: -------------------------------------------------------------------------------- 1 | // Dropdowns 2 | // ***************************************************************** 3 | 4 | // On hover outline 5 | [data-trigger='hover'] { 6 | outline: 0; 7 | } 8 | 9 | .dropdown-menu { 10 | margin: $dropdown-spacer 0; 11 | box-shadow: $dropdown-box-shadow; 12 | // Animations 13 | animation: dropdownAnimation 0.1s; 14 | 15 | // Mega dropdown inside the dropdown menu 16 | .mega-dropdown > & { 17 | left: 0 !important; 18 | right: 0 !important; 19 | } 20 | 21 | // Badge within dropdown menu 22 | .badge[class^='float-'], 23 | .badge[class*=' float-'] { 24 | position: relative; 25 | top: 0.071em; 26 | } 27 | } 28 | // Dropdown item line height 29 | .dropdown-item { 30 | line-height: $dropdown-link-line-height; 31 | } 32 | 33 | // Hidden dropdown toggle arrow 34 | .dropdown-toggle.hide-arrow, 35 | .dropdown-toggle-hide-arrow > .dropdown-toggle { 36 | &::before, 37 | &::after { 38 | display: none; 39 | } 40 | } 41 | 42 | // Dropdown caret icon 43 | 44 | @if $enable-caret { 45 | // Dropdown arrow 46 | .dropdown-toggle::after { 47 | @include caret-down; 48 | } 49 | // Dropend arrow 50 | .dropend .dropdown-toggle::after { 51 | @include caret-right; 52 | } 53 | // Dropstart arrow 54 | .dropstart .dropdown-toggle::before { 55 | @include caret-left; 56 | } 57 | // Dropup arrow 58 | .dropup .dropdown-toggle::after { 59 | @include caret-up; 60 | } 61 | 62 | .dropstart .dropdown-toggle::before, 63 | .dropend .dropdown-toggle::after { 64 | vertical-align: $caret-vertical-align; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/vendor/css/pages/page-icons.css: -------------------------------------------------------------------------------- 1 | #icons-container .icon-card { 2 | width: 128px; 3 | } 4 | #icons-container .icon-card i { 5 | font-size: 2rem; 6 | } 7 | 8 | @media (max-width: 1024px) { 9 | #icons-container .icon-card { 10 | width: 126px; 11 | } 12 | } 13 | @media (max-width: 767.98px) { 14 | #icons-container .icon-card { 15 | width: 131px; 16 | } 17 | } 18 | @media (max-width: 414px) { 19 | #icons-container .icon-card { 20 | width: 110px; 21 | } 22 | } 23 | @media (max-width: 375px) { 24 | #icons-container .icon-card { 25 | width: 150px; 26 | } 27 | } 28 | 29 | /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhZ2VzL3BhZ2UtaWNvbnMuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsWUFBWTtBQUNkO0FBQ0E7RUFDRSxlQUFlO0FBQ2pCOztBQUVBO0VBQ0U7SUFDRSxZQUFZO0VBQ2Q7QUFDRjtBQUNBO0VBQ0U7SUFDRSxZQUFZO0VBQ2Q7QUFDRjtBQUNBO0VBQ0U7SUFDRSxZQUFZO0VBQ2Q7QUFDRjtBQUNBO0VBQ0U7SUFDRSxZQUFZO0VBQ2Q7QUFDRiIsImZpbGUiOiJwYWdlcy9wYWdlLWljb25zLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNpY29ucy1jb250YWluZXIgLmljb24tY2FyZCB7XG4gIHdpZHRoOiAxMjhweDtcbn1cbiNpY29ucy1jb250YWluZXIgLmljb24tY2FyZCBpIHtcbiAgZm9udC1zaXplOiAycmVtO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gICNpY29ucy1jb250YWluZXIgLmljb24tY2FyZCB7XG4gICAgd2lkdGg6IDEyNnB4O1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY3Ljk4cHgpIHtcbiAgI2ljb25zLWNvbnRhaW5lciAuaWNvbi1jYXJkIHtcbiAgICB3aWR0aDogMTMxcHg7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA0MTRweCkge1xuICAjaWNvbnMtY29udGFpbmVyIC5pY29uLWNhcmQge1xuICAgIHdpZHRoOiAxMTBweDtcbiAgfVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDM3NXB4KSB7XG4gICNpY29ucy1jb250YWluZXIgLmljb24tY2FyZCB7XG4gICAgd2lkdGg6IDE1MHB4O1xuICB9XG59XG4iXX0= */ 30 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_components/_app-brand.scss: -------------------------------------------------------------------------------- 1 | // App Brand 2 | // ******************************************************************************* 3 | 4 | @import 'mixins/app-brand'; 5 | 6 | .app-brand { 7 | display: flex; 8 | flex-grow: 0; 9 | flex-shrink: 0; 10 | overflow: hidden; 11 | line-height: 1; 12 | min-height: 1px; 13 | align-items: center; 14 | } 15 | 16 | .app-brand-link { 17 | display: flex; 18 | align-items: center; 19 | } 20 | .app-brand-logo { 21 | display: block; 22 | flex-grow: 0; 23 | flex-shrink: 0; 24 | overflow: hidden; 25 | min-height: 1px; 26 | 27 | img, 28 | svg { 29 | display: block; 30 | } 31 | } 32 | 33 | .app-brand-text { 34 | flex-shrink: 0; 35 | opacity: 1; 36 | transition: opacity $menu-animation-duration * 0.5 ease-in-out; 37 | } 38 | 39 | .app-brand-img-collapsed { 40 | display: none; 41 | } 42 | 43 | // App brand with vertical menu 44 | .menu-vertical .app-brand { 45 | padding-right: $menu-vertical-link-padding-x + $menu-vertical-link-margin-x; 46 | padding-left: $menu-vertical-link-padding-x + $menu-vertical-link-margin-x; 47 | } 48 | 49 | // App brand with vertical menu 50 | .menu-horizontal .app-brand, 51 | .menu-horizontal .app-brand + .menu-divider { 52 | display: none !important; 53 | } 54 | 55 | :not(.layout-menu) > .menu-vertical.menu-collapsed:not(.layout-menu):not(:hover) { 56 | @include template-app-brand-collapsed(); 57 | } 58 | 59 | @include media-breakpoint-up(xl) { 60 | .layout-menu-collapsed:not(.layout-menu-hover):not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) 61 | .layout-menu { 62 | @include template-app-brand-collapsed(); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/mixins/_list-group.scss: -------------------------------------------------------------------------------- 1 | // List groups 2 | // ******************************************************************************* 3 | 4 | @mixin list-group-item-variant($state: null, $background: null, $color: null) { 5 | } 6 | 7 | // Basic List groups 8 | @mixin template-list-group-item-variant($parent, $background, $color: null) { 9 | $background-color: if( 10 | $dark-style, 11 | shift-color($background, -$list-group-item-bg-scale, $card-bg), 12 | shift-color($background, $list-group-item-bg-scale, $card-bg) 13 | ); 14 | $color: if( 15 | $parent == '.list-group-item-dark' and $dark-style, 16 | color-contrast($background), 17 | shift-color($background, $list-group-item-color-scale) 18 | ); 19 | $hover-background: shade-color($background-color, $list-group-item-bg-hover-scale); 20 | #{$parent} { 21 | background-color: $background-color; 22 | color: $color !important; 23 | } 24 | 25 | a#{$parent}, 26 | button#{$parent} { 27 | color: $color; 28 | &:hover, 29 | &:focus { 30 | background-color: $hover-background; 31 | color: $color; 32 | } 33 | 34 | &.active { 35 | border-color: $background; 36 | background-color: $background; 37 | color: if($color, $color, color-contrast($background)); 38 | } 39 | } 40 | } 41 | 42 | @mixin template-list-group-theme($background, $color: null) { 43 | @include template-list-group-item-variant('.list-group-item-primary', $background); 44 | 45 | .list-group-item.active { 46 | &, 47 | &:hover, 48 | &:focus { 49 | border-color: $background; 50 | background-color: $background; 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/tasks/prod.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const { src, dest, series } = require('gulp'); 3 | const replace = require('gulp-replace'); 4 | const useref = require('gulp-useref'); 5 | 6 | module.exports = conf => { 7 | // Copy templatePath html files and assets to buildPath 8 | // ------------------------------------------------------------------------------- 9 | const prodCopyTask = function () { 10 | return src(`${templatePath}/**/*.html`) 11 | .pipe(dest(buildPath)) 12 | .pipe(src('assets/**/*')) 13 | .pipe(dest(`${buildPath}/assets/`)); 14 | }; 15 | 16 | // Rename assets path 17 | // ------------------------------------------------------------------------------- 18 | const prodRenameTasks = function () { 19 | return src(`${buildPath}/*.html`) 20 | .pipe(replace('../../assets', 'assets')) 21 | .pipe(dest(buildPath)) 22 | .pipe(src(`${buildPath}/assets/**/*`)) 23 | .pipe(replace('../../assets', 'assets')) 24 | .pipe(dest(`${buildPath}/assets/`)); 25 | }; 26 | 27 | // Combine js vendor assets in single core.js file using UseRef 28 | // ------------------------------------------------------------------------------- 29 | const prodUseRefTasks = function () { 30 | return src(`${buildPath}/*.html`).pipe(useref()).pipe(dest(buildPath)); 31 | }; 32 | 33 | const prodAllTask = series(prodCopyTask, prodRenameTasks, prodUseRefTasks); 34 | 35 | // Exports 36 | // --------------------------------------------------------------------------- 37 | 38 | return { 39 | copy: prodCopyTask, 40 | rename: prodRenameTasks, 41 | useref: prodUseRefTasks, 42 | all: prodAllTask 43 | }; 44 | }; 45 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/forms/_input-group.scss: -------------------------------------------------------------------------------- 1 | // Input groups 2 | // ******************************************************************************* 3 | 4 | // Using :focus-within to apply focus/validation border and shadow to default and merged input-group 5 | .input-group { 6 | &:focus-within { 7 | box-shadow: $input-focus-box-shadow; 8 | .form-control, 9 | .input-group-text { 10 | box-shadow: none; 11 | } 12 | } 13 | // For disabled input group 14 | &.disabled { 15 | .input-group-text { 16 | background-color: $input-disabled-bg; 17 | } 18 | } 19 | } 20 | 21 | // input-group-text icon size 22 | .input-group-text { 23 | background-clip: padding-box; 24 | i { 25 | @include font-size($input-font-size); 26 | } 27 | } 28 | .input-group-lg > .input-group-text { 29 | i { 30 | @include font-size($input-font-size-lg); 31 | } 32 | } 33 | .input-group-sm > .input-group-text { 34 | i { 35 | @include font-size($input-font-size-sm); 36 | } 37 | } 38 | 39 | // Merge input 40 | 41 | // Input group merge .form-control border & padding 42 | @include ltr-only { 43 | .input-group-merge { 44 | .input-group-text { 45 | &:first-child { 46 | border-right: 0; 47 | } 48 | &:last-child { 49 | border-left: 0; 50 | } 51 | } 52 | .form-control { 53 | &:not(:first-child) { 54 | padding-left: 0; 55 | border-left: 0; 56 | } 57 | &:not(:last-child) { 58 | padding-right: 0; 59 | border-right: 0; 60 | } 61 | } 62 | } 63 | } 64 | 65 | // Adding transition (On focus border color change) 66 | .input-group-text { 67 | @include transition($input-transition); 68 | } 69 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/register/register/register.component.html: -------------------------------------------------------------------------------- 1 | 16 |
17 | 18 |
19 |
20 |
21 |

22 | 23 | 24 | 25 | 26 |

27 | 28 | 29 | 30 | 31 |

32 | 33 | 34 |

35 | 36 |
{{messageErr}}
37 | 38 | 39 |
40 |
41 | 42 |
43 |

-------------------------------------------------------------------------------- /Front-end/src/assets/Admin/assets/vendor/libs/highlight/highlight.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Atom One Light by Daniel Gamage 4 | Original One Light Syntax theme from https://github.com/atom/one-light-syntax 5 | 6 | base: #fafafa 7 | mono-1: #383a42 8 | mono-2: #686b77 9 | mono-3: #a0a1a7 10 | hue-1: #0184bb 11 | hue-2: #4078f2 12 | hue-3: #a626a4 13 | hue-4: #50a14f 14 | hue-5: #e45649 15 | hue-5-2: #c91243 16 | hue-6: #986801 17 | hue-6-2: #c18401 18 | 19 | */ 20 | .hljs { 21 | display: block; 22 | overflow-x: auto; 23 | padding: 0.5em; 24 | color: #383a42; 25 | background: #fafafa; 26 | } 27 | 28 | .hljs-comment, 29 | .hljs-quote { 30 | color: #a0a1a7; 31 | font-style: italic; 32 | } 33 | 34 | .hljs-doctag, 35 | .hljs-keyword, 36 | .hljs-formula { 37 | color: #a626a4; 38 | } 39 | 40 | .hljs-section, 41 | .hljs-name, 42 | .hljs-selector-tag, 43 | .hljs-deletion, 44 | .hljs-subst { 45 | color: #e45649; 46 | } 47 | 48 | .hljs-literal { 49 | color: #0184bb; 50 | } 51 | 52 | .hljs-string, 53 | .hljs-regexp, 54 | .hljs-addition, 55 | .hljs-attribute, 56 | .hljs-meta-string { 57 | color: #50a14f; 58 | } 59 | 60 | .hljs-built_in, 61 | .hljs-class .hljs-title { 62 | color: #c18401; 63 | } 64 | 65 | .hljs-attr, 66 | .hljs-variable, 67 | .hljs-template-variable, 68 | .hljs-type, 69 | .hljs-selector-class, 70 | .hljs-selector-attr, 71 | .hljs-selector-pseudo, 72 | .hljs-number { 73 | color: #986801; 74 | } 75 | 76 | .hljs-symbol, 77 | .hljs-bullet, 78 | .hljs-link, 79 | .hljs-meta, 80 | .hljs-selector-id, 81 | .hljs-title { 82 | color: #4078f2; 83 | } 84 | 85 | .hljs-emphasis { 86 | font-style: italic; 87 | } 88 | 89 | .hljs-strong { 90 | font-weight: bold; 91 | } 92 | 93 | .hljs-link { 94 | text-decoration: underline; 95 | } 96 | -------------------------------------------------------------------------------- /Front-end/src/app/views/service/authadmin.service.ts: -------------------------------------------------------------------------------- 1 | import { HttpClient } from '@angular/common/http'; 2 | import { Injectable } from '@angular/core'; 3 | import { JwtHelperService } from "@auth0/angular-jwt"; 4 | 5 | 6 | @Injectable({ 7 | providedIn: 'root' 8 | }) 9 | export class AuthadminService { 10 | 11 | profilAdmin={ 12 | 13 | role:'', 14 | username:'' 15 | } 16 | IsLoggedIn:boolean=false 17 | helper = new JwtHelperService(); 18 | 19 | 20 | 21 | constructor(private http:HttpClient) { 22 | 23 | 24 | } 25 | login(data:any) { 26 | return this.http.post('http://localhost:3000/login',data) 27 | 28 | } 29 | 30 | getUserId(){ 31 | let token:any=localStorage.getItem('token') 32 | let decodeToken= this.helper.decodeToken(token) 33 | 34 | return decodeToken.id 35 | 36 | } 37 | 38 | getUsername(){ 39 | let token:any=localStorage.getItem('token') 40 | let decodeToken= this.helper.decodeToken(token) 41 | 42 | return decodeToken.username 43 | 44 | } 45 | LoggedIn(){ 46 | let token:any=localStorage.getItem('token') 47 | if(!token){ 48 | return false 49 | } 50 | let decodeToken=this.helper.decodeToken(token) 51 | 52 | 53 | if(decodeToken.role!=='Admin'){ 54 | return false 55 | } 56 | 57 | if(this.helper.isTokenExpired(token)){ 58 | return false 59 | } 60 | 61 | return true 62 | } 63 | saveDataProfil(token:any,role:any){ 64 | 65 | let decodeToken= this.helper.decodeToken(token) 66 | 67 | 68 | localStorage.setItem('token',token) 69 | localStorage.setItem('username',decodeToken.username) 70 | localStorage.setItem('role',role) 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_colors.scss: -------------------------------------------------------------------------------- 1 | @import '_components/include'; 2 | 3 | // * Bootstrap colors (Uncomment required colors) 4 | // ******************************************************************************* 5 | 6 | $bootstrap-colors: () !default; 7 | 8 | @each $color-name, $color-value in $bootstrap-colors { 9 | @include bg-variant('.bg-#{$color-name}', $color-value); 10 | @include bg-label-variant('.bg-label-#{$color-name}', $color-value); 11 | 12 | @include border-label-variant('.border-label-#{$color-name}', $color-value); 13 | @include border-light-variant('.border-light-#{$color-name}', $color-value); 14 | 15 | .border-#{$color-name} { 16 | border-color: $color-value !important; 17 | } 18 | 19 | @include template-button-variant('.btn-#{$color-name}', $color-value); 20 | @include template-button-outline-variant('.btn-outline-#{$color-name}', $color-value); 21 | } 22 | 23 | // * Navbar 24 | // ******************************************************************************* 25 | 26 | @each $color, $value in $theme-colors { 27 | @if $color !=primary and $color !=light { 28 | @include template-navbar-style('.navbar.bg-#{$color}', $value); 29 | } 30 | } 31 | 32 | @include template-navbar-style('.navbar.bg-white', #fff, $color: $text-muted, $active-color: $body-color); 33 | @include template-navbar-style('.navbar.bg-light', $gray-100, $color: $text-muted, $active-color: $body-color); 34 | 35 | // * Footer 36 | // ******************************************************************************* 37 | 38 | @include template-footer-style('.footer.bg-white', #fff, $color: $text-muted, $active-color: $body-color); 39 | @include template-footer-style('.footer.bg-light', $gray-100, $color: $text-muted, $active-color: $body-color); 40 | -------------------------------------------------------------------------------- /Front-end/localhost.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDFf2Bmz0pCl1hW 3 | mTszDQ0M/UbNWGAonBNrm+7Uwm81c8ByBL1wblK2eIKE20XG5KBT1DLFOPb1Kwwk 4 | LphV2x5NvZ2bHU8mGKHc6lCaSQDfdwM0ZtqCixpijwzh5Qri/0muoOwTFHiXAjAA 5 | uAgmDBcfcqt5o9eTPx4ygelLO/w8d3Zgqn5IeIlPERU8bfexOWwlaZdvvp7ZCny/ 6 | a3AFsDT9ExR8mqtsSoSD4DbMIjMgt56gzWtP+3EfAtOh8ivl5zB4eIe1MEAlaF4j 7 | Mkhy1SSIAqxZumOTyh+njM1RwTZMIpFHm2v4Qr8eI8K9rWjur9XN2XhApW7g4Pdi 8 | b0mGaMRhAgMBAAECggEAGWLOGWj7uqOJj1gS6/T5gHnt5+c8NPwa4vIgOOjlMpG2 9 | YvGJCDKmHx5OaJVm2rH4ic302LUByXHHFb+HhUGtG4EMCSwzSEpSQ/s6cRqBKjg6 10 | CTpPTAhlU9Xfagnu5E68Qd4dejZfacm2MeF16q4TKs+qivAsfZjXYNaiDjGfsoXO 11 | kc/u+VfB27VLA5TFEnhvBzeLKOnhCvO5Gu5LSEj6ZMm4mhJD9/sTfL2KZ/+SU2tO 12 | vqWV8SXA3RyTDTTTfxmPA71EjJNNsAQbHq8hSaRtu1d7Bsx4i6DcSpU5rhBh8rjd 13 | jL41TAb3fm+a5BqNkLducTxFpgVCevehL0xMtk43gQKBgQDyV9usbIdQw2FJpU5m 14 | oHKNy9f1A3Na1B6i40MCPfN9bt1T2L1wBvTZ6Q1JCEHNzQ43AqGCzIrTH3+Xlw2U 15 | 1pgyOM8jVu4LhlIKXQxQsOOMjmsMrvCXL9od6sCVcFYUKF9KpP1zt9o6gmozgf8v 16 | akeAjyOZxwMUly9GWBErqXTvpQKBgQDQoI6dEH5flPNriIsA6+YvUVisYHirMj0r 17 | 1KO+DSN5JJKzo8bszSx5gEsNsB/HNhLZ0o2AQXGHTSTmp7Ss0iIS/tzsdN9uoAFS 18 | 9br/g4hYCvAqx/oyvR4zeK3xRvpT4keFrLa0mQQBKXz7yvPyq+IovBNCU2B0DRgo 19 | 7cGsAZLlDQKBgDHkDIFuxlzGHF1A/ub52Rt//7GdSD5GtRfrmXv4rQwBqub8E+Pg 20 | SsAhzm5emM15jZednwqCeYIFVgsrOcyOcT7Fmz83QkJ1IKapiUODZxUkrL0rtrQp 21 | Ucoe7g7V1aLIvPVtChCspOyutJZuCM8GHjpFPZsG8YdnqH/e2YoXlM9RAoGAU0A+ 22 | qJ50T1/44uhRz8RSzn7/i4nTnT0m+96WmLhVd3oIsHaiYsxc+v8e9A9cHvqM+y7y 23 | GEQFMaCvIPu7NVuFDV92eUUKA/MFlD1KqburJLb4r5mtVaHx80gs4SMZsW+Sat1I 24 | 6zhESNJtdWy/fA7q6KZkaQssaiLviSWXKzRVkeECgYEAmfztMk0FjqTYIH8Q/HK1 25 | tskzfA9yo/urndhaMtt6xpMA9Awf/GdH1S1DgBC3YAbssnsh+iumfriGa7W8C/h5 26 | 06THsBm4w0MFruYVhPSho/aTwlsoE1gSmnNEyKo5r4juKARm59LiNXPfcC492trb 27 | SDzbG37kPCA9r/zCXkfZPe8= 28 | -----END PRIVATE KEY----- 29 | -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-order/edit-order/edit-order/edit-order.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute } from '@angular/router'; 3 | import { DataService } from 'src/app/views/service/data.service'; 4 | import { HttpErrorResponse } from '@angular/common/http'; 5 | 6 | @Component({ 7 | selector: 'app-edit-order', 8 | templateUrl: './edit-order.component.html', 9 | styleUrls: ['./edit-order.component.css'] 10 | }) 11 | export class EditOrderComponent implements OnInit { 12 | orderId:any 13 | datau:any 14 | messageSuccess:any 15 | data:any 16 | constructor(private Activatedroute: ActivatedRoute,private ds:DataService) { 17 | 18 | this.orderId = 19 | this.Activatedroute.snapshot.queryParamMap.get('orderId') || 0; 20 | this.ds.getoneorder(this.orderId).subscribe((data) => this.datau = data); 21 | } 22 | 23 | ngOnInit(): void { 24 | this.orderId = 25 | this.Activatedroute.snapshot.queryParamMap.get('orderId') || 0; 26 | this.ds.getoneorder(this.orderId).subscribe((data)=>{ 27 | this.datau=data 28 | 29 | }) 30 | 31 | 32 | } 33 | 34 | 35 | 36 | /* updateorder(p:any){ 37 | let data = p.value 38 | const FD = new FormData() 39 | FD.append('quantite',p.value.quantite) 40 | FD.append('amount',p.value.amount) 41 | FD.append('adress',p.value.adress) 42 | FD.append('status',p.value.status) 43 | this.ds.updateorder(FD,this.orderId).subscribe((response)=> 44 | { 45 | 46 | // this.router.navigate(/) 47 | 48 | console.log(response) 49 | this.ngOnInit() 50 | 51 | 52 | 53 | this.messageSuccess=`this order is updated` 54 | 55 | 56 | },(err:HttpErrorResponse)=>{ 57 | console.log(err.message) 58 | 59 | }) 60 | 61 | }*/ 62 | 63 | } 64 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_tables.scss: -------------------------------------------------------------------------------- 1 | // Tables 2 | // ********************************************************************************/ 3 | 4 | @each $color, $value in $table-variants { 5 | @if $color != primary { 6 | @include template-table-variant($color, $value); 7 | } 8 | } 9 | 10 | // Style for table inside card 11 | .card { 12 | .table { 13 | margin-bottom: 0; 14 | } 15 | } 16 | @supports (-moz-appearance: none) { 17 | .table { 18 | .dropdown-menu.show { 19 | display: inline-table; 20 | } 21 | } 22 | } 23 | // Table heading style 24 | .table { 25 | th { 26 | text-transform: uppercase; 27 | font-size: 0.75rem; 28 | letter-spacing: 1px; 29 | } 30 | &:not(.table-dark) th { 31 | color: $headings-color; 32 | } 33 | } 34 | 35 | .table-border-bottom-0 { 36 | tr:last-child { 37 | td, 38 | th { 39 | border-bottom-width: 0; 40 | } 41 | } 42 | } 43 | 44 | // Dark Table icon button 45 | .table.table-dark .btn.btn-icon { 46 | color: $table-border-color; 47 | } 48 | // .table { 49 | // .btn-group { 50 | // display: block; 51 | // } 52 | // } 53 | 54 | // Flush spacing of left from first column ans right from last column 55 | .table.table-flush-spacing { 56 | thead, 57 | tbody { 58 | tr > td:first-child { 59 | padding-left: 0; 60 | } 61 | tr > td:last-child { 62 | padding-right: 0; 63 | } 64 | } 65 | } 66 | 67 | // * Table inside card 68 | // ******************************************************************************* 69 | 70 | // .card, 71 | .nav-align-top, 72 | .nav-align-right, 73 | .nav-align-bottom, 74 | .nav-align-left { 75 | .table:not(.table-dark), 76 | .table:not(.table-dark) thead:not(.table-dark) th, 77 | .table:not(.table-dark) tfoot:not(.table-dark) th, 78 | .table:not(.table-dark) td { 79 | border-color: $border-inner-color; 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /Back-end/router/userrouter.js: -------------------------------------------------------------------------------- 1 | const express=require('express') 2 | const route=express.Router() 3 | const db=require('../models') 4 | const bcrypt=require('bcrypt') 5 | const usercontroller=require('../controllers/user-controller') 6 | 7 | 8 | route.post('/register',(req,res,next)=>{ 9 | 10 | usercontroller.register(req.body.username,req.body.email,req.body.password) 11 | .then(response=>res.status(200).json(response)) 12 | .catch(err=>res.status(400).json(err)) 13 | 14 | }) 15 | 16 | 17 | 18 | 19 | route.post('/login',(req,res,next)=>{ 20 | 21 | usercontroller.login(req.body.email,req.body.password) 22 | .then(response=>res.status(200).json({token:response})) 23 | .catch(err => { 24 | res.status(500).send({ 25 | message: "invalid email and password" 26 | }); 27 | }) 28 | }) 29 | 30 | 31 | route.get('/user/:id',(req,res,next)=>{ 32 | db.User.findOne({where:{id:req.params.id}}) 33 | .then((response)=>res.status(200).send(response)) 34 | .catch((err)=>res.status(400).send(err)) 35 | }) 36 | 37 | route.get('/users',(req,res,next)=>{ 38 | db.User.findAll() 39 | .then((response)=>res.status(200).send(response)) 40 | .catch((err)=>res.status(400).send(err)) 41 | }) 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | route.delete('/user/:id',(req, res) => { 50 | const id = req.params.id; 51 | 52 | db.User.destroy({ 53 | where: { id: id } 54 | }) 55 | .then(num => { 56 | if (num == 1) { 57 | res.send({ 58 | message: "User was deleted successfully!" 59 | }); 60 | } else { 61 | res.send({ 62 | message: `Cannot delete User with id=${id}. Maybe User was not found!` 63 | }); 64 | } 65 | }) 66 | .catch(err => { 67 | res.status(500).send({ 68 | message: "Could not delete User with id=" + id 69 | }); 70 | }); 71 | }) 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | module.exports=route -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-produit/edit-produit/edit-produit/edit-produit.component.ts: -------------------------------------------------------------------------------- 1 | import { getLocaleDateFormat } from '@angular/common'; 2 | import { Component, OnInit } from '@angular/core'; 3 | import { ActivatedRoute, Router } from '@angular/router'; 4 | import { DataService } from 'src/app/views/service/data.service'; 5 | import { HttpErrorResponse } from '@angular/common/http'; 6 | @Component({ 7 | selector: 'app-edit-produit', 8 | templateUrl: './edit-produit.component.html', 9 | styleUrls: ['./edit-produit.component.css'] 10 | }) 11 | export class EditProduitComponent implements OnInit { 12 | produitId:any 13 | datau:any 14 | data:any 15 | messageSuccess:any 16 | constructor(private Activatedroute: ActivatedRoute,private ds:DataService, 17 | private router:Router) { 18 | 19 | 20 | } 21 | 22 | ngOnInit(): void { 23 | this.produitId = 24 | this.Activatedroute.snapshot.queryParamMap.get('produitId') || 0; 25 | this.ds.getoneproduit(this.produitId).subscribe((data)=>{ 26 | this.datau=data 27 | 28 | }) 29 | 30 | 31 | } 32 | 33 | updateproduit(f:any){ 34 | let data=f.value 35 | const formData = new FormData(); 36 | formData.append('titre',f.value.titre) 37 | formData.append('descreption',f.value.descreption) 38 | formData.append('categorie',f.value.categorie) 39 | formData.append('size',f.value.size) 40 | formData.append('color',f.value.color) 41 | formData.append('prix',f.value.prix) 42 | formData.append('instock',f.value.instock) 43 | this.ds.updateproduit(formData,this.produitId).subscribe((response)=> 44 | { 45 | 46 | // this.router.navigate(/) 47 | 48 | console.log(response) 49 | this.ngOnInit() 50 | 51 | 52 | 53 | this.messageSuccess=`this produit is updated` 54 | 55 | 56 | },(err:HttpErrorResponse)=>{ 57 | console.log(err.message) 58 | 59 | }) 60 | } 61 | } 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap.scss: -------------------------------------------------------------------------------- 1 | @import '_bootstrap-extended/include'; 2 | 3 | // Import bootstrap core scss from node_module 4 | // ! Utilities are customized and added in bootstrap-extended 5 | 6 | // Layout & components 7 | @import '../node_modules/bootstrap/scss/root'; 8 | @import '../node_modules/bootstrap/scss/reboot'; 9 | @import '../node_modules/bootstrap/scss/type'; 10 | @import '../node_modules/bootstrap/scss/images'; 11 | @import '../node_modules/bootstrap/scss/containers'; 12 | @import '../node_modules/bootstrap/scss/grid'; 13 | @import '../node_modules/bootstrap/scss/tables'; 14 | @import '../node_modules/bootstrap/scss/forms'; 15 | @import '../node_modules/bootstrap/scss/buttons'; 16 | @import '../node_modules/bootstrap/scss/transitions'; 17 | @import '../node_modules/bootstrap/scss/dropdown'; 18 | @import '../node_modules/bootstrap/scss/button-group'; 19 | @import '../node_modules/bootstrap/scss/nav'; 20 | @import '../node_modules/bootstrap/scss/navbar'; 21 | @import '../node_modules/bootstrap/scss/card'; 22 | @import '../node_modules/bootstrap/scss/accordion'; 23 | @import '../node_modules/bootstrap/scss/breadcrumb'; 24 | @import '../node_modules/bootstrap/scss/pagination'; 25 | @import '../node_modules/bootstrap/scss/badge'; 26 | @import '../node_modules/bootstrap/scss/alert'; 27 | @import '../node_modules/bootstrap/scss/progress'; 28 | @import '../node_modules/bootstrap/scss/list-group'; 29 | @import '../node_modules/bootstrap/scss/close'; 30 | @import '../node_modules/bootstrap/scss/toasts'; 31 | @import '../node_modules/bootstrap/scss/modal'; 32 | @import '../node_modules/bootstrap/scss/tooltip'; 33 | @import '../node_modules/bootstrap/scss/popover'; 34 | @import '../node_modules/bootstrap/scss/carousel'; 35 | @import '../node_modules/bootstrap/scss/spinners'; 36 | @import '../node_modules/bootstrap/scss/offcanvas'; 37 | @import '../node_modules/bootstrap/scss/placeholders'; 38 | 39 | // Helpers 40 | @import '../node_modules/bootstrap/scss/helpers'; 41 | -------------------------------------------------------------------------------- /Front-end/src/app/views/service/data.service.ts: -------------------------------------------------------------------------------- 1 | import { HttpClient } from '@angular/common/http'; 2 | import { identifierName } from '@angular/compiler'; 3 | import { Injectable } from '@angular/core'; 4 | 5 | @Injectable({ 6 | providedIn: 'root' 7 | }) 8 | export class DataService { 9 | datau:any 10 | data:any 11 | constructor(private http:HttpClient) { } 12 | 13 | 14 | getUsers(){ 15 | return this.http.get('Http://localhost:3000/users') 16 | } 17 | getproduit(){ 18 | return this.http.get('Http://localhost:3000/getAllproduit') 19 | } 20 | getorder(){ 21 | return this.http.get('Http://localhost:3000/getAllorder') 22 | } 23 | deleteuser(id:any){ 24 | return this.http.delete('Http://localhost:3000/user/'+id) 25 | } 26 | getoneuser(id:any){ 27 | return this.http.get('Http://localhost:3000/user/'+id) 28 | } 29 | deleteorder(id:any){ 30 | return this.http.delete('Http://localhost:3000/deleteorder/'+id) 31 | } 32 | deleteproduit(id:any){ 33 | return this.http.delete('Http://localhost:3000/deleteproduit/'+id) 34 | } 35 | getoneorder(id:any){ 36 | return this.http.get('Http://localhost:3000/getOneorder/'+id) 37 | } 38 | getoneproduit(id:any){ 39 | return this.http.get('Http://localhost:3000/getOneproduit/'+id) 40 | } 41 | 42 | adduser(profile:any){ 43 | return this.http.post('Http://localhost:3000/register',profile) 44 | } 45 | addproduit(p:any){ 46 | return this.http.post('Http://localhost:3000/addproduit',p) 47 | } 48 | updateproduit(f:any,Id:any){ 49 | return this.http.patch('Http://localhost:3000/updateproduit/'+Id,f) 50 | } 51 | addorder(p:any){ 52 | return this.http.post('Http://localhost:3000/addorder',p) 53 | 54 | 55 | } 56 | /* updateorder(p:any,Id:any){ 57 | return this.http.patch('Http://localhost:3000/updateorder/'+Id,p) 58 | }*/ 59 | 60 | 61 | 62 | 63 | } 64 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_bootstrap-extended/_button-group.scss: -------------------------------------------------------------------------------- 1 | // Button groups 2 | // ******************************************************************************* 3 | 4 | // * Split button 5 | // ******************************************************************************* 6 | 7 | .dropdown-toggle-split, 8 | .btn-lg + .dropdown-toggle-split, 9 | .btn-group-lg > .btn + .dropdown-toggle-split, 10 | .input-group-lg .btn + .dropdown-toggle-split, 11 | .btn-xl + .dropdown-toggle-split, 12 | .btn-group-xl > .btn + .dropdown-toggle-split { 13 | padding-right: 0.7em; 14 | padding-left: 0.7em; 15 | } 16 | 17 | .btn-sm + .dropdown-toggle-split, 18 | .btn-group-sm > .btn + .dropdown-toggle-split, 19 | .input-group-sm .btn + .dropdown-toggle-split { 20 | padding-right: 0.6em; 21 | padding-left: 0.6em; 22 | } 23 | 24 | .btn-xs + .dropdown-toggle-split, 25 | .btn-group-xs > .btn + .dropdown-toggle-split { 26 | padding-right: 0.5em; 27 | padding-left: 0.5em; 28 | } 29 | 30 | // * Sizing 31 | // ******************************************************************************* 32 | 33 | .btn-group-xs > .btn { 34 | @extend .btn-xs; 35 | } 36 | 37 | .btn-group-xl > .btn { 38 | @extend .btn-xl; 39 | } 40 | 41 | // Button groups border 42 | 43 | .btn-group > .btn-group:first-child > .btn:not([class*='btn-outline-']):first-child, 44 | .input-group > .btn:not([class*='btn-outline-']):first-child, 45 | :not(.btn-group):not(.input-group) > .btn-group > .btn:not([class*='btn-outline-']):first-child, 46 | .input-group > .btn-group:first-child > .btn:not([class*='btn-outline-']):first-child { 47 | @include ltr-style { 48 | border-left-color: transparent; 49 | } 50 | } 51 | 52 | .btn-group > .btn-group:last-child > .btn:not([class*='btn-outline-']):last-of-type, 53 | .input-group > .btn:not([class*='btn-outline-']):last-of-type, 54 | :not(.btn-group):not(.input-group) > .btn-group > .btn:not([class*='btn-outline-']):last-of-type, 55 | .input-group > .btn-group:last-child > .btn:not([class*='btn-outline-']):last-of-type { 56 | @include ltr-style { 57 | border-right-color: transparent; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Front-end/src/assets/Admin/scss/_components/_text-divider.scss: -------------------------------------------------------------------------------- 1 | // Divider 2 | // ******************************************************************************* 3 | 4 | @import '../../scss/_custom-variables/libs'; 5 | 6 | .divider { 7 | display: block; 8 | text-align: center; 9 | margin: $divider-margin-y $divider-margin-x; 10 | overflow: hidden; 11 | white-space: nowrap; 12 | 13 | .divider-text { 14 | position: relative; 15 | display: inline-block; 16 | font-size: $divider-font-size; 17 | padding: $divider-text-padding-y $divider-text-padding-x; 18 | 19 | i { 20 | font-size: $divider-icon-size; 21 | } 22 | 23 | &:before, 24 | &:after { 25 | content: ''; 26 | position: absolute; 27 | top: 50%; 28 | width: 100vw; 29 | border-top: 1px solid $divider-color; 30 | } 31 | 32 | &:before { 33 | right: 100%; 34 | } 35 | 36 | &:after { 37 | left: 100%; 38 | } 39 | } 40 | &.text-start { 41 | .divider-text { 42 | padding-left: 0; 43 | } 44 | } 45 | &.text-end { 46 | .divider-text { 47 | padding-right: 0; 48 | } 49 | } 50 | &.text-start-center { 51 | .divider-text { 52 | left: -25%; 53 | } 54 | } 55 | &.text-end-center { 56 | .divider-text { 57 | right: -25%; 58 | } 59 | } 60 | // Dotted Bordered Divider 61 | &.divider-dotted { 62 | .divider-text { 63 | &:before, 64 | &:after { 65 | border-style: dotted; 66 | border-width: 0 1px 1px; 67 | border-color: $divider-color; 68 | } 69 | } 70 | } 71 | // Dashed Bordered Divider 72 | &.divider-dashed { 73 | .divider-text { 74 | &:before, 75 | &:after { 76 | border-style: dashed; 77 | border-width: 0 1px 1px; 78 | border-color: $divider-color; 79 | } 80 | } 81 | } 82 | } 83 | 84 | // For Contextual Colors 85 | @each $color, $value in $theme-colors { 86 | @if $color !=primary and $color !=light { 87 | @include template-text-divider-variant('.divider.divider-#{$color}', $value); 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /Back-end/controllers/order-controller.js: -------------------------------------------------------------------------------- 1 | const db=require('../models') 2 | 3 | 4 | // create main Model 5 | 6 | 7 | 8 | // 1. create Order 9 | 10 | const addOrder= async (req, res) => { 11 | 12 | let info = { 13 | quantite: req.body.quantite, 14 | amount:req.body.amount, 15 | adress: req.body.adress, 16 | status:req.body.status, 17 | } 18 | const order = await db.Order.create(info) 19 | res.status(200).send(order) 20 | console.log(order) 21 | 22 | } 23 | 24 | 25 | // 2. get all Order 26 | 27 | const getAllOrder = async (req, res) => { 28 | 29 | let order = await db.Order.findAll() 30 | res.status(200).send(order) 31 | } 32 | 33 | // 3. get single Order 34 | 35 | const getOneOrder = async (req, res) => { 36 | 37 | let id = req.params.id 38 | let order = await db.Order.findOne({ where: {id:id}}) 39 | res.status(200).send(order) 40 | 41 | } 42 | 43 | // 5. delete Order by id 44 | 45 | const deleteOrder = (req, res) => { 46 | const id = req.params.id; 47 | 48 | db.Order.destroy({ 49 | where: { id: id } 50 | }) 51 | .then(num => { 52 | if (num == 1) { 53 | res.send({ 54 | message: "Order was deleted successfully!" 55 | }); 56 | } else { 57 | res.send({ 58 | message: `Cannot delete Order with id=${id}. Maybe Produit was not found!` 59 | }); 60 | } 61 | }) 62 | .catch(err => { 63 | res.status(500).send({ 64 | message: "Could not delete Order with id=" + id 65 | }); 66 | }); 67 | }; 68 | const updateOrder = async (req, res) => { 69 | 70 | db.Order.update({ 71 | quantite: req.body.quantite, 72 | amount:req.body.amount, 73 | adress: req.body.adress, 74 | status:req.body.status, 75 | },{where:{id:req.params.id}}) 76 | .then((response)=>res.status(200).send(response)) 77 | .catch((err)=>res.status(400).send(err)) 78 | 79 | }; 80 | 81 | 82 | 83 | module.exports = { 84 | addOrder, 85 | getAllOrder, 86 | getOneOrder, 87 | deleteOrder, 88 | updateOrder 89 | 90 | 91 | 92 | } -------------------------------------------------------------------------------- /Front-end/src/app/views/admin/g-order/g-order/g-order.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |

Order management

6 | 7 | 8 |
9 | 10 |
11 |
12 |
13 | 14 |
15 | 16 | 17 | 18 | 19 |
20 |
21 | 22 | 23 | 24 |
25 |
Order
26 |
27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 44 | 45 | 46 | 50 | 51 | 52 | 53 | 54 | 55 |
quantite amount adressStatusAction
{{item.quantite}}{{item.amount}} TND 42 | {{item.adress}} 43 | {{item.status}} 47 | 48 | 49 |
56 |
57 |
58 |
59 |
60 | 61 | -------------------------------------------------------------------------------- /Front-end/src/assets/Front/fonts/slick.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by Fontastic.me 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Back-end/server.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const cors = require("cors"); 3 | const db = require("./models"); 4 | const bodyParser = require("body-parser"); 5 | 6 | const userRouter = require("./router/userrouter"); 7 | const produitrouter = require ("./router/produitrouter"); 8 | const orderrouter = require ('./router/orderrouter'); 9 | 10 | 11 | 12 | const app = express(); 13 | app.use(bodyParser.json()); 14 | 15 | app.use((req, res, next) => { 16 | res.setHeader("Access-Control-Allow-Origin", "*"); 17 | res.setHeader("Acces-Control-Request-Method", "*"); 18 | res.setHeader("Acces-Control-Allow-Headers", "*"); 19 | next(); 20 | }); 21 | 22 | // Set up CORS 23 | app.use( 24 | cors({ 25 | origin: true, // "true" will copy the domain of the request back 26 | // to the reply. If you need more control than this 27 | // use a function. 28 | 29 | credentials: true, // This MUST be "true" if your endpoint is 30 | // authenticated via either a session cookie 31 | // or Authorization header. Otherwise the 32 | // browser will block the response. 33 | 34 | methods: "POST,GET,PUT,PATCH,OPTIONS,DELETE", // Make sure you're not blocking 35 | // pre-flight OPTIONS requests 36 | }) 37 | ); 38 | 39 | app.use("/",userRouter); 40 | app.use("/",produitrouter); 41 | app.use("/",orderrouter); 42 | // middleware 43 | 44 | app.use(express.json()); 45 | 46 | app.use(express.urlencoded({ extended: true })); 47 | 48 | const path = require("path"); 49 | app.use("/Images", express.static(path.join("api/Images"))); 50 | 51 | // routers 52 | 53 | 54 | app.get("/", (req, res) => { 55 | res.send("hello world"); 56 | }); 57 | 58 | 59 | //static Images Folder 60 | 61 | app.use("/Images", express.static("./Images")); 62 | 63 | 64 | //port 65 | 66 | // app.use(express.static(__dirname+'/dist')); 67 | 68 | // app.get('/',function(req,res){ 69 | // res.sendFile(path.join(__dirname+'/dist/index.html')); 70 | // }); 71 | 72 | const PORT = process.env.PORT || 3000; 73 | 74 | //server 75 | 76 | db.sequelize.sync().then(() => { 77 | app.listen(PORT, () => console.log(`server is running on port ${PORT}`)); 78 | }); 79 | -------------------------------------------------------------------------------- /Front-end/src/app/views/front/produit/produit/produit.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | import { AuthadminService } from 'src/app/views/service/authadmin.service'; 4 | import { HttpErrorResponse } from '@angular/common/http'; 5 | import { DataService } from 'src/app/views/service/data.service'; 6 | import { ActivatedRoute, Router } from '@angular/router'; 7 | @Component({ 8 | selector: 'app-produit', 9 | templateUrl: './produit.component.html', 10 | styleUrls: ['./produit.component.css'] 11 | }) 12 | export class ProduitComponent implements OnInit { 13 | imagepath:any='http://127.0.0.1:3000/' 14 | dataArray:any 15 | messageErr:any 16 | message:any 17 | produitId:any 18 | datau:any 19 | 20 | 21 | constructor(private ds:DataService,private router:Router,private dsa:AuthadminService,private Activatedroute: ActivatedRoute) { 22 | 23 | 24 | } 25 | 26 | ngOnInit(): void { 27 | this.produitId = 28 | this.Activatedroute.snapshot.queryParamMap.get('produitId') || 0; 29 | this.ds.getproduit().subscribe(data=>this.dataArray=data) 30 | 31 | // console.log(this.produitId) 32 | this.ds.getoneproduit(this.produitId).subscribe((data)=>{ 33 | this.datau=data 34 | 35 | 36 | }) 37 | } 38 | 39 | 40 | 41 | addo(f:any){ 42 | 43 | this.produitId = 44 | this.Activatedroute.snapshot.queryParamMap.get('produitId') || 0; 45 | this.ds.getproduit().subscribe(data=>this.dataArray=data) 46 | 47 | // console.log(this.produitId) 48 | this.ds.getoneproduit(this.produitId).subscribe((data)=>{ 49 | this.datau=data 50 | 51 | 52 | }) 53 | 54 | 55 | const v = f.value.quantite * this.datau.prix 56 | let data=f.value 57 | 58 | data.amount=v 59 | data.status=this.datau.instock 60 | 61 | 62 | this.ds.addorder(data).subscribe(response=>{ 63 | this.ngOnInit() 64 | this.message="order Add with successs" 65 | 66 | 67 | 68 | },(err:HttpErrorResponse)=>{ 69 | this.messageErr=err.error 70 | 71 | 72 | }) 73 | } 74 | 75 | getoneproduit(id:any) { 76 | 77 | this.router.navigate(['produit'], { queryParams: { produitId: id } }); 78 | 79 | 80 | } 81 | 82 | } 83 | -------------------------------------------------------------------------------- /Front-end/src/app/layouts/adminlogin/adminlogin.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 | 6 |
7 | 8 |
9 |
10 | 11 |
12 | 13 |
14 |
15 |
16 |

Welcome Admin!

17 |
18 |
19 | 20 |
21 |
22 | 25 |
26 |
27 |
28 | 30 |

31 | 32 | 35 |
36 |
37 |
38 |
39 |
40 |
41 | 42 |
43 | 44 |
45 | 46 |
--------------------------------------------------------------------------------