A Terminal Inspired Social Media Platform for Advanced Users.
- Front-End - HTML/CSS/Javascript
- Back-end - Spring Boot
- Database - Postgresql
- Allow users to create accounts, log in, and log out.
- Secure password storage and authentication.
user signup --username <username> --password <password>
user login --username <username> --password <password>
user view <username>
user logout
user delete <username>
- Allows users to create text-based posts.
- Ability to view and rate(1-10) posts.
post create <post-content>
post delete <post-id>
post rate <post-id> <rating-point> # rating point between 1-10
post view <post-id>
- Show posts created by users
- Ability to view posts in paginated manner
post list -u <username> # returns list of user created posts
post list # returns top 5 unread posts and mark them as 'read'
post list --limit <int(1-5), min=1 default,max=5> --page <int(1-n), min=1 default=1># get feed in paginated way
- Logging using logback
- Database migrations using flyway
- Object Relational Mapping using Spring Data JPA
- Validations using jakarta validations API
- Unit testing using Junit,Mockito
- docker
To run locally, you must first clone the repository.
git clone https://github.com/avinash-550/project-soshell.git
Once cloned go to the docker folder and run the docker command. This will start all the dependencies along with the application.
cd project-soshell/docker
docker compose up
Now visit http://locahost:3000/ to access the application.
Tip
You can create an .env
file in the project's root to configure your environment.
Tip
You can use docker-compose-dependencies.yaml file to only bring up the dependencies.
- Allow users to follow and unfollow other users.
- Display a list of followers and following.
user follow <username>
user unfollow <username>
user following # returns top 5 users user is following
user following --limit <int(1-5), min=1 default,max=5> --page <int(1-n), min=1 default=1> # get following in paginated way
user followers # retunrs top 5 users following user
user followers --limit <int(1-5), min=1 default,max=5> --page <int(1-n), min=1 default=1> # get followers in paginated way
- Search an user or post by given keyword.
search users abc # searches user(s) with username containing abc
search posts abc # searches posts(s) containing xyz under all users
search posts --user-id abc xyz # searches for post(s) containing xyz under user abc
search <entity(users/posts), default=posts> --user-id <user-id> --limit <int(1-5), min=1 default,max=5> --page <int(1-n), min=1 default=1> <anyKeyword(string), default="" minlen=0 maxlen=10> # full search command