Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a5ed2d866e | ||
|
|
e18931b6c0 |
No files matched your search
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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!;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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">
|
||||
© 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,5 +5,10 @@
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"RobotsDatabase": {
|
||||
"ConnectionString": "mongodb://localhost:27017",
|
||||
"DatabaseName": "Robots",
|
||||
"RobotsCollectionName": "Robots"
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
Reference in new issue
Block a user