diff --git a/app/__init__.py b/app/__init__.py index 70b4cabfe..60b2c07c2 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,7 +1,20 @@ from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from flask_migrate import Migrate +db = SQLAlchemy() +migrate = Migrate() def create_app(test_config=None): app = Flask(__name__) + app.comfig['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://postgres:postgres@localhost:5432/solar_system_development' + + db.init_app(app) + migrate.init_app(app, db) + + from .routes import planet_bp + app.register_blueprint(planet_bp) + return app diff --git a/app/models/__init__.py b/app/models/__init__.py new file mode 100644 index 000000000..ec9c5eaac --- /dev/null +++ b/app/models/__init__.py @@ -0,0 +1,5 @@ +def create_app(test_config=None): + + from app.models.book import Book + + return app \ No newline at end of file diff --git a/app/models/planet.py b/app/models/planet.py new file mode 100644 index 000000000..c06af9a2c --- /dev/null +++ b/app/models/planet.py @@ -0,0 +1,15 @@ +from app import db + +class Plant(db.Model): + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + name = db.Column(db.String) + description = db.Column(db.String) + moons = db.Column(db.Integer) + + def to_json(self): + return { + "id": self.id, + "name": self.name, + "desciption": self.description, + "moons": self.moons + } diff --git a/app/routes.py b/app/routes.py index 8e9dfe684..547f484a4 100644 --- a/app/routes.py +++ b/app/routes.py @@ -1,2 +1,53 @@ -from flask import Blueprint +from flask import Blueprint, jsonify, abort, make_response + +class Planet: + def __init__(self, id, name, description, moons): + self.id = id + self.name = name + self.description = description + self.moons = moons + def to_json(self): + return { + "id": self.id, + "name": self.name, + "desciption": self.description, + "moons": self.moons + } + +planets = [ + Planet(1, "Mercury", "the nearest planet to the Sun", 0), + Planet(2, "Venus", "named after the Roman goddess of love and beauty", 0), + Planet(3, "Earth", "Home. the only astronomical object known to harbor life", 1), + Planet(4, "Mars", "is often called the Red Planet", 2), + Planet(5, "Jupiter", "more then 2.5 time the mass of all other planets", 79), + Planet(6, "Saturn", "second-largest planet in the Solar System", 82), + Planet(7, "Uranus", "named after the Greek god of the sky", 27), + Planet(8, "Neptune", "the densest giant planet", 14), + Planet(9, "Pluto", "may or may not be a planet, poor Pluto", 1) + ] +planet_bp = Blueprint("planets", __name__, url_prefix="/planets") + +@planet_bp.route("", methods=["GET"]) +def read_planets(): + planets_response = [] + for planet in planets: + planets_response.append(planet.to_json()) + return jsonify(planets_response), 200 + +def validate_planet(planet_id): + try: + planet_id = int(planet_id) + except: + abort(make_response({"message":f"planet {planet_id} invalid"}, 400)) + + for planet in planets: + if planet.id == planet_id: + return planet + + abort(make_response({"message":f"planet {planet_id} not found"}, 404)) + +@planet_bp.route("/", methods=["GET"]) +def read_one_planet(planet_id): + planet = validate_planet(planet_id) + return jsonify(planet.to_json(), 200) \ No newline at end of file