Update database architecture. Add genres and actors

This commit is contained in:
2024-06-23 19:42:40 +04:00
parent 7b2f270913
commit fc3bcc343d
18 changed files with 220 additions and 12 deletions

View File

@@ -1,4 +1,11 @@
from .games import Game as Game
from .game_genres import GameGenre as GameGenre
from .movies import Movie as Movie
from .movie_genres import MovieGenre as MovieGenre
from .movie_actors import MovieActor as MovieActor
from .audiobooks import Audiobook as Audiobook
from .audiobook_genres import AudiobookGenre as AudiobookGenre
from .users import User as User

View File

@@ -0,0 +1,25 @@
from sqlalchemy import Column, Integer, ForeignKey, PrimaryKeyConstraint, String
from sqlalchemy.orm import relationship
from ..database import Base
class AudiobookGenre(Base):
__tablename__ = "audiobook_genres"
id = Column(Integer, primary_key=True)
genre = Column(String, nullable=False, unique=True)
audiobooks = relationship("Audiobook", secondary="audiobook_to_genre",
lazy="selectin")
class AudiobookToGenre(Base):
__tablename__ = "audiobook_to_genre"
__table_args__ = (
PrimaryKeyConstraint("audiobook_id", "genre_id"),
)
audiobook_id = Column(Integer, ForeignKey("audiobooks.id"), nullable=False)
genre_id = Column(Integer, ForeignKey(
"audiobook_genres.id"), nullable=False)

View File

@@ -1,4 +1,5 @@
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from ..database import Base
@@ -14,7 +15,6 @@ class Audiobook(Base):
author = Column(String)
torrent_file = Column(String, nullable=False)
upload_date = Column(String, nullable=False)
fragment = Column(String)
update_date = Column(String, nullable=False)
language = Column(String)
@@ -23,4 +23,7 @@ class Audiobook(Base):
duration = Column(String)
reader = Column(String)
genres = relationship("AudiobookGenre", secondary="audiobook_to_genre",
lazy="selectin")
owner_id = Column(Integer, ForeignKey("users.id"))

View File

@@ -0,0 +1,24 @@
from sqlalchemy import Column, Integer, ForeignKey, PrimaryKeyConstraint, String
from sqlalchemy.orm import relationship
from ..database import Base
class GameGenre(Base):
__tablename__ = "game_genres"
id = Column(Integer, primary_key=True)
genre = Column(String, nullable=False, unique=True)
games = relationship("Game", secondary="game_to_genre",
lazy="selectin")
class GameToGenre(Base):
__tablename__ = "game_to_genre"
__table_args__ = (
PrimaryKeyConstraint("game_id", "genre_id"),
)
game_id = Column(Integer, ForeignKey("games.id"), nullable=False)
genre_id = Column(Integer, ForeignKey("game_genres.id"), nullable=False)

View File

@@ -1,4 +1,5 @@
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from ..database import Base
@@ -11,7 +12,6 @@ class Game(Base):
cover = Column(String)
description = Column(String)
torrent_file = Column(String, nullable=False)
upload_date = Column(String, nullable=False)
trailer = Column(String)
system = Column(String)
@@ -27,4 +27,8 @@ class Game(Base):
release_date = Column(String)
download_size = Column(String)
genres = relationship("GameGenre", secondary="game_to_genre",
lazy="selectin")
owner_id = Column(Integer, ForeignKey("users.id"))
owner = relationship("User", lazy="selectin", viewonly=True)

View File

@@ -0,0 +1,24 @@
from sqlalchemy import Column, Integer, ForeignKey, PrimaryKeyConstraint, String
from sqlalchemy.orm import relationship
from ..database import Base
class MovieActor(Base):
__tablename__ = "movie_actors"
id = Column(Integer, primary_key=True)
actor = Column(String, nullable=False, unique=True)
movies = relationship("Movies", secondary="movie_to_actor",
lazy="selectin")
class MovieToActor(Base):
__tablename__ = "movie_to_actor"
__table_args__ = (
PrimaryKeyConstraint("movie_id", "actor_id"),
)
movie_id = Column(Integer, ForeignKey("movies.id"), nullable=False)
actor_id = Column(Integer, ForeignKey("movie_actors.id"), nullable=False)

View File

@@ -0,0 +1,24 @@
from sqlalchemy import Column, Integer, ForeignKey, PrimaryKeyConstraint, String
from sqlalchemy.orm import relationship
from ..database import Base
class MovieGenre(Base):
__tablename__ = "movie_genres"
id = Column(Integer, primary_key=True)
genre = Column(String, nullable=False, unique=True)
movies = relationship("Movies", secondary="movie_to_genre",
lazy="selectin")
class MovieToGenre(Base):
__tablename__ = "movie_to_genre"
__table_args__ = (
PrimaryKeyConstraint("movie_id", "genre_id"),
)
movie_id = Column(Integer, ForeignKey("movies.id"), nullable=False)
genre_id = Column(Integer, ForeignKey("movie_genres.id"), nullable=False)

View File

@@ -1,4 +1,5 @@
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from ..database import Base
@@ -14,7 +15,6 @@ class Movie(Base):
description = Column(String)
torrent_file = Column(String, nullable=False)
upload_date = Column(String, nullable=False)
trailer = Column(String)
update_date = Column(String, nullable=False)
language = Column(String)
@@ -25,4 +25,10 @@ class Movie(Base):
duration = Column(String)
country = Column(String)
genres = relationship("MovieGenre", secondary="movie_to_genre",
lazy="selectin")
actors = relationship("MovieActor", secondary="movie_to_actor",
lazy="selectin")
owner_id = Column(Integer, ForeignKey("users.id"))

View File

@@ -11,3 +11,7 @@ class User(Base):
email = Column(String, nullable=False, unique=True)
name = Column(String, nullable=False)
hash_of_password = Column(String, nullable=False)
games = relationship("Game", viewonly=True)
movies = relationship("Movie", viewonly=True)
audiobooks = relationship("Audiobook", viewonly=True)