/* * Copyright (C) 2018 Emeric Poupon * * This file is part of LMS. * * LMS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * LMS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with LMS. If not, see . */ #pragma once #include #include #include #include #include #include "Types.hpp" namespace Database { class Session; class Track; using FeatureName = std::string; using FeatureValues = std::vector; using FeatureValuesMap = std::unordered_map; class TrackFeatures : public Wt::Dbo::Dbo { public: using pointer = Wt::Dbo::ptr; TrackFeatures() = default; TrackFeatures(Wt::Dbo::ptr track, const std::string& jsonEncodedFeatures); // Create utility static pointer create(Session& session, Wt::Dbo::ptr track, const std::string& jsonEncodedFeatures); FeatureValues getFeatureValues(const FeatureName& feature) const; FeatureValuesMap getFeatureValuesMap(const std::unordered_set& featureNames) const; template void persist(Action& a) { Wt::Dbo::field(a, _data, "data"); Wt::Dbo::belongsTo(a, _track, "track", Wt::Dbo::OnDeleteCascade); } private: std::string _data; Wt::Dbo::ptr _track; }; } // namespace database