Skip to content

omarhosny206/tribe

Repository files navigation

Tribe 🌐

Java Spring Hibernate Postgres JWT Swagger Postman Maven

Docker Kubernates AWS Ubuntu GitHub Actions

Service Functionalities 🧠

  • Developed a REST API service about social media world.
  • Implemented JWT Authentication and Role-based Authorization with Login/Register services.
  • Ability to create posts and make likes/comments.
  • Ability to join tribes(groups) and bookmark posts.
  • Developed follow, unfollow, block, unblock, search and feed services.
  • Implemented view/clear search history service.
  • Handled exceptions and input validations.
  • Deployed to AWS EC2 using Docker and GitHub Actions CI/CD.

Folder Structure πŸ“

.
β”œβ”€β”€ Dockerfile
β”œβ”€β”€ README.md
β”œβ”€β”€ docker-compose-dev.yaml
β”œβ”€β”€ docker-compose.yaml
β”œβ”€β”€ k8s
β”‚   β”œβ”€β”€ deploy.sh
β”‚   β”œβ”€β”€ ingress-nginx-controller.yaml
β”‚   β”œβ”€β”€ postgres.yaml
β”‚   └── tribe.yaml
β”œβ”€β”€ mvnw
β”œβ”€β”€ mvnw.cmd
β”œβ”€β”€ pom.xml
β”œβ”€β”€ setup-github-actions-runner.sh
β”œβ”€β”€ src
β”‚   └── main
β”‚       β”œβ”€β”€ java
β”‚       β”‚   └── com
β”‚       β”‚       └── tribe
β”‚       β”‚           β”œβ”€β”€ TribeApplication.java
β”‚       β”‚           β”œβ”€β”€ config
β”‚       β”‚           β”‚   β”œβ”€β”€ BeanConfig.java
β”‚       β”‚           β”‚   └── SecurityConfig.java
β”‚       β”‚           β”œβ”€β”€ controller
β”‚       β”‚           β”‚   β”œβ”€β”€ CommentController.java
β”‚       β”‚           β”‚   β”œβ”€β”€ HistoryController.java
β”‚       β”‚           β”‚   β”œβ”€β”€ LoginController.java
β”‚       β”‚           β”‚   β”œβ”€β”€ PostBookmarkController.java
β”‚       β”‚           β”‚   β”œβ”€β”€ PostController.java
β”‚       β”‚           β”‚   β”œβ”€β”€ SignupController.java
β”‚       β”‚           β”‚   β”œβ”€β”€ TokenController.java
β”‚       β”‚           β”‚   β”œβ”€β”€ TribeController.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserController.java
β”‚       β”‚           β”‚   └── UserTribeController.java
β”‚       β”‚           β”œβ”€β”€ dto
β”‚       β”‚           β”‚   β”œβ”€β”€ CommentRequestDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ ContentDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ ErrorDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ HistoryRequestDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ LoginRequestDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ LoginResponseDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ MessageDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ PostBookmarkDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ PostRequestDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ SignupRequestDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ TokenRequestDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ TokenResponseDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ TribeRequestDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserBlockingDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserDto.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserFollowingDto.java
β”‚       β”‚           β”‚   └── UserTribeDto.java
β”‚       β”‚           β”œβ”€β”€ entity
β”‚       β”‚           β”‚   β”œβ”€β”€ Comment.java
β”‚       β”‚           β”‚   β”œβ”€β”€ History.java
β”‚       β”‚           β”‚   β”œβ”€β”€ Post.java
β”‚       β”‚           β”‚   β”œβ”€β”€ PostBookmark.java
β”‚       β”‚           β”‚   β”œβ”€β”€ Tribe.java
β”‚       β”‚           β”‚   β”œβ”€β”€ User.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserBlocking.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserFollowing.java
β”‚       β”‚           β”‚   └── UserTribe.java
β”‚       β”‚           β”œβ”€β”€ exception
β”‚       β”‚           β”‚   β”œβ”€β”€ ApiError.java
β”‚       β”‚           β”‚   β”œβ”€β”€ CustomAuthenticationExceptionEntryPoint.java
β”‚       β”‚           β”‚   β”œβ”€β”€ CustomException.java
β”‚       β”‚           β”‚   └── CustomExceptionHandler.java
β”‚       β”‚           β”œβ”€β”€ filter
β”‚       β”‚           β”‚   └── JwtAuthenticationFilter.java
β”‚       β”‚           β”œβ”€β”€ repository
β”‚       β”‚           β”‚   β”œβ”€β”€ CommentRepository.java
β”‚       β”‚           β”‚   β”œβ”€β”€ HistoryRepository.java
β”‚       β”‚           β”‚   β”œβ”€β”€ PostBookmarkRepository.java
β”‚       β”‚           β”‚   β”œβ”€β”€ PostRepository.java
β”‚       β”‚           β”‚   β”œβ”€β”€ TribeRepository.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserBlockingRepository.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserFollowingRepository.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserRepository.java
β”‚       β”‚           β”‚   └── UserTribeRepository.java
β”‚       β”‚           β”œβ”€β”€ response
β”‚       β”‚           β”‚   └── MessageResponse.java
β”‚       β”‚           β”œβ”€β”€ service
β”‚       β”‚           β”‚   β”œβ”€β”€ CommentService.java
β”‚       β”‚           β”‚   β”œβ”€β”€ HistoryService.java
β”‚       β”‚           β”‚   β”œβ”€β”€ LoginService.java
β”‚       β”‚           β”‚   β”œβ”€β”€ PostBookmarkService.java
β”‚       β”‚           β”‚   β”œβ”€β”€ PostService.java
β”‚       β”‚           β”‚   β”œβ”€β”€ SignupService.java
β”‚       β”‚           β”‚   β”œβ”€β”€ TokenService.java
β”‚       β”‚           β”‚   β”œβ”€β”€ TribeService.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserBlockingService.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserFollowingService.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserService.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserTribeService.java
β”‚       β”‚           β”‚   └── impl
β”‚       β”‚           β”‚       β”œβ”€β”€ CommentServiceImpl.java
β”‚       β”‚           β”‚       β”œβ”€β”€ HistoryServiceImpl.java
β”‚       β”‚           β”‚       β”œβ”€β”€ LoginServiceImpl.java
β”‚       β”‚           β”‚       β”œβ”€β”€ PostBookmarkServiceImpl.java
β”‚       β”‚           β”‚       β”œβ”€β”€ PostServiceImpl.java
β”‚       β”‚           β”‚       β”œβ”€β”€ SignupServiceImpl.java
β”‚       β”‚           β”‚       β”œβ”€β”€ TokenServiceImpl.java
β”‚       β”‚           β”‚       β”œβ”€β”€ TribeServiceImpl.java
β”‚       β”‚           β”‚       β”œβ”€β”€ UserBlockingServiceImpl.java
β”‚       β”‚           β”‚       β”œβ”€β”€ UserFollowingServiceImpl.java
β”‚       β”‚           β”‚       β”œβ”€β”€ UserServiceImpl.java
β”‚       β”‚           β”‚       └── UserTribeServiceImpl.java
β”‚       β”‚           β”œβ”€β”€ util
β”‚       β”‚           β”‚   β”œβ”€β”€ AuthenticationUser.java
β”‚       β”‚           β”‚   β”œβ”€β”€ CustomUser.java
β”‚       β”‚           β”‚   β”œβ”€β”€ JwtUtil.java
β”‚       β”‚           β”‚   β”œβ”€β”€ PostBookmarkId.java
β”‚       β”‚           β”‚   β”œβ”€β”€ Roles.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserBlockingId.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserFollowingId.java
β”‚       β”‚           β”‚   β”œβ”€β”€ UserTribeId.java
β”‚       β”‚           β”‚   └── UsernameGenerator.java
β”‚       β”‚           └── validation
β”‚       β”‚               β”œβ”€β”€ RoleValidator.java
β”‚       β”‚               └── annotation
β”‚       β”‚                   └── ValidRole.java
β”‚       └── resources
β”‚           β”œβ”€β”€ application-prod.properties
β”‚           └── application.properties

Usage πŸ› οΈ

  • Kubernetes
    • Run deploy.sh file:
      cd ./k8s
      chmod +x ./deploy.sh
      sudo ./deploy.sh
  • Docker
    • Run in development environment:
      docker-compose -f docker-compose-dev.yaml up -d --build
      # to stop --> docker-compose -f docker-compose-dev.yaml down
    • Run in production environment:
      docker-compose up -d --build
      # to stop --> docker-compose down

CI/CD πŸš€ πŸ”—

Deployment_Flow CICD

  • CI:
    • Checkout the code.
    • Login to dockerhub.
    • Build the docker image.
    • Push the docker image to dockerhub.
  • CD (on AWS EC2 Ubuntu machine as GitHub Actions Self-hosted Runner πŸ”—):
    • Stop & Remove existing containers.
    • Delete existing images.
    • Checkout the code.
    • Run the containers via docker-compose.yaml file.

Database Design πŸ“

DB_DIAGRAM

Tech Stack ⚑

  • Programming Language: Java 17
  • Backend Framework: Spring Boot v3.1.2
  • Database Engine: PostgreSQL
  • Other Frameworks: Spring Security Data JPA, Hibernate
  • API Documentation: Swagger via OpenApi 3.0
  • Containerization and Orchestration: Docker πŸ”— πŸ”—, Kubernetes πŸ”—
  • Cloud: AWS cloud
  • CI/CD: GitHub Actions πŸ”— πŸ”—

Features to add in the future πŸ’­

  • Adding OAuth 2.0.

Contribution 🀝

If you're interested in contributing to this repository, please follow these guidelines:

  • Fork the repository.
  • Make your changes.
  • Submit a Pull Request.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published