|
|
@@ -5,27 +5,32 @@ import flask
|
|
|
from flask import make_response, request, redirect, jsonify, render_template, url_for
|
|
|
from flask_sqlalchemy import SQLAlchemy
|
|
|
from flask_marshmallow import Marshmallow
|
|
|
+from flask_migrate import Migrate
|
|
|
|
|
|
db = SQLAlchemy()
|
|
|
app = flask.Flask(__name__)
|
|
|
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:m9Eb5OflQb@mysql.mysql.svc.cluster.local/gopy'
|
|
|
db.init_app(app)
|
|
|
|
|
|
+migrate = Migrate(app, db)
|
|
|
+
|
|
|
ma = Marshmallow(app)
|
|
|
|
|
|
class Link(db.Model):
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
name = db.Column(db.String(255), unique=True)
|
|
|
target = db.Column(db.String(255))
|
|
|
+ hit_count = db.Column(db.Integer)
|
|
|
+ owner_name = db.Column(db.String(255))
|
|
|
|
|
|
def __repr__(self):
|
|
|
return '<Link id=(id) name=(name) target=(target)>'.format(
|
|
|
- id=self.id, name=self.name, target=self.target
|
|
|
+ id=self.id, name=self.name, target=self.target, hit_count=self.hit_count, owner_name=self.owner_name
|
|
|
)
|
|
|
|
|
|
class LinkSchema(ma.Schema):
|
|
|
class Meta:
|
|
|
- fields = ('id', 'name', 'target')
|
|
|
+ fields = ('id', 'name', 'target', 'hit_count', 'owner_name')
|
|
|
|
|
|
def get_links():
|
|
|
links = Link.query.all()
|
|
|
@@ -33,6 +38,17 @@ def get_links():
|
|
|
link_json = schema.dump(links)
|
|
|
return links
|
|
|
|
|
|
+def link_exists(link_name):
|
|
|
+ try:
|
|
|
+ link = Link.query.filter_by(name=link_name).first()
|
|
|
+ except Exception as e:
|
|
|
+ print(e)
|
|
|
+ return e
|
|
|
+ if link is None:
|
|
|
+ return False
|
|
|
+ else:
|
|
|
+ return True
|
|
|
+
|
|
|
|
|
|
@app.route('/<string:name>', strict_slashes=False, methods=['GET'])
|
|
|
def redirect_to_link(name):
|
|
|
@@ -47,10 +63,14 @@ def redirect_to_link(name):
|
|
|
|
|
|
@app.post('/<string:link_name>/add', strict_slashes=False)
|
|
|
def add_link(link_name):
|
|
|
- db.create_all()
|
|
|
- link = Link(name=link_name, target=request.form['target'])
|
|
|
- db.session.add(link)
|
|
|
- db.session.commit()
|
|
|
+ if link_exists(link_name) is True:
|
|
|
+ print("Link exists")
|
|
|
+ else:
|
|
|
+ print("Creating link")
|
|
|
+ db.create_all()
|
|
|
+ link = Link(name=link_name, target=request.form['target'], hit_count=0, owner_name="unknown")
|
|
|
+ db.session.add(link)
|
|
|
+ db.session.commit()
|
|
|
return redirect("/", code=302)
|
|
|
|
|
|
|
|
|
@@ -62,7 +82,7 @@ def add_link_form(link_name):
|
|
|
def edit_link(link_name):
|
|
|
db.create_all()
|
|
|
link = Link(name=link_name, target=request.form['target'])
|
|
|
- db.session.update(link)
|
|
|
+ db.session.merge(link)
|
|
|
db.session.commit()
|
|
|
return redirect("/", code=302)
|
|
|
|
|
|
@@ -73,17 +93,17 @@ def edit_link_form(link_name):
|
|
|
return render_template('edit.html', link=link)
|
|
|
|
|
|
|
|
|
-@app.post('/<string:link_name>/delete', strict_slashes=False)
|
|
|
-def delete_link(link_name):
|
|
|
- link = Link.query.filter_by(name=link_name).first()
|
|
|
+@app.post('/<int:link_id>/delete', strict_slashes=False)
|
|
|
+def delete_link(link_id):
|
|
|
+ link = Link.query.filter_by(id=link_id).first()
|
|
|
db.session.delete(link)
|
|
|
db.session.commit()
|
|
|
return redirect(url_for('list_links'))
|
|
|
|
|
|
|
|
|
-@app.route('/<string:link_name>/delete', strict_slashes=False)
|
|
|
-def delete_link_form(link_name):
|
|
|
- link = Link.query.filter_by(name=link_name).first()
|
|
|
+@app.route('/<int:link_id>/delete', strict_slashes=False)
|
|
|
+def delete_link_form(link_id):
|
|
|
+ link = Link.query.filter_by(id=link_id).first()
|
|
|
return render_template('delete.html', link=link)
|
|
|
|
|
|
|