{"id":25171778,"url":"https://github.com/basemax/blogexpressgraphqlts","last_synced_at":"2025-08-31T09:33:23.145Z","repository":{"id":190752610,"uuid":"676902269","full_name":"BaseMax/BlogExpressGraphQLTS","owner":"BaseMax","description":"BlogExpressGraphQLTS is a TypeScript-based project for creating a feature-rich blog using Express.js and GraphQL, without relying on NestJS. This project aims to provide a flexible and powerful backend solution for managing a blog application through GraphQL queries and mutations.","archived":false,"fork":false,"pushed_at":"2025-03-29T14:03:45.000Z","size":2974,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-05T21:14:43.662Z","etag":null,"topics":["blog","blog-graphql","blog-typescript","express","express-js","express-ts","express-typescript","expressjs","graphql","graphql-blog","javascript","js","ts","typescript","typescript-express"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BaseMax.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}},"created_at":"2023-08-10T09:19:37.000Z","updated_at":"2025-03-29T14:03:43.000Z","dependencies_parsed_at":"2024-03-29T12:24:32.958Z","dependency_job_id":null,"html_url":"https://github.com/BaseMax/BlogExpressGraphQLTS","commit_stats":null,"previous_names":["basemax/blogexpressgraphqlts"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaseMax%2FBlogExpressGraphQLTS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaseMax%2FBlogExpressGraphQLTS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaseMax%2FBlogExpressGraphQLTS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaseMax%2FBlogExpressGraphQLTS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BaseMax","download_url":"https://codeload.github.com/BaseMax/BlogExpressGraphQLTS/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252577026,"owners_count":21770721,"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":["blog","blog-graphql","blog-typescript","express","express-js","express-ts","express-typescript","expressjs","graphql","graphql-blog","javascript","js","ts","typescript","typescript-express"],"created_at":"2025-02-09T09:22:04.089Z","updated_at":"2025-05-05T21:14:48.550Z","avatar_url":"https://github.com/BaseMax.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Blog Express GraphQL TS\n\nBlogExpressGraphQLTS is a TypeScript-based project for creating a feature-rich blog using Express.js and GraphQL, without relying on NestJS. This project aims to provide a flexible and powerful backend solution for managing a blog application through GraphQL queries and mutations.\n\n## Features\n\n- **GraphQL API**: Utilize the power of GraphQL to efficiently query and manipulate data according to your application's needs.\n- **Express.js**: Built on top of Express.js, allowing you to have fine-grained control over your server configuration and middleware setup.\n- **Type-graph** : it is a Modern framework for GraphQL API in Node.js to build schemas more flexible\n- **Apollo Server** : Build a production-ready GraphQL API in Node.js. Fetch and combine results from multiple data sources.\n- **Full-Featured Blog**: Implement a comprehensive set of features for a fully functional blog, including creating, updating, and deleting blog posts, user authentication, comments, tags, and more.\n- **TypeScript**: Leverage TypeScript's static typing to enhance code quality, maintainability, and development experience.\n\n## Getting Started\n\nFollow these steps to set up and run the BlogExpressGraphQLTS project on your local machine.\n\n## Prerequisites\n\nMake sure you have the following installed:\n\n- Node.js (v14 or higher)\n- npm (Node Package Manager)\n\n## Installation\n\nClone the repository:\n\n```bash\ngit clone https://github.com/BaseMax/BlogExpressGraphQLTS.git\n```\n\nNavigate to the project directory:\n\n```bash\ncd BlogExpressGraphQLTS\n```\n\nInstall dependencies:\n\n```bash\nnpm install\n```\n\n## Configuration\n\nRename the `.env.example` file to `.env` in the root directory.\n\nOpen the .env file and configure the environment variables:\n\n```makefile\nDATABASE_URI=mongodb://localhost/blog-express-graphql # MongoDB connection URI\nSECRET_KEY=your-secret-key # Secret key for JWT authentication\n```\n\n## Running the Server\n\nStart the server using the following command:\n\n```bash\n$ tsc\n\n$ npm run dev\n```\n\nThe server should now be running at `http://localhost:4000`. You can access the GraphQL playground at `http://localhost:4000/graphql` to interact with the API and explore available queries and mutations.\n\n## Usage\n\nThe GraphQL schema and resolvers define the available queries and mutations for the blog application. You can refer to the schema and resolver files in the src/graphql directory to understand the available functionality and customize them according to your needs.\n\n## GraphQL\n\n| Query/Mutation               | Description                                        | Screenshot                                                   |\n| ---------------------------- | -------------------------------------------------- | ------------------------------------------------------------ |\n| `likeComment`                | Like a comment.                                    | ![update post](./screenshots/likeComment.png)                |\n| `unlikeComment`              | Remove a like from a comment.                      | ![update post](./screenshots/retriveLikeComment.png)         |\n| `updatePost`                 | Update an existing blog post.                      | ![update post](./screenshots/updatePost.png)                 |\n| `getAllTags`                 | Get a list of all available tags.                  | ![get all tags](./screenshots/getAllPosts.png)               |\n| `getAllPosts`                | Get a list of all blog posts.                      | ![get all posts](./screenshots/getAllPosts.png)              |\n| `getPostById`                | Get a single blog post by ID.                      | ![get post by id](./screenshots/getPostById.png)             |\n| `login`                      | Authenticate a user and receive a token.           | ![login](./screenshots/login.png)                            |\n| `createPost`                 | Create a new blog post.                            | ![create post](./screenshots/createPost.png)                 |\n| `deletePost`                 | Delete a blog post.                                | ![delete comment](./screenshots/deleteComment.png)           |\n| `createComment`              | Add a comment to a blog post.                      | ![add comment](./screenshots/createComment.png)              |\n| `updateComment`              | Update an existing comment.                        | ![update document](./screenshots/updateComment.png)          |\n| `deleteComment`              | Delete a comment.                                  | ![delete comment](./screenshots/deleteComment.png)           |\n| `likePost`                   | Like a blog post.                                  |                                                              |\n| `unlikePost`                 | Remove a like from a blog post.                    | ![like post](./screenshots/likePost.png)                     |\n| `getPostsByTag`              | Get a list of blog posts by tag.                   | ![get post by tag](./screenshots/getPostByTag.png)           |\n| `searchPosts`                | Search for posts based on keywords.                | ![search posts](./screenshots/search.png)                    |\n| `signUp`                     | Create a new user.                                 | ![user sign up](./screenshots/signup.png)                    |\n| `addTagToPost`               | Add a tag to a post.                               | ![add tag to post](./screenshots/addTagToPost.png)           |\n| `removeTagFromPost`          | Remove a tag from a post.                          | ![remove tag from post](./screenshots/removeTagFromPost.png) |\n| `createTag   `               | Create a new tag.                                  | ![create tag](./screenshots/createTag.png)                   |\n| `deleteTag`                  | Delete a tag.                                      | ![delete tag](./screenshots/deleteTag.png)                   |\n| `getCommentReplies`          | Get replies to a specific comment.                 | ![get comment replies](./screenshots/getCommentsReply.png)   |\n| `createComment`              | Create a new comment.                              | ![create comment](./screenshots/createComment.png)           |\n| `publishPost`                | Publish a draft post.                              | ![publish post](./screenshots/publishPost.png)               |\n| `getTopTag`                  | Get top tag by usage count.                        | ![get popular tags](./screenshots/getPopularTag.png)         |\n| `getPostComments`            | Get comments for a specific post.                  | ![get post comments](./screenshots/getPostComments.png)      |\n| `createPostComment`          | Create a comment on a post.                        | ![create comment](./screenshots/createComment.png)           |\n| `deletePostComment`          | Delete a comment on a post.                        | ![delete post comment](./screenshots/deleteComment.png)      |\n| `getPostsByPopularity`       | Get posts ordered by popularity.                   | ![get popular post](./screenshots/getMostLikedPosts.png)     |\n| `getPopularAuthors`          | Get popular authors based on likes and comments.   | ![get popular authors](./screenshots/getPopularAuthors.png)  |\n| `getCommentByContent`        | Get comments based on content.                     | ![get comment by content](./screenshots/searchComment.png)   |\n| `getPostsByUser`             | Get posts by a specific user.                      | ![get post by user](./screenshots/getUserPosts.png)          |\n| `getTrendingTags`            | Get trending tags based on usage.                  | ![get post by tag](./screenshots/getMostLikedPosts.png)      |\n| `getPostsByTagAndPopularity` | Get posts of a specific tag ordered by popularity. | ![get post by tag](./screenshots/getPostByTag.png)           |\n| `getTagById`                 | Get a tag by ID.                                   | ![get tag by id](./screenshots/getTagById.png)               |\n\n## Contributing\n\nContributions are welcome! If you find any issues or want to add new features, feel free to submit a pull request. Please make sure to follow the existing code style and guidelines.\n\n## License\n\nThis project is licensed under the GPL-3.0 License. See the LICENSE file for details.\n\nCopyright 2023, Max Base\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasemax%2Fblogexpressgraphqlts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbasemax%2Fblogexpressgraphqlts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasemax%2Fblogexpressgraphqlts/lists"}