diff --git a/CMakeLists.txt b/CMakeLists.txt index cbf42b31ea5a20d340e3902e51ee14597b37f046..28f21487b7982736bf72b93bea72d7856de31846 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,4 +38,4 @@ endif() if((BUILD_MODE STREQUAL ${BUILD_SERVER}) OR (BUILD_MODE STREQUAL ${BUILD_ALL})) add_subdirectory(server) -endif() +endif() \ No newline at end of file diff --git a/Makefile b/Makefile index 9ebe5549b405122e7cdd69f5366e38ce21d59d66..6c3ea37ba411ff9cdec7fff300da73dec646e27e 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ clean: rebuild: clean generate build-project server-run: - ./build/server/cmd/ + ./build/server/cmd/Server test: ctest --verbose --test-dir build/ diff --git a/server/cmd/main.cpp b/server/cmd/main.cpp old mode 100644 new mode 100755 diff --git a/server/internal/httpServer/src/SolutionManager.cpp b/server/internal/httpServer/src/SolutionManager.cpp index 2a6b9c12521a68618f2e9c5ba4a0bd580ad03ba5..f8e1dcfb0c8719d2219ef5552ce1cc6e9cbf6128 100644 --- a/server/internal/httpServer/src/SolutionManager.cpp +++ b/server/internal/httpServer/src/SolutionManager.cpp @@ -39,7 +39,7 @@ http::message_generator SolutionManager::getAllSolutions(http::requestdeserialTaskData(req.body()); std::vector solutions; - // solutions = solutionService->getSolutionsByUserAndTaskId(user_id, task_id); + solutions = solutionService->getSolutionsByUserAndTaskId(user_id, task_id); http::response res{http::status::ok, req.version()}; res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::content_type, "text/plain"); diff --git a/server/internal/service/include/SolutionService.h b/server/internal/service/include/SolutionService.h index 70286966b82374bfc0fe8671b3ebf6bbcc8b4fa3..e78f4313fe0e2247534a77c34928fa923c720167 100644 --- a/server/internal/service/include/SolutionService.h +++ b/server/internal/service/include/SolutionService.h @@ -34,5 +34,6 @@ class SolutionService : public ISolutionService { Solution createSolution(size_t userId, size_t taskId, const std::string& filename, const std::string& filedata) override; void deleteSolutionById(size_t solId) override; + std::vector getSolutionsByUserAndTaskId(size_t user_id, size_t task_id); std::pair getMetrics(size_t solId) override; }; diff --git a/server/internal/service/src/SolutionService.cpp b/server/internal/service/src/SolutionService.cpp index 1d6d4e29e9b2a73074ecafebef056da3244d9a59..89e754a1b500757ed6ec41324b89d7415437d90c 100644 --- a/server/internal/service/src/SolutionService.cpp +++ b/server/internal/service/src/SolutionService.cpp @@ -54,7 +54,7 @@ std::pair SolutionService::getMaxTextResMetric(std::vector treshold) { @@ -68,6 +68,10 @@ std::pair SolutionService::getMaxTokenResMetric(std::vector& tokens, float treshold) { std::pair maxMatch = std::make_pair(0.0, 0ul); for (auto sol : solutions) { + std::cout << "Convert to string" << std::endl; + std::cout << Utils::convertIntArrayIntoString(tokens) << std::endl; + std::cout << sol.getTokens() << std::endl; + tokenMetric = std::make_unique(); tokenMetric->setData(tokens, Utils::convertStringIntoIntArray(sol.getTokens())); float tokenBasedRes = float(tokenMetric->getMetric()); @@ -78,7 +82,7 @@ std::pair SolutionService::getMaxTokenResMetric(std::vector treshold) { @@ -111,17 +115,24 @@ Solution SolutionService::createSolution(size_t userId, size_t taskId, const std std::string result = setResultVerdict(textBasedRes.first, tokenBasedRes.first, treshold); - size_t plagiatUserId = -1; + int plagiatSolId = 1; if (result == PLAGIAT_VERDICT) { if (textBasedRes.first > tokenBasedRes.first) { - plagiatUserId = textBasedRes.second; + plagiatSolId = textBasedRes.second; } else { - plagiatUserId = tokenBasedRes.second; + plagiatSolId = tokenBasedRes.second; } } + std::cout << "Plagiat" << std::endl; + std::cout << plagiatSolId << std::endl; + Solution sol = Solution(std::ctime(&now), userId, filedata, taskId, result, - Utils::convertIntArrayIntoString(tokensTypes), astTree, plagiatUserId); + Utils::convertIntArrayIntoString(tokensTypes), astTree, plagiatSolId); + + std::cout << "Dick" << std::endl; + std::cout << sol.getOrigSolution() << std::endl; + size_t id = solutionRepo->storeSolution(sol); sol.setId(id); return sol; @@ -148,3 +159,11 @@ std::pair SolutionService::getMetrics(size_t solId) { throw; } } + +std::vector SolutionService::getSolutionsByUserAndTaskId(size_t user_id, size_t task_id) { + try { + return solutionRepo->getSolutionsByTaskIdAndSenderId(user_id,task_id); + } catch (...) { + throw; + } +} diff --git a/server/internal/service/tests/SolutionServiceTest.cpp b/server/internal/service/tests/SolutionServiceTest.cpp index cd3ef23dfcd48a1d64626e5ee22e1c0293ef790f..bb0c8ae726c40ce6fc2c906587b6a4eb4bc21d1e 100644 --- a/server/internal/service/tests/SolutionServiceTest.cpp +++ b/server/internal/service/tests/SolutionServiceTest.cpp @@ -1,6 +1,10 @@ #include #include +#include +#include +#include + #include "SolutionService.h" class Exception : public std::exception { @@ -82,14 +86,24 @@ TEST_F(SolutionServiceTest, createSolution) { .WillRepeatedly(::testing::Return(1)); std::vector solutions; - solutions.push_back(Solution(0, "", 1, "int main(){return 0;}", 1, "", "45 132 85 86 89 59 1 128 90 -1", "", -1)); + solutions.push_back( + Solution(0, "", 1, "int main(){return 0;}", 1, "", + "9 45 132 85 86 89 78 45 132 128 45 132 101 1 128 132 127 132 103 103 132 128 84 85 132 115 1 86 89 " + "43 85 132 97 1 86 132 120 128 132 113 1 128 90 132 127 132 102 102 132 128 59 1 128 90 -1", + "", -1)); EXPECT_CALL(*solutionMockPtr, getSolutionsByTaskId(1)).Times(1).WillOnce(::testing::Return(solutions)); EXPECT_CALL(*taskMockPtr, getTaskById(1)).Times(1).WillOnce(::testing::Return(Task(1, "desription", 0.5f))); + std::string line; + // std::ifstream in("/project/server/internal/service/tests/task1.cpp"); // окрываем файл для чтения + // std::stringstream sst; + // sst << in.rdbuf(); - Solution sol = ss->createSolution(2, 1, "main.cpp", "int main(){return 0;}"); + Solution sol = ss->createSolution(2, 1, "main.cpp", "int main() { return 0; }"); EXPECT_EQ(sol.getId(), 1); - EXPECT_EQ(sol.getSource(), "int main(){return 0;}"); - EXPECT_EQ(sol.getTokens(), "45 132 85 86 89 59 1 128 90 -1 "); + // EXPECT_EQ(sol.getSource(), "int main(){return 0;}"); + EXPECT_EQ(sol.getTokens(), + "9 45 132 85 86 89 78 45 132 128 45 132 101 1 128 132 127 132 103 103 132 128 84 85 132 115 1 86 89 43 " + "85 132 97 1 86 132 120 128 132 113 1 128 90 132 127 132 102 102 132 128 59 1 128 90 -1 "); EXPECT_EQ(sol.getResult(), "Не, ну вы не палитесь. Плагиат."); } diff --git a/server/internal/service/tests/task1.cpp b/server/internal/service/tests/task1.cpp new file mode 100644 index 0000000000000000000000000000000000000000..729043e42999552dd0fb47d83d4fc6cd1ad40f0b --- /dev/null +++ b/server/internal/service/tests/task1.cpp @@ -0,0 +1,13 @@ +#include + +int main() { + unsigned int n; + int count = 0; + std::cin >> n; + while (n != 0) { + if (n & 1) count++; + n >>= 2; + } + std::cout << count; + return 0; +} diff --git a/server/internal/service/virtual/ISolutionService.h b/server/internal/service/virtual/ISolutionService.h index 84c289516f1c3f61a598ba4d6994b3bbc13e9920..a952116e423a0fa027241498a7cd15783f7ea9a2 100644 --- a/server/internal/service/virtual/ISolutionService.h +++ b/server/internal/service/virtual/ISolutionService.h @@ -11,6 +11,5 @@ class ISolutionService { virtual Solution createSolution(size_t userId, size_t taskId, const std::string& filename, const std::string& filedata) = 0; virtual void deleteSolutionById(size_t solId) = 0; - virtual std::pair getMetrics(size_t solId) = 0; }; diff --git a/server/pkg/antlr/cpp14/src/MyCppAntlr.cpp b/server/pkg/antlr/cpp14/src/MyCppAntlr.cpp index 7ac12a91e4e564a8d5c2433f34ef561a2f540f25..7bccf1d424b0515eb36d89595818bf14442af394 100644 --- a/server/pkg/antlr/cpp14/src/MyCppAntlr.cpp +++ b/server/pkg/antlr/cpp14/src/MyCppAntlr.cpp @@ -28,7 +28,12 @@ std::vector MyCppAntlr::getTokensTypes() { int i = 0; for (antlr4::Token* token : tokenStream_ptr->getTokens()) { - ans[i] = token->getType(); + if (token->getText() == "") { + std::cout << "\nHERE\n" << std::endl; + ans[i] = -1; + } else { + ans[i] = token->getType(); + } i++; } diff --git a/server/pkg/antlr/python3/src/PythonAntlr.cpp b/server/pkg/antlr/python3/src/PythonAntlr.cpp index a291540817b3720605fba19f273a7124a7d3b0d1..559ed3d2daf8e2d0c1f68aa2e2a72ebbc3b3ba52 100644 --- a/server/pkg/antlr/python3/src/PythonAntlr.cpp +++ b/server/pkg/antlr/python3/src/PythonAntlr.cpp @@ -28,7 +28,12 @@ std::vector PythonAntlr::getTokensTypes() { int i = 0; for (antlr4::Token* token : tokenStream_ptr->getTokens()) { - ans[i] = token->getType(); + if (token->getText() == "") { + std::cout << "\nHERE\n" << std::endl; + ans[i] = -1; + } else { + ans[i] = token->getType(); + } i++; }