ContentBusinessImpl.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. using Common;
  2. using Common.Constant;
  3. using Common.Http;
  4. using Common.Logic;
  5. using Esim.Apis.Singleton;
  6. using Database.Database;
  7. using log4net;
  8. using Microsoft.AspNetCore.Mvc;
  9. using Newtonsoft.Json;
  10. namespace Esim.Apis.Business
  11. {
  12. public class ContentBusinessImpl : IContentBusiness
  13. {
  14. private static readonly log4net.ILog log = log4net.LogManager.GetLogger(
  15. typeof(ContentBusinessImpl)
  16. );
  17. private ModelContext dbContext;
  18. IConfiguration configuration;
  19. public ContentBusinessImpl(ModelContext _dbContext, IConfiguration _configuration)
  20. {
  21. dbContext = _dbContext;
  22. configuration = _configuration;
  23. }
  24. public async Task<IActionResult> BannerLoad(HttpRequest httpRequest, BannerLoadReq request)
  25. {
  26. var url = httpRequest.Path;
  27. var json = JsonConvert.SerializeObject(request);
  28. log.Debug("URL: " + url + " => Request: " + json);
  29. try
  30. {
  31. string lang = CommonLogic.GetLanguage(httpRequest, request.lang);
  32. int pageNumber = request.pageNumber < 0 ? 0 : request.pageNumber;
  33. int pageSize = request.pageSize <= 0 ? 10 : request.pageSize;
  34. var query = dbContext.Banners
  35. .Where(b => b.Status == true)
  36. .Where(b => b.StartDate == null || b.StartDate <= DateTime.Now)
  37. .Where(b => b.EndDate == null || b.EndDate >= DateTime.Now);
  38. if (!string.IsNullOrEmpty(request.position))
  39. {
  40. query = query.Where(b => b.Position == request.position);
  41. }
  42. int totalCount = query.Count();
  43. int totalPages = (int)Math.Ceiling((double)totalCount / pageSize);
  44. var banners = query
  45. .OrderBy(b => b.DisplayOrder)
  46. .ThenByDescending(b => b.CreatedDate)
  47. .Skip(pageNumber * pageSize)
  48. .Take(pageSize)
  49. .Select(b => new
  50. {
  51. b.Id,
  52. title = lang == "en"
  53. ? (b.TitleEn ?? b.Title)
  54. : (b.TitleLo ?? b.Title),
  55. subtitle = lang == "en"
  56. ? (b.SubtitleEn ?? b.Subtitle)
  57. : (b.SubtitleLo ?? b.Subtitle),
  58. b.ImageUrl,
  59. b.ImageMobileUrl,
  60. b.LinkUrl,
  61. b.LinkTarget,
  62. b.Position,
  63. b.DisplayOrder
  64. })
  65. .ToList();
  66. return ApiResponseHelper.BuildResponse(
  67. log, url, json,
  68. CommonErrorCode.Success,
  69. ConfigManager.Instance.GetConfigWebValue("LOAD_SUCCESS", lang),
  70. new { banners = banners, pagination = new { pageNumber, pageSize, totalCount, totalPages } }
  71. );
  72. }
  73. catch (Exception ex)
  74. {
  75. log.Error("Exception: ", ex);
  76. }
  77. return ApiResponseHelper.BuildResponse(
  78. log, url, json,
  79. CommonErrorCode.SystemError,
  80. ConfigManager.Instance.GetConfigWebValue("SYSTEM_FAILURE"),
  81. new { }
  82. );
  83. }
  84. public async Task<IActionResult> CustomerReviewLoad(HttpRequest httpRequest, CustomerReviewLoadReq request)
  85. {
  86. var url = httpRequest.Path;
  87. var json = JsonConvert.SerializeObject(request);
  88. log.Debug("URL: " + url + " => Request: " + json);
  89. try
  90. {
  91. string lang = CommonLogic.GetLanguage(httpRequest, request.lang);
  92. int pageNumber = request.pageNumber < 0 ? 0 : request.pageNumber;
  93. int pageSize = request.pageSize <= 0 ? 10 : request.pageSize;
  94. var query = dbContext.CustomerReviews
  95. .Where(r => r.Status == true);
  96. if (request.isFeatured.HasValue && request.isFeatured.Value)
  97. {
  98. query = query.Where(r => r.IsFeatured == true);
  99. }
  100. int totalCount = query.Count();
  101. int totalPages = (int)Math.Ceiling((double)totalCount / pageSize);
  102. var reviews = query
  103. .OrderBy(r => r.DisplayOrder)
  104. .ThenByDescending(r => r.CreatedDate)
  105. .Skip(pageNumber * pageSize)
  106. .Take(pageSize)
  107. .Select(r => new
  108. {
  109. r.Id,
  110. r.CustomerName,
  111. r.AvatarUrl,
  112. r.Rating,
  113. reviewContent = lang == "en"
  114. ? (r.ReviewContentEn ?? r.ReviewContent)
  115. : (r.ReviewContentLo ?? r.ReviewContent),
  116. destination = lang == "en"
  117. ? (r.DestinationEn ?? r.Destination)
  118. : (r.DestinationLo ?? r.Destination),
  119. r.IsFeatured,
  120. r.CreatedDate
  121. })
  122. .ToList();
  123. return ApiResponseHelper.BuildResponse(
  124. log, url, json,
  125. CommonErrorCode.Success,
  126. ConfigManager.Instance.GetConfigWebValue("LOAD_SUCCESS", lang),
  127. new { reviews = reviews, pagination = new { pageNumber, pageSize, totalCount, totalPages } }
  128. );
  129. }
  130. catch (Exception ex)
  131. {
  132. log.Error("Exception: ", ex);
  133. }
  134. return ApiResponseHelper.BuildResponse(
  135. log, url, json,
  136. CommonErrorCode.SystemError,
  137. ConfigManager.Instance.GetConfigWebValue("SYSTEM_FAILURE"),
  138. new { }
  139. );
  140. }
  141. public async Task<IActionResult> CustomerReviewCreate(HttpRequest httpRequest, CustomerReviewCreateReq request)
  142. {
  143. var url = httpRequest.Path;
  144. var json = JsonConvert.SerializeObject(request);
  145. log.Debug("URL: " + url + " => Request: " + json);
  146. try
  147. {
  148. string lang = CommonLogic.GetLanguage(httpRequest, request.lang);
  149. // Validate required fields
  150. if (string.IsNullOrEmpty(request.customerName) || string.IsNullOrEmpty(request.reviewContent))
  151. {
  152. return ApiResponseHelper.BuildResponse(
  153. log, url, json,
  154. CommonErrorCode.RequiredFieldMissing,
  155. ConfigManager.Instance.GetConfigWebValue("REQUIRED_FIELD_MISSING", lang),
  156. new { }
  157. );
  158. }
  159. // Create new review (pending approval)
  160. var review = new CustomerReview
  161. {
  162. CustomerName = request.customerName,
  163. ReviewContent = request.reviewContent,
  164. Destination = request.destination,
  165. Rating = request.rating > 0,
  166. Status = false, // Pending approval
  167. IsFeatured = false,
  168. CreatedDate = DateTime.Now
  169. };
  170. dbContext.CustomerReviews.Add(review);
  171. await dbContext.SaveChangesAsync();
  172. return ApiResponseHelper.BuildResponse(
  173. log, url, json,
  174. CommonErrorCode.Success,
  175. ConfigManager.Instance.GetConfigWebValue("REVIEW_SUBMITTED", lang),
  176. new { reviewId = review.Id }
  177. );
  178. }
  179. catch (Exception ex)
  180. {
  181. log.Error("Exception: ", ex);
  182. }
  183. return ApiResponseHelper.BuildResponse(
  184. log, url, json,
  185. CommonErrorCode.SystemError,
  186. ConfigManager.Instance.GetConfigWebValue("SYSTEM_FAILURE"),
  187. new { }
  188. );
  189. }
  190. public async Task<IActionResult> FaqCategoryLoad(HttpRequest httpRequest, FaqCategoryLoadReq request)
  191. {
  192. var url = httpRequest.Path;
  193. var json = JsonConvert.SerializeObject(request);
  194. log.Debug("URL: " + url + " => Request: " + json);
  195. try
  196. {
  197. string lang = CommonLogic.GetLanguage(httpRequest, request.lang);
  198. int pageNumber = request.pageNumber < 0 ? 0 : request.pageNumber;
  199. int pageSize = request.pageSize <= 0 ? 10 : request.pageSize;
  200. var query = dbContext.FaqCategories
  201. .Where(c => c.Status == true);
  202. int totalCount = query.Count();
  203. int totalPages = (int)Math.Ceiling((double)totalCount / pageSize);
  204. var categories = query
  205. .OrderBy(c => c.DisplayOrder)
  206. .ThenBy(c => c.Id)
  207. .Skip(pageNumber * pageSize)
  208. .Take(pageSize)
  209. .Select(c => new
  210. {
  211. c.Id,
  212. categoryName = lang == "en"
  213. ? (c.CategoryNameEn ?? c.CategoryName)
  214. : (c.CategoryNameLo ?? c.CategoryName),
  215. c.CategorySlug,
  216. description = lang == "en"
  217. ? (c.DescriptionEn ?? c.Description)
  218. : (c.DescriptionLo ?? c.Description),
  219. c.IconUrl,
  220. c.DisplayOrder
  221. })
  222. .ToList();
  223. return ApiResponseHelper.BuildResponse(
  224. log, url, json,
  225. CommonErrorCode.Success,
  226. ConfigManager.Instance.GetConfigWebValue("LOAD_SUCCESS", lang),
  227. new { categories = categories, pagination = new { pageNumber, pageSize, totalCount, totalPages } }
  228. );
  229. }
  230. catch (Exception ex)
  231. {
  232. log.Error("Exception: ", ex);
  233. }
  234. return ApiResponseHelper.BuildResponse(
  235. log, url, json,
  236. CommonErrorCode.SystemError,
  237. ConfigManager.Instance.GetConfigWebValue("SYSTEM_FAILURE"),
  238. new { }
  239. );
  240. }
  241. public async Task<IActionResult> FaqLoad(HttpRequest httpRequest, FaqLoadReq request)
  242. {
  243. var url = httpRequest.Path;
  244. var json = JsonConvert.SerializeObject(request);
  245. log.Debug("URL: " + url + " => Request: " + json);
  246. try
  247. {
  248. string lang = CommonLogic.GetLanguage(httpRequest, request.lang);
  249. int pageNumber = request.pageNumber < 0 ? 0 : request.pageNumber;
  250. int pageSize = request.pageSize <= 0 ? 10 : request.pageSize;
  251. var query = dbContext.Faqs
  252. .Where(f => f.Status == true);
  253. if (request.categoryId.HasValue)
  254. {
  255. query = query.Where(f => f.CategoryId == request.categoryId);
  256. }
  257. if (request.isFeatured.HasValue && request.isFeatured.Value)
  258. {
  259. query = query.Where(f => f.IsFeatured == true);
  260. }
  261. int totalCount = query.Count();
  262. int totalPages = (int)Math.Ceiling((double)totalCount / pageSize);
  263. var faqs = query
  264. .OrderBy(f => f.DisplayOrder)
  265. .ThenByDescending(f => f.ViewCount)
  266. .Skip(pageNumber * pageSize)
  267. .Take(pageSize)
  268. .Select(f => new
  269. {
  270. f.Id,
  271. question = lang == "en"
  272. ? (f.QuestionEn ?? f.Question)
  273. : (f.QuestionLo ?? f.Question),
  274. answer = lang == "en"
  275. ? (f.AnswerEn ?? f.Answer)
  276. : (f.AnswerLo ?? f.Answer),
  277. f.CategoryId,
  278. f.ViewCount,
  279. f.IsFeatured
  280. })
  281. .ToList();
  282. return ApiResponseHelper.BuildResponse(
  283. log, url, json,
  284. CommonErrorCode.Success,
  285. ConfigManager.Instance.GetConfigWebValue("LOAD_SUCCESS", lang),
  286. new { faqs = faqs, pagination = new { pageNumber, pageSize, totalCount, totalPages } }
  287. );
  288. }
  289. catch (Exception ex)
  290. {
  291. log.Error("Exception: ", ex);
  292. }
  293. return ApiResponseHelper.BuildResponse(
  294. log, url, json,
  295. CommonErrorCode.SystemError,
  296. ConfigManager.Instance.GetConfigWebValue("SYSTEM_FAILURE"),
  297. new { }
  298. );
  299. }
  300. }
  301. }