/Blob-Storage

Primary LanguageJavaScriptApache License 2.0Apache-2.0

Github Pages Deploy

FastApi Deploy

Blob-Storage-Server - Cloudwiry-Hackathon-2022

Problem Statement

We’re in a digital economy where data is more valuable than ever. It’s the key to the smooth functionality of everything from the government to local companies. Without it, progress would halt. With data becoming enormous so is the requirement for better storage systems.

Therefore building a storage system and understanding the difficulties faced is an important step for research & improvements in the storage technologies.

To trigger curiosity and the critical thinker within you, we at Cloudwiry have decided to formulate this into a hackathon.

Requirements

  • User authentication and session management
  • Implementation of the blob storage server
  • Client application (CLI/ web based) for file upload, download, rename and delete
  • User based access control on who can access the files
  • Deploy the application
  • (optional - bonus points) - File compression

Work flow Plan and Database Design

idea drawio

Technologies Used

  • FastApi ( Server Implementation )
  • React ( UI Implementation )
  • Redux ( State Management )
  • fluentui/north-star ( UI Components )
  • SqlAlchemy ORM ( Database ORM )
  • Github Action with Heruko ( Continous Deployment )

Project Setup

Clone The Project

  1. Clone the Project. Following Command Can be used for this purpose -
$ git clone https://github.com/sachinsom93/Blob-Storage-Server-Cloudwiry-Hackathon-2022.git
  1. Change the present directory to cloned project directory.
$ cd Blob-Storage-Server-Cloudwiry-Hackathon-2022

Backend Setup

  1. Fork, Clone and go inside project directory.
  2. Important Step Change the .sampleenv to .env.
  3. Create and Enable virtualenv.
# Create virtual env
$ virtualenv venv

# activate venv (For Windows)
$ venv\Scripts\activate
  1. Install the project dependencies. Use the following command.
$ pip install -r requirements.txt
  1. Run the Server.
$ uvicorn backend.main:app --reload

Frontend Setup

  1. Fork, Clone and go inside project directory.
  2. Go inside frontend directory.
$ cd frontend
  1. Install npm dependencies.
(frontend) $ npm install
  1. Start react server.
(frontend) $ npm start

Project Features

  1. User can create accound and login into account.
  2. User can upload files.
  3. User can rename, delete and download any file.
  4. User can share files with other users.
  5. Other users can also rename, download the shared file.
  6. User can logout.

Example Use Case / Application Flow

  • User (John) logs in to the application using username and password (Authentication to happen over HTTP/HTTPS using REST API)
  • John can now view all the files he has access to and has uploaded
  • John decides to upload a new file on to the storage system
  • John later decides to share that file with 2 other users (Alice & Bob)
  • When Alice/Bob login into the system, they should be able to view the file.
  • Alice decides to download the file onto her device.
  • John renames the file and deletes it later on
  • John exits & logout of the application

Evaluation Criteria

  • General coding standards & usage of git
  • Blob storage system implementation
  • Database design
  • Originality & creativity
  • Working & Demo of the application