Skip to content

Commit 4d014e7

Browse files
author
Chris Young
committed
Merge branch 'release/7.0.0'
2 parents 900622c + 64c0e42 commit 4d014e7

File tree

16 files changed

+157
-72
lines changed

16 files changed

+157
-72
lines changed

.DS_Store

6 KB
Binary file not shown.

src/.DS_Store

6 KB
Binary file not shown.

src/ArchitectNow.Models/ArchitectNow.Models.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.1.1" />
2424
<PackageReference Include="Microsoft.Extensions.Options" Version="2.1.1" />
2525
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.1.1" />
26-
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="5.2.4" />
26+
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="5.3.0" />
2727
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
2828
</ItemGroup>
2929
<ItemGroup>

src/ArchitectNow.Mongo/ArchitectNow.Mongo.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<TargetFrameworks>netstandard2.0</TargetFrameworks>
44
<Authors>ArchitectNow</Authors>
@@ -25,7 +25,7 @@
2525
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.1.1" />
2626
<PackageReference Include="Microsoft.Extensions.Options" Version="2.1.1" />
2727
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.1.1" />
28-
<PackageReference Include="MongoDB.Driver" Version="2.7.0" />
28+
<PackageReference Include="MongoDB.Driver" Version="2.7.2" />
2929
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
3030
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
3131
<PackageReference Include="System.ComponentModel.Annotations" Version="4.5.0" />

src/ArchitectNow.Mongo/Db/BaseRepository.cs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414

1515
namespace ArchitectNow.Mongo.Db
1616
{
17-
//Test notifications
18-
public abstract class BaseRepository<TModel, TDataContext> : IBaseRepository<TModel> where TModel : BaseDocument
17+
public abstract class BaseRepository<TModel, TDataContext, TId> : IBaseRepository<TModel, TId> where TModel : BaseDocument<TId>
1918
where TDataContext : MongoDataContext
19+
where TId : IComparable<TId>
2020
{
2121
private readonly IValidator<TModel> _validator;
2222

@@ -87,27 +87,32 @@ public virtual Task<List<TModel>> GetAllAsync()
8787
return results;
8888
}
8989

90-
public virtual Task<TModel> GetOneAsync(Guid id)
90+
protected abstract FilterDefinition<TModel> AreIdsEqual(TId id);
91+
protected abstract TId CreateNewId();
92+
93+
public virtual Task<TModel> GetOneAsync(TId id)
9194
{
92-
var result = GetCollection().Find(x => x.Id == id).FirstOrDefaultAsync();
95+
var filter = AreIdsEqual(id);
96+
97+
var result = GetCollection().Find(filter).FirstOrDefaultAsync();
9398

9499
return result;
95100
}
96101

97102
public virtual async Task<TModel> SaveAsync(TModel item)
98103
{
99-
if (item.Id != Guid.Empty)
104+
if (!Equals(item.Id, default(TId)))
100105
item.UpdatedDate = DateTime.UtcNow;
101-
106+
102107
var errors = await ValidateObject(item);
103108

104109
if (errors.Any())
105110
throw new ValidationException("A validation error has occured saving item of type '" + item.GetType(),
106111
errors);
107112

108-
if (item.Id == Guid.Empty)
113+
if (Equals(item.Id, default(TId)))
109114
{
110-
item.Id = Guid.NewGuid();
115+
item.Id = CreateNewId();
111116
await GetCollection().InsertOneAsync(item);
112117
}
113118
else
@@ -123,7 +128,7 @@ public virtual async Task<TModel> SaveAsync(TModel item)
123128
return item;
124129
}
125130

126-
public virtual async Task<bool> DeleteAsync(Guid id)
131+
public virtual async Task<bool> DeleteAsync(TId id)
127132
{
128133
var filter = Builders<TModel>.Filter.Eq("_id", id);
129134

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System;
2+
using ArchitectNow.Mongo.Models;
3+
using ArchitectNow.Services.Contexts;
4+
using FluentValidation;
5+
using Microsoft.Extensions.Logging;
6+
using MongoDB.Driver;
7+
8+
namespace ArchitectNow.Mongo.Db
9+
{
10+
public abstract class GuidBaseRepository<TModel, TDataContext> : BaseRepository<TModel, TDataContext, Guid> where TModel : BaseDocument<Guid>
11+
where TDataContext : MongoDataContext
12+
{
13+
protected GuidBaseRepository(ILogger<TModel> logger, IMongoDbUtilities mongoDbUtilities,
14+
IDataContextService<TDataContext> dataContextService,
15+
IValidator<TModel> validator = null) : base(logger, mongoDbUtilities, dataContextService, validator)
16+
{
17+
}
18+
19+
protected override FilterDefinition<TModel> AreIdsEqual(Guid id)
20+
{
21+
var filter = new FilterDefinitionBuilder<TModel>().Where(x => x.Id == id);
22+
return filter;
23+
}
24+
25+
protected override Guid CreateNewId() => Guid.NewGuid();
26+
}
27+
}

src/ArchitectNow.Mongo/Db/IBaseRepository.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@
55

66
namespace ArchitectNow.Mongo.Db
77
{
8-
public interface IBaseRepository<T> : IBaseRepository
9-
where T : BaseDocument
8+
public interface IBaseRepository<T, TId> : IBaseRepository
9+
where T : BaseDocument<TId>
10+
where TId: IComparable<TId>
1011
{
1112
Task<bool> DeleteAllAsync();
1213
Task<List<T>> GetAllAsync();
13-
Task<T> GetOneAsync(Guid id);
14+
Task<T> GetOneAsync(TId id);
1415
Task<T> SaveAsync(T item);
15-
Task<bool> DeleteAsync(Guid id);
16+
Task<bool> DeleteAsync(TId id);
1617
Task<bool> DeleteAsync(T item);
1718
}
1819

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using ArchitectNow.Mongo.Models;
2+
using ArchitectNow.Services.Contexts;
3+
using FluentValidation;
4+
using Microsoft.Extensions.Logging;
5+
using MongoDB.Bson;
6+
using MongoDB.Driver;
7+
8+
namespace ArchitectNow.Mongo.Db
9+
{
10+
public abstract class ObjectIdBaseRepository<TModel, TDataContext> : BaseRepository<TModel, TDataContext, ObjectId> where TModel : BaseDocument<ObjectId>
11+
where TDataContext : MongoDataContext
12+
{
13+
protected ObjectIdBaseRepository(ILogger<TModel> logger, IMongoDbUtilities mongoDbUtilities,
14+
IDataContextService<TDataContext> dataContextService,
15+
IValidator<TModel> validator = null) : base(logger, mongoDbUtilities, dataContextService, validator)
16+
{
17+
}
18+
19+
protected override FilterDefinition<TModel> AreIdsEqual(ObjectId id)
20+
{
21+
var filter = new FilterDefinitionBuilder<TModel>().Where(x => x.Id == id);
22+
return filter;
23+
}
24+
25+
protected override ObjectId CreateNewId() => ObjectId.GenerateNewId();
26+
}
27+
}

src/ArchitectNow.Mongo/Models/BaseDocument.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,29 @@
22
using System.Collections.Generic;
33
using System.ComponentModel.DataAnnotations;
44
using MongoDB.Bson.Serialization.Attributes;
5-
using MongoDB.Bson.Serialization.IdGenerators;
65
using Newtonsoft.Json;
76

87
namespace ArchitectNow.Mongo.Models
98
{
10-
public abstract class BaseDocument
9+
public abstract class BaseDocument<TId> where TId: IComparable<TId>
1110
{
12-
protected BaseDocument()
11+
protected BaseDocument()
1312
{
1413
ValidationErrors = new List<ValidationResult>();
1514
}
16-
17-
[BsonId(IdGenerator = typeof(CombGuidGenerator))]
18-
public Guid Id { get; set; }
19-
20-
/// <summary>
15+
16+
[BsonIgnore]
17+
public abstract TId Id { get; set; }
18+
19+
/// <summary>
2120
/// Gets or sets the created date.
2221
/// </summary>
2322
/// <value>
2423
/// The created date.
2524
/// </value>
2625
public DateTimeOffset? CreatedDate { get; set; } = DateTime.UtcNow;
2726

28-
public DateTimeOffset? UpdatedDate { get; set; } = DateTime.UtcNow;
27+
public DateTimeOffset? UpdatedDate { get; set; } = DateTime.UtcNow;
2928

3029
[JsonIgnore]
3130
[BsonIgnore]
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System;
2+
using MongoDB.Bson.Serialization.Attributes;
3+
using MongoDB.Bson.Serialization.IdGenerators;
4+
5+
namespace ArchitectNow.Mongo.Models
6+
{
7+
public abstract class GuidBaseDocument: BaseDocument<Guid>
8+
{
9+
[BsonId(IdGenerator = typeof(CombGuidGenerator))]
10+
public override Guid Id { get; set; }
11+
}
12+
}

0 commit comments

Comments
 (0)