module vibelog.db.dbcontroller; public import vibelog.config; public import vibelog.post; public import vibelog.user; import vibelog.settings; import vibe.core.stream; import vibe.data.bson; DBController createDBController(VibeLogSettings settings) { import vibelog.db.mongo : MongoDBController; import std.exception : enforce; import std.string : startsWith; enforce(settings.databaseURL.startsWith("mongodb:"), "Only mongodb: database URLs supported."); return new MongoDBController(settings.databaseURL); } interface DBController { Config getConfig(string name, bool createdefault = false); void setConfig(Config cfg); void invokeOnConfigChange(void delegate() del); void deleteConfig(string name); Config[] getAllConfigs(); User[string] getAllUsers(); User getUser(BsonObjectID userid); User getUserByName(string name); User getUserByEmail(string email); BsonObjectID addUser(User user); void modifyUser(User user); void deleteUser(BsonObjectID id); int countPostsForCategory(string[] categories); void getPostsForCategory(string[] categories, int nskip, bool delegate(size_t idx, Post post) del); void getPublicPostsForCategory(string[] categories, int nskip, bool delegate(size_t idx, Post post) del); void getAllPosts(int nskip, bool delegate(size_t idx, Post post) del); Post getPost(BsonObjectID postid); Post getPost(string name); bool hasPost(string name); BsonObjectID addPost(Post post); void modifyPost(Post post); void deletePost(BsonObjectID id); void addFile(string post_name, string file_name, in ubyte[] contents); string[] getFiles(string post_name); InputStream getFile(string post_name, string file_name); void removeFile(string post_name, string file_name); }