diff --git a/util/Seeder/Factories/DeviceSeeder.cs b/util/Seeder/Factories/DeviceSeeder.cs new file mode 100644 index 0000000000..70192fb07e --- /dev/null +++ b/util/Seeder/Factories/DeviceSeeder.cs @@ -0,0 +1,21 @@ +using Bit.Core.Entities; +using Bit.Core.Enums; +using Bit.Core.Utilities; + +namespace Bit.Seeder.Factories; + +internal static class DeviceSeeder +{ + internal static Device Create(Guid userId, DeviceType deviceType, string deviceName, string identifier, string? pushToken) + { + return new Device + { + Id = CoreHelpers.GenerateComb(), + UserId = userId, + Type = deviceType, + Name = deviceName, + Identifier = identifier, + PushToken = pushToken + }; + } +} diff --git a/util/Seeder/Scenes/UserDeviceScene.cs b/util/Seeder/Scenes/UserDeviceScene.cs new file mode 100644 index 0000000000..9c03103e2e --- /dev/null +++ b/util/Seeder/Scenes/UserDeviceScene.cs @@ -0,0 +1,47 @@ +using System.ComponentModel.DataAnnotations; +using Bit.Core.Enums; +using Bit.Core.Repositories; +using Bit.Seeder.Factories; +using Bit.Seeder.Services; + +namespace Bit.Seeder.Scenes; + +public class UserDeviceScene(IUserRepository userRepository, IDeviceRepository deviceRepository, IManglerService manglerService) : IScene +{ + public class Request + { + [Required] + public required Guid UserId { get; set; } + [Required] + public required DeviceType Type { get; set; } + [Required] + public required string Name { get; set; } + [Required] + public required string Identifier { get; set; } + public string? PushToken { get; set; } + } + + public class Result + { + public Guid DeviceId { get; init; } + } + + public async Task> SeedAsync(Request request) + { + var user = await userRepository.GetByIdAsync(request.UserId); + if (user == null) + { + throw new Exception($"User with ID {request.UserId} not found."); + } + + var device = DeviceSeeder.Create(request.UserId, request.Type, request.Name, request.Identifier, request.PushToken); + await deviceRepository.CreateAsync(device); + + return new SceneResult( + result: new Result + { + DeviceId = device.Id, + }, + mangleMap: manglerService.GetMangleMap()); + } +}