Compare commits

1 Commits

Author SHA1 Message Date
hugo
ee1c5a43d5 frontend 2023-10-03 21:26:52 +02:00
9 changed files with 138 additions and 68 deletions

View File

@@ -1,9 +1,3 @@
# freeriders
Web app for tracking current ticket numbers
# Architecture
- keep all ticket numbers and timestamps in SQL table "tickets"
- display last ticket number
- don't allow tickets that are out of probable ticket number range
Web app for tracking current ticket numbers

View File

@@ -4,7 +4,7 @@ Priority: optional
Architecture: all
Essential: no
Installed-Size: 2000
Depends: gunicorn, python3-flask-sqlalchemy
Depends: python3-flask, gunicorn
Homepage: https://gitea.dmz.rs/Decentrala/freeriders
Maintainer: Decentrala <dmz@dmz.rs>
Description: Web app that tracks bus transport ticket numbers

View File

@@ -1,16 +1,5 @@
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os # if you wanna have db credenitalas in os.environ
app = Flask(__name__)
# SQLAlchemy setup
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///freeriders.db'
#MySql setup
#app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://user:pass@localhost/dbname'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
from freeriders import routes

View File

@@ -1,6 +0,0 @@
from freeriders import db
class Tickets(db.Model):
id = db.Column(db.Integer, primary_key=True)
ticket = db.Column(db.Integer, nullable=False)
timestamp = db.Column(db.Integer, nullable=False)

View File

@@ -1,38 +1,10 @@
from flask import render_template, request, redirect
from freeriders import app, db
from freeriders.models import Ticket
import time
from freeriders import app
@app.route('/sms', methods=['GET'])
def sms():
@app.route('/', methods=['POST', 'GET'])
def changepassword():
if request.method == 'GET':
try:
lastticket = Ticket.query.order_by(Ticket.timestamp.desc()).first()
return render_template('sms.html', ticket = lastticket)
except:
return 'Error retriving last ticket'
else:
return 'HTTP request method not recogniezed'
@app.route('/submit', methods=['POST', 'GET'])
def submit():
if request.method == 'GET':
return render_template('submit.html')
return render_template('index.html')
elif request.method == 'POST':
timenow = int(time.time())
ticket_input = request.form['ticket']
if ticket_input.isdigit() and len(ticket_input) == 10:
ticket = Ticket(ticket = int(ticket_input), timestamp = timenow)
else:
return 'Ticket format is wrong. Only 10 digits allowed.'
try:
db.session.add(ticket)
db.session.commit()
return 'Ticket added'
except:
return 'Adding ticket failed'
else:
return 'HTTP request method not recogniezed'

View File

@@ -0,0 +1,70 @@
:root {
--border-radus: 1rem;
--background: #EEE;
--header-background: #DDD;
--header-height: 3rem;
--input-bar-height: 2rem;
}
body{
background: var(--background);
font-family: sans-serif;
margin: 0;
padding: 0;
}
main {
max-width: 400px;
display: flex;
flex-direction: column;
align-self: flex-start;
gap: 1rem;
margin: 0 auto;
padding: 1rem 0.5rem;
height: calc(100vh - 5rem);
overflow-y: scroll;
box-sizing: border-box;
}
header {
background-color: var(--header-background);
display: flex;
flex-direction: row;
padding: 1rem;
gap: 1rem;
font-weight: bold;
width: 100vw;
height: var(header-height);
box-sizing: border-box;
}
footer {
width: 100vw;
height: var(input-bar-height);
background-color: #FDD;
display: flex;
flex-direction: row;
padding: 0 1rem;
box-sizing: border-box;
}
.request {
background-color: #DFD;
border-radius: var(--border-radus);
padding: 0.5rem 1rem;
align-self: flex-end;
max-width: 80%;
}
.ticket {
background-color: #DDF;
max-width: 80%;
border-radius: var(--border-radus);
padding: 0.5rem 1rem;
align-self: flex-start;
}
.date {
align-self: center;
margin-top: 0.5rem;
}

View File

@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Karta</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header>
<div>x</div>
<div>9011</div>
<div class="rightAligner"></div>
</header>
<main>
<section class='request'>
A90
</section>
<section class='ticket'>
U Beogradu, za broj telefona ste kupili
VREMENSKU KARTU OD 90 MINUTA U ZONI A po
ceni od 50 din + osnovna cena poruke,
koja vazi do 03.10.2023, 09:42:54.
Karta broj: 0000343232.
Placanjem operateru izmirujete dugovanja
za ovu kartu prema JKP Naplata prevozne
usluge Beograd. Sacuvajte ovu poruku.
</section>
<section class='request'>
A90
</section>
<section class='ticket'>
U Beogradu, za broj telefona ste kupili
VREMENSKU KARTU OD 90 MINUTA U ZONI A po
ceni od 50 din + osnovna cena poruke,
koja vazi do 03.10.2023, 09:42:54.
Karta broj: 0000343232.
Placanjem operateru izmirujete dugovanja
za ovu kartu prema JKP Naplata prevozne
usluge Beograd. Sacuvajte ovu poruku.
</section>
<section class='date'>08:23</section>
<section class='request'>
A90
</section>
<section class='ticket'>
U Beogradu, za broj telefona ste kupili
VREMENSKU KARTU OD 90 MINUTA U ZONI A po
ceni od 50 din + osnovna cena poruke,
koja vazi do 03.10.2023, 09:42:54.
Karta broj: 0000343232.
Placanjem operateru izmirujete dugovanja
za ovu kartu prema JKP Naplata prevozne
usluge Beograd. Sacuvajte ovu poruku.
</section>
</main>
<footer>
<div class="textbox"></div>
<div>x</div>
</footer>
</body>
</html>

View File

@@ -1,10 +0,0 @@
#!/usr/bin/env python3
from freeriders import db
print('[i] Trying to create databse...')
try:
db.create_all()
print('[+] Success you can proceed with deployment!')
except:
print('[-] Creating db failed :/')

View File

@@ -1,2 +1 @@
flask
SQLAlchemy