Code Monkey home page Code Monkey logo

fastapi-assignment's Introduction

FastAPI-Assignment

The below code can be used as the boiler plate for any fastapi based application.

Items in Repository:

This repository consists of or fastapi application(accessible via main.py), HLD diagram for the application, .gitignore file, and readme.md file that contains the documentation and steps to make it work locally.

Alembic Explanation

We have used an alembic package that keeps the track of database versioning, It's easy to use and maintain and more about alembic can be read via the references provided below.

Create table command to be used:

CREATE TABLE assignment (
    source_id INTEGER PRIMARY KEY NOT NULL,
    source VARCHAR(200),
    source_type VARCHAR(10),
    source_tag VARCHAR(10),
    last_updated_date TIMESTAMP,
    from_date TIMESTAMP,
    to_date TIMESTAMP,
    frequency VARCHAR(5)
);

got converted into python sqlalchemy code used in alembic version as:

def upgrade() -> None:
    op.create_table(
        'assignment',     
        sa.Column('source_id', sa.Integer(), primary_key=True, nullable=False),
        sa.Column('source', sa.String(length=200), nullable=True),
        sa.Column('source_type', sa.String(length=10), nullable=True),
        sa.Column('source_tag', sa.String(length=10), nullable=True),
        sa.Column('last_updated_date', sa.DateTime(), nullable=True),
        sa.Column('from_date', sa.DateTime(), nullable=True),
        sa.Column('to_date', sa.DateTime(), nullable=True),
        sa.Column('frequency', sa.String(length=5), nullable=True),
    )


def downgrade() -> None:
    op.drop_table('assignment')

How to run the Application

Step-1

Create a Postgres Database in your local system using pgadmin tool or we can simply type in the commands as mentioned below:

psql -U <username>;
CREATE DATABASE <database_name>;

One can also take help from the sources mentioned below as references to create a database.

Step-2

Create a virtual env and install the requirements.txt file using pip. Once installed, we have to add the URL for our postgres database to act as a primary database handling all of our fastapi queries. We need to add URL in models->db_models.py file and also in alembic.ini file.

Format for database URL is mentioned here:

postgresql://<username>:<password>@<IP_address>:<port>/<database name>

Once this is done we need to upgrade the alembic locally, and for that we already have a file in this repository, hence we only use the command as:

alembic upgrade head

Step-3

Once we are done with changing the DB URL with our local db and installing all the requirements. We can start the fastapi application by using the command.

python main.py

Once our app is running it'll be visible on our localhost port 8000. Link to open the app:

http://localhost:8000/

Step-4

We can now test the working of the api's easily by either using curl commands(mentioned below) or we can directly go to the fast api docs and use it from there. We can access docs via link:

http://localhost:8000/docs

Step-5

Now all we have to do is paste these curl commands from our terminal or any shell and see if the api's are working or not, below we have all the curl sample commands along with the outputs mentioned.

/add-data

INPUT:
curl -X 'POST' \
  'http://localhost:8000/add_data' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "source_id": 2,
  "source": "amazon",
  "source_type": "online",
  "source_tag": "am",
  "last_updated_date": "2023-07-07T13:25:30.420Z",
  "from_date": "2023-07-07T13:25:30.420Z",
  "to_date": "2023-07-07T13:40:30.420Z",
  "frequency": "21M"
}'


OUTPUT:
{
  "status": "success"
}

/update_data

INPUT:
curl -X 'POST' \
  'http://localhost:8000/update_data' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "source_id": 2,
  "last_updated_date": "2023-07-07T13:27:47.461Z",
  "from_date": "2023-07-06T13:27:47.461Z",
  "to_date": "2023-07-06T13:35:47.461Z"
}
'


OUTPUT:
{
  "status": "success"
}

/get_data

INPUT:
curl -X 'POST' \
  'http://localhost:8000/get_data' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "source_id": 2
}'


OUTPUT:
{
  "response": {
    "source_id": 2,
    "source": "amazon",
    "source_type": "online",
    "source_tag": "am",
    "last_updated_date": "2023-07-07T18:57:47.461000",
    "from_date": "2023-07-06T18:57:47.461000",
    "to_date": "2023-07-06T19:05:47.461000",
    "frequency": "21M"
  }
}

/get_trigger_data

INPUT:
curl -X 'POST' \
  'http://localhost:8000/get_trigger_data' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "source_id": 2
}'


OUTPUT:
{
  "response": {
    "source_id": 2,
    "source": "amazon",
    "source_type": "online",
    "source_tag": "am",
    "last_updated_date": "2023-07-07T18:57:47.461000",
    "from_date": "2023-07-06T19:18:47.461000",
    "to_date": "2023-07-06T19:26:47.461000",
    "frequency": "21M"
  }
}

References:

https://fastapi.tiangolo.com/tutorial/first-steps/
https://codevoweb.com/crud-restful-api-server-with-python-fastapi-and-postgresql/
https://tutlinks.com/fastapi-with-postgresql-crud-async/
https://alembic.sqlalchemy.org/en/latest/

fastapi-assignment's People

Contributors

ngrover24198 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.