1
0
mirror of https://github.com/bitwarden/server synced 2026-01-07 19:13:50 +00:00

event sql table and repo

This commit is contained in:
Kyle Spearrin
2017-12-12 14:22:22 -05:00
parent 7b359053d6
commit ce1680a009
11 changed files with 225 additions and 19 deletions

View File

@@ -392,8 +392,7 @@ namespace Bit.Core.Repositories.SqlServer
{
if(folders.Any())
{
using(var bulkCopy = new SqlBulkCopy(connection,
SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.FireTriggers, transaction))
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
{
bulkCopy.DestinationTableName = "[dbo].[Folder]";
var dataTable = BuildFoldersTable(folders);
@@ -401,8 +400,7 @@ namespace Bit.Core.Repositories.SqlServer
}
}
using(var bulkCopy = new SqlBulkCopy(connection,
SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.FireTriggers, transaction))
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
{
bulkCopy.DestinationTableName = "[dbo].[Cipher]";
var dataTable = BuildCiphersTable(ciphers);

View File

@@ -0,0 +1,115 @@
using System;
using Bit.Core.Models.Table;
using System.Threading.Tasks;
using System.Collections.Generic;
using Bit.Core.Models.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Data;
namespace Bit.Core.Repositories.SqlServer
{
public class EventRepository : Repository<Event, Guid>, IEventRepository
{
public EventRepository(GlobalSettings globalSettings)
: this(globalSettings.SqlServer.ConnectionString)
{ }
public EventRepository(string connectionString)
: base(connectionString)
{ }
public Task<ICollection<IEvent>> GetManyByUserAsync(Guid userId, DateTime startDate, DateTime endDate)
{
// TODO
throw new NotImplementedException();
}
public async Task CreateAsync(IEvent e)
{
if(!(e is Event ev))
{
ev = new Event(e);
}
await base.CreateAsync(ev);
}
public async Task CreateManyAsync(IList<IEvent> entities)
{
if(!entities.Any())
{
return;
}
using(var connection = new SqlConnection(ConnectionString))
{
connection.Open();
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, null))
{
bulkCopy.DestinationTableName = "[dbo].[Event]";
var dataTable = BuildEventsTable(entities.Select(e => e is Event ? e as Event : new Event(e)));
await bulkCopy.WriteToServerAsync(dataTable);
}
}
}
private DataTable BuildEventsTable(IEnumerable<Event> events)
{
var e = events.FirstOrDefault();
if(e == null)
{
throw new ApplicationException("Must have some events to bulk import.");
}
var eventsTable = new DataTable("EventDataTable");
var idColumn = new DataColumn(nameof(e.Id), e.Id.GetType());
eventsTable.Columns.Add(idColumn);
var typeColumn = new DataColumn(nameof(e.Type), typeof(int));
eventsTable.Columns.Add(typeColumn);
var dateColumn = new DataColumn(nameof(e.Date), e.Date.GetType());
eventsTable.Columns.Add(dateColumn);
var userIdColumn = new DataColumn(nameof(e.UserId), typeof(Guid));
eventsTable.Columns.Add(userIdColumn);
var organizationIdColumn = new DataColumn(nameof(e.OrganizationId), typeof(Guid));
eventsTable.Columns.Add(organizationIdColumn);
var cipherIdColumn = new DataColumn(nameof(e.CipherId), typeof(Guid));
eventsTable.Columns.Add(cipherIdColumn);
var groupIdColumn = new DataColumn(nameof(e.GroupId), typeof(Guid));
eventsTable.Columns.Add(groupIdColumn);
var collectionIdColumn = new DataColumn(nameof(e.CollectionId), typeof(Guid));
eventsTable.Columns.Add(collectionIdColumn);
var actingUserIdColumn = new DataColumn(nameof(e.ActingUserId), typeof(Guid));
eventsTable.Columns.Add(actingUserIdColumn);
var organizationUserIdColumn = new DataColumn(nameof(e.OrganizationUserId), typeof(Guid));
eventsTable.Columns.Add(organizationUserIdColumn);
var keys = new DataColumn[1];
keys[0] = idColumn;
eventsTable.PrimaryKey = keys;
foreach(var ev in events)
{
ev.SetNewId();
var row = eventsTable.NewRow();
row[idColumn] = ev.Id;
row[typeColumn] = ev.Type;
row[dateColumn] = ev.Date;
row[userIdColumn] = ev.UserId;
row[organizationIdColumn] = ev.OrganizationId;
row[cipherIdColumn] = ev.CipherId;
row[groupIdColumn] = ev.GroupId;
row[collectionIdColumn] = ev.CollectionId;
row[actingUserIdColumn] = ev.ActingUserId;
row[organizationUserIdColumn] = ev.OrganizationUserId;
eventsTable.Rows.Add(row);
}
return eventsTable;
}
}
}