Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
4adc7b0
v3 specification - Adds PUT-request-aligned validation - Cover more s…
DavidJGapCR May 25, 2026
490f1d5
Merge branch 'main' of https://github.com/Ed-Fi-Alliance-OSS/ODS-Admi…
DavidJGapCR May 26, 2026
e6da349
Merge branch 'main' of https://github.com/Ed-Fi-Alliance-OSS/ODS-Admi…
DavidJGapCR Jun 5, 2026
6da6129
Merge branch 'main' of https://github.com/Ed-Fi-Alliance-OSS/ODS-Admi…
DavidJGapCR Jun 11, 2026
21cd279
Merge branch 'main' of https://github.com/Ed-Fi-Alliance-OSS/ODS-Admi…
DavidJGapCR Jun 18, 2026
a0e8a01
Merge branch 'main' of https://github.com/Ed-Fi-Alliance-OSS/ODS-Admi…
DavidJGapCR Jun 18, 2026
7e701e2
Merge branch 'main' of https://github.com/Ed-Fi-Alliance-OSS/ODS-Admi…
DavidJGapCR Jul 1, 2026
2225f63
Merge branch 'main' of https://github.com/Ed-Fi-Alliance-OSS/ODS-Admi…
DavidJGapCR Jul 20, 2026
de2dcb1
Merge branch 'main' of https://github.com/Ed-Fi-Alliance-OSS/ODS-Admi…
DavidJGapCR Jul 21, 2026
916fedb
Merge branch 'main' of https://github.com/Ed-Fi-Alliance-OSS/ODS-Admi…
DavidJGapCR Jul 24, 2026
cf7318b
Merge branch 'main' of https://github.com/Ed-Fi-Alliance-OSS/ODS-Admi…
DavidJGapCR Jul 24, 2026
1f2e295
Merge branch 'main' of https://github.com/Ed-Fi-Alliance-OSS/ODS-Admi…
DavidJGapCR Jul 27, 2026
44e5b8f
Add design spec for renaming DbInstances/DbDataStores to OdsInstanceM…
DavidJGapCR Jul 27, 2026
7ccad1d
Add implementation plan for renaming DbInstances/DbDataStores to OdsI…
DavidJGapCR Jul 27, 2026
ea5ac6f
Add migration renaming adminapi.DbInstances to adminapi.OdsInstanceMa…
DavidJGapCR Jul 27, 2026
2db33ed
Rename shared DbInstance entity/enum/config keys to OdsInstanceManage
DavidJGapCR Jul 28, 2026
102fc92
Rename v2 Infrastructure Queries/Commands/Jobs to OdsInstanceManage n…
DavidJGapCR Jul 28, 2026
99c6f63
Amend plan: cover Features/Tenants + TenantService (missed in origina…
DavidJGapCR Jul 28, 2026
04eff58
Move v2 DbInstances feature into OdsInstances/Manage, rename routes t…
DavidJGapCR Jul 28, 2026
c6b1808
Update v2 OdsInstances and Tenants EdOrgs merges to use renamed OdsIn…
DavidJGapCR Jul 28, 2026
563e801
Update v2 Quartz wiring to use renamed OdsInstanceManage jobs and con…
DavidJGapCR Jul 28, 2026
23252b6
[ADMINAPI-1477] Fix V3-branch JobConstants member references in Progr…
DavidJGapCR Jul 28, 2026
f2a12ad
Rename v2 unit tests to OdsInstanceManage naming
DavidJGapCR Jul 28, 2026
70cf5c8
Rename v2 DBTests to OdsInstanceManage naming
DavidJGapCR Jul 28, 2026
e0baf87
Fix v2 DBTests rename: apply actual renamed content
DavidJGapCR Jul 28, 2026
b3d7f36
Rename v2 Bruno E2E DbInstances collection to OdsInstances/Manage
DavidJGapCR Jul 28, 2026
76cc11a
Rename v3 Infrastructure Queries/Commands/Jobs to DataStoreManage naming
DavidJGapCR Jul 28, 2026
13e6553
Move v3 DbDataStores feature into DataStores/Manage, rename routes to…
DavidJGapCR Jul 28, 2026
6c74122
Update v3 DataStores and Tenants EdOrgs merges to use renamed DataSto…
DavidJGapCR Jul 28, 2026
b02bb28
Update v3 Quartz wiring to use renamed DataStoreManage dispatcher jobs
DavidJGapCR Jul 28, 2026
cc309be
Rename v3 unit tests to DataStoreManage naming, add missing query tes…
DavidJGapCR Jul 28, 2026
62aea4e
Rename v3 DBTests to DataStoreManage naming
DavidJGapCR Jul 28, 2026
5be5284
Rename v3 Bruno E2E DbDataStores collection to DataStores/Manage
DavidJGapCR Jul 28, 2026
5ab7ccc
Rename docs/http/dbinstances.http to odsinstances-manage.http, update…
DavidJGapCR Jul 28, 2026
d8e28ae
Fix stale dbInstanceId references from final rename review
DavidJGapCR Jul 28, 2026
cc99bc8
[ADMINAPI-1477] Fix location-header ID extraction in POST OdsInstance…
DavidJGapCR Jul 28, 2026
ed9b465
Add design spec for v3 tenant DataStoreManageId parity fix
DavidJGapCR Jul 28, 2026
6dcfce3
Add DataStoreManageId property to v3 TenantDataStoreModel
DavidJGapCR Jul 28, 2026
ce909e1
Populate DataStoreManageId on v3 tenant data stores
DavidJGapCR Jul 28, 2026
e2972e9
Add dataStoreManageId and status fields to v3 tenant edOrgs E2E schema
DavidJGapCR Jul 28, 2026
380cf7c
Add implementation plan for v3 tenant DataStoreManageId parity fix
DavidJGapCR Jul 28, 2026
fec1c61
Removes documentation
DavidJGapCR Jul 28, 2026
f70055f
Removes documentation
DavidJGapCR Jul 28, 2026
2afeb3d
Changes on CLAUDE.md
DavidJGapCR Jul 28, 2026
4328caa
[ADMINAPI-1477] Fix stale DbInstance references from code review (com…
DavidJGapCR Jul 29, 2026
9980586
deletes docs/design/adminconsole/SQL-SERVER-SUPPORT.md
DavidJGapCR Jul 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public enum AdminApiMode
Unversioned
}

public enum DbInstanceStatus
public enum OdsInstanceManageStatus
{
PendingCreate,
Created,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ public class JobConstants
{
public const string JobTypeKey = "JobType";
public const string TenantNameKey = "TenantName";
public const string DbInstanceIdKey = "DbInstanceId";
public const string OdsInstanceManageIdKey = "OdsInstanceManageId";
public const string OdsInstanceIdKey = "OdsInstanceId";
public const string CreateInstanceJobName = "CreateInstanceJob";
public const string CreatePendingDbInstancesDispatcherJobName = "CreatePendingDbInstancesDispatcherJob";
public const string CreatePendingOdsInstanceManagesDispatcherJobName = "CreatePendingOdsInstanceManagesDispatcherJob";
public const string DeleteInstanceJobName = "DeleteInstanceJob";
public const string DeletePendingDbInstancesDispatcherJobName = "DeletePendingDbInstancesDispatcherJob";
public const string DeletePendingOdsInstanceManagesDispatcherJobName = "DeletePendingOdsInstanceManagesDispatcherJob";
public const string RefreshEducationOrganizationsJobName = "RefreshEducationOrganizationsJob";
public const string RunIdKey = "RunId";
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace EdFi.Ods.AdminApi.Common.Infrastructure.Models;

public class DbInstance
public class OdsInstanceManage
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
Expand Down
8 changes: 4 additions & 4 deletions Application/EdFi.Ods.AdminApi.Common/Settings/AppSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ public class AppSettings
public bool PreventDuplicateApplications { get; set; }
public bool EnableApplicationResetEndpoint { get; set; }
public int EdOrgsRefreshIntervalInMins { get; set; }
public int CreateDbInstancesSweepIntervalInMins { get; set; } = 5;
public int CreateDbInstancesMaxRetryAttempts { get; set; } = 3;
public int DeleteDbInstancesSweepIntervalInMins { get; set; } = 5;
public int DeleteDbInstancesMaxRetryAttempts { get; set; } = 3;
public int CreateOdsInstanceManagesSweepIntervalInMins { get; set; } = 5;
public int CreateOdsInstanceManagesMaxRetryAttempts { get; set; } = 3;
public int DeleteOdsInstanceManagesSweepIntervalInMins { get; set; } = 5;
public int DeleteOdsInstanceManagesMaxRetryAttempts { get; set; } = 3;
public int MaxDegreeOfParallelism { get; set; } = 10;
public string? AdminApiMode { get; set; }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,74 +14,74 @@
namespace EdFi.Ods.AdminApi.DBTests.Database.CommandTests;

[TestFixture]
public class AddDbInstanceCommandTests : AdminApiDbContextTestBase
public class AddOdsInstanceManageCommandTests : AdminApiDbContextTestBase
{
[Test]
public void ShouldAddDbInstance()
public void ShouldAddOdsInstanceManage()
{
var model = new Mock<IAddDbInstanceModel>();
var model = new Mock<IAddOdsInstanceManageModel>();
model.Setup(x => x.Name).Returns("Test Instance");
model.Setup(x => x.DatabaseTemplate).Returns("Minimal");

var id = 0;
Transaction(context =>
{
var command = new AddDbInstanceCommand(context);
var command = new AddOdsInstanceManageCommand(context);
id = command.Execute(model.Object).Id;
id.ShouldBeGreaterThan(0);
});

Transaction(context =>
{
var instance = context.DbInstances.Single(d => d.Id == id);
var instance = context.OdsInstanceManages.Single(d => d.Id == id);
instance.Name.ShouldBe("Test Instance");
instance.DatabaseTemplate.ShouldBe("Minimal");
instance.Status.ShouldBe(DbInstanceStatus.PendingCreate.ToString());
instance.Status.ShouldBe(OdsInstanceManageStatus.PendingCreate.ToString());
instance.OdsInstanceId.ShouldBeNull();
instance.OdsInstanceName.ShouldBeNull();
instance.DatabaseName.ShouldBeNull();
});
}

[Test]
public void ShouldAddDbInstanceWithSampleTemplate()
public void ShouldAddOdsInstanceManageWithSampleTemplate()
{
var model = new Mock<IAddDbInstanceModel>();
var model = new Mock<IAddOdsInstanceManageModel>();
model.Setup(x => x.Name).Returns("Sample Instance");
model.Setup(x => x.DatabaseTemplate).Returns("Sample");

var id = 0;
Transaction(context =>
{
var command = new AddDbInstanceCommand(context);
var command = new AddOdsInstanceManageCommand(context);
id = command.Execute(model.Object).Id;
id.ShouldBeGreaterThan(0);
});

Transaction(context =>
{
var instance = context.DbInstances.Single(d => d.Id == id);
var instance = context.OdsInstanceManages.Single(d => d.Id == id);
instance.DatabaseTemplate.ShouldBe("Sample");
});
}

[Test]
public void ShouldTrimNameAndDatabaseTemplate()
{
var model = new Mock<IAddDbInstanceModel>();
var model = new Mock<IAddOdsInstanceManageModel>();
model.Setup(x => x.Name).Returns(" Trimmed Instance ");
model.Setup(x => x.DatabaseTemplate).Returns(" Minimal ");

var id = 0;
Transaction(context =>
{
var command = new AddDbInstanceCommand(context);
var command = new AddOdsInstanceManageCommand(context);
id = command.Execute(model.Object).Id;
});

Transaction(context =>
{
var instance = context.DbInstances.Single(d => d.Id == id);
var instance = context.OdsInstanceManages.Single(d => d.Id == id);
instance.Name.ShouldBe("Trimmed Instance");
instance.DatabaseTemplate.ShouldBe("Minimal");
});
Expand All @@ -90,21 +90,21 @@ public void ShouldTrimNameAndDatabaseTemplate()
[Test]
public void ShouldSetLastRefreshedAndLastModifiedDate()
{
var model = new Mock<IAddDbInstanceModel>();
var model = new Mock<IAddOdsInstanceManageModel>();
model.Setup(x => x.Name).Returns("Timestamp Instance");
model.Setup(x => x.DatabaseTemplate).Returns("Minimal");

var before = DateTime.UtcNow;
var id = 0;
Transaction(context =>
{
var command = new AddDbInstanceCommand(context);
var command = new AddOdsInstanceManageCommand(context);
id = command.Execute(model.Object).Id;
});

Transaction(context =>
{
var instance = context.DbInstances.Single(d => d.Id == id);
var instance = context.OdsInstanceManages.Single(d => d.Id == id);
instance.LastRefreshed.ShouldBeGreaterThanOrEqualTo(before);
instance.LastModifiedDate.ShouldNotBeNull();
instance.LastModifiedDate!.Value.ShouldBeGreaterThanOrEqualTo(before);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,55 +14,55 @@
namespace EdFi.Ods.AdminApi.DBTests.Database.CommandTests;

[TestFixture]
public class DeleteDbInstanceCommandTests : AdminApiDbContextTestBase
public class DeleteOdsInstanceManageCommandTests : AdminApiDbContextTestBase
{
[Test]
public void ShouldSetStatusToPendingDelete()
{
var instance = new DbInstance
var instance = new OdsInstanceManage
{
Name = "Delete Test Instance",
Status = DbInstanceStatus.Created.ToString(),
Status = OdsInstanceManageStatus.Created.ToString(),
DatabaseTemplate = "Minimal",
LastRefreshed = DateTime.UtcNow
};
Save(instance);

Transaction(context =>
{
var command = new DeleteDbInstanceCommand(context);
var command = new DeleteOdsInstanceManageCommand(context);
command.Execute(instance.Id);
});

Transaction(context =>
{
var updated = context.DbInstances.Single(d => d.Id == instance.Id);
updated.Status.ShouldBe(DbInstanceStatus.PendingDelete.ToString());
var updated = context.OdsInstanceManages.Single(d => d.Id == instance.Id);
updated.Status.ShouldBe(OdsInstanceManageStatus.PendingDelete.ToString());
});
}

[Test]
public void ShouldUpdateLastModifiedDate()
{
var before = DateTime.UtcNow;
var instance = new DbInstance
var instance = new OdsInstanceManage
{
Name = "Timestamp Test Instance",
Status = DbInstanceStatus.Created.ToString(),
Status = OdsInstanceManageStatus.Created.ToString(),
DatabaseTemplate = "Minimal",
LastRefreshed = DateTime.UtcNow
};
Save(instance);

Transaction(context =>
{
var command = new DeleteDbInstanceCommand(context);
var command = new DeleteOdsInstanceManageCommand(context);
command.Execute(instance.Id);
});

Transaction(context =>
{
var updated = context.DbInstances.Single(d => d.Id == instance.Id);
var updated = context.OdsInstanceManages.Single(d => d.Id == instance.Id);
updated.LastModifiedDate.ShouldNotBeNull();
updated.LastModifiedDate!.Value.ShouldBeGreaterThanOrEqualTo(before);
});
Expand All @@ -71,24 +71,24 @@ public void ShouldUpdateLastModifiedDate()
[Test]
public void ShouldNotHardDeleteRecord()
{
var instance = new DbInstance
var instance = new OdsInstanceManage
{
Name = "No Hard Delete Instance",
Status = DbInstanceStatus.Created.ToString(),
Status = OdsInstanceManageStatus.Created.ToString(),
DatabaseTemplate = "Minimal",
LastRefreshed = DateTime.UtcNow
};
Save(instance);

Transaction(context =>
{
var command = new DeleteDbInstanceCommand(context);
var command = new DeleteOdsInstanceManageCommand(context);
command.Execute(instance.Id);
});

Transaction(context =>
{
var stillExists = context.DbInstances.Any(d => d.Id == instance.Id);
var stillExists = context.OdsInstanceManages.Any(d => d.Id == instance.Id);
stillExists.ShouldBeTrue();
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,23 @@
namespace EdFi.Ods.AdminApi.DBTests.Database.QueryTests;

[TestFixture]
public class GetDbInstanceByIdQueryTests : AdminApiDbContextTestBase
public class GetOdsInstanceManageByIdQueryTests : AdminApiDbContextTestBase
{
[Test]
public void ShouldReturnNullForNonExistentId()
{
Transaction(context =>
{
var query = new GetDbInstanceByIdQuery(context);
var query = new GetOdsInstanceManageByIdQuery(context);
var result = query.Execute(0);
result.ShouldBeNull();
});
}

[Test]
public void ShouldGetDbInstanceById()
public void ShouldGetOdsInstanceManageById()
{
var instance = new DbInstance
var instance = new OdsInstanceManage
{
Name = "Test Instance",
Status = "Pending",
Expand All @@ -39,7 +39,7 @@ public void ShouldGetDbInstanceById()

Transaction(context =>
{
var query = new GetDbInstanceByIdQuery(context);
var query = new GetOdsInstanceManageByIdQuery(context);
var result = query.Execute(instance.Id);
result.ShouldNotBeNull();
result!.Id.ShouldBe(instance.Id);
Expand All @@ -52,7 +52,7 @@ public void ShouldGetDbInstanceById()
[Test]
public void ShouldReturnNullWhenIdDoesNotMatch()
{
var instance = new DbInstance
var instance = new OdsInstanceManage
{
Name = "Another Instance",
Status = "Pending",
Expand All @@ -63,7 +63,7 @@ public void ShouldReturnNullWhenIdDoesNotMatch()

Transaction(context =>
{
var query = new GetDbInstanceByIdQuery(context);
var query = new GetOdsInstanceManageByIdQuery(context);
var result = query.Execute(instance.Id + 9999);
result.ShouldBeNull();
});
Expand Down
Loading
Loading