diff options
Diffstat (limited to 'code/api/src/Services/TenantService.cs')
| -rw-r--r-- | code/api/src/Services/TenantService.cs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/code/api/src/Services/TenantService.cs b/code/api/src/Services/TenantService.cs new file mode 100644 index 0000000..0de6f53 --- /dev/null +++ b/code/api/src/Services/TenantService.cs @@ -0,0 +1,61 @@ +namespace IOL.GreatOffice.Api.Services; + +public class TenantService +{ + private readonly MainAppDatabase _database; + private readonly ILogger<TenantService> _logger; + + public TenantService(MainAppDatabase database, ILogger<TenantService> logger) { + _database = database; + _logger = logger; + } + + public Tenant CreateTenant(string name, Guid masterUserId, string email) { + var tenant = new Tenant() { + Name = name, + Slug = Slug.Generate(true, name), + MasterUserId = masterUserId, + ContactEmail = email + }; + + var masterUserExists = _database.Users.Any(c => c.Id == tenant.MasterUserId); + if (!masterUserExists) { + _logger.LogError("Tried to create a new tenant with a non-existent master user: {masterUserId}", masterUserId); + return default; + } + + if (!email.IsValidEmailAddress()) { + _logger.LogError("Tried to create a new tenant with an invalid email {contactEmail}", email); + return default; + } + + _database.Tenants.Add(tenant); + _database.SaveChanges(); + return tenant; + } + + public void AddUserToTenant(Guid userId, Guid tenantId) { + var tenant = _database.Tenants.FirstOrDefault(c => c.Id == tenantId); + if (tenant == default) { + _logger.LogError("Tried adding user {userId} to tenant {tenantId} but the tenant was not found", userId, tenantId); + return; + } + + var user = _database.Users.FirstOrDefault(c => c.Id == userId); + if (user == default) { + _logger.LogError("Tried adding user {userId} to tenant {tenantId} but the user was not found", userId, tenantId); + return; + } + + if (tenant.Users.Any(c => c.Id == user.Id)) { + _logger.LogDebug("User {userId} is already a part of tenant {tenantId}", userId, tenantId); + return; + } + + tenant.Users.Add(user); + tenant.SetModified(); + _database.Tenants.Update(tenant); + _database.SaveChanges(); + _logger.LogInformation("Added user {userId} to tenant {tenantId}", userId, tenantId); + } +}
\ No newline at end of file |
