public async Task <IActionResult> GetApplicationLinks(int applicationId)
        {
            IEnumerable <ResourceLink> resourceLinks = await _resourceLinkService.GetResourceLinksForApplication(applicationId);

            IEnumerable <ResourceLinkViewModel> viewModels = new ResourceLinkViewModel().MapToEnumerable(resourceLinks);

            return(Json(viewModels));
        }
        public async Task <IActionResult> GetDatasetLinks(int datasetId)
        {
            if (!_securityService.CurrrentUserHasAccessToDataset(datasetId, AccessLevel.Read, CurrentOrganizationId()))
            {
                return(Forbid());
            }

            IEnumerable <ResourceLink> resourceLinks = await _resourceLinkService.GetResourceLinksForDataset(datasetId);

            IEnumerable <ResourceLinkViewModel> viewModels = new ResourceLinkViewModel().MapToEnumerable(resourceLinks);

            return(Json(viewModels));
        }
        public async Task <IActionResult> CreateApplicationLink([FromBody] ResourceLinkViewModel resourceLink, int applicationId)
        {
            try
            {
                var model = new ResourceLinkViewModel().Map(resourceLink, applicationId);
                var createdResourceLink = await _resourceLinkService.Create(model);

                return(Json(new ResourceLinkViewModel().Map(createdResourceLink)));
            }
            catch (Exception)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
        public async Task <IActionResult> CreateDatasetLink([FromBody] ResourceLinkViewModel resourceLink, int datasetId)
        {
            if (!_securityService.CurrrentUserHasAccessToDataset(datasetId, AccessLevel.Write, CurrentOrganizationId()))
            {
                return(Forbid());
            }

            var model = new ResourceLinkViewModel().Map(resourceLink);

            model.DatasetResourceLinkId = datasetId;
            var createdResourceLink = await _resourceLinkService.Create(model);

            return(Json(new ResourceLinkViewModel().Map(createdResourceLink)));
        }
        public async Task <IActionResult> Delete([FromBody] ResourceLinkViewModel resourceLink)
        {
            if (resourceLink.Id == 0)
            {
                return(BadRequest());
            }

            ResourceLink originalResourceLink = await _resourceLinkService.GetAsync(resourceLink.Id);

            //if (CurrentOrganizationId() != resourceLink.) //TODO: Security check
            //    return Forbid();

            await _resourceLinkService.Delete(resourceLink.Id);

            return(Ok());
        }
        public async Task <ActionResult> EditDatasetLink(int datasetId, int id, [FromBody] ResourceLinkViewModel resourceLink)
        {
            if (!_securityService.CurrrentUserHasAccessToDataset(datasetId, AccessLevel.Write, CurrentOrganizationId()))
            {
                return(Forbid());
            }

            var model = resourceLink.Map(resourceLink);

            model.Id = id;
            model.DatasetResourceLinkId = datasetId;

            var updatedResourceLink = await _resourceLinkService.UpdateAsync(model);

            return(Json(new ResourceLinkViewModel().Map(updatedResourceLink)));
        }
        public async Task <ActionResult> EditApplicationLink(int applicationId, int id, [FromBody] ResourceLinkViewModel resourceLink)
        {
            try
            {
                var model = resourceLink.Map(resourceLink, applicationId);
                model.Id = id;

                var updatedResourceLink = await _resourceLinkService.UpdateAsync(model);

                return(Json(new ResourceLinkViewModel().Map(updatedResourceLink)));
            }
            catch (Exception)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }