1
0
mirror of https://github.com/bitwarden/server.git synced 2025-07-02 16:42:50 -05:00

add/edit group with collection ids

This commit is contained in:
Kyle Spearrin
2017-05-08 22:14:01 -04:00
parent e996a410dc
commit d166f9cca3
9 changed files with 191 additions and 2 deletions

View File

@ -2,6 +2,7 @@
using System.ComponentModel.DataAnnotations;
using Bit.Core.Models.Table;
using Newtonsoft.Json;
using System.Collections.Generic;
namespace Bit.Core.Models.Api
{
@ -10,6 +11,7 @@ namespace Bit.Core.Models.Api
[Required]
[StringLength(300)]
public string Name { get; set; }
public IEnumerable<string> CollectionIds { get; set; }
public Group ToGroup(Guid orgId)
{

View File

@ -1,5 +1,6 @@
using System;
using Bit.Core.Models.Table;
using System.Collections.Generic;
namespace Bit.Core.Models.Api
{
@ -22,4 +23,15 @@ namespace Bit.Core.Models.Api
public string OrganizationId { get; set; }
public string Name { get; set; }
}
public class GroupDetailsResponseModel : GroupResponseModel
{
public GroupDetailsResponseModel(Group group, IEnumerable<Guid> collectionIds)
: base(group, "groupDetails")
{
CollectionIds = collectionIds;
}
public IEnumerable<Guid> CollectionIds { get; set; }
}
}

View File

@ -7,6 +7,9 @@ namespace Bit.Core.Repositories
{
public interface IGroupRepository : IRepository<Group, Guid>
{
Task<Tuple<Group, ICollection<Guid>>> GetByIdWithCollectionsAsync(Guid id);
Task<ICollection<Group>> GetManyByOrganizationIdAsync(Guid organizationId);
Task CreateAsync(Group obj, IEnumerable<Guid> collectionIds);
Task ReplaceAsync(Group obj, IEnumerable<Guid> collectionIds);
}
}

View File

@ -6,6 +6,8 @@ using Dapper;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using Newtonsoft.Json;
using Bit.Core.Utilities;
namespace Bit.Core.Repositories.SqlServer
{
@ -19,6 +21,22 @@ namespace Bit.Core.Repositories.SqlServer
: base(connectionString)
{ }
public async Task<Tuple<Group, ICollection<Guid>>> GetByIdWithCollectionsAsync(Guid id)
{
using(var connection = new SqlConnection(ConnectionString))
{
var results = await connection.QueryMultipleAsync(
$"[{Schema}].[Group_ReadWithCollectionsById]",
new { Id = id },
commandType: CommandType.StoredProcedure);
var group = await results.ReadFirstOrDefaultAsync<Group>();
var colletionIds = (await results.ReadAsync<Guid>()).ToList();
return new Tuple<Group, ICollection<Guid>>(group, colletionIds);
}
}
public async Task<ICollection<Group>> GetManyByOrganizationIdAsync(Guid organizationId)
{
using(var connection = new SqlConnection(ConnectionString))
@ -31,5 +49,39 @@ namespace Bit.Core.Repositories.SqlServer
return results.ToList();
}
}
public async Task CreateAsync(Group obj, IEnumerable<Guid> collectionIds)
{
obj.SetNewId();
var objWithCollections = JsonConvert.DeserializeObject<GroupWithCollections>(JsonConvert.SerializeObject(obj));
objWithCollections.CollectionIds = collectionIds.ToGuidIdArrayTVP();
using(var connection = new SqlConnection(ConnectionString))
{
var results = await connection.ExecuteAsync(
$"[{Schema}].[Group_CreateWithCollections]",
objWithCollections,
commandType: CommandType.StoredProcedure);
}
}
public async Task ReplaceAsync(Group obj, IEnumerable<Guid> collectionIds)
{
var objWithCollections = JsonConvert.DeserializeObject<GroupWithCollections>(JsonConvert.SerializeObject(obj));
objWithCollections.CollectionIds = collectionIds.ToGuidIdArrayTVP();
using(var connection = new SqlConnection(ConnectionString))
{
var results = await connection.ExecuteAsync(
$"[{Schema}].[Group_UpdateWithCollections]",
objWithCollections,
commandType: CommandType.StoredProcedure);
}
}
public class GroupWithCollections : Group
{
public DataTable CollectionIds { get; set; }
}
}
}