public CategoryForUser(CategoryMeta meta, bool enabled) { Id = meta.Id; Name = meta.Name; Icon = meta.Icon; Enabled = enabled; }
public async Task <IActionResult> Update(int id, [FromBody] CategoryMeta categoryMeta) { var result = await _categoryService.Update(CurrentUser.TenantId, id, categoryMeta); if (result.Code <= 0) { return(BadRequest(result)); } return(Ok(result)); }
public async Task <IActionResult> Insert([FromBody] CategoryMeta categoryMeta) { categoryMeta.CreatorId = CurrentUser.Id; categoryMeta.CreatorFullName = CurrentUser.FullName; categoryMeta.CreatorAvatar = CurrentUser.Avatar; var result = await _categoryService.Insert(CurrentUser.TenantId, categoryMeta); if (result.Code <= 0) { return(BadRequest(result)); } return(Ok(result)); }
public async Task <ActionResultResponse> Insert(string tenantId, CategoryMeta categoryMeta) { var category = new Category { TenantId = tenantId, ConcurrencyStamp = Guid.NewGuid().ToString(), CreatorId = categoryMeta.CreatorId, CreatorFullName = categoryMeta.CreatorFullName, IsActive = categoryMeta.IsActive, BannerImage = categoryMeta.BannerImage, IdPath = "-1", IsHomePage = categoryMeta.IsHomePage, CreatorAvatar = categoryMeta.CreatorAvatar, }; if (categoryMeta.ParentId.HasValue) { var parentInfo = await _categoryRepository.GetInfo(tenantId, categoryMeta.ParentId.Value); if (parentInfo == null) { return(new ActionResultResponse(-1, _resourceService.GetString("Parent category does not exists."))); } category.ParentId = parentInfo.Id; category.IdPath = $"{parentInfo.IdPath}.-1"; var order = await _categoryRepository.CountByParentId(categoryMeta.ParentId); category.Order = order; category.OrderPath = $"{parentInfo.OrderPath}.{order}"; } else { var order = await _categoryRepository.CountByParentId(null); category.Order = order; category.OrderPath = order.ToString(); } var result = await _categoryRepository.Insert(category); if (result <= 0) { return(new ActionResultResponse(-1, _sharedResourceService.GetString("Something went wrong. Please contact with administrator."))); } await UpdateIdPath(); return(await AddTranslation()); async Task RollbackInsert() { await _categoryRepository.ForceDelete(tenantId, category.Id); } async Task UpdateIdPath() { category.IdPath = category.IdPath.Replace("-1", category.Id.ToString()); await _categoryRepository.UpdateCategoryIdPath(tenantId, category.Id, category.IdPath); } async Task <ActionResultResponse> AddTranslation() { var categoryTranslations = new List <CategoryTranslation>(); foreach (var categoryTranslation in categoryMeta.CategoryTranslations) { var resultAddTranslation = await AddCategoryTranslation(tenantId, category.Id, categoryTranslation); if (resultAddTranslation.Code <= 0) { await RollbackInsert(); return(resultAddTranslation); } categoryTranslations.Add(resultAddTranslation.Data); } var resultInsertCategoryTranslation = await _categoryTranslationRepository.Inserts(categoryTranslations); if (resultInsertCategoryTranslation > 0) { return(new ActionResultResponse(1, _resourceService.GetString("Add new category successful."))); } await RollbackInsert(); return(new ActionResultResponse(-3, _sharedResourceService.GetString(ErrorMessage.SomethingWentWrong))); } }
public async Task <ActionResultResponse> Update(string tenantId, int id, CategoryMeta categoryMeta) { var info = await _categoryRepository.GetInfo(tenantId, id); if (info == null) { return(new ActionResultResponse(-1, _resourceService.GetString("Category does not exists."))); } if (categoryMeta.ConcurrencyStamp != info.ConcurrencyStamp) { return(new ActionResultResponse(-2, _resourceService.GetString("This category already updated by another. You can not update this category."))); } var oldIdPath = info.IdPath; info.IsActive = categoryMeta.IsActive; info.Order = categoryMeta.Order; info.OrderPath = categoryMeta.Order.ToString(); info.ConcurrencyStamp = Guid.NewGuid().ToString(); info.LastUpdate = DateTime.Now; info.BannerImage = categoryMeta.BannerImage; info.IsHomePage = categoryMeta.IsHomePage; if (info.ParentId != categoryMeta.ParentId) { if (!categoryMeta.ParentId.HasValue) { info.ParentId = null; info.IdPath = info.Id.ToString(); var order = await _categoryRepository.CountByParentId(null); info.Order = order; info.OrderPath = order.ToString(); } else { if (categoryMeta.ParentId == info.Id) { return(new ActionResultResponse(-3, _resourceService.GetString("Parent category can not be it selft."))); } var parentInfo = await _categoryRepository.GetInfo(tenantId, categoryMeta.ParentId.Value); if (parentInfo == null) { return(new ActionResultResponse(-3, _resourceService.GetString("Parent category does not exists."))); } info.ParentId = parentInfo.Id; info.IdPath = $"{parentInfo.IdPath}.{info.Id}"; var order = await _categoryRepository.CountByParentId(parentInfo.Id); info.Order = order; info.OrderPath = $"{parentInfo.OrderPath}.{order}"; } } await _categoryRepository.Update(info); await UpdateChildrenIdPath(); var resultUpdateTranslation = await SaveCategoryTranslation(); if (resultUpdateTranslation.Code <= 0) { return(resultUpdateTranslation); } return(new ActionResultResponse(1, _resourceService.GetString("Update categogry successful."))); #region Local functions async Task <ActionResultResponse> SaveCategoryTranslation() { var listNewCategoryTranslations = new List <CategoryTranslation>(); foreach (var categoryTranslation in categoryMeta.CategoryTranslations) { // Check name exists. var isNameExists = await _categoryTranslationRepository.CheckExists(tenantId, categoryTranslation.LanguageId, info.Id, categoryTranslation.Name); if (isNameExists) { return(new ActionResultResponse <CategoryTranslation>(-4, _resourceService.GetString("Category name: \"{0}\" already exsits.", categoryTranslation.SeoLink))); } categoryTranslation.SeoLink = !string.IsNullOrEmpty(categoryTranslation.SeoLink) ? categoryTranslation.SeoLink.Trim() : categoryTranslation.Name.Trim().ToUrlString().ToLower(); // Check seoLink exists. var isSeoLinkExists = await _categoryTranslationRepository.CheckSeoLinkExists(tenantId, categoryTranslation.LanguageId, info.Id, categoryTranslation.SeoLink); if (isSeoLinkExists) { return(new ActionResultResponse <CategoryTranslation>(-5, _resourceService.GetString("Seolink: \"{0}\" already exsits.", categoryTranslation.SeoLink))); } var categoryTranslationInfo = await _categoryTranslationRepository.GetInfo(info.Id, categoryTranslation.LanguageId); // Add new category translation. if (categoryTranslationInfo == null) { listNewCategoryTranslations.Add(new CategoryTranslation { CategoryId = info.Id, LanguageId = categoryTranslation.LanguageId, Name = categoryTranslation.Name.Trim(), MetaTitle = categoryTranslation.MetaTitle?.Trim(), Description = categoryTranslation.Description?.Trim(), MetaDescription = categoryTranslation.MetaDescription?.Trim(), UnsignName = categoryTranslation.Name.Trim().StripVietnameseChars().ToUpper(), SeoLink = categoryTranslation.SeoLink }); } else { categoryTranslationInfo.Name = categoryTranslation.Name.Trim(); categoryTranslationInfo.MetaTitle = categoryTranslation.MetaTitle?.Trim(); categoryTranslationInfo.Description = categoryTranslation.Description?.Trim(); categoryTranslationInfo.MetaDescription = categoryTranslation.MetaDescription?.Trim(); categoryTranslationInfo.UnsignName = categoryTranslation.Name.Trim().StripVietnameseChars().ToUpper(); categoryTranslationInfo.SeoLink = categoryTranslation.SeoLink; await _categoryTranslationRepository.Update(categoryTranslationInfo); } } return(new ActionResultResponse(1)); } async Task UpdateChildrenIdPath() { if (info.IdPath != oldIdPath) { await _categoryRepository.UpdateChildrenIdPath(oldIdPath, info.IdPath); } } #endregion }