This commit is contained in:
Андрей Дувакин 2025-01-05 11:14:14 +05:00
parent 90000926e3
commit ea3bdafaba
2 changed files with 97 additions and 1 deletions

View File

@ -56,6 +56,8 @@ class DocumentCategory(base):
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(VARCHAR(100))
documents = relationship('Document', back_populates='category')
class Document(base):
__tablename__ = 'documents'
@ -67,6 +69,10 @@ class Document(base):
category_id = Column(Integer, ForeignKey('document_categories.id'))
category = relationship('DocumentCategory', back_populates='documents')
comments = relationship('Comment', back_populates='document')
class Comment(base):
__tablename__ = 'comments'
@ -79,6 +85,8 @@ class Comment(base):
user_id = Column(Integer, ForeignKey('users.id'))
document_id = Column(Integer, ForeignKey('documents.id'))
document = relationship('Document', back_populates='comments')
class MaterialType(base):
__tablename__ = 'material_types'

View File

@ -1,8 +1,96 @@
from data.connect import init_db, connect
import datetime
import random
import jwt
from API.data.connect import Document, DocumentCategory, Comment
from data.connect import init_db, connect, User
from flask import Flask, Response, request, jsonify
app = Flask(__name__)
app.config['SECRET_KEY'] = 'jyeraghueykgaeyugheaughkawefy'
@app.route('/api/v1/SignIn', methods=['POST'])
def login():
try:
data = request.json
with connect() as session:
user = session.query(User).filter(User.email == data['name'], User.password == data['password']).first()
if user is None:
return Response(status=403)
token = jwt.encode({
'sub': user.email,
'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=180)
}, app.config['SECRET_KEY'], algorithm='HS256')
return jsonify({'token': token})
except Exception:
return Response(status=400)
@app.route('/api/v1/Documents', methods=['GET'])
def get_documents():
try:
token = request.headers.get('Authorization')
if not token:
return Response(403)
try:
data = jwt.decode(token, app.config['SECRET_KEY'], algorithms=['HS256'])
except jwt.ExpiredSignatureError:
return jsonify({'message': 'Token has expired!'}), 401
except jwt.InvalidTokenError:
return jsonify({'message': 'Invalid token!'}), 401
resp = []
with connect() as session:
documents = session.query(Document).all()
for document in documents:
# category = session.query(DocumentCategory).filter(DocumentCategory.id == document.category_id).first()
# comments = session.query(Comment).filter(Comment.document_id == document.id).all()
category = document.category
comments = document.comments
resp.append({
'id': document.id,
'title': document.title,
'date_created': document.date_created,
'date_updated': document.date_updated,
'category': document.category.title,
'has_comments': True if len(document.comments) else False
})
return resp
except Exception:
return Response(status=400)
@app.route('/protected', methods=['GET'])
def protected():
token = request.headers.get('Authorization')
if not token:
return jsonify({'message': 'Token is missing!'}), 403
try:
data = jwt.decode(token, app.config['SECRET_KEY'], algorithms=['HS256'])
return jsonify({'message': f'Welcome {data["sub"]}!'})
except jwt.ExpiredSignatureError:
return jsonify({'message': 'Token has expired!'}), 401
except jwt.InvalidTokenError:
return jsonify({'message': 'Invalid token!'}), 401
def main():
init_db()
app.run()
if __name__ == '__main__':