Compare commits
1 Commits
a3b7ff3f9f
...
frontend
Author | SHA1 | Date | |
---|---|---|---|
|
ee1c5a43d5 |
@@ -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
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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)
|
@@ -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'
|
||||
|
70
freeriders/static/style.css
Normal file
70
freeriders/static/style.css
Normal 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;
|
||||
}
|
62
freeriders/templates/sms.html
Normal file
62
freeriders/templates/sms.html
Normal 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>
|
10
init_db.py
10
init_db.py
@@ -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 :/')
|
||||
|
@@ -1,2 +1 @@
|
||||
flask
|
||||
SQLAlchemy
|
||||
|
Reference in New Issue
Block a user