From 4d117ca4acbd7f38eae12859de42400f42b0db6e Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 8 Jun 2021 10:45:44 -0400 Subject: [PATCH] Started adding database logic. Can now add book to shelf and get list of books that are checked in. --- index.html | 37 +++++++++++++++++++++++++--- main.py | 63 +++++++++++++++++++++++++++++++++++++++++++----- requirements.txt | 3 +++ 3 files changed, 93 insertions(+), 10 deletions(-) diff --git a/index.html b/index.html index e2be9f4..4448632 100644 --- a/index.html +++ b/index.html @@ -1,5 +1,34 @@ -
- - +
+ Local Testing +
+ + + + + +
+ + -
\ No newline at end of file + +
+ +
+
+ +
+ Remote Testing +
+ + + +
+
+ + + +
+
+ +
+
\ No newline at end of file diff --git a/main.py b/main.py index adc442a..20d7887 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,38 @@ from fastapi import FastAPI, Form from isbnlib import meta +from sqlalchemy import create_engine, Column, Integer, String, TEXT +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker +# Declare Base and setup tables +Base = declarative_base() + + +class User(Base): + __tablename__ = 'User' + id = Column(Integer, primary_key=True, autoincrement=True) + Username = Column(String(50)) + FirstName = Column(String(50)) + LastName = Column(String(50)) + Email = Column(String(50)) + + +class Book(Base): + __tablename__ = 'Book' + id = Column(Integer, primary_key=True, autoincrement=True) + userid = Column(Integer) + Title = Column(TEXT) + Author = Column(TEXT) + + +# Connect to database and establish a session +engine = create_engine('mysql+pymysql://library:jdSCAd6KEqfbpzh9NT4x@db.dandembinski.com:3306/Library') +engine.connect() + +Session = sessionmaker(bind=engine) +session = Session() + +# Initialize FastAPI and setup routes app = FastAPI() @@ -9,17 +41,36 @@ async def root(): return {"message": "Hello World"} -@app.post('/checkin/{isbn}') -async def checkin(isbn): - return{"Checked in": isbn} +@app.post('/checkin/') +async def checkin(isbn: str = Form(...)): + info = await getMeta(isbn) + session.add(Book(userid=1, Title=info['Title'], Author=info['Authors'])) + session.commit() + return {"Checked in": info['Title']} @app.get('/checkout/{isbn}') -async def checkout(isbn): - return{"Checked Out": isbn} +async def checkout(isbn): + return {"Checked Out": isbn} + + +@app.get('/getbooks/{userid}') +async def getbooks(userid): + books = [] + result = session.query(Book).filter(Book.userid == userid) + + for each in result: + books.append(each) + + return books @app.post('/lookup') async def lookup(isbn: str = Form(...)): + info = await getMeta(isbn) + return {"Title": info['Title']} + + +async def getMeta(isbn): info = meta(isbn, service='wiki') - return{"Title": info['Title']} + return info diff --git a/requirements.txt b/requirements.txt index c52a5a6..0e4da50 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,15 +2,18 @@ asgiref==3.3.4 click==8.0.1 colorama==0.4.4 fastapi==0.65.1 +greenlet==1.1.0 gunicorn==20.1.0 h11==0.12.0 httptools==0.2.0 isbnlib==3.10.8 pydantic==1.8.2 +PyMySQL==1.0.2 python-dotenv==0.17.1 python-multipart==0.0.5 PyYAML==5.4.1 six==1.16.0 +SQLAlchemy==1.4.17 starlette==0.14.2 typing-extensions==3.10.0.0 uvicorn==0.14.0