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/") 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/") 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/", 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/") 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/", 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/", 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/", 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/") 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/") 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)