From 389bbdf248273ee649a0a30fd65bdc60c6afb5b7 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Fri, 9 Dec 2022 13:14:24 +0900 Subject: feat: !WIP implement tenant service --- code/api/src/Services/TenantService.cs | 61 ++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 code/api/src/Services/TenantService.cs (limited to 'code/api/src/Services/TenantService.cs') 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 _logger; + + public TenantService(MainAppDatabase database, ILogger 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 -- cgit v1.3