Files
mih-project/backend/routers/fileStorage.py

134 lines
4.3 KiB
Python

from fastapi import APIRouter, HTTPException, File, UploadFile, Form
import requests
from pydantic import BaseModel
from minio import Minio
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.lib.utils import ImageReader
import io
from datetime import datetime
#SuperToken Auth from front end
from supertokens_python.recipe.session.framework.fastapi import verify_session
from supertokens_python.recipe.session import SessionContainer
from fastapi import Depends
router = APIRouter()
class medCertUploud(BaseModel):
fullName: str
docfname: str
startDate: str
endDate: str
returnDate: str
@router.post("/minio/upload/file/", tags=["Minio"])
async def upload_File_to_user(file: UploadFile = File(...), app_id: str= Form(...)):
extension = file.filename.split(".")
return {
"app_id": app_id,
"file_name": file.filename,
"file_extension": extension,
"file_size": file.size,
"content":file
}
# Get List of all files by patient
@router.post("/files/upload/file/", tags=["Minio"])
async def upload_File_to_user( file: UploadFile = File(...)):
extension = file.filename.split(".")
print(file.file)
print(file.filename)
print(extension)
print(file.size)
uploudFile(file.filename, extension[1], file.file, file.size)
return {"message": "Successfully Uploaded File"}
# Get List of all files by patient
@router.post("/files/generate/med-cert/", tags=["Minio"])
async def upload_File_to_user(requestItem: medCertUploud, session: SessionContainer = Depends(verify_session())):
uploudMedCert(requestItem.fullName,
requestItem.docfname,
requestItem.startDate,
requestItem.endDate,
requestItem.returnDate)
return {"message": "Successfully Generated File"}
def uploudFile(fileName, extension, content, size):
client = Minio("minio:9000",
access_key="user1",
secret_key="C@rtoon1995",
secure=False
)
found = client.bucket_exists("mih")
if not found:
client.make_bucket("mih")
else:
print("Bucket already exists")
client.put_object("mih",
fileName,
content,
length=size,
content_type=f"application/{extension}",)
#"minio""localhost:9000"
def uploudMedCert(fullName, docfname, startDate, endDate, returnDate):
client = Minio("minio:9000",
access_key="user1",
secret_key="C@rtoon1995",
secure=False
)
generateMedCertPDF(fullName, docfname, startDate, endDate, returnDate)
found = client.bucket_exists("mih")
if not found:
client.make_bucket("mih")
else:
print("Bucket already exists")
fileName = f"Med-Cert-{fullName}-{startDate}.pdf"
client.fput_object("mih", fileName, "temp.pdf")
def generateMedCertPDF(fullName, docfname, startDate, endDate, returnDate):
w,h = A4
today = datetime.today().strftime('%d-%m-%Y')
myCanvas = canvas.Canvas("temp.pdf", pagesize=A4)
myCanvas.setFont('Helvetica', 12)
myCanvas.drawString(w - 100,h - 50,today)
myCanvas.setFont('Helvetica-Bold', 20)
myCanvas.drawString(w-375, h - 100, "Medical Certificate")
myCanvas.setFont('Helvetica', 12)
line1 = "This is to certify that " + fullName.upper() + " was seen by " + docfname.upper() + " on " + startDate + "."
line2 = "He/She is unfit to attend work/school from " + startDate + " up to and including " + endDate + "."
line3 = "He/She will return on " + returnDate + "."
myCanvas.drawString(50, h-150,line1)
myCanvas.drawString(50, h-180,line2)
myCanvas.drawString(50, h-210,line3)
myCanvas.line(50,h-430,200,h-430)
myCanvas.drawString(50, h-450, docfname.upper())
qrText = fullName.upper() + " booked off from " + startDate + " to " + endDate + " by " + docfname.upper() + ".\nPowered by Mzansi Innovation Hub."
qrText = qrText.replace(" ","+")
url = f"https://api.qrserver.com/v1/create-qr-code/?data={qrText}&size=100x100"
response = requests.get(url)
image = ImageReader(io.BytesIO(response.content))
myCanvas.drawImage(image,50, h-700,100,100)
myCanvas.setFont('Helvetica-Bold', 15)
myCanvas.drawString(50,h-720,"Scan to verify")
myCanvas.save()
#Def get
#uploudFile("Yasien Meth","Dr D Oct","18-06-2024","20-06-2024","21-06-2024")