private ProjectView CommonLogicForPatchUpdateMethods(dynamic projectView, string userName, Project projectById) { var user = Uow.UserRepository.LinkedCacheGetByName(userName); if (user == null) { throw new CoralTimeEntityNotFoundException($"User with userName {userName} not found."); } var newProjectName = (string)projectView.name; var isNameUnique = Uow.ProjectRepository.LinkedCacheGetByName(newProjectName) == null || projectById.Name == newProjectName; if (projectView.isActive != null && !(bool)projectView.isActive) { var timeEntries = Uow.TimeEntryRepository.GetQueryWithIncludes() .Where(t => t.ProjectId == projectById.Id && t.Date.Date == DateTime.Now.Date) .ToList(); timeEntries.ForEach(t => t.StopTimer()); } UpdateService <Project> .UpdateObject(projectView, projectById); BLHelpers.CheckProjectsErrors(projectById, isNameUnique); try { Uow.ProjectRepository.Update(projectById); Uow.Save(); Uow.ProjectRepository.LinkedCacheClear(); } catch (Exception e) { throw new CoralTimeDangerException("An error occurred while updating project", e); } var projectByIdResult = Uow.ProjectRepository.LinkedCacheGetById(projectById.Id); return(projectByIdResult.GetViewTimeTrackerAllProjects(Mapper, GetCacheMembersActiveCount())); }
public ProjectView Create(ProjectView projectData) { var user = Uow.UserRepository.LinkedCacheGetByName(CurrentUserName); if (user == null) { throw new CoralTimeEntityNotFoundException($"User with userName {CurrentUserName} not found"); } // TODO rewrite! projectData.Name = projectData.Name == null ? projectData.Name : projectData.Name.Trim(); var isNameUnique = Uow.ProjectRepository.LinkedCacheGetByName(projectData.Name) == null; var project = Mapper.Map <ProjectView, Project>(projectData); project.IsActive = true; project.IsPrivate = true; BLHelpers.CheckProjectsErrors(project, isNameUnique); try { Uow.ProjectRepository.Insert(project); Uow.Save(); Uow.ProjectRepository.LinkedCacheClear(); } catch (Exception e) { throw new CoralTimeDangerException("An error occurred while creating project", e); } var projectById = Uow.ProjectRepository.LinkedCacheGetById(project.Id); return(projectById.GetViewTimeTrackerAllProjects(Mapper, GetCacheMembersActiveCount())); }