mirror of
https://github.com/Project-Redacted/Highscores-Server.git
synced 2025-05-28 22:13:14 +00:00
First Commit
This commit is contained in:
parent
7efaf276e4
commit
fda7ff28dd
19 changed files with 735 additions and 0 deletions
12
server/__init__.py
Normal file
12
server/__init__.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
from flask import Flask
|
||||
from server.extensions import db, migrate, cache
|
||||
from server.views import blueprint
|
||||
|
||||
app = Flask(__name__)
|
||||
app.config.from_pyfile('config.py')
|
||||
|
||||
db.init_app(app)
|
||||
migrate.init_app(app, db)
|
||||
cache.init_app(app)
|
||||
|
||||
app.register_blueprint(blueprint)
|
4
server/config.py
Normal file
4
server/config.py
Normal file
|
@ -0,0 +1,4 @@
|
|||
SECRET_KEY = 'dev'
|
||||
|
||||
SQLALCHEMY_DATABASE_URI = 'sqlite:///db.sqlite'
|
||||
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
7
server/extensions.py
Normal file
7
server/extensions.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
from flask_sqlalchemy import SQLAlchemy
|
||||
from flask_migrate import Migrate
|
||||
from flask_caching import Cache
|
||||
|
||||
db = SQLAlchemy()
|
||||
migrate = Migrate()
|
||||
cache = Cache()
|
40
server/models.py
Normal file
40
server/models.py
Normal file
|
@ -0,0 +1,40 @@
|
|||
"""
|
||||
Database models for the server
|
||||
"""
|
||||
from server.extensions import db
|
||||
|
||||
|
||||
class Scores(db.Model):
|
||||
"""
|
||||
Post table
|
||||
"""
|
||||
__tablename__ = "scores"
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
|
||||
score = db.Column(db.Integer, nullable=False)
|
||||
difficulty = db.Column(db.String, nullable=False)
|
||||
achievements = db.Column(db.String, nullable=False)
|
||||
|
||||
scored_at = db.Column(
|
||||
db.DateTime,
|
||||
nullable=False,
|
||||
server_default=db.func.now(),
|
||||
)
|
||||
|
||||
|
||||
class Users(db.Model):
|
||||
"""
|
||||
User table
|
||||
"""
|
||||
__tablename__ = "users"
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
steam_uuid = db.Column(db.String, unique=True, nullable=False)
|
||||
steam_name = db.Column(db.String, nullable=False)
|
||||
|
||||
creation_data = db.Column(
|
||||
db.DateTime,
|
||||
nullable=False,
|
||||
server_default=db.func.now(),
|
||||
)
|
64
server/views.py
Normal file
64
server/views.py
Normal file
|
@ -0,0 +1,64 @@
|
|||
from flask import Blueprint, jsonify, render_template_string
|
||||
from flask_wtf import FlaskForm
|
||||
from wtforms import StringField, IntegerField
|
||||
from wtforms.validators import DataRequired
|
||||
|
||||
from server.models import Scores
|
||||
from server.extensions import db, cache
|
||||
|
||||
blueprint = Blueprint('views', __name__)
|
||||
|
||||
|
||||
class ScoreForm(FlaskForm):
|
||||
score = IntegerField('Score', validators=[DataRequired()])
|
||||
difficulty = StringField('Difficulty', validators=[DataRequired()])
|
||||
achievements = StringField('Achievements', validators=[DataRequired()])
|
||||
|
||||
|
||||
@blueprint.route('/', methods=['GET'])
|
||||
@cache.cached(timeout=60)
|
||||
def index():
|
||||
top_scores = Scores.query.order_by(Scores.score.desc()).limit(10).all()
|
||||
return render_template_string('''
|
||||
<h1>Top Scores</h1>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Score</th>
|
||||
<th>Difficulty</th>
|
||||
<th>Achievements</th>
|
||||
</tr>
|
||||
{% for score in top_scores %}
|
||||
<tr>
|
||||
<td>{{ score.score }}</td>
|
||||
<td>{{ score.difficulty }}</td>
|
||||
<td>{{ score.achievements }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
<a href="/post">Post a score</a>
|
||||
''', top_scores=top_scores)
|
||||
|
||||
|
||||
@blueprint.route('/post', methods=['GET', 'POST'])
|
||||
def post():
|
||||
form = ScoreForm()
|
||||
|
||||
if form.validate_on_submit():
|
||||
score = Scores(
|
||||
score=form.score.data,
|
||||
difficulty=form.difficulty.data,
|
||||
achievements=form.achievements.data,
|
||||
)
|
||||
db.session.add(score)
|
||||
db.session.commit()
|
||||
return jsonify({'message': 'Success!'})
|
||||
|
||||
return render_template_string('''
|
||||
<form method="POST" action="/post">
|
||||
{{ form.csrf_token }}
|
||||
{{ form.score.label }} {{ form.score(size=20) }}
|
||||
{{ form.difficulty.label }} {{ form.difficulty(size=20) }}
|
||||
{{ form.achievements.label }} {{ form.achievements(size=20) }}
|
||||
<input type="submit" value="Go">
|
||||
</form>
|
||||
''', form=form)
|
Loading…
Add table
Add a link
Reference in a new issue