public async Task Edit(string partnerId, PartnerCreateEditModel data)
        {
            if (string.IsNullOrWhiteSpace(data.Name) || string.IsNullOrWhiteSpace(data.Category))
            {
                throw new ArgumentException(ErrorMessages.InvalidPartnerCreateData);
            }

            if (!await this.db.Partners.AnyAsync(p => p.Id == partnerId))
            {
                throw new ArgumentException(ErrorMessages.InvalidPartnerId);
            }

            Partner partner = await this.db.Partners.FirstOrDefaultAsync(p => p.Id == partnerId);

            partner.Name     = data.Name;
            partner.LogoUrl  = data.LogoUrl;
            partner.WebUrl   = data.WebUrl;
            partner.Category = data.Category;

            await this.db.SaveChangesAsync();

            await this.DeletePartnerLocations(partner.Id);

            if (data.PartnerLocations.Count > 0)
            {
                await this.CreatePartnerLocations(partner.Id, data.PartnerLocations);
            }
        }
        public async Task <string> Create(PartnerCreateEditModel data)
        {
            if (string.IsNullOrWhiteSpace(data.Name) || string.IsNullOrWhiteSpace(data.Category))
            {
                throw new ArgumentException(ErrorMessages.InvalidPartnerCreateData);
            }

            await this.ReindexPartners(); //Increment each partner's index with 1, so that the new partner comes first

            Partner partner = new Partner
            {
                Name     = data.Name,
                LogoUrl  = !string.IsNullOrWhiteSpace(data.LogoUrl) ? data.LogoUrl : "",
                WebUrl   = !string.IsNullOrWhiteSpace(data.WebUrl) ? data.WebUrl : "",
                Category = data.Category,
                Index    = 1
            };

            await this.db.Partners.AddAsync(partner);

            await this.db.SaveChangesAsync();

            if (data.PartnerLocations.Count > 0)
            {
                await this.CreatePartnerLocations(partner.Id, data.PartnerLocations);
            }

            return(partner.Id);
        }
        public async Task <IActionResult> Edit(string id, [FromBody] PartnerCreateEditModel partner)
        {
            return(await Execute(true, true, async() =>
            {
                await this.partners.Edit(id, partner);

                return this.Ok(new { partnerId = id });
            }));
        }
        public async Task <IActionResult> Create([FromBody] PartnerCreateEditModel partner)
        {
            return(await Execute(true, true, async() =>
            {
                string partnerId = await this.partners.Create(partner);

                return this.Ok(new { partnerId = partnerId });
            }));
        }