TimeStamp/api_server/app.py

162 lines
5.4 KiB
Python

import os
from datetime import datetime
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
from models import db, User, TimeStamp, IDNumber
app = Flask(__name__)
app.config['SECRET_KEY'] = 'dksldkkwkdkllk' # todo: os.environ['TIMESTAMP_SECRET_KEY']
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///project.db"
@app.route("/")
def index_handler():
return "hallo"
# USER SECTION
@app.route("/user/all")
def get_all_users():
users = db.session.execute(db.select(User)).scalars()
all = users.all()
all_user = {}
for user in all:
usr = {'id': user.id, 'name': user.name, 'surname': user.surname, 'email': user.email, 'mtan': user.mtan, 'active': user.active}
all_user[user.id] = usr
return {'users': all_user}, 200
@app.route("/user/status/<int:id>")
def get_user_status_by_id(id):
user = db.session.execute(db.select(TimeStamp).where(TimeStamp.user_id == id).order_by(TimeStamp.create.desc())).scalar()
return {'id': id, 'on_work': user.on_work}
@app.route("/user/<int:id>")
def get_user_by_id(id):
user = db.session.execute(db.select(User).where(User.id == id)).scalar()
usr = {'id': user.id, 'name': user.name, 'surname': user.surname, 'email': user.email, 'mtan': user.mtan, 'active': user.active}
return {'user': usr}, 200
@app.route("/user/new", methods=['POST'])
def create_new_user():
user = User(name=request.json['name'], surname=request.json['surname'],
email=request.json['email'], mtan=request.json['mtan'], active=request.json['active'])
db.session.add(user)
db.session.commit()
return {'success': 'ok'}, 200
@app.route("/user/update/<int:id>", methods=['POST'])
def update_user_by_id(id):
user = db.session.execute(db.select(User).where(User.id == id)).scalars().one()
user.name = request.json['name']
user.surname = request.json['surname']
user.email = request.json['email']
user.mtan = request.json['mtan']
user.active = request.json['active']
db.session.commit()
return {'success': 'ok'}, 200
#END USER SECTION
#TIMESTAMP SECTION
@app.route("/timestamp/last/<int:id>")
def get_last_timestamp_by_id(id):
timestamps = db.session.execute(db.select(TimeStamp).where(TimeStamp.user_id == id).order_by(TimeStamp.id.desc()).limit(5)).scalars().all()
ss = []
for ts in timestamps:
ss.append({'id': ts.id, 'user_id': ts.user_id, 'created': ts.create, 'timestamp': ts.timestamp,
'on_work': ts.on_work})
return {'timestamps': ss}, 200
@app.route("/timestamp/new/mtan/<string:mtan>", methods=['POST'])
def put_timestamp_by_mtan(mtan):
id = db.session.execute(db.select(User).where(User.mtan == mtan)).scalars().one().id
timestamp = TimeStamp(user_id=id, create=datetime.now(),
timestamp=datetime.strptime(request.json.get('timestamp'), '%Y-%m-%d %H:%M:%S.%f'),
on_work=request.json.get('on_work'))
db.session.add(timestamp)
db.session.commit()
return {"success": "ok"}, 200
@app.route("/timestamp/new/idnumber/<string:idnum>", methods=['POST'])
def put_timestamp_by_idnumber(idnum):
id = db.session.execute(db.select(IDNumber).where(IDNumber.number == idnum)).scalars().one().id
timestamp = TimeStamp(user_id=id, create=datetime.now(),
timestamp=datetime.strptime(request.json.get('timestamp'), '%Y-%m-%d %H:%M:%S.%f'),
on_work=request.json.get('on_work'))
db.session.add(timestamp)
db.session.commit()
return {"success": "ok"}, 200
@app.route("/timestamp/new/id/<int:id>", methods=['POST'])
def put_timestamp_by_id(id):
timestamp = TimeStamp(user_id=id, create=datetime.now(), timestamp=datetime.strptime(request.form.get('timestamp'), '%Y/%m/%d %H:%M:%S'))
db.session.add(timestamp)
db.session.commit()
return {"success": "ok"}, 200
@app.route("/timestamps/all/<int:id>")
def get_timestamps_by_user_id(id):
timestamps = db.session.execute(db.select(TimeStamp).where(TimeStamp.user_id == id).order_by(TimeStamp.timestamp.desc())).scalars()
tss = []
for ts in timestamps:
tss.append( {'id': ts.id, 'user_id': ts.user_id, 'created': ts.create, 'timestamp': ts.timestamp, 'on_work': ts.on_work})
return {'timestamps': tss}, 200\
@app.route("/timestamps/all")
def get_all_timestamps():
timestamps = db.session.execute(db.select(TimeStamp)).scalars().all()
tss = []
for ts in timestamps:
tss.append( {'id': ts.id, 'user_id': ts.user_id, 'created': ts.create, 'timestamp': ts.timestamp, 'on_work': ts.on_work})
return {'timestamps': tss}, 200
@app.route("/time/today/<int:id>")
def get_time_today_by_user_id(id):
today = datetime.today().date()
timestamps = db.session.execute(db.select(TimeStamp).where(TimeStamp.user_id == id).where(TimeStamp.timestamp >= today)).scalars().all()
print(timestamps)
worktime = 0
pausetime = 0
for ts in timestamps:
pass
# END TIMESTAMP SECTION
# ID SECTION
@app.route("/user/idnumber")
def get_user_by_idnumber(idnumber):
id_num = db.session.execute(db.select(IDNumber).where(IDNumber.id == idnumber)).scalars().one()
id = id_num.user_id
user = db.session.execute(db.select(User).where(User.id == id))
# END ID SECTION
# VACATION SECTION
# END VACATION SECTION
db.init_app(app)
with app.app_context():
db.create_all()
if __name__ == '__main__':
app.run(debug=True)