{"id":20741534,"url":"https://github.com/thuongtruong1009/teneno-api","last_synced_at":"2026-04-14T10:32:05.944Z","repository":{"id":50333557,"uuid":"518399515","full_name":"thuongtruong1009/teneno-api","owner":"thuongtruong1009","description":"Connect with the online world anytime. The official API template for Teneno webapp application","archived":false,"fork":false,"pushed_at":"2022-10-07T08:58:04.000Z","size":11244,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-07T06:04:15.208Z","etag":null,"topics":["api","authentication","controller","docker","eslint","github","guard","husky","jwt","module","nest","nestjs","nodejs","postgresql","prettier","prisma","service","swagger","token","typescript"],"latest_commit_sha":null,"homepage":"https://thuongtruong1009.github.io/teneno-api","language":"TypeScript","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/thuongtruong1009.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":"thuongtruong1009","ko_fi":"thuongtruong1009","custom":["https://paypal.me/thuongtruong1009","https://nhantien.momo.vn/0917085937"]}},"created_at":"2022-07-27T09:49:28.000Z","updated_at":"2024-02-23T19:18:54.000Z","dependencies_parsed_at":"2023-01-19T14:17:28.463Z","dependency_job_id":null,"html_url":"https://github.com/thuongtruong1009/teneno-api","commit_stats":null,"previous_names":[],"tags_count":6,"template":true,"template_full_name":null,"purl":"pkg:github/thuongtruong1009/teneno-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thuongtruong1009%2Fteneno-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thuongtruong1009%2Fteneno-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thuongtruong1009%2Fteneno-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thuongtruong1009%2Fteneno-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thuongtruong1009","download_url":"https://codeload.github.com/thuongtruong1009/teneno-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thuongtruong1009%2Fteneno-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31793212,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T02:24:21.117Z","status":"ssl_error","status_checked_at":"2026-04-14T02:24:20.627Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["api","authentication","controller","docker","eslint","github","guard","husky","jwt","module","nest","nestjs","nodejs","postgresql","prettier","prisma","service","swagger","token","typescript"],"created_at":"2024-11-17T06:41:59.972Z","updated_at":"2026-04-14T10:32:05.921Z","avatar_url":"https://github.com/thuongtruong1009.png","language":"TypeScript","funding_links":["https://github.com/sponsors/thuongtruong1009","https://ko-fi.com/thuongtruong1009","https://paypal.me/thuongtruong1009","https://nhantien.momo.vn/0917085937","https://www.paypal.me/thuongtruong1009","https://ko-fi.com/thuongtruong1009'"],"categories":[],"sub_categories":[],"readme":"[\u003cdiv align=\"center\" style=\"display:flex; justify-content:center; text-align:center\"\u003e\n\u003cimg src=\"https://github.com/thuongtruong1009/teneno-api/raw/main/public/logo.svg\" width=\"200\"/\u003e\u003ch1 style=\"color:#E0234E;\"\u003eTeneno API\u003c/h1\u003e\u003cp style=\"color:purple;\"\u003e\u003cem\u003eA official api for teneno application\u003c/em\u003e\u003c/p\u003e\u003c/div\u003e](public/logo.svg)\n\n[![Dev.to](https://img.shields.io/twitter/url?color=449DE0\u0026label=Dev.to\u0026logo=dev.to\u0026logoColor=449DE0\u0026style=for-the-badge\u0026url=https%3A%2F%2Fdev.to%2Fthuongtruong1009)](https://dev.to/thuongtruong1009)\n[![Github](https://img.shields.io/twitter/url?color=green\u0026label=Github\u0026logo=github\u0026logoColor=white\u0026style=for-the-badge\u0026url=https%3A%2F%2Fgithub.com%2Fthuongtruong1009)](https://github.com/thuongtruong1009)\n[![Email](https://img.shields.io/twitter/url?color=red\u0026label=Email\u0026logo=gmail\u0026logoColor=red\u0026style=for-the-badge\u0026url=https%3A%2F%2Fdev.to%2Fthuongtruong1009)](mailto:ititiu19228@student.hcmiu.edu.vn)\n[![LinkedIn](https://img.shields.io/twitter/url?color=0A66C2\u0026label=Linkedin\u0026logo=linkedin\u0026logoColor=0A66C2\u0026style=for-the-badge\u0026url=https%3A%2F%2Flinkedin.com%2Fin%2Fthuongtruong1009)](https://linkedin.com/in/thuongtruong1009)\n## Preview\n\n* [Frontend connect](https://github.com/thuongtruong1009/teneno)\n\n\u003c!-- * [API document](http://localhost:5500/api) --\u003e\n\n* [Project documentation](https://thuongtruong1009.github.io/teneno-api)\n\n* [Database diagram](https://dbdiagram.io/d/62fe42dec2d9cf52fad1848c)\n\n## Description\n\n* The purpose of Teneno webapp is create a new network platform where everyone can sharing their feels, thinks or experiences together\n* Make an easily life with Teneno\n* Practice Backend skills and improve programming thinking\n\n## Features\n\n| **Admin** | **Auth** |\n| --- | ---|\n| ✅ Get list all users | ✅ Signup |\n| ✅ Get user profile by id | ✅ Signin |\n| ✅ Update user profile | ✅ Verify recaptcha |\n| ✅ Delete user by user-id | ✅ Signout |\n|  | ✅ Refresh access-token |\n|  | ✅ Update password |\n\n| **OAuth** | **Files** |\n| --- | --- |\n| ✅ Google signin | ✅ Upload single file (avatar, cover) |\n| ✅ Facebook signin | ✅ Upload multi files |\n| ✅ Github signin | ✅ Upload array-field files (post, sample_image) |\n\n| **Users** | **Posts** |\n| ---| --- |\n| ✅ Get public user by user-id or username  | ✅ Create a new post |\n| ✅ Find user account by email | ✅ Get all posts of user by user-id |\n| ✅ Get user profile by id | ✅ Match a new category with new post |\n| ✅ Update user profile | ✅ Get a post by post-id |\n| ✅ Delete user-profile by email \u0026 password | ✅ Delete a post by post-id |\n|  | ✅ Reaction to post |\n|  | ✅ Get all comments of post |\n|  | ✅ Add a new comment to post |\n|  | ✅ Update a comment of post |\n|  | ✅ Delete a comment of post |\n\n| **Conversations** | **Chats** |\n| ---| --- |\n| ✅ Create new conversation | ✅ Join conversation by conversation-id |\n| ✅ Get all conversations of user| ✅ Get all messages in conversation |\n| ✅ Get one conversation information has current user | ✅ Create new messages |\n| ✅ Update members to current conversation | ✅ Update message by message-id |\n| ✅ Update conversation information (name, description, avatar) | ✅ Delete messages by message-id |\n| ✅ Delete admin out of current conversation by creator |  |\n| ✅ Delete conversation by creator |  |\n| ✅ Change users role in current conversation |  |\n\n\u003c!-- | \u003cul\u003e\u003cli\u003eitem1\u003c/li\u003e\u003cli\u003eitem2\u003c/li\u003e\u003c/ul\u003e| See the list | --\u003e\n\u003c!-- ⬜️ ✅ --\u003e\n\n## Structure\n\n![Architecture](https://github.com/thuongtruong1009/teneno-api/blob/main/public/docs/architecture.png?raw=true)\n\n## Diagram database\n\n* Relational diagram\n\n![Relational diagram](https://github.com/thuongtruong1009/teneno-api/blob/main/public/docs/teneno_relational_digram.png?raw=true)\n\n## Plugins \u0026 Dependencies\n\n* [Nodejs](http://nodejs.org) framework for building efficient and scalable server-side applications\n* [Nest](https://github.com/nestjs/nest) framework TypeScript starter repository\n* [Prisma](https://www.prisma.io/) query builder and auto-generated schema with types tailored\n* [CORS](https://www.npmjs.com/package/cors) connect middleware that can be used to enable CORS with various options\n* [Swagger](https://swagger.io/) describe definition format and design document APIs at scale\n* [Bcrypt](https://www.npmjs.com/package/bcrypt) a library to help you hash passwords\n* [Crypto-js](https://www.npmjs.com/package/crypto-js) a JavaScript library of crypto standards\n* [JWT](https://www.npmjs.com/package/jsonwebtoken) decode, verify and generate access tokens\n* [Class-validator](https://www.npmjs.com/package/class-validator) use of decorator and non-decorator to perform validation\n* [Class-transformer](https://www.npmjs.com/package/class-transformer) transform plain object to some instance of class and versa and serialize / deserialize object based on criteria\n* [Passport](https://www.npmjs.com/package/passport) compatible authentication requests middleware for Node.js\n* [Cookies-Parser](https://anonystick.com/blog-developer/cookie-parser-la-gi-middleware-can-thiet-ma-hoa-cookie-trong-expressjs-2020112687915577) middleware parsing of cookies in Nodejs and Expressjs.\n* [Multer](https://docs.nestjs.com/techniques/file-upload) upload file data form in Expressjs\n* [Morgan](https://www.npmjs.com/package/morgan) HTTP request logger middleware for Node.js\n* [Cookie-parser](https://www.npmjs.com/package/cookie-parser) Parse Cookie header and signed cookie support\n* [Helmet](https://www.npmjs.com/package/helmet) secure Express apps by setting various HTTP headers\n* [Compression](https://www.npmjs.com/package/compression) compress response bodies for all request\n* [Read-Eval-Print-Loop (REPL)](https://docs.nestjs.com/recipes/repl) takes - executes single user inputs, and returns the result to the user, interactive environment, inspect dependency graph and call methods on providers - controllers directly from terminal\n* [Serve Static](https://docs.nestjs.com/recipes/serve-static) serve static content like a Single Page Application (SPA)\n* [Compodoc](https://docs.nestjs.com/recipes/documentation) Generate project documentation\n* [Webpack hot-reload](https://docs.nestjs.com/recipes/hot-reload) auto recompile the entire project each time a change occurs\n* [gRPC](https://docs.nestjs.com/microservices/grpc#grpc) support to run in any environment across data centers based on the concept of defining a service in terms of functions (methods) that called remotely\n* [Session](https://docs.nestjs.com/techniques/session#session) store information about the user across multiple requests, which is particularly useful for MVC applications.\n* [Versioning](https://docs.nestjs.com/techniques/versioning) allows you to have different versions of your controllers or individual routes running within the same application.\n* [CSRF (Cross-site request forgery)](https://docs.nestjs.com/security/csrf) type of malicious exploit of a website where unauthorized commands are transmitted from a user that the web application trusts\n* [rate-limiting](https://docs.nestjs.com/security/rate-limiting) protect your application from brute-force attacks\n\n\n## Conventions \u0026 Tools\n\n* [Prettier](https://prettier.io/) opinionated code formatter\n* [Eslint](https://eslint.org/) analyzes code to quickly find problems and built with continuous integration pipeline\n* [Husky x Lintstage x Commitlint](https://medium.com/angular-in-depth/husky-6-lint-prettier-eslint-and-commitlint-for-javascript-project-d7174d44735a) linter conventions for clean code\n* [JWT Playground](https://jwt.io)\n\n## References \u0026 Tips\n\n* [Prisma x Nest](https://docs.nestjs.com/recipes/prisma#getting-started) build CRUD API endpoints rapidy\n* [Fix upload file on Postman](https://stackoverflow.com/questions/60036239/upload-file-failed-postman)\n* [File upload with Nest](https://notiz.dev/blog/type-safe-file-uploads)\n* [Base roles example](https://www.youtube.com/watch?v=wdsp7BNmJRc\u0026list=PL2eJaT2jJV7Ku72gl8YSSVRC0D7IQRJJZ\u0026index=9\u0026ab_channel=MariusEspejo)\n* [Logger 1](https://viblo.asia/p/xay-dung-bo-logger-xu-ly-exception-tap-trung-trong-nestjs-ORNZq1qMZ0n)\n* [Postgre x Heroku](https://dev.to/prisma/how-to-setup-a-free-postgresql-database-on-heroku-1dc1)\n* [Nest x Prisma](https://docs.nestjs.com/recipes/prisma)\n* [gRPC for Microservice](https://200lab.io/blog/grpc-la-gi-vu-khi-tang-tai-microservices/)\n* [OAuth in Node](https://www.loginradius.com/blog/engineering/oauth-implemenation-using-node/)\n\n\u003c!-- * [Database for chat](https://l.facebook.com/l.php?u=https%3A%2F%2Fwww.google.com%2Fsearch%3Fq%3Ddatabase%2Bfor%2Bchat%2Bapplication%26sxsrf%3DALiCzsZVJGO-Xg7f0j6bm04uemOFXQOCow%3A1661272422354%26source%3Dlnms%26tbm%3Disch%26sa%3DX%26ved%3D2ahUKEwjH3u-Est35AhUFmlYBHQe4BikQ_AUoAXoECAEQAw%26biw%3D1920%26bih%3D948%26dpr%3D1\u0026h=AT1rz92_FbaMniK5W8han8NWXAfairaSKCmfkCu3TPLJWm48IqSIYii-aIRJ16hF-Vt_Y7Ju8l2B8YvIqo-5fIndTxa4Koo62fgJN7fGuUcbuMg9XU-5Y7IYHdhWjOESt9SEOvAGrud8_5c\u0026s=1)\n* [Database for social](https://l.facebook.com/l.php?u=https%3A%2F%2Fwww.google.com%2Fsearch%3Fq%3Ddatabase%2Bfor%2Bsocial%2Bmedia%2Bapp%26tbm%3Disch%26ved%3D2ahUKEwj2_M6Tst35AhUKVPUHHefeDpkQ2-cCegQIABAA%26oq%3Ddatabase%2Bfor%2Bsocial%2Bmedia%26gs_lcp%3DCgNpbWcQARgAMgQIABAYMgQIABAYOgQIIxAnOgYIABAeEAg6BQgAEIAEUN4HWOodYNYlaABwAHgAgAGFAYgB3AySAQQwLjE0mAEAoAEBqgELZ3dzLXdpei1pbWfAAQE%26sclient%3Dimg%26ei%3DhQEFY7amEIqo1e8P5727yAk%26bih%3D948%26biw%3D1920\u0026h=AT2bN5utpmugfzrrq3LxJL2taNOV2GVjJPB9MXZ3kkPt5MBwUuqo6O-m-g_xeLO-c0MBe3_P6H_hrFvp53MmQ8msV1DFVay8_JdoXpgmkCp8LQwiiTzYktBVKIMNN_kEWLxUjRQLqsOIZyE\u0026s=1) --\u003e\n\n## Example templates\n\n* [Nest example](https://github.com/hantsy/nestjs-rest-sample)\n* [Nest awesome](https://github.com/nestjs/awesome-nestjs)\n* [Nest structure](https://github.com/CatsMiaow/nestjs-project-structure)\n* [Nest auth example](https://github.com/leosuncin/nest-auth-example)\n* [Nest social login](https://github.com/m-haecker/nestjs-social-login)\n* [Nest P2P](https://github.com/mfcodeworks/Nest-P2P-Full-Mesh)\n\n### Setup Prisma\n\n```bash\n# Installation\nnpm install prisma@latest @prisma/client\n```\n\n```bash\n# Init prisma\nnpx prisma init\n\n# turn database schema into a Prisma schema\nnpm run prisma:pull\n\n# generate the Prisma Client\nnpm run prisma:generate\n\n# Create env and migrate db\nnpm run prisma:migrate\n\n# Sync migrate change to db\nnpm run prisma:push\n```\n\n```bash\n# Open prisma studio\nnpm run prisma:studio\n```\n\n### Running with local\n\n```bash\n# Intall dependencies\n$ npm install\n```\n\n```bash\n# development\n$ npm run start\n\n# watch mode\n$ npm run start:dev\n\n# production mode\n$ npm run start:prod\n```\n\n### Running with Docker\n```bash\n# Pull image\n$ docker pull thuongtruong1009/teneno-api:latest\n```\n\n```bash\n# Start container\n$ docker-compose up\n```\n\n### Test\n\n```bash\n# unit tests\n$ npm run test\n\n# e2e tests\n$ npm run test:e2e\n\n# test coverage\n$ npm run test:cov\n```\n\n## Support\n\nTeneno is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://github.com/sponsors/thuongtruong1009).\n\n## Stay in touch\n\n-   Get idea inspiration: [bee-music](https://dribbble.com/shots/16618273-Bee-Music-Music-Media-Player-Dashboard?fbclid=IwAR35hkSSs2dB2Ek66GAX-yPDfx3JYxxJgeQdwweuEiEtne02IUYk13kxDnk)\n-   Follow progresses at [latest project updated](https://github.com/thuongtruong1009/bee-music/projects)\n-   Trading and shopping your style with [e-shopee](https://github.com/thuongtruong1009/e-shopee)\n-   Enhance front-end skills through [twitter-meta](https://github.com/thuongtruong1009/twitter-meta)\n-   Generate your GitHub informations by [gitbox](https://github.com/thuongtruong1009/gitbox)\n-   Begining Vue through [notedev](https://github.com/thuongtruong1009/notedev)\n-   Learning front-end web full course at [frontend-master](https://github.com/thuongtruong1009/frontend-master)\n-   Learn Object-Oriented-Programming tutorial at [Snake-Game-OOP](https://github.com/thuongtruong1009/Snake-Game-OOP)\n-   Become Java master for new beginner at [Java-training](https://github.com/thuongtruong1009/java-oop-training)\n-   Pratice UI/UX at [league-fo-legend](https://github.com/thuongtruong1009/league-of-legends-clone)\n-   Make flip card game at [flip-card](https://github.com/thuongtruong1009/flip-cards)\n-   Learn computer architecture at [computer-architecture](https://github.com/thuongtruong1009/computer-architecture)\n\n## ❤️ [Support me](https://www.paypal.me/thuongtruong1009)\n\n\u003e We are looking for sponsors to join us to have better community reach and impact.\n\n[![MOMO](https://img.shields.io/badge/-MOMO-red?style=flat\u0026labelColor=RED\u0026logo=MOMO\u0026logoColor=black)](https://nhantien.momo.vn/0917085937)\n\u003ca href=\"https://www.paypal.me/thuongtruong1009\"\u003e\n\u003cimg height=\"25\" marginTop=\"10\" src=\"https://www.paypalobjects.com/digitalassets/c/website/marketing/apac/C2/logos-buttons/optimize/26_Blue_PayPal_Pill_Button.png\"\u003e\n\u003c/a\u003e\n\u003ca href='https://ko-fi.com/thuongtruong1009' target='_blank'\u003e\n\u003cimg height='25' style='border:0px;height:28px;color:blue' src='https://az743702.vo.msecnd.net/cdn/kofi3.png?v=0' border='0' alt='Buy Me a Coffee at ko-fi.com' /\u003e\n\u003c/a\u003e\n\n## 📰 [License](LICENSE)\n\n-   ##### This project is distributed under the [MIT License](LICENSE).\n-   ##### Copyright of [@thuongtruong1009](https://github.com/thuongtruong1009), 2022.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthuongtruong1009%2Fteneno-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthuongtruong1009%2Fteneno-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthuongtruong1009%2Fteneno-api/lists"}