├── .DS_Store ├── .gitmodules ├── README.md ├── client ├── .gitignore ├── README.md ├── babel-plugin-macros.config.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── public │ ├── assets │ │ ├── Argentina.png │ │ ├── Australia.png │ │ ├── Belgium.png │ │ ├── Brazil.png │ │ ├── Cameroon.png │ │ ├── Canada.png │ │ ├── CostaRica.png │ │ ├── Croatia.png │ │ ├── Denmark.png │ │ ├── Ecuador.png │ │ ├── England.png │ │ ├── France.png │ │ ├── Germany.png │ │ ├── Ghana.png │ │ ├── Iran.png │ │ ├── Japan.png │ │ ├── Korea.png │ │ ├── Mexico.png │ │ ├── Morocco.png │ │ ├── Netherlands.png │ │ ├── Poland.png │ │ ├── Portugal.png │ │ ├── Qatar.png │ │ ├── SaudiArabia.png │ │ ├── Senegal.png │ │ ├── Serbia.png │ │ ├── Spain.png │ │ ├── Switzerland.png │ │ ├── Tunisia.png │ │ ├── USA.png │ │ ├── Uruguay.png │ │ ├── Wales.png │ │ ├── abdo.jpeg │ │ ├── banner.jpg │ │ ├── banner.webp │ │ ├── bg-gre.jpg │ │ ├── bg-grey.jpg │ │ ├── calendar.svg │ │ ├── customer-service.png │ │ ├── customer1.jpeg │ │ ├── customer2.jpeg │ │ ├── emptyab.png │ │ ├── flash.png │ │ ├── logo.png │ │ ├── maro.jpeg │ │ ├── omar.jpeg │ │ ├── refund.png │ │ ├── ribbon.png │ │ ├── soldout.png │ │ ├── stadium.svg │ │ └── tba.png │ ├── favicon.ico │ ├── index.html │ ├── logo.svg │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt ├── src │ ├── App.js │ ├── ScrollToTop.js │ ├── components │ │ ├── Form.js │ │ ├── MatchLogo.js │ │ ├── UserCard.js │ │ ├── authButton.js │ │ ├── ballLoading │ │ │ ├── BallLoading.js │ │ │ └── ball.css │ │ ├── cards │ │ │ ├── ProfileThreeColGrid.js │ │ │ └── TabCardGrid.js │ │ ├── checkout │ │ │ ├── Card.js │ │ │ ├── Styles.js │ │ │ ├── cardUtils.js │ │ │ ├── index.js │ │ │ ├── reportWebVitals.js │ │ │ └── setupTests.js │ │ ├── contact │ │ │ ├── SingleCol.js │ │ │ └── TwoColContactUsWithIllustrationFullForm.js │ │ ├── features │ │ │ ├── DashedBorderSixFeatures.js │ │ │ ├── ThreeColCenteredStatsPrimaryBackground.js │ │ │ ├── ThreeColSimple.js │ │ │ ├── ThreeColWithSideImage.js │ │ │ ├── ThreeColWithSideImageWithPrimaryBackground.js │ │ │ ├── TwoColSingleFeatureWithStats.js │ │ │ ├── TwoColSingleFeatureWithStats2.js │ │ │ ├── TwoColWithButton.js │ │ │ ├── TwoColWithSteps.js │ │ │ ├── TwoColWithTwoFeaturesAndButtons.js │ │ │ ├── TwoColWithTwoHorizontalFeaturesAndButton.js │ │ │ └── VerticalWithAlternateImageAndText.js │ │ ├── footers │ │ │ └── MiniCenteredFooter.js │ │ ├── form.css │ │ ├── headers │ │ │ └── light.js │ │ ├── hero │ │ │ ├── TwoColumnWithVideo.js │ │ │ └── hero.css │ │ ├── matches.js │ │ ├── misc │ │ │ ├── Buttons.js │ │ │ ├── Headings.js │ │ │ ├── Layouts.js │ │ │ ├── Links.js │ │ │ └── Typography.js │ │ ├── myTickets │ │ │ ├── MyTickets.js │ │ │ ├── Ticket.css │ │ │ └── Ticket.js │ │ ├── paymentSF │ │ │ ├── PaymentFail.js │ │ │ ├── PaymentSuccess.js │ │ │ └── payment.scss │ │ ├── pricing │ │ │ ├── ThreePlans.js │ │ │ ├── ThreePlansWithHalfPrimaryBackground.js │ │ │ └── TwoPlansWithDurationSwitcher.js │ │ ├── select.js │ │ ├── socialMedia │ │ │ ├── SocialMedia.jsx │ │ │ └── socialMedia.css │ │ └── testimonials │ │ │ └── ThreeColumnWithProfileImage.js │ ├── context │ │ └── Total.js │ ├── firebase │ │ └── config.js │ ├── helpers │ │ ├── AnimationRevealPage.js │ │ ├── useAnimatedNavToggler.js │ │ └── useInView.js │ ├── images │ │ ├── arrow-left-2-icon.svg │ │ ├── arrow-left-3-icon.svg │ │ ├── arrow-right-2-icon.svg │ │ ├── arrow-right-3-icon.svg │ │ ├── arrow-right-icon.svg │ │ ├── celebration-icon.svg │ │ ├── checkbox-circle.svg │ │ ├── chef-icon.svg │ │ ├── contact-us-illustration.svg │ │ ├── customer-support-illustration.svg │ │ ├── customers-logo-strip.png │ │ ├── customize-icon.svg │ │ ├── design-illustration-2.svg │ │ ├── design-illustration.svg │ │ ├── dot-pattern.svg │ │ ├── email-illustration.svg │ │ ├── email-newsletter-icon.svg │ │ ├── facebook-icon.svg │ │ ├── fast-icon.svg │ │ ├── girl-illustration.svg │ │ ├── github-icon.svg │ │ ├── google-icon.png │ │ ├── google-play-icon.png │ │ ├── handle-icon.svg │ │ ├── handshake.jpg │ │ ├── happy-illustration.svg │ │ ├── hero-screenshot-1.png │ │ ├── hero-screenshot-2.png │ │ ├── linkedin-icon.svg │ │ ├── loc-icon.png │ │ ├── login-illustration.svg │ │ ├── logo-full.png │ │ ├── logo-light.svg │ │ ├── logo.svg │ │ ├── love-illustration.svg │ │ ├── professional-illustration.svg │ │ ├── prototype-illustration.svg │ │ ├── quotes-l.svg │ │ ├── quotes-r.svg │ │ ├── reliable-icon.svg │ │ ├── server-illustration-2.svg │ │ ├── server-illustration.svg │ │ ├── server-redundancy-illustration.svg │ │ ├── server-secure-illustration.svg │ │ ├── shield-icon.svg │ │ ├── shop-icon.svg │ │ ├── signup-illustration.svg │ │ ├── simple-icon.svg │ │ ├── stadium-empty.png │ │ ├── stadium-left.png │ │ ├── stadium-right.png │ │ ├── star-icon.svg │ │ ├── stats-illustration.svg │ │ ├── support-icon.svg │ │ ├── svg-decorator-blob-1.svg │ │ ├── svg-decorator-blob-10.svg │ │ ├── svg-decorator-blob-2.svg │ │ ├── svg-decorator-blob-3.svg │ │ ├── svg-decorator-blob-4.svg │ │ ├── svg-decorator-blob-5.svg │ │ ├── svg-decorator-blob-6.svg │ │ ├── svg-decorator-blob-7.svg │ │ ├── svg-decorator-blob-8.svg │ │ ├── svg-decorator-blob-9.svg │ │ ├── team-illustration-2.svg │ │ ├── team-illustration-3.svg │ │ ├── team-illustration.svg │ │ ├── twitter-icon.png │ │ ├── twitter-icon.svg │ │ └── youtube-icon.svg │ ├── index.js │ ├── pages │ │ ├── About.js │ │ ├── Book.js │ │ ├── Checkout.js │ │ ├── Contact.js │ │ └── Home.js │ ├── services │ │ ├── payment.js │ │ ├── reservation.js │ │ └── shop.js │ ├── styles │ │ └── GlobalStyles.js │ └── tailwind.config.js └── tailwind.config.js ├── payment ├── .DS_Store ├── .gitignore ├── app.js ├── controller │ └── payment.js ├── package-lock.json ├── package.json ├── routes │ └── api.route.js └── vercel.json ├── security ├── .gitignore ├── blacklist.txt ├── index.js ├── middlewares │ ├── IPBlocking.js │ └── cors.js ├── package-lock.json ├── package.json ├── suspicious.log └── vercel.json ├── seed ├── package-lock.json ├── package.json └── seeder │ ├── MockData │ ├── customer.js │ ├── data generator │ │ ├── matches │ │ │ ├── genMatch.js │ │ │ ├── whichCon.js │ │ │ └── world_cup_matches.json │ │ └── tickets │ │ │ ├── formate.js │ │ │ ├── output.json │ │ │ └── tickets.json │ ├── fillDB.js │ ├── matches.js │ └── tickets.js │ ├── migrations │ ├── 20221203141326_init │ │ └── migration.sql │ ├── 20221203142455_update_match │ │ └── migration.sql │ ├── 20221204124438_ │ │ └── migration.sql │ ├── 20221204132848_init │ │ └── migration.sql │ ├── 20221204133223_int │ │ └── migration.sql │ ├── 20221204133312_ll │ │ └── migration.sql │ ├── 20230108024909_fix │ │ └── migration.sql │ └── migration_lock.toml │ └── schema.prisma ├── shop ├── .DS_Store ├── .babelrc ├── .gitignore ├── .vscode │ └── settings.json ├── README.md ├── __tests__ │ └── shop.test.js ├── app.js ├── controller │ └── shopController.js ├── package-lock.json ├── package.json ├── prisma.js ├── prisma │ └── schema.prisma ├── routes │ └── shopRouter.js └── vercel.json └── user ├── .gitignore ├── app.js ├── controllers └── userController.js ├── package-lock.json ├── package.json ├── prisma └── schema.prisma ├── routes └── userRoutes.js ├── user.test.js └── vercel.json /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/.DS_Store -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | 2 | [submodule "consumer"] 3 | path = consumer 4 | url = https://github.com/AlHassanHK/consumer 5 | [submodule "producer"] 6 | path = producer 7 | url = https://github.com/AlHassanHK/producer.git 8 | [submodule "reservation"] 9 | path = reservation 10 | url = https://github.com/AlHassanHK/reservation.git 11 | 12 | -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /client/README.md: -------------------------------------------------------------------------------- 1 | # Ticktaka-client -------------------------------------------------------------------------------- /client/babel-plugin-macros.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | twin: { 3 | styled: "styled-components", 4 | config: "./src/tailwind.config.js", 5 | format: "auto" 6 | } 7 | }; 8 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "world-cup", 3 | "version": "0.1.0", 4 | "dependencies": { 5 | "@algolia/autocomplete-js": "^1.7.4", 6 | "@emotion/react": "^11.10.5", 7 | "@emotion/styled": "^11.10.5", 8 | "@hcaptcha/react-hcaptcha": "^1.4.4", 9 | "@material-tailwind/react": "^1.2.4", 10 | "@mui/material": "^5.11.0", 11 | "@ramonak/react-progress-bar": "^5.0.3", 12 | "@testing-library/jest-dom": "^5.11.4", 13 | "@testing-library/react": "^11.1.0", 14 | "@testing-library/user-event": "^12.1.10", 15 | "algoliasearch": "^4.14.3", 16 | "axios": "^0.24.0", 17 | "bootstrap": "^3.4.1", 18 | "bootstrap-css": "^4.0.0-alpha.5", 19 | "feather-icons": "^4.29.0", 20 | "firebase": "^8.10.1", 21 | "framer-motion": "^7.3.2", 22 | "gsap": "^3.11.4", 23 | "instantsearch.css": "^7.4.5", 24 | "node-sass": "^8.0.0", 25 | "payment": "^2.4.6", 26 | "qs": "^6.11.0", 27 | "react": "^18.2.0", 28 | "react-anchor-link-smooth-scroll": "^1.0.12", 29 | "react-async-hook": "^4.0.0", 30 | "react-avatar": "^5.0.3", 31 | "react-bootstrap": "^2.7.0", 32 | "react-countdown": "^2.3.5", 33 | "react-countdown-circle-timer": "^3.1.0", 34 | "react-credit-cards-2": "^0.9.0", 35 | "react-dom": "^18.0.0", 36 | "react-final-form": "^6.5.9", 37 | "react-github-btn": "^1.4.0", 38 | "react-helmet": "^6.1.0", 39 | "react-icons": "^4.7.1", 40 | "react-instantsearch-dom": "^6.38.1", 41 | "react-instantsearch-hooks-web": "^6.38.1", 42 | "react-loading": "^2.0.3", 43 | "react-loading-skeleton": "^3.1.0", 44 | "react-modal": "^3.16.1", 45 | "react-responsive": "^9.0.2", 46 | "react-rnd": "^10.3.7", 47 | "react-router-dom": "^6.4.5", 48 | "react-scripts": "5.0.1", 49 | "react-slick": "^0.29.0", 50 | "react-toastify": "^9.1.1", 51 | "reactstrap": "^9.1.5", 52 | "slick-carousel": "^1.8.1", 53 | "stripe": "^11.5.0", 54 | "styled-components": "^5.3.6", 55 | "tailwindcss": "^3.0.0", 56 | "twin.macro": "^3.1.0", 57 | "web-vitals": "^2.1.4" 58 | }, 59 | "scripts": { 60 | "start": "react-scripts start", 61 | "build": "react-scripts build", 62 | "eject": "react-scripts eject" 63 | }, 64 | "browserslist": { 65 | "production": [ 66 | ">0.2%", 67 | "not dead", 68 | "not op_mini all" 69 | ], 70 | "development": [ 71 | "last 1 chrome version", 72 | "last 1 firefox version", 73 | "last 1 safari version" 74 | ] 75 | }, 76 | "devDependencies": { 77 | "autoprefixer": "^10.4.13", 78 | "postcss": "^8.4.20", 79 | "tailwindcss": "^3.2.4" 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /client/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /client/public/assets/Argentina.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Argentina.png -------------------------------------------------------------------------------- /client/public/assets/Australia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Australia.png -------------------------------------------------------------------------------- /client/public/assets/Belgium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Belgium.png -------------------------------------------------------------------------------- /client/public/assets/Brazil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Brazil.png -------------------------------------------------------------------------------- /client/public/assets/Cameroon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Cameroon.png -------------------------------------------------------------------------------- /client/public/assets/Canada.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Canada.png -------------------------------------------------------------------------------- /client/public/assets/CostaRica.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/CostaRica.png -------------------------------------------------------------------------------- /client/public/assets/Croatia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Croatia.png -------------------------------------------------------------------------------- /client/public/assets/Denmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Denmark.png -------------------------------------------------------------------------------- /client/public/assets/Ecuador.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Ecuador.png -------------------------------------------------------------------------------- /client/public/assets/England.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/England.png -------------------------------------------------------------------------------- /client/public/assets/France.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/France.png -------------------------------------------------------------------------------- /client/public/assets/Germany.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Germany.png -------------------------------------------------------------------------------- /client/public/assets/Ghana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Ghana.png -------------------------------------------------------------------------------- /client/public/assets/Iran.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Iran.png -------------------------------------------------------------------------------- /client/public/assets/Japan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Japan.png -------------------------------------------------------------------------------- /client/public/assets/Korea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Korea.png -------------------------------------------------------------------------------- /client/public/assets/Mexico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Mexico.png -------------------------------------------------------------------------------- /client/public/assets/Morocco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Morocco.png -------------------------------------------------------------------------------- /client/public/assets/Netherlands.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Netherlands.png -------------------------------------------------------------------------------- /client/public/assets/Poland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Poland.png -------------------------------------------------------------------------------- /client/public/assets/Portugal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Portugal.png -------------------------------------------------------------------------------- /client/public/assets/Qatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Qatar.png -------------------------------------------------------------------------------- /client/public/assets/SaudiArabia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/SaudiArabia.png -------------------------------------------------------------------------------- /client/public/assets/Senegal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Senegal.png -------------------------------------------------------------------------------- /client/public/assets/Serbia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Serbia.png -------------------------------------------------------------------------------- /client/public/assets/Spain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Spain.png -------------------------------------------------------------------------------- /client/public/assets/Switzerland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Switzerland.png -------------------------------------------------------------------------------- /client/public/assets/Tunisia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Tunisia.png -------------------------------------------------------------------------------- /client/public/assets/USA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/USA.png -------------------------------------------------------------------------------- /client/public/assets/Uruguay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Uruguay.png -------------------------------------------------------------------------------- /client/public/assets/Wales.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/Wales.png -------------------------------------------------------------------------------- /client/public/assets/abdo.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/abdo.jpeg -------------------------------------------------------------------------------- /client/public/assets/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/banner.jpg -------------------------------------------------------------------------------- /client/public/assets/banner.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/banner.webp -------------------------------------------------------------------------------- /client/public/assets/bg-gre.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/bg-gre.jpg -------------------------------------------------------------------------------- /client/public/assets/bg-grey.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/bg-grey.jpg -------------------------------------------------------------------------------- /client/public/assets/calendar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 16 | 18 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /client/public/assets/customer-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/customer-service.png -------------------------------------------------------------------------------- /client/public/assets/customer1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/customer1.jpeg -------------------------------------------------------------------------------- /client/public/assets/customer2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/customer2.jpeg -------------------------------------------------------------------------------- /client/public/assets/emptyab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/emptyab.png -------------------------------------------------------------------------------- /client/public/assets/flash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/flash.png -------------------------------------------------------------------------------- /client/public/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/logo.png -------------------------------------------------------------------------------- /client/public/assets/maro.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/maro.jpeg -------------------------------------------------------------------------------- /client/public/assets/omar.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/omar.jpeg -------------------------------------------------------------------------------- /client/public/assets/refund.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/refund.png -------------------------------------------------------------------------------- /client/public/assets/ribbon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/ribbon.png -------------------------------------------------------------------------------- /client/public/assets/soldout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/soldout.png -------------------------------------------------------------------------------- /client/public/assets/stadium.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/public/assets/tba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/assets/tba.png -------------------------------------------------------------------------------- /client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/favicon.ico -------------------------------------------------------------------------------- /client/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 24 | TICKETaka 25 | 26 | 27 | 28 | 29 |
30 | 31 | 32 | -------------------------------------------------------------------------------- /client/public/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /client/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/logo192.png -------------------------------------------------------------------------------- /client/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Am0stafa/Tickets-Sales-System/fb211a3db06d269639a8db01872155e25d4f6bbe/client/public/logo512.png -------------------------------------------------------------------------------- /client/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /client/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /client/src/App.js: -------------------------------------------------------------------------------- 1 | import { BrowserRouter, Route, Routes } from "react-router-dom"; 2 | import GlobalStyles from "./styles/GlobalStyles"; 3 | import { css } from "styled-components/macro"; //eslint-disable-line 4 | import Home from "./pages/Home.js"; 5 | import { Book } from "./pages/Book.js"; 6 | import React from "react"; 7 | import { AppContextProvider } from "./context/Total.js"; 8 | import Checkout from "./pages/Checkout"; 9 | import ScrollToTop from "./ScrollToTop"; 10 | import BallLoading from "./components/ballLoading/BallLoading"; 11 | import PaymentSuccess from "./components/paymentSF/PaymentSuccess"; 12 | import PaymentFail from "./components/paymentSF/PaymentFail"; 13 | import MyTickets from "./components/myTickets/MyTickets"; 14 | import About from "./pages/About"; 15 | import Contact from "./pages/Contact"; 16 | 17 | function App() { 18 | return ( 19 |
20 | 21 | 22 | 23 | 24 | } /> 25 | 26 | 30 | 31 | 32 | } 33 | /> 34 | 35 | } /> 36 | 37 | } /> 38 | } /> 39 | } /> 40 | } /> 41 | 42 | } /> 43 | 44 | 45 | 46 |
47 | ); 48 | } 49 | 50 | export default App; 51 | -------------------------------------------------------------------------------- /client/src/ScrollToTop.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { useEffect } from "react"; 3 | import { useLocation } from "react-router"; 4 | 5 | const ScrollToTop = (props) => { 6 | const location = useLocation(); 7 | useEffect(() => { 8 | window.scrollTo(0, 0); 9 | }, [location]); 10 | 11 | return <>{props.children}; 12 | }; 13 | 14 | export default ScrollToTop; 15 | -------------------------------------------------------------------------------- /client/src/components/MatchLogo.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react"; 2 | import left from "../images/stadium-left.png"; 3 | import right from "../images/stadium-right.png"; 4 | import empty from "../images/stadium-empty.png"; 5 | 6 | const pos = { left, right, empty }; 7 | const MatchLogo = ({ 8 | myRef, 9 | user, 10 | setProgress, 11 | progress, 12 | choices, 13 | setChoices, 14 | }) => { 15 | const [selected, setSelected] = useState(pos.empty); 16 | 17 | const handleClick = (e) => { 18 | document.getElementsByClassName("type1")[0].style.display = "block"; 19 | myRef.current.scrollIntoView({ behavior: "smooth" }); 20 | const img1 = document.getElementsByClassName("pic1"); 21 | const img2 = document.getElementsByClassName("pic2"); 22 | if (progress < 25) { 23 | setProgress((prev) => prev + 25); 24 | } 25 | 26 | if (e.target.src.includes(user.homeTeam)) { 27 | setChoices({ ...choices, team: user.homeTeam, side: "home" }); 28 | setSelected(pos.left); 29 | img2[0].classList.remove("my-border"); 30 | e.target.classList.add("my-border"); 31 | } else { 32 | setChoices({ ...choices, team: user.awayTeam, side: "away" }); 33 | setSelected(pos.right); 34 | img1[0].classList.remove("my-border"); 35 | e.target.classList.add("my-border"); 36 | } 37 | }; 38 | 39 | return ( 40 |
48 |
56 | avatar 64 |

{user.homeTeam}

65 |
66 |
67 | st 77 | 78 |
79 |
87 | avatar 95 |

{user.awayTeam}

96 |
97 |
98 | ); 99 | }; 100 | 101 | export default MatchLogo; 102 | -------------------------------------------------------------------------------- /client/src/components/UserCard.js: -------------------------------------------------------------------------------- 1 | import { useNavigate } from "react-router-dom"; 2 | import React from "react"; 3 | 4 | const UserCard = ({ user }) => { 5 | const navigate = useNavigate(); 6 | return ( 7 |
8 |
9 | {user.homeTeam} 14 | 15 | {user.awayTeam} 20 |
21 | 22 |
23 |

24 | {user.homeTeam} vs {user.awayTeam} 25 |

26 |
27 | 28 |
29 | 34 | 35 | 36 | 37 |

{user.Date}

38 |
39 | 40 |
41 | 46 |
47 | 48 |
49 |

{user.location}

50 |
51 | 52 | {/*

53 | Score: {user.homeTeamScore} - {user.awayTeamScore} 54 |

*/} 55 |
56 | 62 |
63 |
64 | ); 65 | }; 66 | export default UserCard; 67 | -------------------------------------------------------------------------------- /client/src/components/authButton.js: -------------------------------------------------------------------------------- 1 | import SocialMedia from './socialMedia/SocialMedia'; 2 | import { 3 | Menu, 4 | MenuHandler, 5 | MenuList, 6 | MenuItem, 7 | Button, 8 | } from "@material-tailwind/react"; 9 | 10 | 11 | export default function AuthButton() { 12 | return ( 13 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | ); 29 | } -------------------------------------------------------------------------------- /client/src/components/ballLoading/BallLoading.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import "./ball.css"; 3 | import tw from "twin.macro"; 4 | import { SectionHeading } from "../misc/Headings.js"; 5 | const Heading = tw( 6 | SectionHeading 7 | )`text-left text-3xl sm:text-4xl lg:text-5xl text-center md:text-left leading-tight`; 8 | const BallLoading = () => { 9 | return ( 10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | ); 19 | }; 20 | 21 | export default BallLoading; 22 | -------------------------------------------------------------------------------- /client/src/components/ballLoading/ball.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | height: auto; 3 | } 4 | .box { 5 | margin: 0 auto; 6 | width: 40px; 7 | height: 140px; 8 | margin-top: 10em; 9 | text-align: "center"; 10 | position: relative; 11 | } 12 | .shadow { 13 | position: absolute; 14 | width: 100%; 15 | height: 10px; 16 | background-color: grey; 17 | bottom: 0; 18 | border-radius: 100%; 19 | transform: scaleX(.8); 20 | opacity: .6; 21 | animation: shadowScale 1s linear infinite; 22 | } 23 | 24 | .gravity { 25 | width: 40px; 26 | height: 40px; 27 | animation: bounce 1s cubic-bezier(0.68, 0.35, 0.29, 0.54) infinite; 28 | } 29 | .ball { 30 | width: 40px; 31 | height: 40px; 32 | background-image: url('https://cdn2.iconfinder.com/data/icons/activity-5/50/26BD-soccer-ball-128.png'); 33 | background-size: cover; 34 | animation: roll .7s linear infinite; 35 | } 36 | 37 | @keyframes roll { 38 | 0% {} 39 | 100% { transform: rotate(360deg) } 40 | } 41 | @keyframes bounce { 42 | 0% {} 43 | 50% { transform: translateY(100px) } 44 | 100% {} 45 | } 46 | @keyframes shadowScale { 47 | 0% {} 48 | 50% { transform: scaleX(1); opacity: .8;} 49 | 100% {} 50 | } -------------------------------------------------------------------------------- /client/src/components/checkout/cardUtils.js: -------------------------------------------------------------------------------- 1 | import Payment from "payment"; 2 | 3 | function clearNumber(value = "") { 4 | return value.replace(/\D+/g, ""); 5 | } 6 | 7 | export function formatCreditCardNumber(value) { 8 | if (!value) { 9 | return value; 10 | } 11 | 12 | const issuer = Payment.fns.cardType(value); 13 | const clearValue = clearNumber(value); 14 | let nextValue; 15 | 16 | switch (issuer) { 17 | case "amex": 18 | nextValue = `${clearValue.slice(0, 4)} ${clearValue.slice( 19 | 4, 20 | 10 21 | )} ${clearValue.slice(10, 15)}`; 22 | break; 23 | case "dinersclub": 24 | nextValue = `${clearValue.slice(0, 4)} ${clearValue.slice( 25 | 4, 26 | 10 27 | )} ${clearValue.slice(10, 14)}`; 28 | break; 29 | default: 30 | nextValue = `${clearValue.slice(0, 4)} ${clearValue.slice( 31 | 4, 32 | 8 33 | )} ${clearValue.slice(8, 12)} ${clearValue.slice(12, 19)}`; 34 | break; 35 | } 36 | 37 | return nextValue.trim(); 38 | } 39 | 40 | export function formatCVC(value, prevValue, allValues = {}) { 41 | const clearValue = clearNumber(value); 42 | let maxLength = 4; 43 | 44 | if (allValues.number) { 45 | const issuer = Payment.fns.cardType(allValues.number); 46 | maxLength = issuer === "amex" ? 4 : 3; 47 | } 48 | 49 | return clearValue.slice(0, maxLength); 50 | } 51 | 52 | export function formatExpirationDate(value) { 53 | const clearValue = clearNumber(value); 54 | 55 | if (clearValue.length >= 3) { 56 | return `${clearValue.slice(0, 2)}/${clearValue.slice(2, 4)}`; 57 | } 58 | 59 | return clearValue; 60 | } 61 | -------------------------------------------------------------------------------- /client/src/components/checkout/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /client/src/components/checkout/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /client/src/components/contact/TwoColContactUsWithIllustrationFullForm.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import tw from "twin.macro"; 3 | import styled from "styled-components"; 4 | import { css } from "styled-components/macro"; //eslint-disable-line 5 | import { 6 | SectionHeading, 7 | Subheading as SubheadingBase, 8 | } from "../misc/Headings.js"; 9 | import { PrimaryButton as PrimaryButtonBase } from "../misc/Buttons.js"; 10 | import EmailIllustrationSrc from "../../images/email-illustration.svg"; 11 | 12 | const Container = tw.div`relative`; 13 | const TwoColumn = tw.div`flex flex-col md:flex-row justify-between max-w-screen-xl mx-auto py-20 md:py-24`; 14 | const Column = tw.div`w-full max-w-md mx-auto md:max-w-none md:mx-0`; 15 | const ImageColumn = tw(Column)`md:w-5/12 flex-shrink-0 h-80 md:h-auto`; 16 | const TextColumn = styled(Column)((props) => [ 17 | tw`md:w-7/12 mt-16 md:mt-0`, 18 | props.textOnLeft 19 | ? tw`md:mr-12 lg:mr-16 md:order-first` 20 | : tw`md:ml-12 lg:ml-16 md:order-last`, 21 | ]); 22 | 23 | const Image = styled.div((props) => [ 24 | `background-image: url("${props.imageSrc}");`, 25 | tw`rounded bg-contain bg-no-repeat bg-center h-full`, 26 | ]); 27 | const TextContent = tw.div`lg:py-8 text-center md:text-left`; 28 | 29 | const Subheading = tw(SubheadingBase)`text-center md:text-left`; 30 | const Heading = tw( 31 | SectionHeading 32 | )`mt-4 font-black text-left text-3xl sm:text-4xl lg:text-5xl text-center md:text-left leading-tight`; 33 | const Description = tw.p`mt-4 text-center md:text-left text-sm md:text-base lg:text-lg font-medium leading-relaxed text-secondary-100`; 34 | 35 | const Form = tw.form`mt-8 md:mt-10 text-sm flex flex-col max-w-sm mx-auto md:mx-0`; 36 | const Input = tw.input`mt-6 first:mt-0 border-b-2 py-3 focus:outline-none font-medium transition duration-300 hocus:border-primary-500`; 37 | const Textarea = styled(Input).attrs({ as: "textarea" })` 38 | ${tw`h-24`} 39 | `; 40 | 41 | const SubmitButton = tw(PrimaryButtonBase)`inline-block mt-8`; 42 | 43 | export default ({ 44 | subheading = "Contact Us", 45 | heading = ( 46 | <> 47 | Feel free to get in touch 48 | with us. 49 | 50 | ), 51 | description = "We will respond to any questions you have in just a few hours.", 52 | submitButtonText = "Send", 53 | formAction = "#", 54 | formMethod = "get", 55 | textOnLeft = true, 56 | }) => { 57 | // The textOnLeft boolean prop can be used to display either the text on left or right side of the image. 58 | 59 | return ( 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | {subheading && {subheading}} 68 | {heading} 69 | {description && {description}} 70 |
71 | 76 | 77 | 78 |