{"id":21307272,"url":"https://github.com/jdegand/shoppingify-backend","last_synced_at":"2026-04-05T22:04:27.024Z","repository":{"id":110668849,"uuid":"559004060","full_name":"jdegand/shoppingify-backend","owner":"jdegand","description":"DevChallenges - Legacy - Full-Stack Developer - Shoppingify","archived":false,"fork":false,"pushed_at":"2024-10-06T03:23:27.000Z","size":49,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-22T09:12:26.167Z","etag":null,"topics":["devchallenges","devchallenges-legacy","express","mongoose"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jdegand.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-28T19:54:46.000Z","updated_at":"2024-10-06T03:23:31.000Z","dependencies_parsed_at":"2024-09-07T02:44:58.660Z","dependency_job_id":"526bf763-4f8a-4656-880e-e4dc659e01a0","html_url":"https://github.com/jdegand/shoppingify-backend","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdegand%2Fshoppingify-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdegand%2Fshoppingify-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdegand%2Fshoppingify-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdegand%2Fshoppingify-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jdegand","download_url":"https://codeload.github.com/jdegand/shoppingify-backend/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243784103,"owners_count":20347409,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["devchallenges","devchallenges-legacy","express","mongoose"],"created_at":"2024-11-21T16:30:56.769Z","updated_at":"2025-12-31T00:21:25.810Z","avatar_url":"https://github.com/jdegand.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eShoppingify Backend\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n   Solution for a challenge from  \u003ca href=\"https://web.archive.org/web/20231130033807/https://legacy.devchallenges.io/challenges/mGd5VpbO4JnzU6I9l96x\" target=\"_blank\"\u003eDevchallenges.io\u003c/a\u003e.\n\u003c/div\u003e\n\n## Table of Contents\n\n- [Overview](#overview)\n  - [Built With](#built-with)\n- [Features](#features)\n- [Continued Development](#continued-development)\n- [How to use](#how-to-use)\n- [Useful Resources](#useful-resources)\n\n## Overview\n\n### Built With\n\n- express generator\n- bcrypt\n- cookie-parser\n- cors\n- express\n- jsonwebtoken\n- mongoose\n\n## Features\n\nThis application/site was created as a submission to a [DevChallenges](https://devchallenges.io/challenges) challenge. The [challenge](https://web.archive.org/web/20231130033807/https://legacy.devchallenges.io/challenges/mGd5VpbO4JnzU6I9l96x) was to build an application to complete the given user stories.\n\n## Continued Development\n\n- Categories have to be created before Items - debatable if category should belong to Item model versus a model of its own.\n- Categories plus populate to get all items - versus getting categories and items separately\n- List should be changeable if same day? - how should state change ?\n- JWT protection for most routes - getting Items not protected and getting Categories not protected\n- Users route is not required.\n- Statistics doesn't require a route ?\n- Problems if you delete a category - item will be linked non-existent category - have to delete item as well\n- Same if you delete an item have to remove it from category array\n- Guidelines - no deletion of categories or items - both can be added only\n- Cross referencing models might be overkill here.\n- Design choice -  add quantity to item model versus list model\n- Need user attached to items?\n- Problem with making list name unique - different users cannot have same list name\n\n## How To Use\n\nTo clone and run this application, you'll need [Git](https://git-scm.com) and [Node.js](https://nodejs.org/en/download/) (which comes with [npm](http://npmjs.com)) installed on your computer. From your command line:\n\n```bash\n# Clone this repository\n$ git clone https://github.com/jdegand/shoppingify-backend.git\n\n# Install dependencies\n$ npm install\n\n# Add env variables (PORT, MONGO_URI, REFRESH_TOKEN_SECRET, ACCESS_TOKEN_SECRET) and connect to mongo\n\n# Run the app\n$ npm start\n```\n\n## Useful Resources\n\n- [Github](https://github.com/aydink88/shoppingify-backend/blob/main/controllers/shoppingList.js) - shoppingList controller - got an idea from this implementation\n- [DevDojo](https://devdojo.com/suniljoshi19/building-a-shopping-cart-in-nodejs) - shopping cart\n- [Stack Overflow](https://stackoverflow.com/questions/63753664/mongoose-callback-hell-to-promise) - mongoose callback hell\n- [HackMD](https://hackmd.io/@abernier/rJPKjpjhS?type=view) - express get with route \u0026 query params\n- [Stack Overflow](https://stackoverflow.com/questions/50626301/get-routes-nodejs-how-it-will-react-if-2-routes-are-the-same) - routes conflict\n- [Stack Overflow](https://stackoverflow.com/questions/6912584/how-to-get-get-query-string-variables-in-express-js-on-node-js) - how to get query string vairables\n- [Stack Overflow](https://stackoverflow.com/questions/17007997/how-to-access-the-get-parameters-after-in-express) - access parameters in express\n- [Stack Overflow](https://stackoverflow.com/questions/19222520/populate-nested-array-in-mongoose) - populate nested array in mongoose\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdegand%2Fshoppingify-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdegand%2Fshoppingify-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdegand%2Fshoppingify-backend/lists"}