fromflask_sqlalchemyimportSQLAlchemyfromflask_migrateimportMigrateimportos########################################## SQLAlchemy DB initialization########################################## Creating SQLALchemy instancedb=SQLAlchemy()# Creating Migrate instancemigrate=Migrate()
[docs]definit_db(app):""" Initialising DB (SQLAlchemy) with Flask app. Args: app: The Flask app instance. """# Initialize SQLAlchemy with the appdb.init_app(app)# Initialize Flask-migrate: Useful when developing for DB SCHEMA CHANGES.migrate.init_app(app,db,directory='kusibot/database/migrations')# Creating tables and Professional Userinitialise_data(app,db)
[docs]definitialise_data(app,db):""" Initialises the database creating all its tables and the UNIQUE professional user who has access to the non-professional users conversations and insights. Args: app: The Flask app instance. db: The SQLAlchemy instance. """withapp.app_context():db.create_all()# Create a professional user if not existsfromkusibot.database.db_repositoriesimportUserRepositoryuser_repo=UserRepository()professional_username=os.environ["PROFESSIONAL_USERNAME"]professional_password=os.environ["PROFESSIONAL_PASSWORD"]professional_email=os.getenv("PROFESSIONAL_EMAIL","pro@kusibot.com")user=user_repo.get_user_by_username(professional_username)ifnotuser:fromappimportbcryptprofessional_password=bcrypt.generate_password_hash(professional_password).decode('utf-8')user_repo.add_user(professional_username,professional_email,professional_password,is_professional=True)print(f"Professional user {professional_username} created.")