diff options
Diffstat (limited to 'code/api')
| -rw-r--r-- | code/api/src/Data/Database/Internal/Tenant.cs | 11 | ||||
| -rw-r--r-- | code/api/src/Models/Database/Internal/Tenant.cs | 12 | ||||
| -rw-r--r-- | code/api/src/Services/TenantService.cs | 61 |
3 files changed, 73 insertions, 11 deletions
diff --git a/code/api/src/Data/Database/Internal/Tenant.cs b/code/api/src/Data/Database/Internal/Tenant.cs deleted file mode 100644 index b185c7a..0000000 --- a/code/api/src/Data/Database/Internal/Tenant.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace IOL.GreatOffice.Api.Data.Database; - -public class Tenant : BaseWithOwner -{ - public string Name { get; set; } - public string Description { get; set; } - public string ContactEmail { get; set; } - public Guid MasterUserId { get; set; } - public string MasterUserPassword { get; set; } - public ICollection<User> Users { get; set; } -} diff --git a/code/api/src/Models/Database/Internal/Tenant.cs b/code/api/src/Models/Database/Internal/Tenant.cs new file mode 100644 index 0000000..471164d --- /dev/null +++ b/code/api/src/Models/Database/Internal/Tenant.cs @@ -0,0 +1,12 @@ +namespace IOL.GreatOffice.Api.Data.Database; + +public class Tenant : BaseWithOwner +{ + public string Slug { get; set; } + public string Name { get; set; } + public string Description { get; set; } + public string ContactEmail { get; set; } + public Guid MasterUserId { get; set; } + public string MasterUserPassword { get; set; } + public ICollection<User> Users { get; set; } +}
\ No newline at end of file diff --git a/code/api/src/Services/TenantService.cs b/code/api/src/Services/TenantService.cs new file mode 100644 index 0000000..096465a --- /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 owner, string email) { + var tenant = new Tenant() { + Name = name, + Slug = Slug.Generate(true, name), + MasterUserId = owner, + 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: {0}", owner); + return default; + } + + if (!email.IsValidEmailAddress()) { + _logger.LogError("Tried to create a new tenant with an invalid email {0}", 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 {0} to tenant {1} but the tenant was not found"); + return; + } + + var user = _database.Users.FirstOrDefault(c => c.Id == userId); + if (user == default) { + _logger.LogError("Tried adding user {0} to tenant {1} but the user was not found"); + return; + } + + if (tenant.Users.Any(c => c.Id == user.Id)) { + _logger.LogDebug("User {0} is already a part of tenant {1}"); + return; + } + + tenant.Users.Add(user); + tenant.SetModified(); + _database.Tenants.Update(tenant); + _database.SaveChanges(); + _logger.LogInformation("Added user {0} to tenant {1}", userId, tenantId); + } +}
\ No newline at end of file |
