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, })); }