{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":701815754,"defaultBranch":"main","name":"ross-pro-shop","ownerLogin":"RossaMania","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-10-07T16:33:50.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/98660173?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1696696499.0","currentOid":""},"activityList":{"items":[{"before":"421eae6df583ce1824ebed8b2589caca1cc3677e","after":"7022b9dbd61b7077a0cf9fc9bb6ceffe95aba189","ref":"refs/heads/main","pushedAt":"2024-07-24T01:50:26.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"chore: Refactor PrivateRoute component\n\nRefactor the PrivateRoute component to improve code readability and maintainability. No functional changes were made.","shortMessageHtmlLink":"chore: Refactor PrivateRoute component"}},{"before":"6faa2af55431886d80dc6fda94e568b567dcea2c","after":"421eae6df583ce1824ebed8b2589caca1cc3677e","ref":"refs/heads/main","pushedAt":"2024-06-12T17:54:42.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Update README.md with LinkedIn profile link","shortMessageHtmlLink":"Update README.md with LinkedIn profile link"}},{"before":"41d8c69f74f2274a45ea57f1671a71e9061ad51e","after":"6faa2af55431886d80dc6fda94e568b567dcea2c","ref":"refs/heads/main","pushedAt":"2024-02-15T20:31:04.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Move README.md file out of frontend folder and to the root of project.","shortMessageHtmlLink":"Move README.md file out of frontend folder and to the root of project."}},{"before":"37900b5250761ff410ef7402918e6ea03b1f611a","after":"41d8c69f74f2274a45ea57f1671a71e9061ad51e","ref":"refs/heads/main","pushedAt":"2023-11-04T17:07:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Change \"Bootstrap Stylings\" to \"Bootstrap Styling\".","shortMessageHtmlLink":"Change \"Bootstrap Stylings\" to \"Bootstrap Styling\"."}},{"before":"e63eb2b02bc85267a892847218e104f281f6bd29","after":"37900b5250761ff410ef7402918e6ea03b1f611a","ref":"refs/heads/main","pushedAt":"2023-11-04T17:04:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Add course link at top of readme.","shortMessageHtmlLink":"Add course link at top of readme."}},{"before":"823038afb21545676bb919b4a0b8336d31ad8f2b","after":"e63eb2b02bc85267a892847218e104f281f6bd29","ref":"refs/heads/main","pushedAt":"2023-11-04T17:01:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Update Learn More with course link.","shortMessageHtmlLink":"Update Learn More with course link."}},{"before":"3d4520e7ae05b758989c7fffe44e79174e8114f2","after":"823038afb21545676bb919b4a0b8336d31ad8f2b","ref":"refs/heads/main","pushedAt":"2023-11-04T16:54:12.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Re-write some features.","shortMessageHtmlLink":"Re-write some features."}},{"before":"f6d3f9a951ba8cc3e360fefb4edda4d8f39f040e","after":"3d4520e7ae05b758989c7fffe44e79174e8114f2","ref":"refs/heads/main","pushedAt":"2023-11-04T16:52:12.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Update Features section with different feature sub-sections.","shortMessageHtmlLink":"Update Features section with different feature sub-sections."}},{"before":"d3f079aa78eb574f7631fbee6e37c4ae1379c36a","after":"f6d3f9a951ba8cc3e360fefb4edda4d8f39f040e","ref":"refs/heads/main","pushedAt":"2023-11-04T16:45:46.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Update .readme with Overview and Features.","shortMessageHtmlLink":"Update .readme with Overview and Features."}},{"before":"1a1d70b109a9910d063beeadf5617a2cb0615828","after":"d3f079aa78eb574f7631fbee6e37c4ae1379c36a","ref":"refs/heads/main","pushedAt":"2023-11-03T02:07:50.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Ran npm update in both frontend and root folders.","shortMessageHtmlLink":"Ran npm update in both frontend and root folders."}},{"before":"fce5d33be562a853d1f84386371815a634f74fe9","after":"1a1d70b109a9910d063beeadf5617a2cb0615828","ref":"refs/heads/main","pushedAt":"2023-11-03T01:49:53.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Remove ross pro shop dependency in frontend/package.json.","shortMessageHtmlLink":"Remove ross pro shop dependency in frontend/package.json."}},{"before":"833737f3129b3d2a2c5b9b69fbb1dea41e945e6f","after":"fce5d33be562a853d1f84386371815a634f74fe9","ref":"refs/heads/main","pushedAt":"2023-11-03T01:37:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Put opening bracket back in to package-lock.json.","shortMessageHtmlLink":"Put opening bracket back in to package-lock.json."}},{"before":"f7987e7fb353d0f5f1b0ed266aac2c999000fbde","after":"833737f3129b3d2a2c5b9b69fbb1dea41e945e6f","ref":"refs/heads/main","pushedAt":"2023-11-03T01:33:50.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Fix typo in package-lock.json.","shortMessageHtmlLink":"Fix typo in package-lock.json."}},{"before":"d2dd0adbc5efe0c11e0807b23000382e27e90dde","after":"f7987e7fb353d0f5f1b0ed266aac2c999000fbde","ref":"refs/heads/main","pushedAt":"2023-11-03T01:12:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Add .unwrap() method to payOrder func in try block of onApprove func in OrderScreen.","shortMessageHtmlLink":"Add .unwrap() method to payOrder func in try block of onApprove func …"}},{"before":"79691924ed78cc434cef2adfb582e7e4caa562f9","after":"d2dd0adbc5efe0c11e0807b23000382e27e90dde","ref":"refs/heads/main","pushedAt":"2023-11-03T01:09:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Refactor addOrderItems and updateOrderToPaid func controllers. Pricing and updating order to paid are now handled on back end by getting ordered items from database, mapping over the order items, and using the prices from the database. Then calculating prices and creating an order and saving to database. With updateOrderToPaid, we destructure the verified & value from the body and check if transaction has been used before, and make sure payment is verified. Then we find the order, make sure the correct amount is paid, mark isPaid as true, and save the updated order.","shortMessageHtmlLink":"Refactor addOrderItems and updateOrderToPaid func controllers. Pricin…"}},{"before":"d0b6340e4df5342a8f0f56b0c043606deb477b73","after":"79691924ed78cc434cef2adfb582e7e4caa562f9","ref":"refs/heads/main","pushedAt":"2023-11-03T00:33:17.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Create calcPrices.js in backend/utils with a calcPrices named export. Set different consts. One to calculate items price. One to calculate shipping price. One to calculate tax price. Once to calculate total price. Return an object with all four different calculated prices.","shortMessageHtmlLink":"Create calcPrices.js in backend/utils with a calcPrices named export.…"}},{"before":"93ae282d026f0ee27e19b9929f9c59acf6436412","after":"d0b6340e4df5342a8f0f56b0c043606deb477b73","ref":"refs/heads/main","pushedAt":"2023-11-02T22:25:37.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Create paypa.js in utils folder. This has a getPayPalAccessToken func that fetches an access token from the PayPal API. This has a checkIfNewTransaction func that checks if a PayPal transaction is new by comparing the transaction ID with existing orders in the database. Also a verifyPayPalPayment func that verifies a PayPal payment by making a request to the PayPal API.","shortMessageHtmlLink":"Create paypa.js in utils folder. This has a getPayPalAccessToken func…"}},{"before":"9adb729667cdd9b1f371fd0bb1de01160366caef","after":"93ae282d026f0ee27e19b9929f9c59acf6436412","ref":"refs/heads/main","pushedAt":"2023-11-02T22:03:12.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Update .env and example.env with PAYPAL_APP_SECRET and PAYPAL_API_URL env vars.","shortMessageHtmlLink":"Update .env and example.env with PAYPAL_APP_SECRET and PAYPAL_API_URL…"}},{"before":"c9e165af2f421842079ae971704e175f72dbcc30","after":"9adb729667cdd9b1f371fd0bb1de01160366caef","ref":"refs/heads/main","pushedAt":"2023-11-02T21:32:51.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Create a resetCart reducer in cartSlice.js to reset the cart back to initialState. Import resetCart into Header component. Dispatch resetCart action in the try-catch block of the logoutHandler.","shortMessageHtmlLink":"Create a resetCart reducer in cartSlice.js to reset the cart back to …"}},{"before":"9f4a0c26d03bca3780396e70c6193d0f72569712","after":"c9e165af2f421842079ae971704e175f72dbcc30","ref":"refs/heads/main","pushedAt":"2023-11-02T21:26:17.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Clear localStorage in authSlicer.js by setting localStorage.clear() and removing all other localStorage methods in the logout reducer.","shortMessageHtmlLink":"Clear localStorage in authSlicer.js by setting localStorage.clear() a…"}},{"before":"96e47ef41b8d9c338ea5e50f0e0b9db9e41b2953","after":"9f4a0c26d03bca3780396e70c6193d0f72569712","ref":"refs/heads/main","pushedAt":"2023-11-02T21:14:30.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Change error messge in fileFilter middleware func to \"Oops! Only image files!\" Destructure error objects in returns of OrderScreen, ProductEditScreen, and ProductListScreen with error.data.message.","shortMessageHtmlLink":"Change error messge in fileFilter middleware func to \"Oops! Only imag…"}},{"before":"243da37e3614751bf804201f85c88c5afe40b741","after":"96e47ef41b8d9c338ea5e50f0e0b9db9e41b2953","ref":"refs/heads/main","pushedAt":"2023-11-02T20:50:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Create checkObjectsId.js in backend/middleware with func component. Import isValidObjectId from mongoose. If isValidObjectId is not true, throw an error, else move on to the next func. This will check if the req.params.id is a valid Mongoose ObjectId. In errorMiddleware.js delete the error check. Import checkObjectId from middleware/checkObjectId into routes/productRoutes.js. Add checkObjectId middleware func call to all /:id routes.","shortMessageHtmlLink":"Create checkObjectsId.js in backend/middleware with func component. I…"}},{"before":"bf0ed8b7f3d9e54e3a0c71220dffc21d83554b62","after":"243da37e3614751bf804201f85c88c5afe40b741","ref":"refs/heads/main","pushedAt":"2023-11-02T20:38:58.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Refactor checkFileType func into fileFilter middleware func. This func now defines the mimetypes allowed, and now returns a new error. This fileFilter func is called in the upload const with the multer object, and that upload const is used in the uploadSingleImage func const which is used in the router.post method. In frontend package.json, add \"/\" at end of proxy value address.","shortMessageHtmlLink":"Refactor checkFileType func into fileFilter middleware func. This fun…"}},{"before":"f2e770d04f7891dae83ec9b9945f90181b94c6cd","after":"bf0ed8b7f3d9e54e3a0c71220dffc21d83554b62","ref":"refs/heads/main","pushedAt":"2023-11-02T19:23:25.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Delete build folder from frontend.","shortMessageHtmlLink":"Delete build folder from frontend."}},{"before":"079ddee4b4fa9c127b6154f0d1fc568069aadff5","after":"f2e770d04f7891dae83ec9b9945f90181b94c6cd","ref":"refs/heads/main","pushedAt":"2023-11-02T18:14:56.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Run npm run build command in root folder and frontend folder. Set env var in .env file for PAGINATION_LIMIT. In productController.js set const pageSize to process.env.PAGINATION_LIMIT. Set PAGINATION LIMIT example var in example.env.","shortMessageHtmlLink":"Run npm run build command in root folder and frontend folder. Set env…"}},{"before":"bcc4a29a2e9abeb8ac9146e68828963dc8069bbf","after":"079ddee4b4fa9c127b6154f0d1fc568069aadff5","ref":"refs/heads/main","pushedAt":"2023-11-02T17:53:47.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Set up build script for deploy to run npm install in both frontend and root folders, and npom run build in frontend folder.","shortMessageHtmlLink":"Set up build script for deploy to run npm install in both frontend an…"}},{"before":"7a9cb5484a7ea7f11d8712abbdfb1bce54ee4668","after":"bcc4a29a2e9abeb8ac9146e68828963dc8069bbf","ref":"refs/heads/main","pushedAt":"2023-11-02T17:40:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"In server.js, set up if check to test if the app is running in production, or in development. If app is running in production, set a static folder at frontend/build and redirect routes to index.htlm. Else, set up the API routes on the dev server.","shortMessageHtmlLink":"In server.js, set up if check to test if the app is running in produc…"}},{"before":"6c5ac5639dcc2229e1b9d1b625163c2e4e9b395c","after":"7a9cb5484a7ea7f11d8712abbdfb1bce54ee4668","ref":"refs/heads/main","pushedAt":"2023-11-02T01:04:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Import Meta component into ProductScreen. Set title prop to product.name. Set description prop to product.description.","shortMessageHtmlLink":"Import Meta component into ProductScreen. Set title prop to product.n…"}},{"before":"ef073335386966bfcff5da01c9062da873e8cd19","after":"6c5ac5639dcc2229e1b9d1b625163c2e4e9b395c","ref":"refs/heads/main","pushedAt":"2023-11-02T00:52:54.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Set a Meta.defaultProps object with default text for title, description, and keywords.","shortMessageHtmlLink":"Set a Meta.defaultProps object with default text for title, descripti…"}},{"before":"7477143f748137f4245530e18871c7a5e667008a","after":"ef073335386966bfcff5da01c9062da873e8cd19","ref":"refs/heads/main","pushedAt":"2023-11-02T00:41:07.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RossaMania","name":"Ross Clettenberg","path":"/RossaMania","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/98660173?s=80&v=4"},"commit":{"message":"Create Meta func component in components folder. Import Helmet from react-helmet-async into Meta component. Destructure title, description, and keywords as props. Use Helmet tags as a wrapper. Inside Helmet, render title element and two meta elements. Pass title, description, and keywords props to those 3 elements.","shortMessageHtmlLink":"Create Meta func component in components folder. Import Helmet from r…"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEh3A00AA","startCursor":null,"endCursor":null}},"title":"Activity · RossaMania/ross-pro-shop"}