Giter Club home page Giter Club logo

calculator's Introduction

Calculator

ASP.NET Core API example.

Postman

POST: https://localhost:5000/Calculator

{
    Numbers: [10, 20, 30, 40, 50],
    Operation: 1
}

API

Startup

public class Startup
{
    public void Configure(IApplicationBuilder application)
    {
        application.UseDeveloperExceptionPage();
        application.UseCors(cors => cors.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
        application.UseHttpsRedirection();
        application.UseMvcWithDefaultRoute();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<ICalculatorService, CalculatorService>();
        services.AddCors();
        services.AddMvc();
    }
}

Controller

[Route("[controller]")]
[ApiController]
public class CalculatorController : ControllerBase
{
    public CalculatorController(ICalculatorService calculatorService)
    {
        CalculatorService = calculatorService;
    }

    private ICalculatorService CalculatorService { get; }

    [HttpGet]
    public string Get() => nameof(Ok);

    [HttpPost]
    public decimal Post(Calculation calculation)
    {
        return CalculatorService.Calculate(calculation);
    }
}

Domain

Calculation

public class Calculation
{
    public decimal[] Numbers { get; set; }

    public Operation Operation { get; set; }
}

CalculatorService

public interface ICalculatorService
{
    decimal Calculate(Calculation calculation);
}
public class CalculatorService : ICalculatorService
{
    public decimal Calculate(Calculation calculation)
    {
        var operation = Factory.Get<IOperation>(calculation.Operation.ToString());

        if (operation == null) { return 0; }

        return operation.Calculate(calculation.Numbers);
    }
}

Operation

public enum Operation
{
    Addition = 1,
    Subtraction = 2,
    Multiplication = 3,
    Division = 4
}
public interface IOperation
{
    decimal Calculate(decimal[] numbers);
}
public class Addition : IOperation
{
    public decimal Calculate(decimal[] numbers)
    {
        return numbers.Aggregate((result, number) => result + number);
    }
}
public class Subtraction : IOperation
{
    public decimal Calculate(decimal[] numbers)
    {
        return numbers.Aggregate((result, number) => result - number);
    }
}
public class Division : IOperation
{
    public decimal Calculate(decimal[] numbers)
    {
        if (numbers.Any(x => x == 0)) { return 0; }

        return numbers.Aggregate((result, number) => result / number);
    }
}
public class Multiplication : IOperation
{
    public decimal Calculate(decimal[] numbers)
    {
        return numbers.Aggregate((result, number) => result * number);
    }
}

calculator's People

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.