Initial commit - Church Music Database
This commit is contained in:
59
legacy-site/backend/._archived_sqlite/models.py
Normal file
59
legacy-site/backend/._archived_sqlite/models.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from sqlalchemy import create_engine, Column, Integer, String, Text, Date, DateTime, ForeignKey
|
||||
from sqlalchemy.orm import declarative_base, sessionmaker, relationship, scoped_session
|
||||
from datetime import datetime
|
||||
import os
|
||||
|
||||
DB_PATH = os.path.join(os.path.dirname(__file__), 'app.db')
|
||||
engine = create_engine(f'sqlite:///{DB_PATH}', echo=False, future=True, pool_pre_ping=True, pool_recycle=3600)
|
||||
SessionLocal = scoped_session(sessionmaker(bind=engine, autoflush=False, autocommit=False))
|
||||
Base = declarative_base()
|
||||
|
||||
class Profile(Base):
|
||||
__tablename__ = 'profiles'
|
||||
id = Column(String(200), primary_key=True) # Support both int and UUID strings
|
||||
name = Column(String(100), unique=True, nullable=False)
|
||||
email = Column(String(100), default='')
|
||||
contact_number = Column(String(50), default='')
|
||||
default_key = Column(String(10), default='C')
|
||||
notes = Column(Text, default='')
|
||||
|
||||
class Song(Base):
|
||||
__tablename__ = 'songs'
|
||||
id = Column(String(200), primary_key=True) # Support UUID strings
|
||||
title = Column(String(200), nullable=False)
|
||||
artist = Column(String(200), default='')
|
||||
band = Column(String(200), default='')
|
||||
singer = Column(String(200), default='')
|
||||
lyrics = Column(Text, default='')
|
||||
chords = Column(Text, default='')
|
||||
created_at = Column(DateTime, default=datetime.now)
|
||||
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||
|
||||
class Plan(Base):
|
||||
__tablename__ = 'plans'
|
||||
id = Column(Integer, primary_key=True)
|
||||
date = Column(Date, nullable=False)
|
||||
profile_id = Column(String(200), ForeignKey('profiles.id'))
|
||||
memo = Column(Text, default='')
|
||||
profile = relationship('Profile')
|
||||
|
||||
class PlanSong(Base):
|
||||
__tablename__ = 'plan_songs'
|
||||
id = Column(Integer, primary_key=True)
|
||||
plan_id = Column(Integer, ForeignKey('plans.id'))
|
||||
song_id = Column(String(200), ForeignKey('songs.id'))
|
||||
order_index = Column(Integer, default=0)
|
||||
plan = relationship('Plan')
|
||||
song = relationship('Song')
|
||||
|
||||
class ProfileSong(Base):
|
||||
__tablename__ = 'profile_songs'
|
||||
id = Column(Integer, primary_key=True)
|
||||
profile_id = Column(String(200), ForeignKey('profiles.id'))
|
||||
song_id = Column(String(200), ForeignKey('songs.id'))
|
||||
song_key = Column(String(10), default='C')
|
||||
profile = relationship('Profile')
|
||||
song = relationship('Song')
|
||||
|
||||
def init_db():
|
||||
Base.metadata.create_all(engine)
|
||||
Reference in New Issue
Block a user