fixed bugs and tested major functions

This commit is contained in:
Mike Liao 2024-10-31 06:42:21 -07:00
parent ae7f1494be
commit c33700fa66
20 changed files with 44 additions and 90 deletions

View File

@ -2,7 +2,7 @@
from pydantic_settings import BaseSettings from pydantic_settings import BaseSettings
from .app_settings import app_settings from .app_settings import app_settings
class LogSettings(): class LogSettings(BaseSettings):
LOG_LEVEL: str = "DEBUG" LOG_LEVEL: str = "DEBUG"
LOG_BASE_PATH: str = app_settings.LOG_BASE_PATH LOG_BASE_PATH: str = app_settings.LOG_BASE_PATH
LOG_PATH: str = LOG_BASE_PATH + '/' + app_settings.BACKEND_LOG_FILE_NAME + '.log' LOG_PATH: str = LOG_BASE_PATH + '/' + app_settings.BACKEND_LOG_FILE_NAME + '.log'

View File

@ -10,7 +10,7 @@ export APPLICATION_ACTIVITY_LOG=$APP_NAME-activity
export MONGODB_NAME=freeleaps2 export MONGODB_NAME=freeleaps2
export MONGODB_PORT=27017 export MONGODB_PORT=27017
GIT_REPO_ROOT=/mnt/freeleaps/freeleaps-service-hub GIT_REPO_ROOT=/mnt/freeleaps/freeleaps-service-hub
CODEBASE_ROOT=/mnt/freeleaps/freeleaps-service-hub/app/central_storage CODEBASE_ROOT=/mnt/freeleaps/freeleaps-service-hub/apps/central_storage
SITE_DEPLOY_FOLDER=/mnt/freeleaps/freeleaps-service-hub/sites/central_storage/deploy SITE_DEPLOY_FOLDER=/mnt/freeleaps/freeleaps-service-hub/sites/central_storage/deploy
#!/bin/bash #!/bin/bash
export VENV_DIR=venv_t export VENV_DIR=venv_t
@ -21,4 +21,5 @@ export DOCKER_BACKEND_HOME=$DOCKER_APP_HOME/$APP_NAME
export DOCKER_BACKEND_LOG_HOME=$DOCKER_BACKEND_HOME/log export DOCKER_BACKEND_LOG_HOME=$DOCKER_BACKEND_HOME/log
export MONGODB_URI=mongodb://localhost:27017/ export MONGODB_URI=mongodb://localhost:27017/
export FREELEAPS_ENV=local export FREELEAPS_ENV=local
export LOG_BASE_PATH=${CODEBASE_ROOT}/log

View File

@ -2,7 +2,7 @@
from pydantic_settings import BaseSettings from pydantic_settings import BaseSettings
from .app_settings import app_settings from .app_settings import app_settings
class LogSettings(): class LogSettings(BaseSettings):
LOG_LEVEL: str = "DEBUG" LOG_LEVEL: str = "DEBUG"
LOG_BASE_PATH: str = app_settings.LOG_BASE_PATH LOG_BASE_PATH: str = app_settings.LOG_BASE_PATH
LOG_PATH: str = LOG_BASE_PATH + '/' + app_settings.BACKEND_LOG_FILE_NAME + '.log' LOG_PATH: str = LOG_BASE_PATH + '/' + app_settings.BACKEND_LOG_FILE_NAME + '.log'

View File

@ -1,6 +1,6 @@
from fastapi import APIRouter from fastapi import APIRouter
from .retrieve_document_info import router as ri_router from .retrieve_document_info import router as ri_router
from .upload_document import router as ud_router from .upload_file import router as ud_router
from .read_document_as_http_media import router as rd_router from .read_document_as_http_media import router as rd_router
api_router = APIRouter() api_router = APIRouter()

View File

@ -1,41 +0,0 @@
from fastapi import APIRouter, UploadFile, File, Form, HTTPException
from fastapi import APIRouter, Depends
from starlette.status import HTTP_401_UNAUTHORIZED
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
from backend.application.document_hub import DocumentHub
from pydantic import BaseModel
router = APIRouter()
class Item(BaseModel):
associated_with: str
name: str
blob: bytes
@router.post(
"/upload-document",
summary="upload a document with a given associated_with id, document name and document data.",
description="upload a document. If success, returning the document id",
)
async def upload_document(item: Item):
document_hub = DocumentHub()
# File processing
try:
document_id = await document_hub.upload_document(
item.associated_with, item.name, item.blob
)
if document_id:
result = {"document_id": str(document_id)}
return JSONResponse(content=jsonable_encoder(result))
else:
return JSONResponse(
status_code=500, content={"error": "Document upload failed"}
)
except Exception as e:
return JSONResponse(status_code=500, content={"error": "Internal server error"})

View File

@ -1,6 +1,5 @@
from fastapi import APIRouter, UploadFile, File, Form, HTTPException from fastapi import APIRouter, UploadFile, File, Form, HTTPException
from fastapi import APIRouter, Depends from fastapi import APIRouter, Depends
from infra.token.token_manager import TokenManager
from starlette.status import HTTP_401_UNAUTHORIZED from starlette.status import HTTP_401_UNAUTHORIZED
from fastapi.encoders import jsonable_encoder from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
@ -8,7 +7,6 @@ from backend.application.document_hub import DocumentHub
router = APIRouter() router = APIRouter()
token_manager = TokenManager()
@router.post( @router.post(

View File

@ -1,4 +1,4 @@
from backend.content.models import ContentDirectory,ContentFolderDoc from backend.content.models import ContentFolderDoc
content_models = [] content_models = []
content_models.extend([ContentDirectory, ContentFolderDoc]) content_models.extend([ContentFolderDoc])

View File

@ -20,12 +20,17 @@ class ContentService:
ContentFolderDoc.folder_name == folder_name, ContentFolderDoc.folder_name == folder_name,
ContentFolderDoc.region == region ContentFolderDoc.region == region
) )
if folder is None: if folder is None:
folder = await ContentSharePointManager().retrieve_directories_for_folder(folder_name=folder_name, region=region) await ContentSharePointManager().retrieve_directories_for_folder(folder_name=folder_name, region=region)
folder = await ContentFolderDoc.find_one(
ContentFolderDoc.folder_name == folder_name,
ContentFolderDoc.region == region
)
return folder.content_directories if folder else None return folder.content_directories if folder else None
async def retrieve_content_as_media_data(self, document_id: str) -> Optional[str]: async def retrieve_content_as_media_data(self, document_id: str) -> Optional[str]:
document_manager = DocumentManager() document_manager = DocumentManager()
await document_manager.load_document(document_id) return await document_manager.retrieve_document_as_http_media(document_id)
return await document_manager.read_document_file_as_http_media_data()

View File

@ -64,18 +64,10 @@ class ContentSharePointManager:
): ):
cover_file_content = self.sharepoint_client.get_file_content(sp_file['id']) cover_file_content = self.sharepoint_client.get_file_content(sp_file['id'])
cover_document_manager = DocumentManager() cover_document_manager = DocumentManager()
await cover_document_manager.new_document( file_name=sp_file['name'].lower()
file_name=sp_file['name'].lower(),
media_type=ContentMediaType.PNG,
data_format=ContentDataFormat.RAW,
created_by=self.__generate_created__by__(folder_name=folder_name) created_by=self.__generate_created__by__(folder_name=folder_name)
) content_directory.cover_document_id = await cover_document_manager.save_document_file(
content_directory.cover_document_id = ( created_by, file_name, cover_file_content
cover_document_manager.get_document_id()
)
await cover_document_manager.save_document_file(
cover_file_content
) )
elif ( elif (
@ -109,17 +101,10 @@ class ContentSharePointManager:
): ):
content_file_content = self.sharepoint_client.get_file_content(sp_file['id']) content_file_content = self.sharepoint_client.get_file_content(sp_file['id'])
content_document_manager = DocumentManager() content_document_manager = DocumentManager()
await content_document_manager.new_document( file_name=sp_file['name']
file_name=sp_file['name'],
media_type=ContentMediaType.PDF,
data_format=ContentDataFormat.RAW,
created_by=self.__generate_created__by__(folder_name=folder_name) created_by=self.__generate_created__by__(folder_name=folder_name)
) content_directory.content_document_id = await content_document_manager.save_document_file(
content_directory.content_document_id = ( created_by, file_name, content_file_content
content_document_manager.get_document_id()
)
await content_document_manager.save_document_file(
content_file_content
) )
folder.content_directories.append(content_directory) folder.content_directories.append(content_directory)

View File

@ -3,7 +3,7 @@ import httpx
class DocumentManager: class DocumentManager:
def __init__(self): def __init__(self):
self.storage_service_api_base = app_settings.CENTRAL_STORAGE_WEBAPI_URL_BASE self.storage_service_api_base = app_settings.CENTRAL_STORAGE_WEBAPI_URL_BASE.rstrip('/') + '/'
async def retrieve_document_info(self, document_id:str): async def retrieve_document_info(self, document_id:str):
api_url = self.storage_service_api_base + "retrieve_document_info/" + document_id api_url = self.storage_service_api_base + "retrieve_document_info/" + document_id
@ -18,13 +18,13 @@ class DocumentManager:
return response.json()['media'] return response.json()['media']
async def save_document_file(self,associated_with:str, name:str,blob:bytes)->str: async def save_document_file(self,associated_with:str, name:str,blob:bytes)->str:
api_url = self.storage_service_api_base + "upload_document/" api_url = self.storage_service_api_base + "upload-file"
files = {'file':(name,blob)}
async with httpx.AsyncClient() as client: async with httpx.AsyncClient() as client:
response = await client.post(api_url, response = await client.post(api_url,
data={ data={
'associated_with':associated_with, 'associated_with':associated_with
'name':name, },
'blob':blob files=files
}
) )
return response.json()['document_id'] return response.json()['document_id']

View File

@ -1,7 +1,7 @@
import os import os
from pydantic_settings import BaseSettings from pydantic_settings import BaseSettings
class AppSettings(): class AppSettings(BaseSettings):
NAME: str = "content" NAME: str = "content"
APP_NAME:str = NAME APP_NAME:str = NAME
@ -9,6 +9,9 @@ class AppSettings():
CENTRAL_STORAGE_WEBAPI_URL_BASE:str ="" CENTRAL_STORAGE_WEBAPI_URL_BASE:str =""
MONGODB_NAME:str =""
MONGODB_URI:str =""
LOG_BASE_PATH : str = "./log" LOG_BASE_PATH : str = "./log"
BACKEND_LOG_FILE_NAME: str = APP_NAME BACKEND_LOG_FILE_NAME: str = APP_NAME
APPLICATION_ACTIVITY_LOG: str = APP_NAME + "-application-activity" APPLICATION_ACTIVITY_LOG: str = APP_NAME + "-application-activity"

View File

@ -2,7 +2,7 @@
from pydantic_settings import BaseSettings from pydantic_settings import BaseSettings
from .app_settings import app_settings from .app_settings import app_settings
class LogSettings(): class LogSettings(BaseSettings):
LOG_LEVEL: str = "DEBUG" LOG_LEVEL: str = "DEBUG"
LOG_BASE_PATH: str = app_settings.LOG_BASE_PATH LOG_BASE_PATH: str = app_settings.LOG_BASE_PATH
LOG_PATH: str = LOG_BASE_PATH + '/' + app_settings.BACKEND_LOG_FILE_NAME + '.log' LOG_PATH: str = LOG_BASE_PATH + '/' + app_settings.BACKEND_LOG_FILE_NAME + '.log'

View File

@ -1,4 +1,4 @@
from webapi.config.site_settings import site_settings from common.config.app_settings import app_settings
from beanie import init_beanie from beanie import init_beanie
from motor.motor_asyncio import AsyncIOMotorClient from motor.motor_asyncio import AsyncIOMotorClient
from database.mongo.models import mongo_models from database.mongo.models import mongo_models
@ -8,7 +8,7 @@ class MongoDriver:
pass pass
async def initiate_database(self): async def initiate_database(self):
client = AsyncIOMotorClient(site_settings.MONGODB_URI, serverSelectionTimeoutMS=60000) client = AsyncIOMotorClient(app_settings.MONGODB_URI, serverSelectionTimeoutMS=60000)
await init_beanie( await init_beanie(
database=client[site_settings.MONGODB_NAME], document_models=mongo_models database=client[app_settings.MONGODB_NAME], document_models=mongo_models
) )

View File

@ -1,7 +1,7 @@
from webapi.config.site_settings import site_settings from webapi.config.site_settings import site_settings
from beanie import init_beanie from beanie import init_beanie
from motor.motor_asyncio import AsyncIOMotorClient from motor.motor_asyncio import AsyncIOMotorClient
from database.mongo.mongo_driver import MongoDriver
def register(app): def register(app):
app.debug = site_settings.DEBUG app.debug = site_settings.DEBUG
@ -14,4 +14,4 @@ def register(app):
async def initiate_database(): async def initiate_database():
#init your database here #init your database here
pass await MongoDriver().initiate_database()

View File

@ -2,7 +2,7 @@
from pydantic_settings import BaseSettings from pydantic_settings import BaseSettings
from .app_settings import app_settings from .app_settings import app_settings
class LogSettings(): class LogSettings(BaseSettings):
LOG_LEVEL: str = "DEBUG" LOG_LEVEL: str = "DEBUG"
LOG_BASE_PATH: str = app_settings.LOG_BASE_PATH LOG_BASE_PATH: str = app_settings.LOG_BASE_PATH
LOG_PATH: str = LOG_BASE_PATH + '/' + app_settings.BACKEND_LOG_FILE_NAME + '.log' LOG_PATH: str = LOG_BASE_PATH + '/' + app_settings.BACKEND_LOG_FILE_NAME + '.log'

View File

@ -1,2 +1,3 @@
export MONGODB_URI='mongodb+srv://jetli:8IHKx6dZK8BfugGp@freeleaps2.hanbj.mongodb.net/' export MONGODB_URI='mongodb+srv://jetli:8IHKx6dZK8BfugGp@freeleaps2.hanbj.mongodb.net/'
export CENTRAL_STORAGE_WEBAPI_URL_BASE="http://if030-w2-if-vm.mathmast.com:8005/api"
export FREELEAPS_ENV=alpha export FREELEAPS_ENV=alpha

View File

@ -4,7 +4,6 @@ export MONGODB_NAME=freeleaps2
export MONGODB_PORT=27017 export MONGODB_PORT=27017
export CONTAINER_APP_ROOT=/app export CONTAINER_APP_ROOT=/app
export FREELEAPS_WWW_AS_AZURE_CLIENT_SECRET=3gK8Q~PJbyWmiNqaGgho2ZqCY~OXzABSyN8wWasK export FREELEAPS_WWW_AS_AZURE_CLIENT_SECRET=3gK8Q~PJbyWmiNqaGgho2ZqCY~OXzABSyN8wWasK
export CENTRAL_STORAGE_WEBAPI_URL_BASE="http://if010-w2-if-vm.mathmast.com:8005/api"
export LOG_BASE_PATH=$CONTAINER_APP_ROOT/log/$APP_NAME export LOG_BASE_PATH=$CONTAINER_APP_ROOT/log/$APP_NAME
export BACKEND_LOG_FILE_NAME=$APP_NAME export BACKEND_LOG_FILE_NAME=$APP_NAME
export APPLICATION_ACTIVITY_LOG=$APP_NAME-activity export APPLICATION_ACTIVITY_LOG=$APP_NAME-activity

View File

@ -1,2 +1,3 @@
export MONGODB_URI=mongodb://freeleaps2-mongodb:27017/ export MONGODB_URI=mongodb://freeleaps2-mongodb:27017/
export CENTRAL_STORAGE_WEBAPI_URL_BASE="http://central_storage:8005/api"
export FREELEAPS_ENV=dev export FREELEAPS_ENV=dev

View File

@ -1,4 +1,5 @@
export MONGODB_URI=mongodb://localhost:27017/ export MONGODB_URI=mongodb://localhost:27017/
export CENTRAL_STORAGE_WEBAPI_URL_BASE="http://localhost:8005/api"
export FREELEAPS_ENV=local export FREELEAPS_ENV=local
export LOG_BASE_PATH=${CODEBASE_ROOT}/log export LOG_BASE_PATH=${CODEBASE_ROOT}/log

View File

@ -1,2 +1,3 @@
export MONGODB_URI='mongodb+srv://freeadmin:0eMV0bt8oyaknA0m@freeleaps2.zmsmpos.mongodb.net/?retryWrites=true&w=majority' export MONGODB_URI='mongodb+srv://freeadmin:0eMV0bt8oyaknA0m@freeleaps2.zmsmpos.mongodb.net/?retryWrites=true&w=majority'
export CENTRAL_STORAGE_WEBAPI_URL_BASE="http://if010-w2-if-vm.mathmast.com:8005/api"
export FREELEAPS_ENV=prod export FREELEAPS_ENV=prod