From ca8ba6ac92c8ec50daad65311dbdf10b180cf477 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Sat, 18 Jun 2016 14:02:25 -0400 Subject: [PATCH] Device repository and cascase device delete on user delete --- src/Api/Startup.cs | 1 + src/Core/Domains/Device.cs | 21 +++++++++ src/Core/Enums/DeviceType.cs | 8 ++++ src/Core/Repositories/IDeviceRepository.cs | 13 ++++++ .../SqlServer/DeviceRepository.cs | 46 +++++++++++++++++++ .../dbo/Stored Procedures/User_DeleteById.sql | 6 +++ 6 files changed, 95 insertions(+) create mode 100644 src/Core/Domains/Device.cs create mode 100644 src/Core/Enums/DeviceType.cs create mode 100644 src/Core/Repositories/IDeviceRepository.cs create mode 100644 src/Core/Repositories/SqlServer/DeviceRepository.cs diff --git a/src/Api/Startup.cs b/src/Api/Startup.cs index 914034f745..16d0e12d3d 100644 --- a/src/Api/Startup.cs +++ b/src/Api/Startup.cs @@ -67,6 +67,7 @@ namespace Bit.Api // Repositories services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); // Context services.AddScoped(); diff --git a/src/Core/Domains/Device.cs b/src/Core/Domains/Device.cs new file mode 100644 index 0000000000..62d3e86199 --- /dev/null +++ b/src/Core/Domains/Device.cs @@ -0,0 +1,21 @@ +using System; +using Bit.Core.Utilities; + +namespace Bit.Core.Domains +{ + public class Device : IDataObject + { + public Guid Id { get; set; } + public Guid UserId { get; set; } + public string Name { get; set; } + public Enums.DeviceType Type { get; set; } + public string PushToken { get; set; } + public DateTime CreationDate { get; internal set; } = DateTime.UtcNow; + public DateTime RevisionDate { get; internal set; } = DateTime.UtcNow; + + public void SetNewId() + { + Id = CoreHelpers.GenerateComb(); + } + } +} diff --git a/src/Core/Enums/DeviceType.cs b/src/Core/Enums/DeviceType.cs new file mode 100644 index 0000000000..b4fcf5a37a --- /dev/null +++ b/src/Core/Enums/DeviceType.cs @@ -0,0 +1,8 @@ +namespace Bit.Core.Enums +{ + public enum DeviceType : short + { + iOS = 0, + Android = 1 + } +} diff --git a/src/Core/Repositories/IDeviceRepository.cs b/src/Core/Repositories/IDeviceRepository.cs new file mode 100644 index 0000000000..acd14c4644 --- /dev/null +++ b/src/Core/Repositories/IDeviceRepository.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Bit.Core.Domains; + +namespace Bit.Core.Repositories +{ + public interface IDeviceRepository : IRepository + { + Task GetByIdAsync(Guid id, Guid userId); + Task> GetManyByUserIdAsync(Guid userId); + } +} diff --git a/src/Core/Repositories/SqlServer/DeviceRepository.cs b/src/Core/Repositories/SqlServer/DeviceRepository.cs new file mode 100644 index 0000000000..2ae9096c65 --- /dev/null +++ b/src/Core/Repositories/SqlServer/DeviceRepository.cs @@ -0,0 +1,46 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using System.Data.SqlClient; +using System.Threading.Tasks; +using Bit.Core.Domains; +using System.Data; +using Dapper; + +namespace Bit.Core.Repositories.SqlServer +{ + public class DeviceRepository : Repository, IDeviceRepository + { + public DeviceRepository(GlobalSettings globalSettings) + : this(globalSettings.SqlServer.ConnectionString) + { } + + public DeviceRepository(string connectionString) + : base(connectionString) + { } + + public async Task GetByIdAsync(Guid id, Guid userId) + { + var device = await GetByIdAsync(id); + if(device == null || device.UserId != userId) + { + return null; + } + + return device; + } + + public async Task> GetManyByUserIdAsync(Guid userId) + { + using(var connection = new SqlConnection(ConnectionString)) + { + var results = await connection.QueryAsync( + $"[{Schema}].[{Table}_ReadByUserId]", + new { UserId = userId }, + commandType: CommandType.StoredProcedure); + + return results.ToList(); + } + } + } +} diff --git a/src/Sql/dbo/Stored Procedures/User_DeleteById.sql b/src/Sql/dbo/Stored Procedures/User_DeleteById.sql index 84223bb56c..6dd91e9dff 100644 --- a/src/Sql/dbo/Stored Procedures/User_DeleteById.sql +++ b/src/Sql/dbo/Stored Procedures/User_DeleteById.sql @@ -12,6 +12,12 @@ BEGIN WHERE [UserId] = @Id + DELETE + FROM + [dbo].[Device] + WHERE + [UserId] = @Id + DELETE FROM [dbo].[User]