123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104openLwt.SyntaxmoduleMake(Repo:Sihl.Storage.Sig.REPO):Sihl.Storage.Sig.SERVICE=structletfind_opt~id=Repo.get_file~idletfind~id=let*file=Repo.get_file~idinmatchfilewith|None->raise(Sihl.Storage.Exception("File not found with id "^id))|Somefile->Lwt.returnfile;;letdelete~id=let*file=find~idinletblob_id=Sihl.Storage.StoredFile.blobfileinlet*()=Repo.delete_file~id:file.file.idinRepo.delete_blob~id:blob_id;;letupload_base64~file~base64=letblob_id=Sihl.Database.Id.random()|>Sihl.Database.Id.to_stringinlet*blob=matchBase64.decodebase64with|Error(`Msgmsg)->Logs.err(funm->m"STORAGE: Could not upload base64 content of file %a"Sihl.Storage.File.ppfile);raise(Sihl.Storage.Exceptionmsg)|Okblob->Lwt.returnblobinlet*()=Repo.insert_blob~id:blob_id~blobinletstored_file=Sihl.Storage.StoredFile.make~file~blob:blob_idinlet*()=Repo.insert_file~file:stored_fileinLwt.returnstored_file;;letupdate_base64~file~base64=letblob_id=Sihl.Storage.StoredFile.blobfileinlet*blob=matchBase64.decodebase64with|Error(`Msgmsg)->Logs.err(funm->m"STORAGE: Could not upload base64 content of file %a"Sihl.Storage.StoredFile.ppfile);raise(Sihl.Storage.Exceptionmsg)|Okblob->Lwt.returnblobinlet*()=Repo.update_blob~id:blob_id~blobinlet*()=Repo.update_file~fileinLwt.returnfile;;letdownload_data_base64_opt~file=letblob_id=Sihl.Storage.StoredFile.blobfileinlet*blob=Repo.get_blob~id:blob_idinmatchOption.mapBase64.encodeblobwith|Some(Error(`Msgmsg))->Logs.err(funm->m"STORAGE: Could not get base64 content of file %a"Sihl.Storage.StoredFile.ppfile);raise(Sihl.Storage.Exceptionmsg)|Some(Okblob)->Lwt.return@@Someblob|None->Lwt.returnNone;;letdownload_data_base64~file=letblob_id=Sihl.Storage.StoredFile.blobfileinlet*blob=Repo.get_blob~id:blob_idinmatchOption.mapBase64.encodeblobwith|Some(Error(`Msgmsg))->Logs.err(funm->m"STORAGE: Could not get base64 content of file %a"Sihl.Storage.StoredFile.ppfile);raise(Sihl.Storage.Exceptionmsg)|Some(Okblob)->Lwt.returnblob|None->raise(Sihl.Storage.Exception(Format.asprintf"File data not found for file %a"Sihl.Storage.StoredFile.ppfile));;letstart()=Lwt.return()letstop()=Lwt.return()letlifecycle=Sihl.Core.Container.Lifecycle.create"storage"~start~stopletregister()=Repo.register_migration();Repo.register_cleaner();Sihl.Core.Container.Service.createlifecycle;;endmoduleRepo=Repo