diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..456ecdf --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +migrations/ +database.sqlite diff --git a/Pipfile b/Pipfile index 22cd21b..944fb21 100644 --- a/Pipfile +++ b/Pipfile @@ -19,3 +19,4 @@ flask-mail = "*" python-dotenv = "*" flask-script = "*" flask-migrate = "*" +faker = "*" diff --git a/app.py b/app.py index da075fe..ff939b3 100644 --- a/app.py +++ b/app.py @@ -1,11 +1,20 @@ +# -*- coding: utf-8 -*- +# Librarys import os from flask import Flask from flask_restplus import Resource, Api from dotenv import load_dotenv, find_dotenv +from models import db, User, News, Comment load_dotenv(find_dotenv()) + app = Flask(__name__) + +# Config Flask +app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') + +# Config API api = Api(app) PRE_URL = '/api/v1/' @@ -32,10 +41,11 @@ class Logout(Resource): @api.route(PRE_URL + 'news') -class News(Resource): +class News_all(Resource): def get(self): - return {'hello': 'world'} + my_news = News.query.all() + return ([i.serialize for i in my_news]) def post(self): return {'hello': 'world'} diff --git a/fake_data.py b/fake_data.py new file mode 100644 index 0000000..34c0f0c --- /dev/null +++ b/fake_data.py @@ -0,0 +1,48 @@ +from werkzeug.security import generate_password_hash +from models import db, User, News, Comment +from faker import Factory +from random import randint + +# Spanish +fake = Factory.create('es_ES') + +# Reload tables +db.drop_all() +db.create_all() + +# Make 100 fake users +for num in range(100): + profile = fake.simple_profile() + username = profile['username'] + mail = profile['mail'] + password = generate_password_hash('123') + # Save in database + my_user = User(username=username, mail=mail, password=password) + db.session.add(my_user) + +print('Users created') + +# Make 1000 fake news +for num in range(1000): + title = fake.sentence() + link = fake.uri() + user_id = randint(1, 100) + # Save in database + my_news = News(title=title, link=link, user_id=user_id) + db.session.add(my_news) + +print('News created') + +# Make 10000 fake comments +for num in range(10000): + text = fake.text() + news_id = randint(1, 1000) + user_id = randint(1, 100) + # Save in database + my_comment = Comment(text=text, news_id=news_id, user_id=user_id) + db.session.add(my_comment) + +print('Comments created') + +# Save +db.session.commit() diff --git a/models.py b/models.py index ec3b48b..5ad80b0 100644 --- a/models.py +++ b/models.py @@ -1,15 +1,19 @@ # -*- coding: utf-8 -*- # Librarys +import os from flask import Flask from datetime import datetime from flask_sqlalchemy import SQLAlchemy from flask_script import Manager from flask_migrate import Migrate, MigrateCommand +from dotenv import load_dotenv, find_dotenv + +load_dotenv(find_dotenv()) app = Flask(__name__) # Settings -app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.sqlite' +app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URI') app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # Variables @@ -28,7 +32,7 @@ class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(100)) - email = db.Column(db.String(200)) + mail = db.Column(db.String(200)) password = db.Column(db.String(106)) created_at = db.Column( db.DateTime, nullable=False, default=datetime.utcnow) @@ -45,14 +49,25 @@ class News(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100)) link = db.Column(db.String(500)) + user_id = db.Column( + db.Integer, db.ForeignKey('users.id'), nullable=False) created_at = db.Column( db.DateTime, nullable=False, default=datetime.utcnow) - user_id = db.Column( - db.Integer, db.ForeignKey('user.id'), nullable=False) + # Relations user = db.relationship( 'User', backref=db.backref('News', lazy=True)) + @property + def serialize(self): + """Return object data in easily serializeable format""" + return { + 'id': self.id, + 'title': self.title, + 'link': self.link, + 'user_id': self.user_id + } + def __repr__(self): return ''.format(self.title) @@ -64,11 +79,16 @@ class Comment(db.Model): __tablename__ = 'comments' id = db.Column(db.Integer, primary_key=True) text = db.Column(db.String(1000)) + news_id = db.Column( + db.Integer, db.ForeignKey('news.id'), nullable=False) + user_id = db.Column( + db.Integer, db.ForeignKey('users.id'), nullable=False) created_at = db.Column( db.DateTime, nullable=False, default=datetime.utcnow) - news_id = db.Column( - db.Integer, db.ForeignKey('news.id'), nullable=False) + # Relations + user = db.relationship( + 'User', backref=db.backref('Comment', lazy=True)) news = db.relationship( 'News', backref=db.backref('Comment', lazy=True))