Ejemplo n.º 1
0
        public async Task <IActionResult> PostAsync([FromBody] CreateTenantCommand model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var currentUser   = _workContext.GetUserCode();
            var currentTenant = await _workContext.GetCurrentTenantAsync();

            var repoTenant = _uow.GetRepository <ITenantRepository>();

            if (await repoTenant.AnyByNameAsync(model.Info.TaxCode))
            {
                throw new Exception("Mã số thuế đã bị trùng");
            }

            if (await repoTenant.AnyByHostNameAsync(model.HostName))
            {
                throw new Exception("Tên miền đã bị trùng");
            }

            //check tên tk có bị trùng với tk root của chi nhánh không
            //(tk này đặc biệt không được gán nhóm quyền nào mà chỉ có quyền là adminTenant)
            var userRootTenant = "root";

            if (model.User.UserName.ToUpper() == userRootTenant.ToUpper())
            {
                throw new Exception("Tên đăng nhập không hợp lệ. Vui lòng nhập tên đăng nhập không phải là admin!");
            }

            //Nếu ko nhập pasword sẽ tự động random
            var isRandomPassword = false;

            if (string.IsNullOrEmpty(model.User.Password))
            {
                model.User.Password = RandomExtension.Random(10);
                isRandomPassword    = true;
            }

            //insert tenant, tenantInfo
            var tenantInfo = await InsertTenant(model, currentUser, currentTenant);

            //Insert user root của tenant
            var passwordRoot = RandomExtension.Random(10);
            var rootUser     = await InsertRootTenantUserAsync(model, userRootTenant, passwordRoot, currentUser, tenantInfo.Code);

            //insert quyền  mặc định
            var adminRole = await AddDefaultRolesAsync(tenantInfo, currentUser);

            //Insert user của chi nhánh mà nsd nhập và gán quyền admin mặc định
            var adminUser = await InsertAdminTenantUserAsync(model, currentUser, tenantInfo.Code, adminRole.Id);

            await _uow.CommitAsync();

            ////gửi mail thông báo tài khoản root mật khẩu
            //var db = _redis.GetDatabase();
            //await db.ListLeftPushAsync(KeyQueueBackground.SendMail, JsonConvert.SerializeObject(new
            //{
            //    Action = "SendAccountTenant",
            //    Datas = JsonConvert.SerializeObject(new
            //    {
            //        TenantCode = currentTenant.Code,
            //        IdUser = rootUser.Id,
            //        Password = passwordRoot,
            //    })
            //}));

            ////gửi mail thông báo tài khoản admin mật khẩu nếu là password tự động
            if (isRandomPassword)
            {
                //    await db.ListLeftPushAsync(KeyQueueBackground.SendMail, JsonConvert.SerializeObject(new
                //    {
                //        Action = "SendAccountTenant",
                //        Datas = JsonConvert.SerializeObject(new
                //        {
                //            TenantCode = currentTenant.Code,
                //            IdUser = adminUser.Id,
                //            Password = model.User.Password,
                //        })
                //    }));
            }

            return(Ok(new
            {
                TenantCode = tenantInfo.Code,
            }));
        }