Advertisement
Guest User

Untitled

a guest
Mar 12th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.13 KB | None | 0 0
  1. using Forum.Models;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5.  
  6. namespace Forum.Data
  7. {
  8. public class DataMapper
  9. {
  10. private const string DATA_PATH = "../data/";
  11.  
  12. private const string CONFIG_PATH = "config.ini";
  13.  
  14. private const string DEFAULT_CONFIG = "users=users.csv\r\ncategories=categories.csv\r\nposts=posts.csv\r\nreplies=replies.csv";
  15.  
  16. private static readonly Dictionary<string, string> config;
  17.  
  18. static DataMapper()
  19. {
  20. Directory.CreateDirectory(DATA_PATH);
  21. config = LoadConfig(DATA_PATH + CONFIG_PATH);
  22. }
  23.  
  24. private static void EnsureConfigFile(string configFilePath)
  25. {
  26. if (!File.Exists(configFilePath))
  27. {
  28. File.WriteAllText(configFilePath, DEFAULT_CONFIG);
  29. }
  30. }
  31.  
  32. private static void EnsureFile(string path)
  33. {
  34. if (!File.Exists(path))
  35. {
  36. File.Create(path).Close();
  37. }
  38. }
  39.  
  40. private static Dictionary<string, string> LoadConfig(string configFilePath)
  41. {
  42. EnsureConfigFile(configFilePath);
  43.  
  44. var contents = ReadLines(configFilePath);
  45.  
  46. var config = contents
  47. .Select(l => l.Split('='))
  48. .ToDictionary(t => t[0], t => DATA_PATH + t[1]);
  49.  
  50. return config;
  51. }
  52.  
  53. private static string[] ReadLines(string path)
  54. {
  55. EnsureFile(path);
  56. var lines = File.ReadAllLines(path);
  57. return lines;
  58. }
  59.  
  60. private static void WriteLines(string path, string[] lines)
  61. {
  62. File.WriteAllLines(path, lines);
  63. }
  64.  
  65. public static List<Category> LoadCategories()
  66. {
  67. List<Category> categories = new List<Category>();
  68. var dataLines = ReadLines(config["categories"]);
  69.  
  70. foreach (var line in dataLines)
  71. {
  72. var args = line.Split(";");
  73. var id = int.Parse(args[0]);
  74. var name = args[1];
  75. var postIds = args[2]
  76. .Split(',', System.StringSplitOptions.RemoveEmptyEntries)
  77. .Select(int.Parse)
  78. .ToArray();
  79.  
  80. Category category = new Category(id, name, postIds);
  81. categories.Add(category);
  82. }
  83.  
  84. return categories;
  85. }
  86.  
  87. public static void SaveCategories(List<Category> categories)
  88. {
  89. List<string> lines = new List<string>();
  90.  
  91. foreach (var category in categories)
  92. {
  93. const string categoryFormat = "{0};{1};{2}";
  94. string line = string.Format(categoryFormat,
  95. category.Id,
  96. category.Name,
  97. string.Join(",", category.Posts)
  98. );
  99.  
  100. lines.Add(line);
  101. }
  102.  
  103. WriteLines(config["categories"], lines.ToArray());
  104. }
  105.  
  106. public static List<User> LoadUsers()
  107. {
  108. List<User> users = new List<User>();
  109. var dataLines = ReadLines(config["users"]);
  110.  
  111. foreach (var line in dataLines)
  112. {
  113. var args = line.Split(";");
  114. var id = int.Parse(args[0]);
  115. var username = args[1];
  116. var password = args[2];
  117. var postIds = args[3]
  118. .Split(',', System.StringSplitOptions.RemoveEmptyEntries)
  119. .Select(int.Parse)
  120. .ToArray();
  121.  
  122. User user = new User(id, username, password, postIds);
  123. users.Add(user);
  124. }
  125.  
  126. return users;
  127. }
  128.  
  129. public static void SaveUsers(List<User> users)
  130. {
  131. List<string> lines = new List<string>();
  132.  
  133. foreach (var user in users)
  134. {
  135. const string categoryFormat = "{0};{1};{2};{3}";
  136. string line = string.Format(categoryFormat,
  137. user.Id,
  138. user.Username,
  139. user.Password,
  140. string.Join(",", user.PostIds)
  141. );
  142.  
  143. lines.Add(line);
  144. }
  145.  
  146. WriteLines(config["users"], lines.ToArray());
  147. }
  148.  
  149. public static List<Post> LoadPosts()
  150. {
  151. List<Post> posts = new List<Post>();
  152. var dataLines = ReadLines(config["posts"]);
  153.  
  154. foreach (var line in dataLines)
  155. {
  156. var args = line.Split(";");
  157. var id = int.Parse(args[0]);
  158. var title = args[1];
  159. var content = args[2];
  160. var categoryId = int.Parse(args[3]);
  161. var authorId = int.Parse(args[4]);
  162. var replyIds = args[5]
  163. .Split(',', System.StringSplitOptions.RemoveEmptyEntries)
  164. .Select(int.Parse)
  165. .ToArray();
  166.  
  167. Post post = new Post(id, title, content, categoryId, authorId, replyIds);
  168. posts.Add(post);
  169. }
  170.  
  171. return posts;
  172. }
  173.  
  174. public static void SavePosts(List<Post> posts)
  175. {
  176. List<string> lines = new List<string>();
  177.  
  178. foreach (var post in posts)
  179. {
  180. const string categoryFormat = "{0};{1};{2};{3};{4};{5}";
  181. string line = string.Format(categoryFormat,
  182. post.Id,
  183. post.Title,
  184. post.Content,
  185. post.CategoryId,
  186. post.AuthorId,
  187. string.Join(",", post.ReplyIds)
  188. );
  189.  
  190. lines.Add(line);
  191. }
  192.  
  193. WriteLines(config["posts"], lines.ToArray());
  194. }
  195.  
  196. public static List<Reply> LoadReplies()
  197. {
  198. List<Reply> replies = new List<Reply>();
  199. var dataLines = ReadLines(config["replies"]);
  200.  
  201. foreach (var line in dataLines)
  202. {
  203. var args = line.Split(";");
  204. var id = int.Parse(args[0]);
  205. var content = args[1];
  206. var authorId = int.Parse(args[2]);
  207. var postId = int.Parse(args[3]);
  208.  
  209. Reply reply = new Reply(id, content, authorId, postId);
  210. replies.Add(reply);
  211. }
  212.  
  213. return replies;
  214. }
  215.  
  216. public static void SaveReplies(List<Reply> replies)
  217. {
  218. List<string> lines = new List<string>();
  219.  
  220. foreach (var reply in replies)
  221. {
  222. const string categoryFormat = "{0};{1};{2};{3}";
  223. string line = string.Format(categoryFormat,
  224. reply.Id,
  225. reply.Content,
  226. reply.AuthorId,
  227. reply.PostId
  228. );
  229.  
  230. lines.Add(line);
  231. }
  232.  
  233. WriteLines(config["replies"], lines.ToArray());
  234. }
  235. }
  236. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement