コード例 #1
0
        public async Task <IActionResult> GetTenantById(int tenantId)
        {
            if (this.UserInRole(Role.Admin) || this.UserInRole(Role.Manager))
            {
                var tenant = await _tenantRepository.TenantFromId(tenantId);

                if (tenant == null)
                {
                    var err = new DTO.ErrorBuilder()
                              .Message("Tenant not found.")
                              .Code(404)
                              .Build();
                    return(err);
                }

                var unit = await _tenantRepository.UnitFromTenantId(tenant.TenantId);

                var unitNumber = unit == null ? "" : unit.UnitNumber;
                var tenantDTO  = new DTO.TenantInfoDTO(tenant, unitNumber);

                return(new ObjectResult(tenantDTO));
            }
            else
            {
                var err = new DTO.ErrorBuilder()
                          .Message("You are not authorized to view tenants by ID.")
                          .Code(403)
                          .Build();
                return(err);
            }
        }
コード例 #2
0
        public async Task <DTO.TenantInfoDTO> AddTenant(DTO.TenantInfoDTO info)
        {
            var emailAlreadyExists = await _context.Tenants
                                     .Where(t => t.Email.ToLower() == info.Email.ToLower())
                                     .CountAsync() > 0;

            if (emailAlreadyExists)
            {
                return(null);
            }

            if (info == null)
            {
                return(null);
            }

            var tenant = new Tenant();

            tenant.FirstName   = info.FirstName;
            tenant.LastName    = info.LastName;
            tenant.Email       = info.Email;
            tenant.PhoneNumber = info.PhoneNumber;

            _context.Add(tenant);
            await _context.SaveChangesAsync();

            await AssignToUnit(tenant.TenantId, info.UnitNumber);

            await _context.SaveChangesAsync();

            return(new DTO.TenantInfoDTO(tenant, info.UnitNumber));
        }
コード例 #3
0
        public async Task <IActionResult> GetTenants()
        {
            if (this.UserInRole(Role.Admin) || this.UserInRole(Role.Manager))
            {
                var tenants = await _tenantRepository.GetTenants();

                var tenantDTOs = new List <DTO.TenantInfoDTO>();

                foreach (var tenant in tenants)
                {
                    var unit = await _tenantRepository.UnitFromTenantId(tenant.TenantId);

                    var unitNumber = unit == null ? "" : unit.UnitNumber;
                    var tenantDTO  = new DTO.TenantInfoDTO(tenant, unitNumber);
                    tenantDTOs.Add(tenantDTO);
                }

                return(new ObjectResult(tenantDTOs));
            }
            else
            {
                var err = new DTO.ErrorBuilder()
                          .Message("You are not authorized to view tenant lists.")
                          .Code(403)
                          .Build();
                return(err);
            }
        }
コード例 #4
0
        public async Task <DTO.TenantInfoDTO> UpdateTenantInfo(int tenantId, DTO.TenantInfoDTO newInfo)
        {
            var tenant = await TenantFromId(tenantId);

            if (tenant == null)
            {
                return(await AddTenant(newInfo));
            }

            tenant.FirstName   = newInfo.FirstName;
            tenant.LastName    = newInfo.LastName;
            tenant.Email       = newInfo.Email;
            tenant.PhoneNumber = newInfo.PhoneNumber;

            var unit = await AssignToUnit(tenantId, newInfo.UnitNumber);

            await _context.SaveChangesAsync();

            if (unit == null)
            {
                return(new DTO.TenantInfoDTO(tenant, null));
            }
            else
            {
                return(new DTO.TenantInfoDTO(tenant, unit.UnitNumber));
            }
        }
コード例 #5
0
        public async Task <IActionResult> UpdateTenantInfo(DTO.TenantInfoDTO info)
        {
            if (this.UserInRole(Role.Tenant))
            {
                var userId   = this.UserIdFromApiKey();
                var tenantId = await _tenantRepository.TenantIdFromUserId(userId);

                if (tenantId == null)
                {
                    var err = new DTO.ErrorBuilder()
                              .Message("Not a tenant")
                              .Code(400)
                              .Build();
                    return(err);
                }

                var unitNumber = await _tenantRepository.UnitFromTenantId((int)tenantId);

                if (unitNumber == null)
                {
                    var err = new DTO.ErrorBuilder()
                              .Message("Not assigned to a unit")
                              .Code(400)
                              .Build();
                    return(err);
                }

                // Prevent user from changing their own unit number.
                info.UnitNumber = unitNumber.UnitNumber;

                var tenant = await _tenantRepository.UpdateTenantInfo((int)tenantId, info);

                return(new ObjectResult(tenant));
            }
            else if (this.UserInRole(Role.Manager) || this.UserInRole(Role.Admin))
            {
                var tenant = await _tenantRepository.UpdateTenantInfo(info.TenantId, info);

                return(new ObjectResult(tenant));
            }
            else
            {
                var err = new DTO.ErrorBuilder()
                          .Message("Not authorized to edit tenant information.")
                          .Code(403)
                          .Build();
                return(err);
            }
        }
コード例 #6
0
        public async Task <IActionResult> GetTenant()
        {
            if (this.UserInRole(Role.Tenant))
            {
                var userId = this.UserIdFromApiKey();
                var tenant = await _tenantRepository.TenantFromUserId(userId);

                if (tenant == null)
                {
                    var err = new DTO.ErrorBuilder()
                              .Message("Not a tenant")
                              .Code(400)
                              .Build();
                    return(err);
                }

                var unit = await _tenantRepository.UnitFromTenantId(tenant.TenantId);

                var unitNumber = unit == null ? "" : unit.UnitNumber;
                var tenantDTO  = new DTO.TenantInfoDTO(tenant, unitNumber);
                return(new ObjectResult(tenantDTO));
            }
            else if (this.UserInRole(Role.Admin) || this.UserInRole(Role.Manager))
            {
                var err = new DTO.ErrorBuilder()
                          .Message("This route is for tenants only.")
                          .Code(400)
                          .Build();
                return(new ObjectResult(err));
            }
            else
            {
                var err = new DTO.ErrorBuilder()
                          .Message("You are not authorized to view tenant info.")
                          .Code(403)
                          .Build();
                _logger.LogWarning($"Unauthorized access attempt to view tenant info.");
                return(new ObjectResult(err));
            }
        }
コード例 #7
0
        public async Task <DTO.TenantInfoDTO> AddTenant(DTO.TenantInfoDTO info)
        {
            if (info == null)
            {
                return(null);
            }

            var tenant = new Tenant();

            tenant.FirstName   = info.FirstName;
            tenant.LastName    = info.LastName;
            tenant.Email       = info.Email;
            tenant.PhoneNumber = info.PhoneNumber;

            _context.Add(tenant);

            await AssignToUnit(tenant.TenantId, info.UnitNumber);

            await _context.SaveChangesAsync();

            return(new DTO.TenantInfoDTO(tenant, info.UnitNumber));
        }
コード例 #8
0
        public async Task <DTO.TenantInfoDTO> UpdateTenantInfo(int tenantId, DTO.TenantInfoDTO newInfo)
        {
            var emailAlreadyExists = await _context.Tenants
                                     .Where(t => t.Email.ToLower() == newInfo.Email.ToLower())
                                     .Where(t => t.TenantId != tenantId)
                                     .CountAsync() > 0;

            if (emailAlreadyExists)
            {
                return(null);
            }

            var tenant = await TenantFromId(tenantId);

            if (tenant == null)
            {
                return(await AddTenant(newInfo));
            }

            tenant.FirstName   = newInfo.FirstName;
            tenant.LastName    = newInfo.LastName;
            tenant.Email       = newInfo.Email;
            tenant.PhoneNumber = newInfo.PhoneNumber;

            var unit = await AssignToUnit(tenantId, newInfo.UnitNumber);

            await _context.SaveChangesAsync();

            if (unit == null)
            {
                return(new DTO.TenantInfoDTO(tenant, null));
            }
            else
            {
                return(new DTO.TenantInfoDTO(tenant, unit.UnitNumber));
            }
        }