Skip to content

Latest commit

 

History

History
169 lines (133 loc) · 6.38 KB

README.md

File metadata and controls

169 lines (133 loc) · 6.38 KB

TechBlog

TechBlog is the newest technology blog where you can ask any question abaut any technology available on the market. The purpose of this application is to enable users to find answears from real profesionals without being annoyed by the ads.

The main objectives of this project are:

  • Allowing long-distance communication between people from all over the world about tech problems.
  • Allowing sharing media files
  • Facilitating communication between more users via specific subjects group chats.

The side objectives are:

  • Allowing a user to create a profile where they can share something about their tech knowledge and see their activity score on the app.

Functional requierments:

Authentication actions:
  • The software allows a user to register.
  • The software allows only users with the age higher than 18 years old to use the app.
  • The software encrypts the passwords (including the old ones) using SHA_256 hashing.
  • The software allows a user to introduce additional data.
  • The software allows a user to change his password.
  • The software allows a user to log in the system.
  • The software allows a user to log off from the system.
User actions:
  • The software allows a user to other user's info
  • The software allows a user to search through tech subjects
  • The software allows a user to answer or to put a new question on a specific topic
  • The software allows a user to ask a new question about their problem
  • The software allows a user to block a user from answearing to their topic
  • The software allows a user to unblock a user from answearing to their topic
Topic actions:
  • The software allows a user to post new topic
  • The software allows a user to post messages on the topic
  • The software allows a user to delete messages inapropiate for their created topic
  • The software allows a user to edit their posted message on a topic
Media actions:
  • The software allows a user to upload/delete a picture for the profile
  • The software allows a user to upload/remove media files from his/her profile.
  • The software allows a user to upload/remove a media file from a topic

Non-functional requirements

  • The application should be intuitive and easy to use.
  • The application should use as little buttons as possible.
  • The application should use icons instead of plain text for the buttons.
  • The application should have a good contrast of colors.

Use cases:

  • A user can create a new account (register).
  • A user can create a new account only if his/her age is above 18 years
  • A user can log in in the application
  • A user can log off in the application
  • A user can upload a profile picture (media file)
  • A user can update/delete the profile picture.
  • A user can additional data which can be visible to the other users.
  • A user can change the current password.
  • A user can send messages (including media files) to a topic or on his/her own topic
  • A user can create a new topic
  • A user can delete his/her topic
  • A user can edit a message
  • A user can block another user from his/her topic
  • A user can edit their messages

Database diagram:

db_diagram

Backend:

Observer Design Pattern:

For this application I used the Observer design pattern in order to notofy all users about the new updates in the app via their provided email address when creating a new account on the blog.

Singleton Design Pattern:

For this application I used the Singleton design pattern in order to have only one instance of the class EmaiSender beacuse emails are sent one by one using the design pattern Observer.

Endopoints:

JUnit Testing:

I created three diffrent test classes for the interfaces UseeService, AppNewsObserver and TopicService in order to be able to test the functionalities of the classes which implmented those interfaces.

Frontend:

For the frontend I used ReactJS with JavaScript to implement all the functionalities described above. For the forntend I update some endpoints to call specific procedures from the database which return the joining data from multiple tables, according of what I had to display on the frontend. Also I used the local storage for the frontend in order not to lose all the data retreived from the backend (all the data would have been lost when the browser page was refreshed).