Working on API

added User and TimeStamp api´s
without_restx
alex 2023-07-29 23:48:12 +02:00
parent a7554f5e43
commit 12cfc8cfb7
2 changed files with 62 additions and 173 deletions

View File

@ -1,211 +1,91 @@
import os import os
from datetime import datetime
from flask import Flask, jsonify, request from flask import Flask, jsonify, request
from flasgger import Swagger
from flask_sqlalchemy import SQLAlchemy from flask_sqlalchemy import SQLAlchemy
from models import db, User, TimeStamp from models import db, User, TimeStamp
app = Flask(__name__) app = Flask(__name__)
api = Swagger(app)
app.config['SECRET_KEY'] = 'dksldkkwkdkllk' # todo: os.environ['TIMESTAMP_SECRET_KEY'] app.config['SECRET_KEY'] = 'dksldkkwkdkllk' # todo: os.environ['TIMESTAMP_SECRET_KEY']
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///project.db" app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///project.db"
@app.route("/") @app.route("/")
def index_handler(): def index_handler():
return "hallo" return "hallo"
# USER SECTION # 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(): @app.route("/user/<int:id>")
"""Endpoint returning success of operation def get_user_by_id(id):
--- user = db.session.execute(db.select(User)).scalar()
parameters: return user.name, 200
- name: user id to delete
in: path
type: string @app.route("/user/new", methods=['POST'])
required: true def create_new_user():
- name: user user = User(name=request.form.get('name'), surname=request.form.get('surname'),
in: path email=request.form.get('email'), mtan=request.form.get('mtan'))
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"],
)
db.session.add(user) db.session.add(user)
db.session.commit() db.session.commit()
return {'success': 'ok'}, 200
@app.route("/user/<int:user_id>", methods=['GET']) @app.route("/user/update/<int:id>", methods=['POST'])
def get_user_by_id(user_id): def update_user_by_id(id):
"""Endpoint returning user by id print(id)
--- user = db.session.execute(db.select(User).where(User.id == id)).scalars().one()
parameters: user.name = request.form.get('name')
- name: user_id user.email = request.form.get('email')
type: integer print(user.name)
in: form db.session.commit()
required: true return {'success': 'ok'}, 200
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/<int:user_id>", 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 #END USER SECTION
#TIMESTAMP SECTION #TIMESTAMP SECTION
@app.route("/timestamp/<int:user_id>", methods=['POST']) @app.route("/")
def create_timestamp(user_id): def get_last_timestamp_by_id(id):
"""Endpoint returning success of operation timestamp = db.session.execute(db.select(TimeStamp).where(TimeStamp.user_id == id).order).scalars().one()
--- return timestamp, 200
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("/timestamp/<int:user_id>", methods=['GET']) @app.route("/timestamp/new/<int:id>", methods=['POST'])
def get_timestamps_by_id(user_id): def put_timestamp_by_id(id):
"""Endpoint returning user by 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)
parameters: db.session.commit()
- name: user id return {"success": "ok"}, 200
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/<int:user_id>", methods=['DELETE']) @app.route("/timestamp/new/<int:mtan>", methods=['POST'])
def delete_timestamps_by_id(user_id): def put_timestamp_by_mtan(mtan):
"""Endpoint returning success of operation timestamp = TimeStamp()
---
parameters:
- name: user id to delete @app.route("/timestamp/all/<int:id>")
in: path def get_timestamps_by_id(id):
type: string timestamps = db.session.execute(db.select(TimeStamp).where(TimeStamp.user_id == id)).scalars()
enum: ['all', 'rgb', 'cmyk'] return timestamps.all(), 200
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 TIMESTAMP SECTION #END TIMESTAMP SECTION
#RFID SECTION
#END RFID SECTION
db.init_app(app) db.init_app(app)
with app.app_context(): with app.app_context():

View File

@ -7,11 +7,20 @@ db = SQLAlchemy()
class User(db.Model): class User(db.Model):
id = sa.Column(sa.Integer, primary_key=True) id = sa.Column(sa.Integer, primary_key=True)
name = sa.Column(sa.String) name = sa.Column(sa.String)
surname = sa.Column(sa.String)
email = sa.Column(sa.String) email = sa.Column(sa.String)
mtan = sa.Column(sa.String, unique=True)
class TimeStamp(db.Model): class TimeStamp(db.Model):
id = sa.Column(sa.Integer, primary_key=True) id = sa.Column(sa.Integer, primary_key=True)
user_id = sa.ForeignKey(User.id) user_id = sa.ForeignKey(User.id)
create = sa.Column(sa.TIMESTAMP) # create time create = sa.Column(sa.TIMESTAMP) # create time
timestamp = sa.Column(sa.TIMESTAMP) # insertet by user 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)