Compare commits

..
2 Commits
Author SHA1 Message Date
didier amyot a5ed2d866e used mongodb as database 2023-09-24 11:14:23 -04:00
didier amyot e18931b6c0 mondify gitignore 2023-09-23 08:01:20 -04:00
14 changed files with 96 additions and 139 deletions

No files matched your search

+2
View File
@@ -133,3 +133,5 @@ $RECYCLE.BIN/
_NCrunch*
.vscode
.idea
mongodb
@@ -20,4 +20,8 @@
<ProjectReference Include="..\RobotsWantedLeague\RobotsWantedLeague.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="Services\" />
</ItemGroup>
</Project>
@@ -1,25 +0,0 @@
namespace RobotsWantedLeague.Test.Services;
using RobotsWantedLeague.Models;
using RobotsWantedLeague.Services;
[TestClass]
public class NotEmptyRobotsServiceTest
{
[TestMethod]
public void TestHappyPath()
{
IRobotsService service = new NotEmptyRobotsService();
Assert.AreEqual(3, service.Robots.Count);
Robot robot = service.CreateRobot("paul", 2, 3, "canada");
Assert.AreEqual(robot.Name, "paul");
Assert.AreEqual(robot.Weight, 2);
Assert.AreEqual(4, service.Robots.Count);
service.DeleteRobotById(robot.Id);
Assert.AreEqual(3, service.Robots.Count);
}
}
@@ -1,65 +0,0 @@
namespace RobotsWantedLeague.Test.Services;
using RobotsWantedLeague.Models;
using RobotsWantedLeague.Services;
[TestClass]
public class RobotsServiceTest
{
[TestMethod]
public void TestCreateRobot()
{
RobotsService service = new RobotsService();
Robot robot = service.CreateRobot("paul", 2, 3, "canada");
Assert.AreEqual(robot.Name, "paul");
Assert.AreEqual(robot.Weight, 2);
}
[TestMethod]
public void TestGetRobotById()
{
RobotsService service = new RobotsService();
Assert.IsNull(service.GetRobotById(98));
Robot robot = service.CreateRobot("paul", 2, 3, "canada");
Robot? ret = service.GetRobotById(robot.Id);
Assert.IsNotNull(ret);
Assert.AreEqual(robot.Name, ret.Name);
}
[TestMethod]
public void TestGetRobotById_MultipleRobots()
{
RobotsService service = new RobotsService();
Robot robot1 = service.CreateRobot("paul", 2, 3, "canada");
Robot robot2 = service.CreateRobot("emanuel", 20, 30, "france");
Robot? ret = service.GetRobotById(robot2.Id);
Assert.IsNotNull(ret);
Assert.AreEqual(robot2.Name, ret.Name);
}
[TestMethod]
public void TestListRobots()
{
RobotsService service = new RobotsService();
Robot robot1 = service.CreateRobot("paul", 2, 3, "canada");
Robot robot2 = service.CreateRobot("emanuel", 20, 30, "france");
Assert.AreEqual(2, service.Robots.Count);
}
[TestMethod]
public void TestDeleteRobotById()
{
RobotsService service = new RobotsService();
Robot robot1 = service.CreateRobot("paul", 2, 3, "canada");
Robot robot2 = service.CreateRobot("emanuel", 20, 30, "france");
Robot robot3 = service.CreateRobot("xu", 1, 9, "chine");
Assert.IsTrue(service.DeleteRobotById(robot2.Id));
Assert.AreEqual(2, service.Robots.Count);
Assert.IsNull(service.GetRobotById(robot2.Id));
}
}
@@ -37,8 +37,8 @@ public class RobotsController : Controller
return View(robotsService.Robots);
}
public IActionResult Robot(int id){
Robot robot = robotsService.GetRobotById(id);
public IActionResult Robot(string id){
Robot? robot = robotsService.GetRobotById(id);
return View(robot);
}
+9 -2
View File
@@ -1,7 +1,14 @@
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace RobotsWantedLeague.Models;
public class Robot{
public int Id { get; set;}
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string? Id { get; set;}
public string Name { get; set;}
/**
@@ -16,7 +23,7 @@ public class Robot{
public string Country { get; set;}
public Robot(int Id, string Name, int Weight, int Height, string Country){
public Robot(string? Id, string Name, int Weight, int Height, string Country){
this.Id = Id;
this.Name = Name;
this.Weight = Weight;
@@ -0,0 +1,11 @@
namespace RobotsWantedLeague.Models;
public class RobotsDatabaseSettings
{
public string ConnectionString { get; set; } = null!;
public string DatabaseName { get; set; } = null!;
public string RobotsCollectionName { get; set; } = null!;
}
+7
View File
@@ -1,9 +1,16 @@
using RobotsWantedLeague.Models;
using RobotsWantedLeague.Services;
var builder = WebApplication.CreateBuilder(args);
// database settings
builder.Services.Configure<RobotsDatabaseSettings>(
builder.Configuration.GetSection("RobotsDatabase"));
// Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddSingleton<RobotsService>();
builder.Services.AddSingleton<IRobotsService, NotEmptyRobotsService>();
var app = builder.Build();
@@ -6,4 +6,13 @@
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MongoDB.Driver" Version="2.21.0" />
</ItemGroup>
<ItemGroup>
<Folder Include="Entities\" />
<Folder Include="Repositories\" />
</ItemGroup>
</Project>
@@ -9,7 +9,7 @@ public interface IRobotsService{
int height,
string country);
public Robot? GetRobotById(int id);
public Robot? GetRobotById(string id);
public bool DeleteRobotById(int id);
public bool DeleteRobotById(string id);
}
@@ -1,3 +1,6 @@
using Microsoft.Extensions.Options;
using MongoDB.Driver;
namespace RobotsWantedLeague.Services;
using RobotsWantedLeague.Models;
@@ -7,12 +10,22 @@ public class NotEmptyRobotsService: IRobotsService
private readonly IRobotsService underlyingRobotsService;
public List<Robot> Robots { get => underlyingRobotsService.Robots; }
public NotEmptyRobotsService()
public NotEmptyRobotsService(RobotsService underlyingRobotsService)
{
this.underlyingRobotsService = new RobotsService();
this.underlyingRobotsService = underlyingRobotsService;
fillDefaultRobotsWhenUnderlyingRobotServiceIsEmpty();
}
private void fillDefaultRobotsWhenUnderlyingRobotServiceIsEmpty()
{
if (underlyingRobotsService.Robots.Count() != 0)
{
return;
}
this.underlyingRobotsService.CreateRobot("Alice", 1050, 2, "Bhutan");
this.underlyingRobotsService.CreateRobot("Bob", 5001, 5, "Vanuatu");
this.underlyingRobotsService.CreateRobot("Xu", 890, 1, "Taiwan");
}
public Robot CreateRobot(string name,
@@ -20,15 +33,16 @@ public class NotEmptyRobotsService: IRobotsService
int height,
string country)
{
return underlyingRobotsService.CreateRobot(name, weight, height, country);
var robot = underlyingRobotsService.CreateRobot(name, weight, height, country);
return robot;
}
public Robot? GetRobotById(int id){
public Robot? GetRobotById(string id){
return underlyingRobotsService.GetRobotById(id);
}
public bool DeleteRobotById(int id){
public bool DeleteRobotById(string id){
return underlyingRobotsService.DeleteRobotById(id);
}
+26 -35
View File
@@ -1,21 +1,25 @@
using Microsoft.Extensions.Options;
using MongoDB.Driver;
namespace RobotsWantedLeague.Services;
using RobotsWantedLeague.Models;
public class RobotsService: IRobotsService
{
private readonly List<Robot> robots;
private int idGenerator = 0;
public List<Robot> Robots { get => robots; }
private readonly IMongoCollection<Robot> robotsCollection;
public RobotsService()
public List<Robot> Robots { get => robotsCollection.AsQueryable().ToList(); }
public RobotsService(IOptions<RobotsDatabaseSettings> bookStoreDatabaseSettings)
{
robots = new List<Robot>();
}
var mongoClient = new MongoClient(
bookStoreDatabaseSettings.Value.ConnectionString);
private int generateId(){
idGenerator = idGenerator + 1;
return idGenerator;
var mongoDatabase = mongoClient.GetDatabase(
bookStoreDatabaseSettings.Value.DatabaseName);
this.robotsCollection = mongoDatabase.GetCollection<Robot>(bookStoreDatabaseSettings.Value.RobotsCollectionName);
}
public Robot CreateRobot(string name,
@@ -23,37 +27,24 @@ public class RobotsService: IRobotsService
int height,
string country)
{
var robot = new Robot(generateId(), name, weight, height, country);
robots.Add(robot);
var robot = new Robot(null, name, weight, height, country);
robotsCollection.InsertOne(robot);
return robot;
}
private int getIndexOfRobotById(int id){
int idx = 0;
foreach (Robot robot in robots){
if (robot.Id == id){
return idx;
}
idx ++;
}
return -1;
public Robot? GetRobotById(string id)
{
IQueryable<Robot> q = from robot in robotsCollection.AsQueryable()
where robot.Id == id
select robot;
return q.First();
}
public Robot? GetRobotById(int id){
int indexToDelete = getIndexOfRobotById(id);
if(indexToDelete == -1){
return null;
}
return robots[indexToDelete];
}
public bool DeleteRobotById(int id){
int indexToDelete = getIndexOfRobotById(id);
if(indexToDelete == -1){
return false;
}
robots.RemoveAt(indexToDelete);
return true;
public bool DeleteRobotById(string id)
{
var res = robotsCollection.DeleteOne(robot => robot.Id == id);
return res != null ;
}
}
@@ -83,9 +83,6 @@
</div>
<footer class="border-top footer text-muted">
<div class="container">
&copy; 2023 - RobotsWantedLeague - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
+5
View File
@@ -5,5 +5,10 @@
"Microsoft.AspNetCore": "Warning"
}
},
"RobotsDatabase": {
"ConnectionString": "mongodb://localhost:27017",
"DatabaseName": "Robots",
"RobotsCollectionName": "Robots"
},
"AllowedHosts": "*"
}