{"id":24308882,"url":"https://github.com/qhaof26/airbnb-be","last_synced_at":"2025-06-23T17:40:25.572Z","repository":{"id":267980053,"uuid":"902671295","full_name":"qhaof26/airbnb-be","owner":"qhaof26","description":"AirClone: A clone of the Airbnb platform built with Spring Boot backend.","archived":false,"fork":false,"pushed_at":"2025-06-16T07:26:42.000Z","size":311,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-16T08:39:47.801Z","etag":null,"topics":["cloudinary","docker","email","java","jwt","oauth2","postgis","postgresql","redis","spring-data-jpa","spring-security","springboot","swagger-ui","websocket"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/qhaofdev/airclone-app/tags","language":"Java","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/qhaof26.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":"2024-12-13T03:14:21.000Z","updated_at":"2025-06-16T07:26:45.000Z","dependencies_parsed_at":"2024-12-13T17:34:16.832Z","dependency_job_id":"34508f9b-e5c0-46f1-b342-81b7394bc547","html_url":"https://github.com/qhaof26/airbnb-be","commit_stats":null,"previous_names":["qhaof26/airbnb-be"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/qhaof26/airbnb-be","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qhaof26%2Fairbnb-be","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qhaof26%2Fairbnb-be/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qhaof26%2Fairbnb-be/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qhaof26%2Fairbnb-be/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qhaof26","download_url":"https://codeload.github.com/qhaof26/airbnb-be/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qhaof26%2Fairbnb-be/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261523822,"owners_count":23172098,"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":["cloudinary","docker","email","java","jwt","oauth2","postgis","postgresql","redis","spring-data-jpa","spring-security","springboot","swagger-ui","websocket"],"created_at":"2025-01-17T05:11:51.766Z","updated_at":"2025-06-23T17:40:25.547Z","avatar_url":"https://github.com/qhaof26.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eAirClone\u003c/h1\u003e\n\u003ch4 align=\"center\"\u003eBackend system provides restful API for web.\u003c/h4\u003e\n\n[Sonarcloud](https://sonarcloud.io/project/overview?id=qhaof26_airbnb-be) | \n[Docker Hub](https://hub.docker.com/r/qhaofdev/airclone-app)\n\n## Introduction\nDeveloped a full-stack web application inspired by Airbnb using Spring Boot backend with Angular frontend.\n\n---\n## Tech Stack\n\n![Static Badge](https://img.shields.io/badge/java_17-orange?style=for-the-badge\u0026logo=openjdk\u0026logoColor=white)\n![Static Badge](https://img.shields.io/badge/Spring_Boot_3-6DB33F?style=for-the-badge\u0026logo=spring\u0026logoColor=white)\n![Static Badge](https://img.shields.io/badge/Postgresql-%234169E1?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white)\n![Static Badge](https://img.shields.io/badge/Hibernate-%2359666C?style=for-the-badge\u0026logo=hibernate\u0026logoColor=white)\n![Static Badge](https://img.shields.io/badge/JWT-%23000000?style=for-the-badge\u0026logo=jsonwebtokens)\n![Static Badge](https://img.shields.io/badge/Cloudinary-%233448C5?style=for-the-badge\u0026logo=cloudinary)\n![Static Badge](https://img.shields.io/badge/Redis-%23FF4438?style=for-the-badge\u0026logo=redis\u0026logoColor=white)\n![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white)\n![Swagger](https://img.shields.io/badge/-Swagger-%23Clojure?style=for-the-badge\u0026logo=swagger\u0026logoColor=white)\n![image](https://img.shields.io/badge/maven-C71A36?style=for-the-badge\u0026logo=apachemaven\u0026logoColor=white)\n---\n## Prerequisites\n* Java Development Kit (`JDK`) 17 or higher installed.\n* Build tool (e.g., `Maven`) installed.\n* Database system `PostgreSQL` set up and configured.\n* `Hibernate`, `JPA`.\n* Authentication with `JWT` token.\n* Login with Google `OAuth2`.\n* Restfull API.\n* Using `Redis` for data caching, management invalid token.\n* Upload file with Cloudinary.\n* OpenAPI for API documentation.\n* `Docker` with docker-compose build.\n---\n## AirClone Features\n- Authentication \u0026 Authorization :\n    - Implemented JWT-based authentication.\n    - Login with Google OAuth2.\n    - Role-based access control (GUEST, HOST, ADMIN).\n    - Redis-based token blacklisting for secure logout\n- Core Features :\n    - Booking system.\n    - Geospatial search for nearby properties.\n    - Search and filter functionalities.\n    - Listing management.\n    - User profile management.\n\n- Technical Highlights :\n    - Backend: Spring Boot, Spring Security, JPA/Hibernate\n    - Database: PostgreSQL\n    - Caching: Redis for performance optimization\n    - Email Service: SMTP integration for user verification\n    - Cloud Storage: Cloudinary for image management\n- Performance Optimizations :\n    - Implemented caching strategies using Redis.\n    - Efficient data pagination.\n    - Optimized database queries.\n    - RESTful API design.\n  \nThis project demonstrates proficiency in modern web development technologies, security implementation, and scalable architecture design.\n\n---\n## Getting Started\n### Quick start with Docker\n1. Clone the repository:\n```\n  git clone https://github.com/yourusername/airclone.git\n  cd airclone\n```\n\n2. Create a .env file in the project root with the following variables:\n```text\n# Database\nDBMS_USERNAME=postgres\nDBMS_PASSWORD=123456\n\n# JWT\nJWT_SIGNERKEY=your_secure_jwt_key_here\n\n# Google OAuth\nGOOGLE_CLIENT_ID=your_google_client_id\nGOOGLE_CLIENT_SECRET=your_google_client_secret\n\n# Email\nMAIL_USERNAME=your_email@gmail.com\nMAIL_PASSWORD=your_email_password\n\n# Cloudinary\nCLOUDINARY_NAME=your_cloudinary_name\nCLOUDINARY_API_KEY=your_cloudinary_api_key\nCLOUDINARY_API_SECRET=your_cloudinary_api_secret\n\n# Admin\nADMIN_USERNAME=admin\nADMIN_PASSWORD=admin123\nADMIN_EMAIL=admin@example.com\n```\n\n3. Run the application using Docker Compose:\n```\ndocker-compose up -d\n```\n\n4. The application will be available at:\n- API: http://localhost:8080\n- API Documentation: http://localhost:8080/api-docs\n\n### Using Docker hub\nIf you don't want to build the image yourself, you can use the pre-built image from Docker Hub:\n\n```\ndocker pull qhaofdev/airclone-app\n```\n\n## API Documentation\nOnce the application is running, you can access the API documentation at:\n\n- http://localhost:8080/api-docs\n\nThe documentation provides detailed information about all available endpoints, request/response formats, and authentication requirements.\n\n## Contact\n\nFor any questions or suggestions, please contact:\n\n- Email: qhaofdev@gmail.com\n\n- GitHub: https://github.com/qhaof26","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqhaof26%2Fairbnb-be","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqhaof26%2Fairbnb-be","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqhaof26%2Fairbnb-be/lists"}