Compare commits
3 Commits
52e1dfe99f
...
db632e2522
| Author | SHA1 | Date | |
|---|---|---|---|
| db632e2522 | |||
|
|
3a99c2154c | ||
|
|
241312b0be |
@ -32,6 +32,7 @@ public class CharactersController : ControllerBase
|
||||
{
|
||||
OwnerUserId = userId,
|
||||
Name = req.Name.Trim(),
|
||||
Coord = new Coord { X = 0, Y = 0 },
|
||||
CreatedUtc = DateTime.UtcNow
|
||||
};
|
||||
|
||||
|
||||
@ -18,6 +18,10 @@ Stored documents (MongoDB)
|
||||
"id": "string (ObjectId)",
|
||||
"ownerUserId": "string",
|
||||
"name": "string",
|
||||
"coord": {
|
||||
"x": "number",
|
||||
"y": "number"
|
||||
},
|
||||
"createdUtc": "string (ISO-8601 datetime)"
|
||||
}
|
||||
```
|
||||
|
||||
@ -13,5 +13,7 @@ public class Character
|
||||
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
public Coord Coord { get; set; } = new();
|
||||
|
||||
public DateTime CreatedUtc { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
8
microservices/CharacterApi/Models/Coord.cs
Normal file
8
microservices/CharacterApi/Models/Coord.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace CharacterApi.Models;
|
||||
|
||||
public class Coord
|
||||
{
|
||||
public int X { get; set; }
|
||||
|
||||
public int Y { get; set; }
|
||||
}
|
||||
@ -23,6 +23,8 @@ public class LocationStore
|
||||
.Ascending(l => l.Coord.Y);
|
||||
var coordIndexOptions = new CreateIndexOptions { Unique = true };
|
||||
_col.Indexes.CreateOne(new CreateIndexModel<Location>(coordIndex, coordIndexOptions));
|
||||
|
||||
EnsureOriginLocation();
|
||||
}
|
||||
|
||||
private static void EnsureLocationSchema(IMongoDatabase db, string collectionName)
|
||||
@ -100,4 +102,31 @@ public class LocationStore
|
||||
var result = await _col.UpdateOneAsync(filter, update);
|
||||
return result.ModifiedCount > 0;
|
||||
}
|
||||
|
||||
private void EnsureOriginLocation()
|
||||
{
|
||||
var filter = Builders<Location>.Filter.And(
|
||||
Builders<Location>.Filter.Eq(l => l.Coord.X, 0),
|
||||
Builders<Location>.Filter.Eq(l => l.Coord.Y, 0)
|
||||
);
|
||||
var existing = _col.Find(filter).FirstOrDefault();
|
||||
if (existing is not null)
|
||||
return;
|
||||
|
||||
var origin = new Location
|
||||
{
|
||||
Name = "Origin",
|
||||
Coord = new Coord { X = 0, Y = 0 },
|
||||
CreatedUtc = DateTime.UtcNow
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
_col.InsertOne(origin);
|
||||
}
|
||||
catch (MongoWriteException ex) when (ex.WriteError.Category == ServerErrorCategory.DuplicateKey)
|
||||
{
|
||||
// Another instance seeded it first.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user