Skip to content

Commit

Permalink
Merge pull request #55 from rosinni/solution
Browse files Browse the repository at this point in the history
update solution
  • Loading branch information
alesanchezr authored Nov 5, 2024
2 parents 22a8241 + 86a125d commit 9164032
Showing 1 changed file with 66 additions and 92 deletions.
158 changes: 66 additions & 92 deletions src/models.py
Original file line number Diff line number Diff line change
@@ -1,116 +1,90 @@
import os
import sys
import uuid
from sqlalchemy import Column, ForeignKey, Integer, String, Numeric
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.types import ARRAY, TIMESTAMP
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
from sqlalchemy import Column, ForeignKey, Integer, String, DateTime
from sqlalchemy.orm import relationship, declarative_base
from sqlalchemy import create_engine
from eralchemy2 import render_er
from datetime import datetime, timezone

Base = declarative_base()

class User(Base):
__tablename__ = 'user'

id = Column(Integer, primary_key=True)
user = Column(String(250))
password = Column(String(250))
created = Column(TIMESTAMP, server_default=func.now(), nullable=False)
edited = Column(TIMESTAMP, server_default=func.now(), onupdate=func.current_timestamp(), nullable=False)

class Film(Base):
__tablename__ = 'film'
username = Column(String(40), nullable=False, unique=True)
password = Column(String(40), nullable=False)
full_name = Column(String(200), nullable=False)
email = Column(String(100), nullable=False, unique=True)
created = Column(DateTime, default=lambda: datetime.now(timezone.utc), nullable=False)

id = Column(Integer, primary_key=True)
characters = Column(String(250))
director = Column(String(250))
created = Column(TIMESTAMP, server_default=func.now(), nullable=False)
edited = Column(TIMESTAMP, server_default=func.now(), onupdate=func.current_timestamp(), nullable=False)
episode_id = Column(Integer)
opening_crawl = Column(String(250))
producer = Column(String(250))
release_date = Column(String(250))
title = Column(String(250))
url = Column(String(250))

class Character(Base):
__tablename__ = 'character'
# Here we define columns for the table character
# Notice that each column is also a normal Python instance attribute.
id = Column(Integer, primary_key=True)
name = Column(String(250), nullable=False)
birth_year = Column(String(250))
eye_color = Column(String(250))
gender = Column(String(250))
hair_color = Column(String(250))
height = Column(Integer)
homeworld = Column(String(250))
mass = Column(Integer)
skin_color = Column(String(250))
created = Column(TIMESTAMP, server_default=func.now(), nullable=False)
edited = Column(TIMESTAMP, server_default=func.now(), onupdate=func.current_timestamp(), nullable=False)
films = Column(ARRAY(String(250)))
species = Column(ARRAY(String(250)))
url = Column(String(250))

class Specie(Base):
__tablename__ = 'specie'
# Here we define columns for the table address.
# Notice that each column is also a normal Python instance attribute.
id = Column(Integer, primary_key=True)
average_height = Column(Numeric)
average_lifespan = Column(Integer)
classification = Column(String(250))
designation = Column(String(250))
created = Column(TIMESTAMP, server_default=func.now(), nullable=False)
edited = Column(TIMESTAMP, server_default=func.now(), onupdate=func.current_timestamp(), nullable=False)
eye_colors = Column(String(250))
hair_colors = Column(String(250))
homeworld = Column(String(250))
language = Column(String(250))
name = Column(String(250))
films = Column(ARRAY(String(250)))
people = Column(ARRAY(String(250)))
skin_colors = Column(String(250))
url = Column(String(250))
favorites = relationship('Favorite', backref='user', lazy=True)

class Planet(Base):
__tablename__ = 'planet'

id = Column(Integer, primary_key=True)
name = Column(String(100), nullable=False)
diameter = Column(String(100), nullable=False)
rotation_period = Column(String(100), nullable=False)
orbital_period = Column(String(100), nullable=False)
gravity = Column(String(100), nullable=False)
population = Column(String(100), nullable=False)
climate = Column(String(100), nullable=False)
terrain = Column(String(100), nullable=False)
surface_water = Column(String(100), nullable=False)
created = Column(DateTime, default=lambda: datetime.now(timezone.utc), nullable=False)
edited = Column(DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))

favorites = relationship('Favorite', backref='planet', lazy=True)

class Vehicle(Base):
__tablename__ = 'vehicle'

id = Column(Integer, primary_key=True)
climate = Column(String(250))
diameter = Column(Numeric)
gravity = Column(Numeric)
created = Column(TIMESTAMP, server_default=func.now(), nullable=False)
edited = Column(TIMESTAMP, server_default=func.now(), onupdate=func.current_timestamp(), nullable=False)
name = Column(String(250))
orbital_period = Column(Integer)
population = Column(Integer)
residents = Column(ARRAY(String(250)))
rotation_period = Column(Integer)
surface_water = Column(Integer)
terrain = Column(String(250))
url = Column(String(250))
name = Column(String(100), nullable=False)
model = Column(String(100), nullable=False)
vehicle_class = Column(String(100), nullable=False)
manufacturer = Column(String(100), nullable=False)
length = Column(String(100), nullable=False)
cost_in_credits = Column(String(100), nullable=False)
crew = Column(String(100), nullable=False)
max_atmosphering_speed = Column(String(100), nullable=False)
cargo_capacity = Column(String(100), nullable=False)
consumables = Column(String(100), nullable=False)
url = Column(String(200), nullable=False)
created = Column(DateTime, default=lambda: datetime.now(timezone.utc), nullable=False)
edited = Column(DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))

favorites = relationship('Favorite', backref='vehicle', lazy=True)

class FavoritePlanet(Base):
__tablename__ = 'favorite_planet'
class People(Base):
__tablename__ = 'people'

id = Column(Integer, primary_key=True)
user = relationship(User)
planet = relationship(Planet)
created = Column(TIMESTAMP, server_default=func.now(), nullable=False)
edited = Column(TIMESTAMP, server_default=func.now(), onupdate=func.current_timestamp(), nullable=False)
name = Column(String(100), nullable=False)
birth_year = Column(String(100), nullable=False)
eye_color = Column(String(100), nullable=False)
gender = Column(String(100), nullable=False)
hair_color = Column(String(100), nullable=False)
height = Column(String(20), nullable=False)
mass = Column(String(40), nullable=False)
skin_color = Column(String(20), nullable=False)
homeworld = Column(String(40), nullable=False)
url = Column(String(100), nullable=False)
created = Column(DateTime, default=lambda: datetime.now(timezone.utc), nullable=False)
edited = Column(DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))

favorites = relationship('Favorite', backref='people', lazy=True)

class FavoriteCharacter(Base):
__tablename__ = 'favorite_character'
class Favorite(Base):
__tablename__ = 'favorite'

id = Column(Integer, primary_key=True)
user = relationship(User)
character = relationship(Character)
created = Column(TIMESTAMP, server_default=func.now(), nullable=False)
edited = Column(TIMESTAMP, server_default=func.now(), onupdate=func.current_timestamp(), nullable=False)
## Draw from SQLAlchemy base
user_id = Column(Integer, ForeignKey('user.id'), nullable=False)
people_id = Column(Integer, ForeignKey('people.id'), nullable=True)
vehicle_id = Column(Integer, ForeignKey('vehicle.id'), nullable=True)
planet_id = Column(Integer, ForeignKey('planet.id'), nullable=True)

# Generate a diagram for the database schema
render_er(Base, 'diagram.png')

0 comments on commit 9164032

Please sign in to comment.