Skip to content

bertuginal/real-estate-final-project

Repository files navigation

✨ REAL ESTATE FINAL PROJECT ✨

🌐 FMSS & Patika+ Fullstack Web Bootcamp 🌐

❓ What is this project?

This project is a real estate website completion project developed as a full stack using Java, Spring Boot in the back-end and React and Next.js in the front-end.

 

🔎 Overview

The real estate website project is designed to allow the user to create advertisements by communicating with each other through many microservices.

  • User can check balance and usage time by looking at profile details.

  • User can create, edit, delete advertisement and access its details.

  • The user can turn his ads, which are initially IN_REVIEW, into ACTIVE and PASSIVE.

  • Can make package purchases and payments.

  • Can view the details of the packages purchased.

 

⚙️ BACK-END

  • Java
  • Spring
  • Maven
  • Postgresql
  • Postman
  • Swagger

🔒 Dependencies

✔️ Spring Web

✔️ Spring Data JPA

✔️ Lombok

✔️ RabbitMQ

✔️ Hibernate

✔️ Model Mapper

✔️ Open Feign

✔️ Service Discovery

 

✨ Features

❶ Users can register to the system.

❷ The user can log in to the system with the email and password he/she registered with. If the login is successful, a token belonging to the user is created and he can perform authorized transactions with this token.

❸ Each user's initial right to post ads is "0". In order to post an ad, he/she must purchase a package.

❹ The right to publish advertisements and the validity period of the purchased package are defined in the user model.

❺ The package includes the right to publish 10 advertisements and the usage period of the package is 30 days.

❻ When the user wants to buy a package, his ad balance and usage time are checked.

  • If the package has expired, the remaining rights will be reset and you will need to buy the package again.

    • If the user purchases a package and makes the payment, the purchased package is defined to the user's profile via rabbitMQ.
    • The right to publish 10 advertisements and a 30-day usage period are added based on the day of purchase.
  • If the usage period has not expired, the balance will not be reset.

    • If the user purchases a new package and the payment transaction is confirmed, 10 advertising rights will be added to the remaining usage rights and the usage period will be increased by 30 days.

❼ The purchase is made according to the ID of the user logged into the system.

(This process is performed according to the information received from the token in the header.)

❽ When the user wants to create an advertisement, advertisement rights and usage time are checked.

  • If the package has expired or there are no ad rights left, the ad publishing process will be canceled and an exception error message will be returned to the user.

  • If the package has not expired and there is a right to advertise, the ad creation process will be successful. The cost of the package is deducted from the user's balance.

❾ When the ad is created, the ad status is IN_REVIEW. The user can change the status of the ad to ACTIVE or PASSIVE from another service.

✔️ See the open issues for a full list of proposed features (and known issues)!

 

📈 UML Diagram

real-estate-uml-diagram

≫ There are 6 microservices that communicate with each other. These microservices are managed by the gateway. Instance management is provided with service discovery.

  • Advert status changing is added to the queue by AdvertService and performed asynchronously by AdvertStatusService.
  • The package identification process is added to the queue by PurchaseService and performed asynchronously by UserService.

 

💱 API Structure

 

🌱 Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". ⭐ Don't forget to give the project a star! Thanks again! ⭐

❶ Fork the Project

❷ Create your Feature Branch (git checkout -b feature/real-estate-final-project)

❸ Commit your Changes (git commit -m 'Add some real-estate-final-project')

❹ Push to the Branch (git push origin feature/real-estate-final-project)

❺ Open a Pull Request

 

☎️ Contact

📧 E-mail: [email protected]

📱 Mobile Phone: (+90) 507 038 33 23

📋 Project Link: https://github.com/bertuginal/real-estate-final-project