├── 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 |

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 |
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 |
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 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | | quantite |
31 | amount |
32 | adress |
33 | Status |
34 | Action |
35 |
36 |
37 |
38 |
39 | | {{item.quantite}} |
40 | {{item.amount}} TND |
41 |
42 | {{item.adress}}
43 | |
44 | {{item.status}} |
45 |
46 |
47 |
48 |
49 | |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/Front-end/src/assets/Front/fonts/slick.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------