diff --git a/.drone.yml b/.drone.yml index 4daf28d..e2b7e72 100644 --- a/.drone.yml +++ b/.drone.yml @@ -18,13 +18,10 @@ steps: environment: ConnectionString: from_secret: ConnectionString - MySQLConnectionString: - from_secret: MySQLConnectionString commands: - chmod +x ./build.sh - ./build.sh - sed -i "s//$ConnectionString/g" output/appsettings.json - - sed -i "s//$MySQLConnectionString/g" output/appsettings.json - cp api.blog.service output/ - cp -r ./output/* /output - name: restart service diff --git a/src/Robware.Api.Blog.Tests/BlogControllerTests.cs b/src/Robware.Api.Blog.Tests/BlogControllerTests.cs index 3fd1f30..7401d24 100644 --- a/src/Robware.Api.Blog.Tests/BlogControllerTests.cs +++ b/src/Robware.Api.Blog.Tests/BlogControllerTests.cs @@ -26,7 +26,7 @@ namespace Robware.Api.Blog.Tests { var expectation = new BlogPost(); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.Get("url")).Value.Should().BeEquivalentTo(expectation); } @@ -39,7 +39,7 @@ namespace Robware.Api.Blog.Tests { var expectation = new BlogPost(); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.Get("1")).Value.Should().BeEquivalentTo(expectation); } @@ -50,7 +50,7 @@ namespace Robware.Api.Blog.Tests { repo.GetPostByUrlAsync("url").Throws(new ItemNotFoundException("", null)); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.Get("url")).Result.Should().BeOfType(); } @@ -61,7 +61,7 @@ namespace Robware.Api.Blog.Tests { repo.GetPostByIdAsync(1).Throws(new ItemNotFoundException("", null)); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.Get("1")).Result.Should().BeOfType(); } @@ -74,7 +74,7 @@ namespace Robware.Api.Blog.Tests { var expectation = new BlogPost[10]; - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.GetLatestPosts()).Value.Should().BeEquivalentTo(expectation); } @@ -87,7 +87,7 @@ namespace Robware.Api.Blog.Tests { var expectation = new BlogPost[1]; - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.GetLatestPosts(1)).Value.Should().BeEquivalentTo(expectation); } @@ -100,7 +100,7 @@ namespace Robware.Api.Blog.Tests { var expectation = new BlogPost[1]; - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.GetLatestPosts(1, 1)).Value.Should().BeEquivalentTo(expectation); } @@ -111,7 +111,7 @@ namespace Robware.Api.Blog.Tests { repo.GetLatestPostsAsync(1, 1000).Throws(new ItemNotFoundException("", null)); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.GetLatestPosts(1, 1000)).Result.Should().BeOfType(); } @@ -124,7 +124,7 @@ namespace Robware.Api.Blog.Tests { var expectation = new BlogPost(); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.GetLatestPost()).Value.Should().BeEquivalentTo(expectation); } @@ -135,7 +135,7 @@ namespace Robware.Api.Blog.Tests { repo.GetLatestPostAsync().Throws(new ItemNotFoundException("", null)); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.GetLatestPost()).Result.Should().BeOfType(); } @@ -146,7 +146,7 @@ namespace Robware.Api.Blog.Tests { repo.GetCountAsync().Returns(1); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.GetCount()).Value.Should().Be(1); } @@ -157,7 +157,7 @@ namespace Robware.Api.Blog.Tests { repo.GetCountAsync().Throws(new ItemNotFoundException("", null)); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.GetCount()).Value.Should().Be(0); } @@ -178,7 +178,7 @@ namespace Robware.Api.Blog.Tests { }; repo.SavePost(Arg.Any()).Returns(expected); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.SavePost(submission)).Value.Should().Be(expected); } @@ -203,7 +203,7 @@ namespace Robware.Api.Blog.Tests { }; repo.SavePost(existingPost).Returns(expected); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.SavePost(submission)).Value.Should().BeEquivalentTo(expected); } @@ -219,7 +219,7 @@ namespace Robware.Api.Blog.Tests { Title = "title" }; - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.SavePost(submission)).Result.Should().BeOfType(); } @@ -229,7 +229,7 @@ namespace Robware.Api.Blog.Tests { var repo = Substitute.For(); repo.GetAllPostsAsync().Returns(new BlogPost[10]); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.GetAllPosts()).Value.Should().BeEquivalentTo(new BlogPost[10]); } @@ -238,7 +238,7 @@ namespace Robware.Api.Blog.Tests { var logger = Substitute.For>(); var repo = Substitute.For(); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.DeletePost(1)).Should().BeOfType(); await repo.Received(1).DeletePostAsync(1); } @@ -250,7 +250,7 @@ namespace Robware.Api.Blog.Tests { var existingPost = new BlogPost {Draft = "content"}; repo.GetPostByIdAsync(1).Returns(existingPost); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.PublishPost(1)).Should().BeOfType(); await repo.Received(1).SavePost(Arg.Is(post => post.Content == "content")); } @@ -261,7 +261,7 @@ namespace Robware.Api.Blog.Tests { var repo = Substitute.For(); repo.GetPostByIdAsync(1).Throws(new ItemNotFoundException("", null)); - var controller = new BlogController(logger, repo, null); + var controller = new BlogController(logger, repo); (await controller.PublishPost(1)).Should().BeOfType(); } } diff --git a/src/Robware.Api.Blog.sln b/src/Robware.Api.Blog.sln index ab12437..bf7799b 100644 --- a/src/Robware.Api.Blog.sln +++ b/src/Robware.Api.Blog.sln @@ -7,8 +7,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Robware.Api.Blog", "Robware EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Robware.Blog", "Robware.Blog\Robware.Blog.csproj", "{92F5058F-8F58-4A4D-A661-49A4E1198677}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Robware.Data", "Robware.Data\Robware.Data.csproj", "{8860B6F7-8740-4CF5-BF24-67D00CA7C1A3}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Robware.Blog.Tests", "Robware.Blog.Tests\Robware.Blog.Tests.csproj", "{EEB41C17-B61C-451A-9C72-2B405DC42743}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8448EA1E-66F2-4566-8EBC-FDE8FE9BD733}" diff --git a/src/Robware.Api.Blog/Controllers/BlogController.cs b/src/Robware.Api.Blog/Controllers/BlogController.cs index 4f40d05..f6ec86f 100644 --- a/src/Robware.Api.Blog/Controllers/BlogController.cs +++ b/src/Robware.Api.Blog/Controllers/BlogController.cs @@ -1,13 +1,10 @@ using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; -using MongoDB.Driver; using Newtonsoft.Json; using Robware.Api.Blog.Models; using Robware.Blog; -using Robware.Data; namespace Robware.Api.Blog.Controllers { [ApiController] @@ -16,12 +13,10 @@ namespace Robware.Api.Blog.Controllers { private readonly ILogger _logger; private readonly IBlogRepository _blogRepository; - private readonly IDatabaseProvider _dbProvider; - public BlogController(ILogger logger, IBlogRepository blogRepository, IDatabaseProvider dbProvider) { + public BlogController(ILogger logger, IBlogRepository blogRepository) { _logger = logger; _blogRepository = blogRepository; - _dbProvider = dbProvider; } [HttpGet(nameof(Get) + "/{url}")] @@ -121,16 +116,5 @@ namespace Robware.Api.Blog.Controllers { return BadRequest("Tried to publish post that doesn't exist"); } } - - [HttpGet(nameof(Migrate))] - public async Task Migrate() { - var mysqlRepo = new Data.BlogRepository(_dbProvider); - - var existingPosts = await mysqlRepo.GetAllPostsAsync(); - foreach (var post in existingPosts) - await _blogRepository.SavePost(post); - - return Ok(); - } } } diff --git a/src/Robware.Api.Blog/Robware.Api.Blog.csproj b/src/Robware.Api.Blog/Robware.Api.Blog.csproj index 7d4a1dc..5660f36 100644 --- a/src/Robware.Api.Blog/Robware.Api.Blog.csproj +++ b/src/Robware.Api.Blog/Robware.Api.Blog.csproj @@ -11,7 +11,6 @@ - diff --git a/src/Robware.Api.Blog/Startup.cs b/src/Robware.Api.Blog/Startup.cs index d75aa2e..503453c 100644 --- a/src/Robware.Api.Blog/Startup.cs +++ b/src/Robware.Api.Blog/Startup.cs @@ -20,7 +20,6 @@ namespace Robware.Api.Blog { services.AddControllers(); services - .AddSingleton(new Data.MySQLDatabaseProvider(Configuration.GetConnectionString("mysql"))) .AddSingleton(SetupMongoDatabase()) .AddSingleton(); } diff --git a/src/Robware.Api.Blog/appsettings.json b/src/Robware.Api.Blog/appsettings.json index 5a4d3ac..0fd661d 100644 --- a/src/Robware.Api.Blog/appsettings.json +++ b/src/Robware.Api.Blog/appsettings.json @@ -15,7 +15,6 @@ } }, "ConnectionStrings": { - "database": "", - "mysql": "" + "database": "" } } diff --git a/src/Robware.Data/BlogRepository.cs b/src/Robware.Data/BlogRepository.cs deleted file mode 100644 index 0cfcbd0..0000000 --- a/src/Robware.Data/BlogRepository.cs +++ /dev/null @@ -1,107 +0,0 @@ -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Threading.Tasks; -using Dapper; -using Robware.Blog; -using Robware.Data.States; - -namespace Robware.Data -{ - public class BlogRepository : IBlogRepository - { - private readonly IDatabaseProvider _dbProvider; - - public BlogRepository(IDatabaseProvider dbProvider) => _dbProvider = dbProvider; - - private static BlogPost MapBlogPost(BlogPostState state) => new BlogPost { - Id = state.Post_Id, - Title = state.Post_Title, - Content = state.Post_Content, - Timestamp = state.Post_Timestamp, - Draft = state.Post_Draft, - Url = state.Post_Url, - UserId = state.User_Id - }; - - private async Task> DoQuery(IDbConnection connection, string query, object param = null) { - var result = await connection.QueryAsync(query, param); - - if (!result.Any()) - throw new ItemNotFoundException(query, param); - - return result; - } - - public async Task GetPostByUrlAsync(string url) { - const string query = "SELECT * FROM blog_posts WHERE post_url=@url AND post_deleted=0"; - using (var connection = _dbProvider.NewConnection()) { - connection.Open(); - var result = await DoQuery(connection, query, new{url}); - return MapBlogPost(result.First()); - } - } - - public async Task> GetLatestPostsAsync(int limit, int offset = 0) { - const string query = "SELECT * FROM blog_posts WHERE post_content<>'' AND post_deleted=0 ORDER BY post_timestamp DESC LIMIT @offset,@limit"; - using (var connection = _dbProvider.NewConnection()) { - connection.Open(); - var results = await DoQuery(connection, query, new{limit, offset}); - return results.Select(MapBlogPost); - } - } - - public async Task GetLatestPostAsync() => (await GetLatestPostsAsync(1)).First(); - - public async Task GetCountAsync() - { - var query="SELECT COUNT(*) FROM blog_posts WHERE post_content<>'' AND post_deleted=0"; - using(var connection = _dbProvider.NewConnection()) { - connection.Open(); - var result = await DoQuery(connection, query); - return result.First(); - } - } - - public async Task GetPostByIdAsync(int id) { - const string query = "SELECT * FROM blog_posts WHERE post_id=@id AND post_deleted=0"; - using (var connection = _dbProvider.NewConnection()) { - connection.Open(); - var result = await DoQuery(connection, query, new {id}); - return MapBlogPost(result.First()); - } - } - - public async Task SavePost(BlogPost post) { - const string newPostQuery = "INSERT INTO blog_posts (post_title, post_content, post_draft, post_url) VALUES (@title, @content, @draft, @url); SELECT CAST(LAST_INSERT_ID() as int)"; - const string updatePostQuery = "UPDATE blog_posts SET post_id = @id, post_title = @title, post_content = @content, post_draft = @draft, post_url = @url WHERE post_id = @id "; - - var newPost = post.Id == 0; - - using (var connection = _dbProvider.NewConnection()) { - connection.Open(); - var result = await connection.QueryAsync(newPost ? newPostQuery : updatePostQuery, post); - return newPost ? await GetPostByIdAsync(result.Single()) : post; - } - } - - public async Task> GetAllPostsAsync() { - const string query = "SELECT * FROM blog_posts WHERE post_deleted=0"; - - using (var connection = _dbProvider.NewConnection()) { - connection.Open(); - var result = await connection.QueryAsync(query); - return result.Select(MapBlogPost); - } - } - - public async Task DeletePostAsync(int id) { - const string query = "UPDATE blog_posts SET post_deleted=1 WHERE post_id=@id"; - - using (var connection = _dbProvider.NewConnection()) { - connection.Open(); - await connection.ExecuteAsync(query, new {id}); - } - } - } -} diff --git a/src/Robware.Data/IDatabaseProvider.cs b/src/Robware.Data/IDatabaseProvider.cs deleted file mode 100644 index 7cff514..0000000 --- a/src/Robware.Data/IDatabaseProvider.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Data; - -namespace Robware.Data -{ - public interface IDatabaseProvider - { - IDbConnection NewConnection(); - } -} diff --git a/src/Robware.Data/MySQLDatabaseProvider.cs b/src/Robware.Data/MySQLDatabaseProvider.cs deleted file mode 100644 index 1fab056..0000000 --- a/src/Robware.Data/MySQLDatabaseProvider.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Data; -using MySql.Data.MySqlClient; - -namespace Robware.Data -{ - public class MySQLDatabaseProvider:IDatabaseProvider - { - private readonly string _connectionString; - - public MySQLDatabaseProvider(string connectionString) => _connectionString = connectionString; - - public IDbConnection NewConnection() => new MySqlConnection(_connectionString); - } -} diff --git a/src/Robware.Data/Robware.Data.csproj b/src/Robware.Data/Robware.Data.csproj deleted file mode 100644 index c765d7f..0000000 --- a/src/Robware.Data/Robware.Data.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - netcoreapp3.1 - - - - - - - - - - - - - - diff --git a/src/Robware.Data/States/BlogPostState.cs b/src/Robware.Data/States/BlogPostState.cs deleted file mode 100644 index d53f348..0000000 --- a/src/Robware.Data/States/BlogPostState.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using Dapper.Contrib.Extensions; - -namespace Robware.Data.States -{ - [Table("blog_posts")] - public class BlogPostState - { - [Key] - public int Post_Id { get; set; } - public string Post_Title { get; set; } - public string Post_Content { get; set; } - public DateTime Post_Timestamp { get; set; } - public string Post_Draft { get; set; } - public string Post_Url { get; set; } - public bool Post_Deleted{ get; set; } - public int User_Id { get; set; } - } -}