diff --git a/db.py b/db.py new file mode 100644 index 0000000..961d04a --- /dev/null +++ b/db.py @@ -0,0 +1,186 @@ +#! .\sbsheriff\scripts\python.exe +import sqlalchemy as sqla +from sqlalchemy.orm import declarative_base, relationship, scoped_session, sessionmaker + +engine = sqla.create_engine('postgresql://strix:unnipus1213@192.168.1.2:5432/sbdb') + +Base = declarative_base() + +class World(Base): + __tablename__ = 'world' + id = sqla.Column(sqla.Integer, primary_key=True) + short_name = sqla.Column(sqla.String(50)) + world_name = sqla.Column(sqla.String(50)) + shk_id = sqla.Column(sqla.Integer) + age = sqla.Column(sqla.Integer) + ended = sqla.Column(sqla.Boolean) + hoh_scraped = sqla.Column(sqla.Boolean) + servers = relationship('Server',back_populates='worlds') #Checked + hoh_entries = relationship('Hall_Of_Heroes',back_populates='world') #Checked + house_histories = relationship('House_History',back_populates='world') #Checked + +class Player(Base): + __tablename__ = 'player' + id = sqla.Column(sqla.Integer, primary_key=True) + player_name = sqla.Column(sqla.String(100)) + user_id = sqla.Column(sqla.Integer,sqla.ForeignKey('user.id')) + + user = relationship('User',back_populates='player') #Checked + vm_entries = relationship('Vm_Entry',back_populates='player') #Checked + hoh_entries = relationship("Hall_Of_Heroes",back_populates="player") #Checked + house_history = relationship("House_History",back_populates="player") #Checked + castle_designs = relationship("Player_Castle_Designs",back_populates="player") #Checked + +server_user = sqla.Table( + "association", + Base.metadata, + sqla.Column("server_id",sqla.ForeignKey("server.id")), + sqla.Column("user_id",sqla.ForeignKey("user.id")), +) + +class Server(Base): + __tablename__ = 'server' + id = sqla.Column(sqla.Integer, primary_key=True) + server_name = sqla.Column(sqla.Integer) + discord_guild_id = sqla.Column(sqla.BigInteger,unique=True) + world_id = sqla.Column(sqla.Integer,sqla.ForeignKey('world.id')) + + worlds = relationship("World",back_populates="servers") #Checked + users = relationship("User",secondary=server_user,back_populates='servers') #Checked + +class User(Base): + __tablename__ = 'user' + id = sqla.Column(sqla.Integer, primary_key=True) + discord_id = sqla.Column(sqla.BigInteger,unique=True) + display_name = sqla.Column(sqla.String(50)) + servers = relationship("Server",secondary=server_user,back_populates='users') #Checked + + #Parent in user prefferences relationship + user_prefference = relationship("User_Prefference",back_populates="user",uselist=False) #Checked + + #Parent in user player relationship + player = relationship('Player',back_populates='user',uselist=False) #Checked + +class User_Prefference(Base): + __tablename__ = 'user_prefference' + id = sqla.Column(sqla.Integer,primary_key=True) + preffered_pikes = sqla.Column(sqla.Integer) + preffered_archers = sqla.Column(sqla.Integer) + user_id = sqla.Column(sqla.Integer,sqla.ForeignKey('user.id')) + user = relationship('User',back_populates='user_prefference') #Checked + +class Advert_Type(Base): + __tablename__ = 'advert_type' + id = sqla.Column(sqla.Integer, primary_key=True) + advert_name = sqla.Column(sqla.String(50)) + adverts = relationship("Advert",back_populates="advert_type") #Checked + +class Advert(Base): + __tablename__ = 'advert' + advert_id = sqla.Column(sqla.Integer, primary_key=True) + advert_type_id = sqla.Column(sqla.SmallInteger, sqla.ForeignKey("advert_type.id")) + channel_id = sqla.Column(sqla.BigInteger) + message_id = sqla.Column(sqla.BigInteger) + advert_type = relationship("Advert_Type",back_populates="adverts") #Checked + +class Vm_Entry(Base): + __tablename__ = 'vm_entry' + id = sqla.Column(sqla.Integer, primary_key=True) + added_by_user_id = sqla.Column(sqla.Integer, sqla.ForeignKey("user.id")) + player_id = sqla.Column(sqla.Integer, sqla.ForeignKey("player.id")) + server_id = sqla.Column(sqla.Integer, sqla.ForeignKey("server.id")) + time_added = sqla.Column(sqla.Time) + time_ended = sqla.Column(sqla.Time,nullable=True) + player = relationship("Player",back_populates="vm_entries") #Checked + +class House(Base): + __tablename__ = 'house' + id = sqla.Column(sqla.Integer, primary_key=True) + color = sqla.Column(sqla.String) + emoji = sqla.Column(sqla.String) + relationships = relationship("House_Relationship",back_populates="house") + +class Relationship_State(Base): + __tablename__ = 'relationship_state' + id = sqla.Column(sqla.Integer, primary_key=True) + relationship_name = sqla.Column(sqla.String(50)) + alignment = sqla.Column(sqla.Integer) + house_relations = relationship('House_Relationship',back_populates='relationship_state') #Checked + player_relations = relationship('Player_Relationship',back_populates='relationship_state')#Checked + +class House_Relationship(Base): + __tablename__ = 'house_relationship' + id = sqla.Column(sqla.Integer, primary_key=True) + + server_id = sqla.Column(sqla.Integer, sqla.ForeignKey("server.id")) + house_id = sqla.Column(sqla.Integer, sqla.ForeignKey("house.id")) + house = relationship("House",back_populates="relationships") #Checked + relationship_state_id = sqla.Column(sqla.Integer, sqla.ForeignKey("relationship_state.id")) + relationship_state = relationship("Relationship_State",back_populates="house_relations") #Checked + +class Player_Relationship(Base): + __tablename__ = 'player_relationship' + id = sqla.Column(sqla.Integer, primary_key=True) + note = sqla.Column(sqla.String(100),nullable=True) + + server_id = sqla.Column(sqla.Integer, sqla.ForeignKey("server.id")) + player_id = sqla.Column(sqla.Integer, sqla.ForeignKey("player.id")) + relationship_state_id = sqla.Column(sqla.Integer, sqla.ForeignKey("relationship_state.id")) + relationship_state = relationship('Relationship_State',back_populates='player_relations')#Checked + +class Hoh_Rank(Base): + __tablename__ = 'hoh_rank' + id = sqla.Column(sqla.Integer, primary_key=True) + rank_name = sqla.Column(sqla.String(50)) + hoh_entries = relationship("Hall_Of_Heroes",back_populates="rank") #Checked + +class Hall_Of_Heroes(Base): + __tablename__ = 'hall_of_heroes' + id = sqla.Column(sqla.Integer,primary_key=True) + player_id = sqla.Column(sqla.Integer,sqla.ForeignKey('player.id')) + hoh_rank_id = sqla.Column(sqla.Integer,sqla.ForeignKey('hoh_rank.id')) + world_id = sqla.Column(sqla.Integer,sqla.ForeignKey('world.id')) + + #Parent in player hoh relationship + player = relationship('Player',back_populates='hoh_entries') #Checked + rank = relationship('Hoh_Rank',back_populates='hoh_entries') #Checked + world = relationship('World',back_populates='hoh_entries') #Checked + +class Player_Castle_Designs(Base): + __tablename__ = "player_castle_designs" + id = sqla.Column(sqla.Integer,primary_key=True) + path = sqla.Column(sqla.String) + player_id = sqla.Column(sqla.Integer,sqla.ForeignKey("player.id")) + server_id = sqla.Column(sqla.Integer,sqla.ForeignKey("server.id")) + + player = relationship("Player", back_populates="castle_designs") #Checked + server = relationship("Server") #Checked + +class House_History(Base): + __tablename__ = 'house_history' + id = sqla.Column(sqla.Integer,primary_key=True) + date = sqla.Column(sqla.Date) + + player_id = sqla.Column(sqla.Integer,sqla.ForeignKey("player.id")) + world_id = sqla.Column(sqla.Integer,sqla.ForeignKey("world.id")) + house_id = sqla.Column(sqla.Integer,sqla.ForeignKey("house.id")) + player = relationship("Player",back_populates='house_history') #Checked + world = relationship("World",back_populates='house_histories') #Checked + house = relationship("House") #Checked + +class Liegelord_Requests(Base): + __tablename__ = 'liegelord_requests' + id = sqla.Column(sqla.Integer,primary_key=True) + village_id = sqla.Column(sqla.SmallInteger) + confirm_message_id = sqla.Column(sqla.BigInteger) + + server_id = sqla.Column(sqla.Integer,sqla.ForeignKey("server.id")) + request_user_id = sqla.Column(sqla.Integer,sqla.ForeignKey('user.id')) + fulfilled_user_id = sqla.Column(sqla.Integer,sqla.ForeignKey('user.id')) + server = relationship("Server") #Checked + request_user = relationship("User",foreign_keys=[request_user_id]) + fulfilled_user= relationship("User",foreign_keys=[fulfilled_user_id]) + +def create_session(): + session = scoped_session(sessionmaker(bind=engine)) + return session \ No newline at end of file