import enum
from sqlalchemy import Column, Boolean, Integer, String, create_engine, Text, DATETIME, Enum
from sqlalchemy.orm import declarative_base, relationship
from sqlalchemy import ForeignKey
from fastapi import FastAPI
from fastdaisy_admin import Admin, ModelView
Base = declarative_base()
engine = create_engine(
"sqlite:///example.db",
connect_args={"check_same_thread": False},
)
class Status(enum.Enum):
AVAILABLE = "AVAILABLE"
UNAVAILABLE = "UNAVAILABLE"
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
email = Column(String)
password = Column(String)
address = Column(String)
age = Column(Integer)
books = relationship("Book", back_populates="author", cascade="all, delete-orphan")
is_admin = Column(Boolean, default=False)
class Book(Base):
__tablename__ = 'books'
id = Column(Integer, primary_key=True)
title = Column(String)
description = Column(Text)
author_id = Column(Integer, ForeignKey('users.id'))
author = relationship("User", back_populates="books")
status = Column(Enum(Status))
code = Column(Integer, default=1)
is_new = Column(Boolean, default=True)
created_at = Column(DATETIME)
Base.metadata.create_all(engine) # Create tables
# --------------- Admin registration ---------------
app = FastAPI()
secret_key = "secret_key"
admin = Admin(app, secret_key, engine)
class UserAdmin(ModelView):
model = User
column_list = [User.id, User.name]
class BookAdmin(ModelView):
model = Book
admin.add_view(UserAdmin)
admin.add_view(BookAdmin)