You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
2.2 KiB
C

1 month ago
#pragma once
#include <string>
#include <vector>
#include <optional>
struct ActionRecord
{
int64_t id;
std::string uuid;
std::string classType;
std::string type; // "redo" "undo" <20><>ʾ<EFBFBD><CABE> redo <20><><EFBFBD><EFBFBD> undo <20>б<EFBFBD><D0B1><EFBFBD>
std::vector<char> data;
std::string timestamp;
std::string createAt;
};
struct FileData
{
FileData()
{
}
FileData(int64_t id, std::string filepath, std::vector<char> data, std::string createAt)
{
this->id = id;
this->filepath = filepath;
this->data = data;
this->createAt = createAt;
}
int64_t id;
std::string filepath;
std::vector<char> data;
std::string createAt;
};
// ԭʼͼ<CABC><CDBC><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
class IActionStorage
{
public:
virtual ~IActionStorage() = default;
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \param filePath <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
* \param fileData ԭʼ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>¼
* \return
*/
virtual bool InsertFileData(const std::string& filePath, FileData& fileData) = 0;
/**
* <EFBFBD><EFBFBD>ȡԭʼ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \param filePath <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
* \return ԭʼ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>¼
*/
virtual std::optional<FileData> RetrieveFileData(const std::string& filePath) = 0;
/**
* <EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \param filePath <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
* \return
*/
virtual bool ExistsFileData(const std::string& filePath) = 0;
/**
* ɾ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD> Action <EFBFBD><EFBFBD>¼
*
* \param filePath <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
virtual void RemoveFileData(const std::string & filePath) = 0;
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
*
* \param filePath <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
* \param record <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
* \return
*/
virtual bool AddActionRecord(const std::string& filePath, const ActionRecord& record) = 0;
/**
* <EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
*
* \param filePath <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
* \param uuid <EFBFBD><EFBFBD><EFBFBD><EFBFBD> uuid
* \return
*/
virtual bool ExistsActionRecord(const std::string& filePath, const std::string& uuid) = 0;
/**
* ͳ<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> actioin <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \param filePath <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
* \return
*/
virtual int ActionRecordCount(const std::string& filePath) = 0;
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
*
* \param filePath <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
* \return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еIJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
*/
virtual std::vector<ActionRecord> RetrieveAllActionRecords(const std::string& filePath) = 0;
virtual void ClearBackup(const std::string& path) = 0;
};