public IActionResult CreateProject([FromBody] Project project)
        {
            var lang          = Request.Headers["language"].ToString();
            var errorMessages = new List <string>();

            try
            {
                var newProject = new Project
                {
                    Name_EN         = project.Name_EN,
                    Name_FR         = !string.IsNullOrEmpty(project.Name_FR) ? project.Name_FR : project.Name_EN,
                    Description_EN  = project.Description_EN,
                    Description_FR  = !string.IsNullOrEmpty(project.Description_FR) ? project.Description_FR : project.Description_EN,
                    Type            = project.Type,
                    Size            = project.Size,
                    GitHubUrl       = project.GitHubUrl,
                    IsDisplayed     = project.IsDisplayed,
                    LiveDemoUrl     = project.LiveDemoUrl,
                    VideoDemoUrl    = project.VideoDemoUrl,
                    VideoDemoUrlExt = project.VideoDemoUrlExt,
                    ImagePath       = project.ImagePath
                };

                var createdProject = _projectRepository.Create(newProject);

                return(Ok(new { createdProject = ResponseGenerator.GenerateProjectResponse(createdProject) }));
            }
            catch
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                return(BadRequest(new { errors = errorMessages }));
            }
        }
        public IActionResult AddTagToproject([FromBody] ProjectTag projectTag, [FromQuery] string action)
        {
            var lang          = Request.Headers["language"].ToString();
            var errorMessages = new List <string>();

            try
            {
                var project     = _projectRepository.FindById(projectTag.ProjectId);
                var projectTags = project.ProjectTags;

                if (action == "add")
                {
                    var newTag        = _tagRepository.FindById(projectTag.TagId);
                    var newProjectTag = new ProjectTag()
                    {
                        ProjectId = projectTag.ProjectId,
                        Project   = project,
                        TagId     = projectTag.TagId,
                        Tag       = newTag
                    };
                    projectTags.Add(newProjectTag);
                }
                else if (action == "remove")
                {
                    var currentProjectTag = projectTags
                                            .SingleOrDefault(x => x.TagId == projectTag.TagId && x.ProjectId == projectTag.ProjectId);

                    projectTags.Remove(currentProjectTag);
                }
                project.ProjectTags = projectTags;

                var updatedproject = _projectRepository.Update(project);

                var response = ResponseGenerator.GenerateProjectResponse(updatedproject);

                return(Ok(new { updatedProject = response }));
            }
            catch (Exception ex)
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                errorMessages.Add(ex.Message);
                return(BadRequest(new { errors = errorMessages }));
            }
        }
        public IActionResult UpdateProject([FromBody] Project project)
        {
            var lang          = Request.Headers["language"].ToString();
            var errorMessages = new List <string>();

            try
            {
                var prj = _projectRepository.FindById(project.Id);
                if (prj == null)
                {
                    return(NotFound());
                }

                prj.Name_EN         = project.Name_EN;
                prj.Name_FR         = !string.IsNullOrEmpty(project.Name_FR) ? project.Name_FR : project.Name_EN;
                prj.Description_EN  = project.Description_EN;
                prj.Description_FR  = !string.IsNullOrEmpty(project.Description_FR) ? project.Description_FR : project.Description_EN;
                prj.Type            = project.Type;
                prj.Size            = project.Size;
                prj.GitHubUrl       = project.GitHubUrl;
                prj.IsDisplayed     = project.IsDisplayed;
                prj.LiveDemoUrl     = project.LiveDemoUrl;
                prj.VideoDemoUrl    = project.VideoDemoUrl;
                prj.VideoDemoUrlExt = project.VideoDemoUrlExt;
                prj.ImagePath       = project.ImagePath;

                var updatedProject = _projectRepository.Update(prj);

                return(Ok(new { updatedProject = ResponseGenerator.GenerateProjectResponse(updatedProject) }));
            }
            catch (Exception ex)
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                errorMessages.Add(ex.Message);
                return(BadRequest(new { errors = errorMessages }));
            }
        }
        public IActionResult GetProjects()
        {
            var lang          = Request.Headers["language"].ToString();
            var errorMessages = new List <string>();

            try
            {
                var projectsd = _projectRepository.GetProjects();

                List <object> projects = new List <object>();
                foreach (var project in projectsd)
                {
                    projects.Add(ResponseGenerator.GenerateProjectResponse(project));
                }

                return(Ok(new { projects }));
            }
            catch (Exception ex)
            {
                errorMessages.Add(_translator.GetTranslation("ERROR", lang));
                errorMessages.Add(ex.Message);
                return(BadRequest(new { errors = errorMessages }));
            }
        }