=== Summary: 675 files | 7 generated | 484 fresh | 4605 untracked | 4268 adopted | 355 marked | 466 validated-ok | 2+0 stale (sig+body) | 0 skipped | 0 failed | elapsed 11:08:11.442 (40091.44s) ===

This commit is contained in:
julian
2026-06-28 02:50:05 -07:00
parent a19fb90902
commit 586f02a2ca
654 changed files with 5260 additions and 0 deletions
@@ -16,6 +16,7 @@ namespace adas_core.Infrastructure.Repositories;
/// Repository for managing camera entities in the MongoDB database. This repository provides methods to create, retrieve, update, and search for cameras based on various criteria.
/// It also includes error handling and logging for debugging purposes.
/// </summary>
/// <!-- aidoc:v1 sig=003e7c1 -->
public class CameraRepository : MongoRepository<Camera>, ICameraRepository
{
private readonly ApiSettings _apiSettings;
@@ -26,6 +27,7 @@ public class CameraRepository : MongoRepository<Camera>, ICameraRepository
/// </summary>
/// <param name="database">The MongoDB database instance.</param>
/// <param name="apiSettings">The API settings containing configuration for the repository.</param>
/// <!-- aidoc:v1 sig=e4f283c body=12fddac -->
public CameraRepository(IMongoDatabase database, IOptions<ApiSettings> apiSettings) : base(database)
{
_apiSettings = apiSettings.Value;
@@ -35,6 +37,7 @@ public class CameraRepository : MongoRepository<Camera>, ICameraRepository
/// Gets the name of the MongoDB collection that this repository interacts with. In this case, it returns the collection name for cameras as specified in the API settings.
/// </summary>
/// <returns>The name of the MongoDB collection for cameras.</returns>
/// <!-- aidoc:v1 sig=94e22ff body=05f9f4e -->
public override string GetCollectionName()
{
return _apiSettings.Cameras;
@@ -46,6 +49,7 @@ public class CameraRepository : MongoRepository<Camera>, ICameraRepository
/// </summary>
/// <param name="cameraId">The unique identifier of the camera to retrieve.</param>
/// <returns>The Camera object if found; otherwise, null.</returns>
/// <!-- aidoc:v1 sig=6eb1bff body=8816446 -->
public async Task<Camera?> GetById(ObjectId cameraId)
{
try
@@ -66,6 +70,7 @@ public class CameraRepository : MongoRepository<Camera>, ICameraRepository
/// </summary>
/// <param name="name">The name of the camera to retrieve.</param>
/// <returns>The Camera object if found; otherwise, null.</returns>
/// <!-- aidoc:v1 sig=42cd675 body=e41e30c -->
public async Task<Camera?> GetByName(string name)
{
var filterBuilder = Builders<Camera>.Filter;
@@ -81,6 +86,7 @@ public class CameraRepository : MongoRepository<Camera>, ICameraRepository
/// </summary>
/// <param name="configurationRelayList">The list of camera IDs to retrieve.</param>
/// <returns>A list of Camera objects that match the provided IDs.</returns>
/// <!-- aidoc:v1 sig=63176e6 body=14b9319 -->
public List<Camera> GetCameraInList(List<ObjectId> configurationRelayList)
{
var filterBuilder = Builders<Camera>.Filter;
@@ -98,6 +104,12 @@ public class CameraRepository : MongoRepository<Camera>, ICameraRepository
/// <param name="filter">The pagination filter containing page number, page size, and any additional filtering criteria.</param>
/// <returns>A paginated list of Camera objects.</returns>
/// <exception cref="BadRequestException">Thrown when the provided filter is invalid or contains invalid data.</exception>
/// <!-- aidoc-review:v1 severity=high kind=wrong_returns
/// "Method returns IFindFluent<Camera, Camera>, not a paginated list of Camera objects." -->
/// <!-- aidoc-review:v1 severity=high kind=wrong_summary
/// "Summary claims it 'retrieves a paginated list of camera entities' but the method returns an IFindFluent query builder, not a list." -->
/// <!-- aidoc-review:v1 severity=high kind=wrong_exception
/// "BadRequestException is thrown only when the text filter exceeds 100 characters; doc describes it generically as 'invalid filter or invalid data'." -->
public IFindFluent<Camera, Camera> GetPaginatedCameras(PaginationFilter filter)
{
var filterBuilder = Builders<Camera>.Filter;
@@ -133,6 +145,7 @@ public class CameraRepository : MongoRepository<Camera>, ICameraRepository
/// </summary>
/// <param name="camera">The Camera object to insert into the database.</param>
/// <returns>The inserted Camera object if successful; otherwise, null.</returns>
/// <!-- aidoc:v1 sig=4c3fa66 body=c723ea9 -->
public async Task<Camera?> InsertOneCamera(Camera camera)
{
try
@@ -155,6 +168,7 @@ public class CameraRepository : MongoRepository<Camera>, ICameraRepository
/// <param name="objectId">The unique identifier of the camera to update.</param>
/// <param name="camera">The Camera object containing the updated information.</param>
/// <returns>The updated Camera object if successful; otherwise, null.</returns>
/// <!-- aidoc:v1 sig=5dea533 body=003b000 -->
public async Task<Camera?> UpdateCameraAsync(ObjectId objectId, Camera camera)
{
var filter = Builders<Camera>.Filter.Eq("_id", objectId);
@@ -178,6 +192,7 @@ public class CameraRepository : MongoRepository<Camera>, ICameraRepository
/// <param name="textToSearch">The text string to search for in the camera names.</param>
/// <returns>A list of Camera objects whose names match the search criteria.</returns>
/// <exception cref="BadRequestException">Thrown when the search text is too long.</exception>
/// <!-- aidoc:v1 sig=a584e66 body=efc6951 -->
public async Task<List<Camera>> GetSearchByNameCameras(string textToSearch)
{
if (string.IsNullOrWhiteSpace(textToSearch))
@@ -202,6 +217,7 @@ public class CameraRepository : MongoRepository<Camera>, ICameraRepository
/// <param name="filters">A list of filter definitions to apply to the query.</param>
/// <param name="sort">A sort definition to apply to the query results.</param>
/// <returns>An IFindFluent object for further query customization or execution.</returns>
/// <!-- aidoc:v1 sig=7aa3c5c body=e772829 -->
private IFindFluent<Camera, Camera> CreateFindFluent(List<FilterDefinition<Camera>> filters, SortDefinition<Camera> sort)
{
var combinedFilter = filters.Any()