diff --git a/FreeSql.RESTful.Demo/Controllers/EntityController.cs b/FreeSql.RESTful.Demo/Controllers/EntityController.cs new file mode 100644 index 00000000..3a9170c7 --- /dev/null +++ b/FreeSql.RESTful.Demo/Controllers/EntityController.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using System.Linq; +using System.IO; +using System.Net; +using System.Net.NetworkInformation; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Configuration; +using Newtonsoft.Json.Linq; +using NpgsqlTypes; +using Npgsql.LegacyPostgis; +using FreeSql.RESTful.Demo.Entity; + +namespace FreeSql.RESTful.Demo.Controllers { + + + [Route("restapi/[controller]")] + public class SongsController : Controller { + + IFreeSql _fsql; + + public SongsController(IFreeSql fsql) { + _fsql = fsql; + } + + [HttpGet] + public Task> GetItems([FromQuery] string key, [FromQuery] int page = 1, [FromQuery] int limit = 20) { + return _fsql.Select().WhereIf(!string.IsNullOrEmpty(key), a => a.Title.Contains(key)).Page(page, limit).ToListAsync(); + } + + [HttpGet("{id}")] + public Task GetItem([FromRoute] int id) { + return _fsql.Select().Where(a => a.Id == id).ToOneAsync(); + } + + public class ModelSong { + public string title { get; set; } + } + + [HttpPost, ProducesResponseType(201)] + async public Task Create([FromBody] ModelSong model) { + var ret = await _fsql.Insert().AppendData(new Song { Title = model.title }).ExecuteInsertedAsync(); + return ret.FirstOrDefault(); + } + + [HttpPut("{id}")] + async public Task Update([FromRoute] int id, [FromBody] ModelSong model) { + var ret = await _fsql.Update().SetSource(new Song { Id = id, Title = model.title }).ExecuteUpdatedAsync(); + return ret.FirstOrDefault(); + } + + [HttpPatch("{id}")] + async public Task UpdateDiy([FromRoute] int id, [FromForm] string title) { + var up = _fsql.Update().Where(a => a.Id == id); + if (!string.IsNullOrEmpty(title)) up.Set(a => a.Title, title); + var ret = await up.ExecuteUpdatedAsync(); + return ret.FirstOrDefault(); + } + + [HttpDelete("{id}"), ProducesResponseType(204)] + async public Task Delete([FromRoute] int id) { + var ret = await _fsql.Delete().Where(a => a.Id == id).ExecuteDeletedAsync(); + return ret.FirstOrDefault(); + } + } +} diff --git a/FreeSql.RESTful.Demo/Entity/Song.cs b/FreeSql.RESTful.Demo/Entity/Song.cs new file mode 100644 index 00000000..a01a4f15 --- /dev/null +++ b/FreeSql.RESTful.Demo/Entity/Song.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace FreeSql.RESTful.Demo.Entity { + public class Song { + public int Id { get; set; } + public string Title { get; set; } + } +} diff --git a/FreeSql.RESTful.Demo/FreeSql.RESTful.Demo.csproj b/FreeSql.RESTful.Demo/FreeSql.RESTful.Demo.csproj new file mode 100644 index 00000000..d6e2e03e --- /dev/null +++ b/FreeSql.RESTful.Demo/FreeSql.RESTful.Demo.csproj @@ -0,0 +1,19 @@ + + + + netcoreapp2.1 + InProcess + + + + + + + + + + + + + + diff --git a/FreeSql.RESTful.Demo/Program.cs b/FreeSql.RESTful.Demo/Program.cs new file mode 100644 index 00000000..25f01e57 --- /dev/null +++ b/FreeSql.RESTful.Demo/Program.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace FreeSql.RESTful.Demo +{ + public class Program + { + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + public static IWebHostBuilder CreateWebHostBuilder(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseStartup(); + } +} diff --git a/FreeSql.RESTful.Demo/Startup.cs b/FreeSql.RESTful.Demo/Startup.cs new file mode 100644 index 00000000..011d96b6 --- /dev/null +++ b/FreeSql.RESTful.Demo/Startup.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +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.Logging; +using Microsoft.Extensions.Options; +using Swashbuckle.AspNetCore.Swagger; + +namespace FreeSql.RESTful.Demo +{ + public class Startup + { + public Startup(IConfiguration configuration, ILoggerFactory loggerFactory) + { + Configuration = configuration; + + Fsql = new FreeSql.FreeSqlBuilder() + .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\document.db;Attachs=xxxtb.db;Pooling=true;Max Pool Size=10") + .UseLogger(loggerFactory.CreateLogger()) + .UseAutoSyncStructure(true) + .Build(); + } + + public IConfiguration Configuration { get; } + public IFreeSql Fsql { get; } + + public void ConfigureServices(IServiceCollection services) + { + services.AddSingleton(Fsql); + + services.AddMvc(); + services.AddSwaggerGen(options => + { + options.SwaggerDoc("v1", new Info { + Version = "v1", + Title = "FreeSql.RESTful API" + }); + //options.IncludeXmlComments(xmlPath); + }); + } + + public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) + { + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); + Console.OutputEncoding = Encoding.GetEncoding("GB2312"); + Console.InputEncoding = Encoding.GetEncoding("GB2312"); + + loggerFactory.AddConsole(Configuration.GetSection("Logging")); + loggerFactory.AddDebug(); + + app.UseHttpMethodOverride(new HttpMethodOverrideOptions { FormFieldName = "X-Http-Method-Override" }); + app.UseDeveloperExceptionPage(); + app.UseMvc(); + + app.UseSwagger(); + app.UseSwaggerUI(c => + { + c.SwaggerEndpoint("/swagger/v1/swagger.json", "FreeSql.RESTful API V1"); + }); + } + } +} diff --git a/FreeSql.RESTful.Demo/appsettings.Development.json b/FreeSql.RESTful.Demo/appsettings.Development.json new file mode 100644 index 00000000..e203e940 --- /dev/null +++ b/FreeSql.RESTful.Demo/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} diff --git a/FreeSql.RESTful.Demo/appsettings.json b/FreeSql.RESTful.Demo/appsettings.json new file mode 100644 index 00000000..def9159a --- /dev/null +++ b/FreeSql.RESTful.Demo/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/FreeSql.RESTful.Demo/xxxtb.db b/FreeSql.RESTful.Demo/xxxtb.db new file mode 100644 index 00000000..e69de29b diff --git a/FreeSql.sln b/FreeSql.sln index 648c08bd..1beaf6a3 100644 --- a/FreeSql.sln +++ b/FreeSql.sln @@ -16,6 +16,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "xxx", "..\..\新建文件 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Tests.PerformanceTests", "FreeSql.Tests.PerformanceTests\FreeSql.Tests.PerformanceTests.csproj", "{446D9CBE-BFE4-4FB3-ADFD-4C1C5EA1B6EE}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.RESTful.Demo", "FreeSql.RESTful.Demo\FreeSql.RESTful.Demo.csproj", "{A749092B-4C21-4087-B33D-0FBD4DA51C24}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -74,6 +76,18 @@ Global {446D9CBE-BFE4-4FB3-ADFD-4C1C5EA1B6EE}.Release|x64.Build.0 = Release|Any CPU {446D9CBE-BFE4-4FB3-ADFD-4C1C5EA1B6EE}.Release|x86.ActiveCfg = Release|Any CPU {446D9CBE-BFE4-4FB3-ADFD-4C1C5EA1B6EE}.Release|x86.Build.0 = Release|Any CPU + {A749092B-4C21-4087-B33D-0FBD4DA51C24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A749092B-4C21-4087-B33D-0FBD4DA51C24}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A749092B-4C21-4087-B33D-0FBD4DA51C24}.Debug|x64.ActiveCfg = Debug|Any CPU + {A749092B-4C21-4087-B33D-0FBD4DA51C24}.Debug|x64.Build.0 = Debug|Any CPU + {A749092B-4C21-4087-B33D-0FBD4DA51C24}.Debug|x86.ActiveCfg = Debug|Any CPU + {A749092B-4C21-4087-B33D-0FBD4DA51C24}.Debug|x86.Build.0 = Debug|Any CPU + {A749092B-4C21-4087-B33D-0FBD4DA51C24}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A749092B-4C21-4087-B33D-0FBD4DA51C24}.Release|Any CPU.Build.0 = Release|Any CPU + {A749092B-4C21-4087-B33D-0FBD4DA51C24}.Release|x64.ActiveCfg = Release|Any CPU + {A749092B-4C21-4087-B33D-0FBD4DA51C24}.Release|x64.Build.0 = Release|Any CPU + {A749092B-4C21-4087-B33D-0FBD4DA51C24}.Release|x86.ActiveCfg = Release|Any CPU + {A749092B-4C21-4087-B33D-0FBD4DA51C24}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE