public async Task <Project> GetByIdAsync(Guid id, AuthenticatedUser currentUser)
        {
            await EnsureUserHasAccessAsync(currentUser, id, AccessType.User, nameof(GetByIdAsync));

            var dbProject = await projectRepository.FindByIdAsync(id);

            if (dbProject == null)
            {
                throw new EntityNotFoundException(nameof(Project), id.ToString());
            }
            return(ModelsMapper.ConvertProjectDbModelToServiceModel(dbProject));
        }
        public async Task <Project> CreateAsync(Project project, AuthenticatedUser currentUser)
        {
            var dbProject = await projectRepository.AddAsync(ModelsMapper.ConvertProjectServiceModelToDbModel(project));

            var dbUser = await userRepository.FindByIdAsync(currentUser.Id);

            dbUser.ProjectsWithAdminAccess.Add(dbProject.Id.ToString());
            dbUser.ProjectsWithUserAccess.Add(dbProject.Id.ToString());
            await userRepository.UpdateAsync(dbUser);

            return(ModelsMapper.ConvertProjectDbModelToServiceModel(dbProject));
        }
        public async Task <Project> UpdateAsync(Project project, AuthenticatedUser currentUser)
        {
            await EnsureUserHasAccessAsync(currentUser, project.Id, AccessType.Admin, nameof(UpdateAsync));

            var dbProject = await projectRepository.FindByIdAsync(project.Id);

            if (dbProject == null)
            {
                throw new EntityNotFoundException(nameof(Project), project.Id.ToString());
            }

            dbProject.Name       = project.Name;
            dbProject.GitToken   = project.GitToken;
            dbProject.ProjectUri = project.ProjectUri;

            await projectRepository.UpdateAsync(dbProject);

            return(ModelsMapper.ConvertProjectDbModelToServiceModel(dbProject));
        }