diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index a714b91..0000000
--- a/Dockerfile
+++ /dev/null
@@ -1,10 +0,0 @@
-# https://hub.docker.com/_/microsoft-dotnet-core
-FROM mcr.microsoft.com/dotnet/core/sdk:latest AS build
-WORKDIR /source
-
-# copy csproj and restore as distinct layers
-COPY . .
-
-WORKDIR /source
-RUN dotnet build
-RUN dotnet test
diff --git a/MyNumberNET_ApiServer/Controllers/MyNumberController.cs b/MyNumberNET_ApiServer/Controllers/MyNumberController.cs
new file mode 100644
index 0000000..1f88367
--- /dev/null
+++ b/MyNumberNET_ApiServer/Controllers/MyNumberController.cs
@@ -0,0 +1,51 @@
+using Microsoft.AspNetCore.Mvc;
+using MyNumberNET;
+
+namespace MyNumberNET_ApiServer.Controllers
+{
+ ///
+ /// Controller for exposing MyNumberNET functionality via REST API.
+ ///
+ [ApiController]
+ [Route("api/[controller]")]
+ public class MyNumberController : ControllerBase
+ {
+ ///
+ /// Verifies if the provided 12-digit array is a valid "My Number".
+ ///
+ /// An array of 12 integers representing the My Number digits.
+ /// True if valid, false otherwise. Returns BadRequest if input is malformed.
+ [HttpPost("verify")]
+ public ActionResult Verify([FromBody] int[] number)
+ {
+ try
+ {
+ bool isValid = MyNumber.VerifyNumber(number);
+ return Ok(isValid);
+ }
+ catch (Exception ex)
+ {
+ return BadRequest(ex.Message);
+ }
+ }
+
+ ///
+ /// Calculates the check digit for the provided 11-digit array.
+ ///
+ /// An array of 11 integers representing the first 11 digits of My Number.
+ /// The calculated check digit. Returns BadRequest if input is malformed.
+ [HttpPost("checkdigit")]
+ public ActionResult CheckDigit([FromBody] int[] number)
+ {
+ try
+ {
+ int checkDigit = MyNumber.CalculateCheckDigits(number);
+ return Ok(checkDigit);
+ }
+ catch (Exception ex)
+ {
+ return BadRequest(ex.Message);
+ }
+ }
+ }
+}
diff --git a/MyNumberNET_ApiServer/MyNumberNET_ApiServer.csproj b/MyNumberNET_ApiServer/MyNumberNET_ApiServer.csproj
new file mode 100644
index 0000000..f8ef484
--- /dev/null
+++ b/MyNumberNET_ApiServer/MyNumberNET_ApiServer.csproj
@@ -0,0 +1,12 @@
+
+
+ net8.0
+ enable
+ enable
+ true
+ 1591
+
+
+
+
+
diff --git a/MyNumberNET_ApiServer/Program.cs b/MyNumberNET_ApiServer/Program.cs
new file mode 100644
index 0000000..e633767
--- /dev/null
+++ b/MyNumberNET_ApiServer/Program.cs
@@ -0,0 +1,25 @@
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+
+namespace MyNumberNET_ApiServer
+{
+ public class Program
+ {
+ public static void Main(string[] args)
+ {
+ var builder = WebApplication.CreateBuilder(args);
+ builder.Services.AddControllers();
+
+ var app = builder.Build();
+
+ app.UseRouting();
+ app.UseEndpoints(endpoints =>
+ {
+ endpoints.MapControllers();
+ });
+
+ app.Run();
+ }
+ }
+}
diff --git a/MyNumberNET_Test/MyNumberControllerTests.cs b/MyNumberNET_Test/MyNumberControllerTests.cs
new file mode 100644
index 0000000..57372ff
--- /dev/null
+++ b/MyNumberNET_Test/MyNumberControllerTests.cs
@@ -0,0 +1,72 @@
+using System;
+using Xunit;
+using MyNumberNET_ApiServer.Controllers;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MyNumberNET_Test
+{
+ public class MyNumberControllerTests
+ {
+ [Fact]
+ public void Verify_ValidNumber_ReturnsTrue()
+ {
+ var controller = new MyNumberController();
+ var first11 = new[] { 1,2,3,4,5,6,7,8,9,0,1 };
+ var checkDigit = MyNumberNET.MyNumber.CalculateCheckDigits((int[])first11.Clone());
+ var validNumber = new int[12];
+ Array.Copy(first11, validNumber, 11);
+ validNumber[11] = checkDigit;
+ var result = controller.Verify(validNumber);
+ Assert.NotNull(result.Result);
+ var okResult = result.Result as OkObjectResult;
+ Assert.NotNull(okResult);
+ Assert.True((bool)okResult.Value);
+ }
+
+ [Fact]
+ public void Verify_InvalidNumber_ReturnsFalse()
+ {
+ var controller = new MyNumberController();
+ var invalidNumber = new[] { 1,2,3,4,5,6,7,8,9,0,1,3 }; // Last digit is wrong
+ var result = controller.Verify(invalidNumber);
+ Assert.NotNull(result.Result);
+ var okResult = result.Result as OkObjectResult;
+ Assert.NotNull(okResult);
+ Assert.False((bool)okResult.Value);
+ }
+
+ [Fact]
+ public void Verify_MalformedNumber_ReturnsBadRequest()
+ {
+ var controller = new MyNumberController();
+ var malformedNumber = new[] { 1,2,3 }; // Too short
+ var result = controller.Verify(malformedNumber);
+ Assert.NotNull(result.Result);
+ var badRequestResult = result.Result as BadRequestObjectResult;
+ Assert.NotNull(badRequestResult);
+ }
+
+ [Fact]
+ public void CheckDigit_ValidInput_ReturnsDigit()
+ {
+ var controller = new MyNumberController();
+ var digits = new[] { 1,2,3,4,5,6,7,8,9,0,1 };
+ var result = controller.CheckDigit(digits);
+ Assert.NotNull(result.Result);
+ var okResult = result.Result as OkObjectResult;
+ Assert.NotNull(okResult);
+ Assert.True(int.TryParse(okResult.Value.ToString(), out _));
+ }
+
+ [Fact]
+ public void CheckDigit_MalformedInput_ReturnsBadRequest()
+ {
+ var controller = new MyNumberController();
+ var malformedDigits = new[] { 1,2,3 }; // Too short
+ var result = controller.CheckDigit(malformedDigits);
+ Assert.NotNull(result.Result);
+ var badRequestResult = result.Result as BadRequestObjectResult;
+ Assert.NotNull(badRequestResult);
+ }
+ }
+}
diff --git a/MyNumberNET_Test/MyNumberNET_Test.csproj b/MyNumberNET_Test/MyNumberNET_Test.csproj
index f95d818..066552b 100644
--- a/MyNumberNET_Test/MyNumberNET_Test.csproj
+++ b/MyNumberNET_Test/MyNumberNET_Test.csproj
@@ -20,9 +20,12 @@
+
+
+
true
diff --git a/README.md b/README.md
index 36615f4..909ca1c 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,21 @@
# My Number Library for .NET
-This repository provides tools for validating and generating Japanese My Number (Social Security and Tax Number System) in .NET.
+This repository provides tools for validating and generating Japanese My Number (Social Security and Tax Number System) in .NET 8.0.
+
+## Project Structure
+
+- **MyNumberNET/**: Core .NET 8.0 library for My Number validation and generation.
+- **MyNumberNET_ApiServer/**: ASP.NET Core Web API for My Number validation and generation.
+- **MyNumberNET_CLI/**: Command-line interface for interacting with the library. Uses NLog for logging.
+- **MyNumberNET_Test/**: Unit tests for the library and API server.
+- **Jenkinsfile**: CI/CD pipeline configuration.
+- **global.json**: Specifies the .NET SDK version.
+- **MyNumberNET.sln**: Solution file for managing all projects.
## Projects
### MyNumberNET
-A .NET library for validating and generating My Number sequences.
+A .NET 8.0 library for validating and generating My Number sequences.
**Features:**
- Validate a 12-digit My Number: `MyNumber.VerifyNumber(int[] number)`
@@ -19,13 +29,26 @@ int[] number = {6,1,4,1,0,6,5,2,6,0,0,0};
bool isValid = MyNumber.VerifyNumber(number);
```
+### MyNumberNET_ApiServer
+ASP.NET Core Web API for validating and generating My Numbers.
+
+**Usage:**
+```
+dotnet run --project MyNumberNET_ApiServer
+```
+The API exposes endpoints for validation and generation. See `Controllers/MyNumberController.cs` for details.
+
### MyNumberNET_CLI
-A command-line interface for validating and generating My Numbers.
+A command-line interface for validating and generating My Numbers. Uses NLog for logging.
**Usage:**
```
dotnet run --project MyNumberNET_CLI [command] [arguments]
```
+Or run the built executable directly:
+```
+MyNumberNET_CLI\bin\Debug\net8.0\MyNumberNET_CLI.exe [command] [arguments]
+```
**Commands:**
- `generate [count]` : Generate valid My Numbers
- `check [My Number]` : Validate a given number
@@ -34,27 +57,20 @@ dotnet run --project MyNumberNET_CLI [command] [arguments]
- `ranges [min] [max]` : Generate numbers in a sequential range
### MyNumberNET_Test
-Unit tests for the library.
+Unit tests for the library and API server.
-**To run tests:**
+**Run tests:**
```
dotnet test MyNumberNET_Test
```
-## Build Instructions
+## Solution Management
-1. Clone the repository.
-2. Build the solution:
- ```
- dotnet build MyNumberNET.sln
- ```
-3. Run CLI or tests as shown above.
+Use the solution file to build and manage all projects:
+```
+dotnet build MyNumberNET.sln
+```
## .NET Version
-All projects now target **.NET 8 (net8.0)**. You need the [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) to build and run.
-
-## Logging
-The CLI uses **NLog** for logging. Configuration is in `MyNumberNET_CLI/nlog.config`.
-## License
-See LICENSE for details.
+This repository uses .NET 8.0. The required SDK version is specified in `global.json`.