Compare commits

...

16 Commits

@ -0,0 +1,37 @@
{
"version": "0.2.0",
"configurations": [
{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/OSI-API/bin/Debug/net6.0/OSI-API.dll",
"args": [],
"cwd": "${workspaceFolder}/OSI-API",
"stopAtEntry": false,
// Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)"
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
},
"enableStepFiltering": false
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}

42
.vscode/tasks.json vendored

@ -0,0 +1,42 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/OSI-API/OSI-API.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/OSI-API/OSI-API.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"${workspaceFolder}/OSI-API/OSI-API.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
}
]
}

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
namespace OSI.API.DAL.Base
{
public abstract class DAOBase<T> : MySQL
{
protected DAOBase(DBConnectionInformation connectionInformation) : base(connectionInformation)
{
}
protected DAOBase(string server, string database, string username, string password) : base(server, database, username, password)
{
}
public abstract List<T> GetAll();
public abstract T Get(int id);
public abstract void Create(T itemToCreate);
public abstract void Update(T itemToUpdate);
public abstract void Delete(int id);
}
}

@ -0,0 +1,216 @@
using System;
using System.Data;
using System.IO;
using MySql.Data.MySqlClient;
namespace OSI.API.DAL.Base
{
public class MySQL : SQLBase
{
protected MySqlConnection? DBConnection {get;set;}
protected MySqlCommand? DBCommand {get;set;}
protected MySqlDataReader? DBReader {get;set;}
public MySQL(string server, string database, string username, string password)
{
DBConnectionInfo = new DBConnectionInformation()
{
DBHost = server,
DBUserName = username,
DBName = database,
DBPassword = password,
DBType = DBType.MYSQL
};
}
public MySQL(DBConnectionInformation connectionInformation)
{
DBConnectionInfo = connectionInformation;
}
protected override void InitConnection()
{
DBConnection = new MySqlConnection(DBConnectionInfo.GetConnectionString());
DBConnection.Open();
DBCommand = DBConnection.CreateCommand();
}
protected override void DisposeConnection()
{
if(DBConnection.State == ConnectionState.Open)
{
DBConnection.Close();
}
}
protected override int GetOrdinal(string columnName)
{
return DBReader.GetOrdinal(columnName);
}
protected override int? GetInt(int columnID)
{
int? rv = null;
if(!DBReader.IsDBNull(columnID))
{
rv = DBReader.GetInt32(columnID);
}
return rv;
}
protected override int? GetInt(string columnName)
{
return GetInt(GetOrdinal(columnName));
}
protected override byte? GetByte(int columnID)
{
byte? rv = null;
if(!DBReader.IsDBNull(columnID))
{
rv = DBReader.GetByte(columnID);
}
return rv;
}
protected override byte? GetByte(string columnName)
{
return GetByte(GetOrdinal(columnName));
}
protected override byte[] GetBytes(int columnID)
{
byte[] rv = null;
if (!DBReader.IsDBNull(columnID))
{
rv = (byte[])DBReader[columnID];
}
return rv;
}
protected override byte[] GetBytes(string columnName)
{
return GetBytes(GetOrdinal(columnName));
}
protected override decimal? GetDecimal(int columnID)
{
decimal? rv = null;
if(!DBReader.IsDBNull(columnID))
{
rv = DBReader.GetDecimal(columnID);
}
return rv;
}
protected override decimal? GetDecimal(string columnName)
{
return GetDecimal(GetOrdinal(columnName));
}
protected override long? GetLong(int columnID)
{
long? rv = null;
if(!DBReader.IsDBNull(columnID))
{
rv = DBReader.GetInt64(columnID);
}
return rv;
}
protected override long? GetLong(string columnName)
{
return GetLong(GetOrdinal(columnName));
}
protected override short? GetShort(int columnID)
{
short? rv = null;
if(!DBReader.IsDBNull(columnID))
{
rv = DBReader.GetInt16(columnID);
}
return rv;
}
protected override short? GetShort(string columnName)
{
return GetShort(GetOrdinal(columnName));
}
protected override string GetString(int columnID)
{
string rv = string.Empty;
if(!DBReader.IsDBNull(columnID))
{
rv = DBReader.GetString(columnID);
}
return rv;
}
protected override string GetString(string columnName)
{
return GetString(GetOrdinal(columnName));
}
protected override bool? GetBool(int columnID)
{
bool? rv = null;
if(!DBReader.IsDBNull(columnID))
{
rv = DBReader.GetBoolean(columnID);
}
return rv;
}
protected override bool? GetBool(string columnName)
{
return GetBool(GetOrdinal(columnName));
}
protected override DateTime? GetDateTime(int columnID)
{
DateTime? rv = null;
if(!DBReader.IsDBNull(columnID))
{
rv = GetDateTime(columnID);
}
return rv;
}
protected override DateTime? GetDateTime(string columnName)
{
return GetDateTime(GetOrdinal(columnName));
}
//new MySqlParameter("GUID", MySqlDbType.VarChar, 255, ParameterDirection.Input, false, 0, 0, string.Empty, DataRowVersion.Proposed, guid)
protected MySqlParameter GetParameter(string columnName, MySqlDbType dataType, ParameterDirection direction, object data)
{
return null;
}
protected MySqlParameter GetParameter(string columnName, MySqlDbType dataType, int size, ParameterDirection direction, object data)
{
return new MySqlParameter(columnName, dataType, size, direction, false, 0, 0, string.Empty, DataRowVersion.Proposed, data);
}
}
}

@ -0,0 +1,100 @@
using System;
using System.Text;
namespace OSI.API.DAL.Base
{
public abstract class SQLBase : IDisposable
{
protected DBConnectionInformation DBConnectionInfo;
public enum DBType
{
MSSQL,
MYSQL
}
public struct DBConnectionInformation
{
public string DBHost {get;set;}
public string DBName {get;set;}
public string DBUserName {get;set;}
public string DBPassword {get;set;}
public DBType DBType {get;set;}
public string GetConnectionString()
{
string rv = string.Empty;
switch(DBType)
{
case DBType.MSSQL:
break;
case DBType.MYSQL:
rv = string.Format("Server={0};Database={1};Uid={2};Pwd={3}", DBHost, DBName, DBUserName, DBPassword);
break;
}
return rv;
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// free managed resources
}
// free native resources if there are any.
}
protected string FormatNewLineForHTML(string input)
{
return input.Replace("\\r\\n", "<br/>");
}
protected string FormatNewLineForHTML(string input, int numberOfBreaksToAdd)
{
StringBuilder breaks = new();
for (int x = 0; x < numberOfBreaksToAdd; x++)
{
breaks.Append("<br/>");
}
return input.Replace("\\r\\n", breaks.ToString());
}
protected string FormatBoldForHTML(string input)
{
return input.Replace("[b]", "<strong>").Replace("[/b]", "</strong>");
}
protected abstract void InitConnection();
protected abstract void DisposeConnection();
protected abstract int GetOrdinal(string columnName);
protected abstract int? GetInt(int columnID);
protected abstract int? GetInt(string columnName);
protected abstract byte? GetByte(int columnID);
protected abstract byte? GetByte(string columnName);
protected abstract byte[] GetBytes(int columnID);
protected abstract byte[] GetBytes(string columnName);
protected abstract decimal? GetDecimal(int columnID);
protected abstract decimal? GetDecimal(string columnName);
protected abstract long? GetLong(int columnID);
protected abstract long? GetLong(string columnName);
protected abstract short? GetShort(int columnID);
protected abstract short? GetShort(string columnName);
protected abstract string GetString(int columnID);
protected abstract string GetString(string columnName);
protected abstract bool? GetBool(int columnID);
protected abstract bool? GetBool(string columnName);
protected abstract DateTime? GetDateTime(int columnID);
protected abstract DateTime? GetDateTime(string columnName);
}
}

@ -0,0 +1,12 @@
using OSI.API.DAL.Common;
namespace OSI.API.DAL.Client
{
public class ClientObject
{
public int ClientID { get; set; }
public string? ClientName { get; set; }
public AddressObject? ClientAddress { get; set; }
}
}

@ -0,0 +1,81 @@
namespace OSI.API.DAL.Common
{
public class AddressObject
{
public string? Name { get; set; }
public string? AddressLine1 { get; set; }
public string? AddressLine2 { get; set; }
public string? AddressLine3 { get; set; }
public string? City { get; set; }
public string? State { get; set; }
public string? Zip { get; set; }
public string CSZ { get => $"{City}, {StateNameFromAbbreviation(State)} {Zip}"; }
private string? StateNameFromAbbreviation(string? abbr)
{
string? rv = abbr;
Dictionary<string, string> states = new Dictionary<string, string>()
{
{"AL", "Alabama"},
{"AK", "Alaska"},
{"AZ", "Arizona"},
{"AR", "Arkansas"},
{"CA", "California"},
{"CO", "Colorado"},
{"CT", "Connecticut"},
{"DE", "Delaware"},
{"DC", "District of Columbia"},
{"FL", "Florida"},
{"GA", "Georgia"},
{"HI", "Hawaii"},
{"ID", "Idaho"},
{"IL", "Illinois"},
{"IN", "Indiana"},
{"IA", "Iowa"},
{"KS", "Kansas"},
{"KY", "Kentucky"},
{"LA", "Louisiana"},
{"ME", "Maine"},
{"MD", "Maryland"},
{"MA", "Massachusetts"},
{"MI", "Michigan"},
{"MN", "Minnesota"},
{"MS", "Mississippi"},
{"MO", "Missouri"},
{"MT", "Montana"},
{"NE", "Nebraska"},
{"NV", "Nevada"},
{"NH", "New Hampshire"},
{"NJ", "New Jersey"},
{"NM", "New Mexico"},
{"NY", "New York"},
{"NC", "North Carolina"},
{"ND", "North Dakota"},
{"OH", "Ohio"},
{"OK", "Oklahoma"},
{"OR", "Oregon"},
{"PA", "Pennsylvania"},
{"RI", "Rhode Island"},
{"SC", "South Carolina"},
{"SD", "South Dakota"},
{"TN", "Tennessee"},
{"TX", "Texas"},
{"UT", "Utah"},
{"VT", "Vermont"},
{"VA", "Virginia"},
{"WA", "Washington"},
{"WV", "West Virginia"},
{"WI", "Wisconsin"},
{"WY", "Wyoming"}
};
if ((abbr != null) && states.ContainsKey(abbr))
rv = states[abbr];
return rv;
}
}
}

@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using OSI.API.DAL.Base;
namespace OSI.API.DAL.Invoice
{
public class InvoiceDAO : DAOBase<InvoiceObject>
{
public InvoiceDAO(DBConnectionInformation connectionInformation) : base(connectionInformation)
{
}
public InvoiceDAO(string server, string database, string username, string password) : base(server, database, username, password)
{
}
public override void Create(InvoiceObject itemToCreate)
{
throw new NotImplementedException();
}
public override void Delete(int id)
{
throw new NotImplementedException();
}
public override InvoiceObject Get(int id)
{
throw new NotImplementedException();
}
public override List<InvoiceObject> GetAll()
{
throw new NotImplementedException();
}
public override void Update(InvoiceObject itemToUpdate)
{
throw new NotImplementedException();
}
}
}

@ -0,0 +1,39 @@
using System.Collections.Generic;
using System;
using OSI.API.DAL.Client;
namespace OSI.API.DAL.Invoice
{
public class InvoiceObject
{
public int InvoiceNumber { get; set; }
public float InvoiceAmount { get; set; }
public float Discount { get; set; }
public float Tax { get; set; }
public List<InvoiceObjectLineItems>? InvoiceLineItems { get; set; }
public Notes? Notes { get; set; }
public DateTime InvoiceDate { get; set; }
public DateTime DueDate { get; set; }
public ClientObject? Client { get; set; }
}
public class InvoiceObjectLineItems
{
public string? Item { get; set; }
public string? Description { get; set; }
public float Cost { get; set; }
public float Quantity { get; set; }
public float Tax { get; set; }
//public float Total => ((Cost * Quantity) + ((Cost * Quantity) * (Tax / 100)));
public float Total { get; set; }
}
public class Notes
{
public string? PublicNotes { get; set; }
public string? PrivateNotes { get; set; }
public string? Terms { get; set; }
}
}

@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>OSI_API.DAL</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Mysql.Data" Version="8.0.33" />
</ItemGroup>
</Project>

@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>OSI_API.Test</RootNamespace>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="1.3.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OSI-API\OSI-API.csproj" />
</ItemGroup>
</Project>

@ -0,0 +1,14 @@
using System;
using Xunit;
namespace OSI_API.Test
{
public class UnitTest1
{
[Fact]
public void Test1()
{
}
}
}

@ -0,0 +1,9 @@
namespace OSI.API.Business.Database.Installer
{
public class DBScriptInstaller
{
}
}

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace OSI.API.Controllers
{
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public class ClientsController : ControllerBase
{
// GET: api/Clients
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET: api/Clients/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST: api/Clients
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT: api/Clients/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE: api/Clients/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace OSI.API.Controllers
{
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public class ExpensesController : ControllerBase
{
// GET: api/Expenses
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET: api/Expenses/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST: api/Expenses
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT: api/Expenses/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE: api/Expenses/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}

@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OSI.API.DAL.Invoice;
namespace OSI.API.Controllers
{
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public class InvoicesController : EndpointBase<InvoiceObject>
{
public override IActionResult Delete(int id)
{
return NotFound();
}
public override IActionResult Get()
{
//> get all invoices as a list of InvoiceObjects
using InvoiceDAO dao = new(new OSI.API.DAL.Base.SQLBase.DBConnectionInformation());
return new JsonResult(dao.GetAll());
}
public override IActionResult Get(int id)
{
using InvoiceDAO dao = new(new OSI.API.DAL.Base.SQLBase.DBConnectionInformation());
return new JsonResult(dao.Get(id));
}
public override IActionResult Create([FromBody] InvoiceObject input)
{
throw new NotImplementedException();
}
public override IActionResult Update([FromBody] InvoiceObject input)
{
return CreatedAtAction(
"Get",
routeValues: new { id = input.InvoiceNumber },
value: input
);
}
}
}

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace OSI.API.Controllers
{
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public class POsController : ControllerBase
{
// GET: api/POs
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET: api/POs/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST: api/POs
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT: api/POs/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE: api/POs/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace OSI.API.Controllers
{
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public class PaymentsController : ControllerBase
{
// GET: api/Payments
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET: api/Payments/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST: api/Payments
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT: api/Payments/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE: api/Payments/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace OSI.API.Controllers
{
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public class ReportsController : ControllerBase
{
// GET: api/Reports
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET: api/Reports/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST: api/Reports
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT: api/Reports/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE: api/Reports/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace OSI.API.Controllers
{
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
// GET: api/Users
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET: api/Users/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST: api/Users
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT: api/Users/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE: api/Users/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}

@ -0,0 +1,55 @@
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace OSI.API.Controllers
{
public abstract class EndpointBase<A> : ControllerBase
{
[HttpGet]
public abstract IActionResult Get();
// GET: api/Clients/5
[HttpGet("{id}")]
public abstract IActionResult Get(int id);
// POST: api/Clients
[HttpPost]
public abstract IActionResult Create([FromBody] A input);
// PUT: api/Clients/5
[HttpPut("{id}")]
public abstract IActionResult Update([FromBody] A input);
// DELETE: api/Clients/5
[HttpDelete("{id}")]
public abstract IActionResult Delete(int id);
protected T FromJSON<T>(string input)
{
JsonSerializerOptions options = new()
{
Converters = {
new JsonStringEnumConverter()
}
};
return JsonSerializer.Deserialize<T>(input, options);
}
protected string ToJSON<T>(T input)
{
JsonSerializerOptions options = new()
{
WriteIndented = true,
Converters = {
new JsonStringEnumConverter()
}
};
return JsonSerializer.Serialize<T>(input, options);
}
}
}

@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>OSI_API</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="dbup" Version="4.5.0" />
<PackageReference Include="dbup-mysql" Version="4.5.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="5.0.2" />
<PackageReference Include="Mysql.Data" Version="8.0.33" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OSI-API.DAL\OSI-API.DAL.csproj" />
</ItemGroup>
</Project>

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace OSI.API
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}

@ -0,0 +1,31 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:41039",
"sslPort": 44338
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"OSI_API": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

@ -0,0 +1,70 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.OpenApi.Models;
namespace OSI.API
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "OSI.API", Version = "v1" });
});
services.AddApiVersioning(options =>
{
options.ReportApiVersions = true;
options.AssumeDefaultVersionWhenUnspecified = true;
options.DefaultApiVersion = new ApiVersion(1, 0);
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "OSI.API v1");
c.RoutePrefix = "api";
});
}
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(name: "default", pattern: "api/v{version:apiVersion}/{controller}/{action}/{id?}", null);
endpoints.MapControllers();
});
}
}
}

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}

@ -0,0 +1,10 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}

@ -1,2 +1,34 @@
# OSI-API
Open Source Invoice API
#### Endpoints
- Invoice
- create
- update
- delete
- PO
- create
- update
- delete
- Clients
- create
- update
- delete
- Reports
- Income
- by Client
- Expenses
- by Type
- Expenses
- Create
- Update
- delete
- Users
- create
- update
- delete
- Payments
- create
- update
- delete
Loading…
Cancel
Save