feat(domain): add entities and json helpers for sqlite schema
这个提交包含在:
@@ -0,0 +1,74 @@
|
||||
#include "csp/domain/enum_strings.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
namespace csp::domain {
|
||||
|
||||
namespace {
|
||||
|
||||
std::string Upper(std::string s) {
|
||||
std::transform(s.begin(), s.end(), s.begin(), [](unsigned char c) {
|
||||
return static_cast<char>(std::toupper(c));
|
||||
});
|
||||
return s;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
std::string ToString(SubmissionStatus s) {
|
||||
switch (s) {
|
||||
case SubmissionStatus::Pending:
|
||||
return "Pending";
|
||||
case SubmissionStatus::Compiling:
|
||||
return "Compiling";
|
||||
case SubmissionStatus::Running:
|
||||
return "Running";
|
||||
case SubmissionStatus::AC:
|
||||
return "AC";
|
||||
case SubmissionStatus::WA:
|
||||
return "WA";
|
||||
case SubmissionStatus::TLE:
|
||||
return "TLE";
|
||||
case SubmissionStatus::MLE:
|
||||
return "MLE";
|
||||
case SubmissionStatus::RE:
|
||||
return "RE";
|
||||
case SubmissionStatus::CE:
|
||||
return "CE";
|
||||
case SubmissionStatus::Unknown:
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
SubmissionStatus SubmissionStatusFromString(const std::string& s) {
|
||||
const auto u = Upper(s);
|
||||
if (u == "PENDING") return SubmissionStatus::Pending;
|
||||
if (u == "COMPILING") return SubmissionStatus::Compiling;
|
||||
if (u == "RUNNING") return SubmissionStatus::Running;
|
||||
if (u == "AC") return SubmissionStatus::AC;
|
||||
if (u == "WA") return SubmissionStatus::WA;
|
||||
if (u == "TLE") return SubmissionStatus::TLE;
|
||||
if (u == "MLE") return SubmissionStatus::MLE;
|
||||
if (u == "RE") return SubmissionStatus::RE;
|
||||
if (u == "CE") return SubmissionStatus::CE;
|
||||
return SubmissionStatus::Unknown;
|
||||
}
|
||||
|
||||
std::string ToString(Language l) {
|
||||
switch (l) {
|
||||
case Language::Cpp:
|
||||
return "cpp";
|
||||
case Language::Unknown:
|
||||
default:
|
||||
return "unknown";
|
||||
}
|
||||
}
|
||||
|
||||
Language LanguageFromString(const std::string& s) {
|
||||
const auto u = Upper(s);
|
||||
if (u == "CPP" || u == "C++" || u == "CXX") return Language::Cpp;
|
||||
return Language::Unknown;
|
||||
}
|
||||
|
||||
} // namespace csp::domain
|
||||
54
backend/src/domain/json.cc
普通文件
54
backend/src/domain/json.cc
普通文件
@@ -0,0 +1,54 @@
|
||||
#include "csp/domain/json.h"
|
||||
|
||||
namespace csp::domain {
|
||||
|
||||
Json::Value ToPublicJson(const User& u) {
|
||||
Json::Value j;
|
||||
j["id"] = Json::Int64(u.id);
|
||||
j["username"] = u.username;
|
||||
j["rating"] = u.rating;
|
||||
j["created_at"] = Json::Int64(u.created_at);
|
||||
return j;
|
||||
}
|
||||
|
||||
Json::Value ToJson(const Problem& p) {
|
||||
Json::Value j;
|
||||
j["id"] = Json::Int64(p.id);
|
||||
j["slug"] = p.slug;
|
||||
j["title"] = p.title;
|
||||
j["statement_md"] = p.statement_md;
|
||||
j["difficulty"] = p.difficulty;
|
||||
j["source"] = p.source;
|
||||
j["created_at"] = Json::Int64(p.created_at);
|
||||
return j;
|
||||
}
|
||||
|
||||
Json::Value ToJson(const Submission& s) {
|
||||
Json::Value j;
|
||||
j["id"] = Json::Int64(s.id);
|
||||
j["user_id"] = Json::Int64(s.user_id);
|
||||
j["problem_id"] = Json::Int64(s.problem_id);
|
||||
j["language"] = ToString(s.language);
|
||||
j["status"] = ToString(s.status);
|
||||
j["score"] = s.score;
|
||||
j["time_ms"] = s.time_ms;
|
||||
j["memory_kb"] = s.memory_kb;
|
||||
j["created_at"] = Json::Int64(s.created_at);
|
||||
return j;
|
||||
}
|
||||
|
||||
Json::Value ToJson(const WrongBookItem& w) {
|
||||
Json::Value j;
|
||||
j["user_id"] = Json::Int64(w.user_id);
|
||||
j["problem_id"] = Json::Int64(w.problem_id);
|
||||
if (w.last_submission_id.has_value()) {
|
||||
j["last_submission_id"] = Json::Int64(*w.last_submission_id);
|
||||
} else {
|
||||
j["last_submission_id"] = Json::nullValue;
|
||||
}
|
||||
j["note"] = w.note;
|
||||
j["updated_at"] = Json::Int64(w.updated_at);
|
||||
return j;
|
||||
}
|
||||
|
||||
} // namespace csp::domain
|
||||
在新工单中引用
屏蔽一个用户