From 12cfc8cfb74a1d3d4dc4e6fc63685f609ff639c2 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 29 Jul 2023 23:48:12 +0200 Subject: [PATCH] =?UTF-8?q?Working=20on=20API=20added=20User=20and=20TimeS?= =?UTF-8?q?tamp=20api=C2=B4s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api_server/app.py | 222 ++++++++++--------------------------------- api_server/models.py | 13 ++- 2 files changed, 62 insertions(+), 173 deletions(-) diff --git a/api_server/app.py b/api_server/app.py index 5e2ea2b..01ae825 100644 --- a/api_server/app.py +++ b/api_server/app.py @@ -1,211 +1,91 @@ import os +from datetime import datetime from flask import Flask, jsonify, request -from flasgger import Swagger from flask_sqlalchemy import SQLAlchemy from models import db, User, TimeStamp app = Flask(__name__) -api = Swagger(app) 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() + return jsonify(all), 200 -@app.route("/user/", methods=['POST']) -def create_user(): - """Endpoint returning success of operation - --- - parameters: - - name: user id to delete - in: path - type: string - required: true - - name: user - in: path - type: string - required: true - definitions: - Palette: - type: object - properties: - palette_name: - type: array - items: - $ref: '#/definitions/Color' - Color: - type: string - responses: - 200: - description: A list of colors (may be filtered by palette) - schema: - $ref: '#/definitions/Palette' - examples: - rgb: ['red', 'green', 'blue'] - """ - user = User( - name=request.form["username"], - email=request.form["email"], - ) + +@app.route("/user/") +def get_user_by_id(id): + user = db.session.execute(db.select(User)).scalar() + return user.name, 200 + + +@app.route("/user/new", methods=['POST']) +def create_new_user(): + user = User(name=request.form.get('name'), surname=request.form.get('surname'), + email=request.form.get('email'), mtan=request.form.get('mtan')) db.session.add(user) db.session.commit() + return {'success': 'ok'}, 200 -@app.route("/user/", methods=['GET']) -def get_user_by_id(user_id): - """Endpoint returning user by id - --- - parameters: - - name: user_id - type: integer - in: form - required: true - - responses: - 200: - description: A list of properties of a user by given id - """ - user = db.get_or_404(User, user_id) - return jsonify(str(user)) +@app.route("/user/update/", methods=['POST']) +def update_user_by_id(id): + print(id) + user = db.session.execute(db.select(User).where(User.id == id)).scalars().one() + user.name = request.form.get('name') + user.email = request.form.get('email') + print(user.name) + db.session.commit() + return {'success': 'ok'}, 200 -@app.route("/user/", methods=['DELETE']) -def delete_user_by_id(user_id): - """Endpoint returning success of operation - --- - parameters: - - name: user id to delete - in: path - type: string - enum: ['all', 'rgb', 'cmyk'] - required: true - default: all - definitions: - Palette: - type: object - properties: - palette_name: - type: array - items: - $ref: '#/definitions/Color' - Color: - type: string - responses: - 200: - description: A list of colors (may be filtered by palette) - schema: - $ref: '#/definitions/Palette' - examples: - rgb: ['red', 'green', 'blue'] - """ - return "Delete" #END USER SECTION + #TIMESTAMP SECTION -@app.route("/timestamp/", methods=['POST']) -def create_timestamp(user_id): - """Endpoint returning success of operation - --- - parameters: - - name: user id to delete - in: path - type: string - enum: ['all', 'rgb', 'cmyk'] - required: true - default: all - definitions: - Palette: - type: object - properties: - palette_name: - type: array - items: - $ref: '#/definitions/Color' - Color: - type: string - responses: - 200: - description: A list of colors (may be filtered by palette) - schema: - $ref: '#/definitions/Palette' - examples: - rgb: ['red', 'green', 'blue'] - """ - pass +@app.route("/") +def get_last_timestamp_by_id(id): + timestamp = db.session.execute(db.select(TimeStamp).where(TimeStamp.user_id == id).order).scalars().one() + return timestamp, 200 -@app.route("/timestamp/", methods=['GET']) -def get_timestamps_by_id(user_id): - """Endpoint returning user by id - --- - parameters: - - name: user id - in: path - type: integer - required: true - definitions: - Palette: - type: object - properties: - palette_name: - type: array - items: - $ref: '#/definitions/Color' - Color: - type: string - responses: - 200: - description: A list of properties of a user by given id - schema: - $ref: '#/definitions/Palette' - examples: - rgb: ['red', 'green', 'blue'] - """ - return str(user_id) +@app.route("/timestamp/new/", 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("/timestamp/", methods=['DELETE']) -def delete_timestamps_by_id(user_id): - """Endpoint returning success of operation - --- - parameters: - - name: user id to delete - in: path - type: string - enum: ['all', 'rgb', 'cmyk'] - required: true - default: all - definitions: - Palette: - type: object - properties: - palette_name: - type: array - items: - $ref: '#/definitions/Color' - Color: - type: string - responses: - 200: - description: A list of colors (may be filtered by palette) - schema: - $ref: '#/definitions/Palette' - examples: - rgb: ['red', 'green', 'blue'] - """ - return "Delete" +@app.route("/timestamp/new/", methods=['POST']) +def put_timestamp_by_mtan(mtan): + timestamp = TimeStamp() + + +@app.route("/timestamp/all/") +def get_timestamps_by_id(id): + timestamps = db.session.execute(db.select(TimeStamp).where(TimeStamp.user_id == id)).scalars() + return timestamps.all(), 200 #END TIMESTAMP SECTION +#RFID SECTION +#END RFID SECTION + db.init_app(app) with app.app_context(): diff --git a/api_server/models.py b/api_server/models.py index d410eeb..5b6f29d 100644 --- a/api_server/models.py +++ b/api_server/models.py @@ -7,11 +7,20 @@ db = SQLAlchemy() class User(db.Model): id = sa.Column(sa.Integer, primary_key=True) name = sa.Column(sa.String) + surname = sa.Column(sa.String) email = sa.Column(sa.String) + mtan = sa.Column(sa.String, unique=True) class TimeStamp(db.Model): id = sa.Column(sa.Integer, primary_key=True) user_id = sa.ForeignKey(User.id) - create = sa.Column(sa.TIMESTAMP) # create time - timestamp = sa.Column(sa.TIMESTAMP) # insertet by user + create = sa.Column(sa.TIMESTAMP) # create time + timestamp = sa.Column(sa.TIMESTAMP) # inserted by user + on_work = sa.Column(sa.Boolean) # working time? + + +class RFIDNumber(db.Model): + id = sa.Column(sa.Integer, primary_key=True) + user_id = sa.ForeignKey(User.id) + number = sa.Column(sa.String)