public async Task <IActionResult> EditAdmin(GoverningBodyAdministrationDTO adminDto)
        {
            await _governingBodyAdministrationService.EditGoverningBodyAdministratorAsync(adminDto);

            _logger.LogInformation($"Admin with User-ID {{{adminDto.UserId}}} was edited.");

            return(Ok(adminDto));
        }
        public async Task <IActionResult> AddAdmin(GoverningBodyAdministrationDTO newAdmin)
        {
            await _governingBodyAdministrationService.AddGoverningBodyAdministratorAsync(newAdmin);

            _logger.LogInformation($"User {{{newAdmin.UserId}}} became Admin for Governing Body {{{newAdmin.GoverningBodyId}}}" +
                                   $" with role {{{newAdmin.AdminType.AdminTypeName}}}.");

            return(Ok(newAdmin));
        }
        /// <inheritdoc />
        public async Task <GoverningBodyAdministrationDTO> EditGoverningBodyAdministratorAsync(GoverningBodyAdministrationDTO governingBodyAdministrationDto)
        {
            var admin = await _repositoryWrapper.GoverningBodyAdministration.GetFirstOrDefaultAsync(a => a.Id == governingBodyAdministrationDto.ID);

            var adminType = await _adminTypeService.GetAdminTypeByNameAsync(governingBodyAdministrationDto.AdminType.AdminTypeName);

            if (adminType.ID == admin.AdminTypeId)
            {
                admin.StartDate = governingBodyAdministrationDto.StartDate ?? DateTime.Now;
                admin.EndDate   = governingBodyAdministrationDto.EndDate;

                _repositoryWrapper.GoverningBodyAdministration.Update(admin);
                await _repositoryWrapper.SaveAsync();
            }
            else
            {
                await RemoveAdministratorAsync(governingBodyAdministrationDto.ID);

                governingBodyAdministrationDto = await AddGoverningBodyAdministratorAsync(governingBodyAdministrationDto);
            }

            return(governingBodyAdministrationDto);
        }
        /// <inheritdoc />
        public async Task <GoverningBodyAdministrationDTO> AddGoverningBodyAdministratorAsync(GoverningBodyAdministrationDTO governingBodyAdministrationDto)
        {
            var adminType = await _adminTypeService.GetAdminTypeByNameAsync(governingBodyAdministrationDto.AdminType.AdminTypeName);

            governingBodyAdministrationDto.Status = DateTime.Now < governingBodyAdministrationDto.EndDate || governingBodyAdministrationDto.EndDate == null;
            var governingBodyAdministration = new GoverningBodyAdministration
            {
                StartDate       = governingBodyAdministrationDto.StartDate ?? DateTime.Now,
                EndDate         = governingBodyAdministrationDto.EndDate,
                AdminTypeId     = adminType.ID,
                GoverningBodyId = governingBodyAdministrationDto.GoverningBodyId,
                UserId          = governingBodyAdministrationDto.UserId,
                Status          = governingBodyAdministrationDto.Status
            };

            var user = await _userManager.FindByIdAsync(governingBodyAdministrationDto.UserId);

            var role = adminType.AdminTypeName == Roles.GoverningBodyHead ? Roles.GoverningBodyHead : Roles.GoverningBodySecretary;
            await _userManager.AddToRoleAsync(user, role);

            await CheckGoverningBodyHasAdmin(governingBodyAdministrationDto.GoverningBodyId, adminType.AdminTypeName);

            await _repositoryWrapper.GoverningBodyAdministration.CreateAsync(governingBodyAdministration);

            await _repositoryWrapper.SaveAsync();

            governingBodyAdministrationDto.ID = governingBodyAdministration.Id;

            return(governingBodyAdministrationDto);
        }