-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
105 lines (91 loc) · 3.79 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
from fastapi import FastAPI, Depends, Request, Form, status
import uvicorn
from starlette.responses import RedirectResponse
from starlette.templating import Jinja2Templates
from sqlalchemy.orm import Session
import models
from database import SessionLocal, engine
models.Base.metadata.create_all(bind=engine)
templates = Jinja2Templates(directory="templates")
app = FastAPI()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.get("/")
def home(request: Request, db: Session = Depends(get_db)):
queue = db.query(models.Operator).all()
return templates.TemplateResponse("base.html",
{"request": request, "rotation": queue})
@app.post("/add")
def add(request: Request, name: str = Form(...), db: Session = Depends(get_db)):
new_operator = models.Operator(name=name, next=False)
db.add(new_operator)
db.commit()
url = app.url_path_for("home")
return RedirectResponse(url=url, status_code=status.HTTP_303_SEE_OTHER)
@app.get("/update/{operator_id}")
def update(request: Request, operator_id: int, db: Session = Depends(get_db)):
operator = db.query(models.Operator).filter(models.Operator.id == operator_id).first()
operator.in_queue = not operator.in_queue
newID = checkQueue(operator_id, db)
newOperator = db.query(models.Operator).filter(models.Operator.id == newID).first()
if (operator.next):
newOperator.next = True
if (not operator.in_queue):
operator.next = False
db.commit()
url = app.url_path_for("home")
return RedirectResponse(url=url, status_code=status.HTTP_302_FOUND)
@app.get("/next/{operator_id}")
def update(request: Request, operator_id: int, db: Session = Depends(get_db)):
operator = db.query(models.Operator).filter(models.Operator.id == operator_id).first()
for row in db.query(models.Operator).filter(models.Operator.id != operator_id):
row.next = False
operator.next = True
db.commit()
url = app.url_path_for("home")
return RedirectResponse(url=url, status_code=status.HTTP_302_FOUND)
@app.get("/delete/{operator_id}")
def delete(request: Request, operator_id: int, db: Session = Depends(get_db)):
operator = db.query(models.Operator).filter(models.Operator.id == operator_id).first()
db.delete(operator)
db.commit()
url = app.url_path_for("home")
return RedirectResponse(url=url, status_code=status.HTTP_302_FOUND)
@app.get("/assigned/{operator_id}")
def assigned(request: Request, operator_id: int, db: Session = Depends(get_db)):
operator = db.query(models.Operator).filter(models.Operator.id == operator_id).first()
new_ticket = models.Ticket(assignee=operator.name)
db.add(new_ticket)
operator.numTickets = operator.numTickets + 1
operator.next = False
newID = checkQueue(operator_id, db)
if(newID is None):
newID = 1
newOperator = db.query(models.Operator).filter(models.Operator.id == newID).first()
newOperator.next = True
db.commit()
url = app.url_path_for("home")
return RedirectResponse(url=url, status_code=status.HTTP_302_FOUND)
def getNext(operator_id: int, db: Session):
results = db.query(models.Operator).all()
first_operator = results[0]
last_operator = results[-1]
operator = db.query(models.Operator).filter(models.Operator.id == operator_id).first()
if(operator == last_operator):
return first_operator.id
else:
newID = operator_id + 1
return newID
def checkQueue(operator_id: int, db: Session):
newID = getNext(operator_id, db)
newOperator = db.query(models.Operator).filter(models.Operator.id == newID).first()
if (newOperator.in_queue == False):
return checkQueue(newID, db)
else:
return newID
if __name__ == '__main__':
uvicorn.run(app, port=8000, host="127.0.0.1")