{"id":15192327,"url":"https://github.com/thangtranse/coderschool-forum-app","last_synced_at":"2026-03-02T23:31:58.047Z","repository":{"id":105122895,"uuid":"598962100","full_name":"thangtranse/coderschool-forum-app","owner":"thangtranse","description":"Facebook news feed Application is project demo technical using the GraphQL with MongoDB.","archived":false,"fork":false,"pushed_at":"2023-02-20T02:16:49.000Z","size":612,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-11T08:48:25.172Z","etag":null,"topics":["docker","docker-compose","dockerfile","graphql","graphql-api","graphql-client","graphql-server","material-ui","mongodb","mongoose","nodejs","reactjs","redis"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thangtranse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2023-02-08T06:48:13.000Z","updated_at":"2023-02-20T03:07:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"224fad1b-c53c-4c1e-ae7e-e1a3ef79bf13","html_url":"https://github.com/thangtranse/coderschool-forum-app","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thangtranse%2Fcoderschool-forum-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thangtranse%2Fcoderschool-forum-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thangtranse%2Fcoderschool-forum-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thangtranse%2Fcoderschool-forum-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thangtranse","download_url":"https://codeload.github.com/thangtranse/coderschool-forum-app/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241180855,"owners_count":19923306,"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":["docker","docker-compose","dockerfile","graphql","graphql-api","graphql-client","graphql-server","material-ui","mongodb","mongoose","nodejs","reactjs","redis"],"created_at":"2024-09-27T21:21:42.226Z","updated_at":"2026-03-02T23:31:52.997Z","avatar_url":"https://github.com/thangtranse.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Coderschool Forum App\n\n# Technology\n\n**Node.js** uses an event-driven, non-blocking I/O model, which allows it to handle a large number of requests efficiently. This makes it well-suited for building high-performance web applications, such as discussion forums, where a large number of users may be concurrently posting and reading content.\n\n**GraphQL** and **MongoDB** are good choices for building a discussion forum app because they offer several benefits:\n\n1. GraphQL:\n    - Flexible data querying: GraphQL allows you to define exactly what data you need, reducing the amount of data transferred over the network and making it easier to fetch the exact data required for each component in your app.\n    - Efficient and fast: GraphQL can be faster and more efficient than REST APIs for certain types of applications, as it allows you to fetch all of the required data in a single request, rather than multiple requests.\n    - Strong type system: GraphQL has a strong type system that makes it easier to catch errors and ensure that your data is always valid.\n    - Easy to maintain: GraphQL makes it easy to evolve your API over time, as you can add new fields and types without breaking existing client code.\n\n2. MongoDB:\n    - Document-oriented data storage: MongoDB is a document-oriented database, which makes it easy to store and retrieve semi-structured data, such as posts and comments in a discussion forum app.\n    - Scalability: MongoDB is designed to scale horizontally, allowing you to easily add more capacity as your discussion forum grows.\n    - High performance: MongoDB is designed to be fast and efficient, making it a good choice for storing and retrieving data in real-time.\n    - Flexible querying: MongoDB supports flexible and powerful querying, making it easy to retrieve data for your discussion forum app.\n\nIn conclusion, **GraphQL** and **MongoDB** are good choices for building a discussion forum app because they offer flexible, efficient, and scalable solutions for querying and storing data.\n\nAnd here are the technologies I will use for this project:\n\n1. NodeJS\n2. GraphQL\n3. MongoDb\n4. Redis\n5. ReactJS\n6. Material-UI\n\n# Data model\n\n1. Accounts:\n    - email (String) - Required\n    - password (String) - Required\n    - name (String) - Optional\n\n2. Posts:\n\n    - title (String) - Required\n    - content (String) - Optional\n    - author (Reference to Accounts) - Required\n    - tags (Array of Strings) - Optional\n    - upvotes (voteSchema) - Optional\n    - downvotes (voteSchema) - Optional\n\n3. Comments:\n\n    - author (Reference to Accounts) - Required\n    - content (String) - Required\n    - post (Reference to Posts) - Required\n    - parentComment (Reference to Comments) - Optional\n    - childComments (Reference to Comments) - Optional\n    - upvotes (voteSchema) - Optional\n    - downvotes (voteSchema) - Optional\n\n4. Hashtags:\n\n    - hashtag (String, Unit and ID) - Required\n    - post (Reference to Posts) - Required\n\n\n\nvoteSchema: \n\n    - users (Reference to Accounts) - Required\n    - count Number - Required\n\n\n# Run App\nFirst, you need to configure the `env` file.\n1. Front-end\n```env\nPORT=3001\nREACT_APP_GRAPH_QL_PATH=http://localhost:3000/graphql\n```\n2. Back-end\n```env\nPORT=3000\nNODE_ENV=develop\nMONGO_URL_CONNECT=\nREDIS_HOST=\nREDIS_PORT=\n\nACCESS_TOKEN_SECRET=\nREFRESH_TOKEN_SECRET=\n```\nAnd then you can choose one of the following ways to start the project.\n## Normal\n1. Front-end\n\n```bash\n$ cd ./frontend\n$ touch .env\n$ npm install\n$ npm run start\n```\n2. Back-end\n```bash\n$ cd ./backend\n$ touch .env\n$ npm install\n$ npm run start\n```\n## Docker\n\n```bash\n$ docker-compose up\n```\n\n# Reference\n\nMongoDB\n\n- [MongoDB Schema Design Best Practices](https://www.mongodb.com/developer/products/mongodb/mongodb-schema-design-best-practices/)\n- [Building with Patterns: A Summary](https://www.mongodb.com/blog/post/building-with-patterns-a-summary)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthangtranse%2Fcoderschool-forum-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthangtranse%2Fcoderschool-forum-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthangtranse%2Fcoderschool-forum-app/lists"}