From 71c16c14362930633bfa384f63000d813e299dfe Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Wed, 20 Sep 2017 13:07:13 +0200 Subject: [PATCH] blog tags api --- Yavsc/ApiControllers/BlogTagsApiController.cs | 148 ++++++++++++++++++ Yavsc/ApiControllers/PostTagsApiController.cs | 10 +- Yavsc/Models/ApplicationDbContext.cs | 6 +- .../Relationship/{PostTag.cs => BlogTag.cs} | 5 +- 4 files changed, 161 insertions(+), 8 deletions(-) create mode 100644 Yavsc/ApiControllers/BlogTagsApiController.cs rename Yavsc/Models/Relationship/{PostTag.cs => BlogTag.cs} (70%) diff --git a/Yavsc/ApiControllers/BlogTagsApiController.cs b/Yavsc/ApiControllers/BlogTagsApiController.cs new file mode 100644 index 00000000..d24d4820 --- /dev/null +++ b/Yavsc/ApiControllers/BlogTagsApiController.cs @@ -0,0 +1,148 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNet.Http; +using Microsoft.AspNet.Mvc; +using Microsoft.Data.Entity; +using Yavsc.Models; +using Yavsc.Models.Relationship; + +namespace Yavsc.Controllers +{ + [Produces("application/json")] + [Route("api/blogtags")] + public class BlogTagsApiController : Controller + { + private ApplicationDbContext _context; + + public BlogTagsApiController(ApplicationDbContext context) + { + _context = context; + } + + // GET: api/BlogTagsApi + [HttpGet] + public IEnumerable GetTagsDomain() + { + return _context.TagsDomain; + } + + // GET: api/BlogTagsApi/5 + [HttpGet("{id}", Name = "GetBlogTag")] + public async Task GetBlogTag([FromRoute] long id) + { + if (!ModelState.IsValid) + { + return HttpBadRequest(ModelState); + } + + BlogTag blogTag = await _context.TagsDomain.SingleAsync(m => m.PostId == id); + + if (blogTag == null) + { + return HttpNotFound(); + } + + return Ok(blogTag); + } + + // PUT: api/BlogTagsApi/5 + [HttpPut("{id}")] + public async Task PutBlogTag([FromRoute] long id, [FromBody] BlogTag blogTag) + { + if (!ModelState.IsValid) + { + return HttpBadRequest(ModelState); + } + + if (id != blogTag.PostId) + { + return HttpBadRequest(); + } + + _context.Entry(blogTag).State = EntityState.Modified; + + try + { + await _context.SaveChangesAsync(); + } + catch (DbUpdateConcurrencyException) + { + if (!BlogTagExists(id)) + { + return HttpNotFound(); + } + else + { + throw; + } + } + + return new HttpStatusCodeResult(StatusCodes.Status204NoContent); + } + + // POST: api/BlogTagsApi + [HttpPost] + public async Task PostBlogTag([FromBody] BlogTag blogTag) + { + if (!ModelState.IsValid) + { + return HttpBadRequest(ModelState); + } + + _context.TagsDomain.Add(blogTag); + try + { + await _context.SaveChangesAsync(); + } + catch (DbUpdateException) + { + if (BlogTagExists(blogTag.PostId)) + { + return new HttpStatusCodeResult(StatusCodes.Status409Conflict); + } + else + { + throw; + } + } + + return CreatedAtRoute("GetBlogTag", new { id = blogTag.PostId }, blogTag); + } + + // DELETE: api/BlogTagsApi/5 + [HttpDelete("{id}")] + public async Task DeleteBlogTag([FromRoute] long id) + { + if (!ModelState.IsValid) + { + return HttpBadRequest(ModelState); + } + + BlogTag blogTag = await _context.TagsDomain.SingleAsync(m => m.PostId == id); + if (blogTag == null) + { + return HttpNotFound(); + } + + _context.TagsDomain.Remove(blogTag); + await _context.SaveChangesAsync(); + + return Ok(blogTag); + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + _context.Dispose(); + } + base.Dispose(disposing); + } + + private bool BlogTagExists(long id) + { + return _context.TagsDomain.Count(e => e.PostId == id) > 0; + } + } +} \ No newline at end of file diff --git a/Yavsc/ApiControllers/PostTagsApiController.cs b/Yavsc/ApiControllers/PostTagsApiController.cs index 3292a5d0..e6618b4f 100644 --- a/Yavsc/ApiControllers/PostTagsApiController.cs +++ b/Yavsc/ApiControllers/PostTagsApiController.cs @@ -23,7 +23,7 @@ namespace Yavsc.Controllers // GET: api/PostTagsApi [HttpGet] - public IEnumerable GetTagsDomain() + public IEnumerable GetTagsDomain() { return _context.TagsDomain; } @@ -37,7 +37,7 @@ namespace Yavsc.Controllers return HttpBadRequest(ModelState); } - PostTag postTag = _context.TagsDomain.Single(m => m.PostId == id); + BlogTag postTag = _context.TagsDomain.Single(m => m.PostId == id); if (postTag == null) { @@ -49,7 +49,7 @@ namespace Yavsc.Controllers // PUT: api/PostTagsApi/5 [HttpPut("{id}")] - public IActionResult PutPostTag(long id, [FromBody] PostTag postTag) + public IActionResult PutPostTag(long id, [FromBody] BlogTag postTag) { if (!ModelState.IsValid) { @@ -84,7 +84,7 @@ namespace Yavsc.Controllers // POST: api/PostTagsApi [HttpPost] - public IActionResult PostPostTag([FromBody] PostTag postTag) + public IActionResult PostPostTag([FromBody] BlogTag postTag) { if (!ModelState.IsValid) { @@ -120,7 +120,7 @@ namespace Yavsc.Controllers return HttpBadRequest(ModelState); } - PostTag postTag = _context.TagsDomain.Single(m => m.PostId == id); + BlogTag postTag = _context.TagsDomain.Single(m => m.PostId == id); if (postTag == null) { return HttpNotFound(); diff --git a/Yavsc/Models/ApplicationDbContext.cs b/Yavsc/Models/ApplicationDbContext.cs index afe0dabf..b24b2aff 100644 --- a/Yavsc/Models/ApplicationDbContext.cs +++ b/Yavsc/Models/ApplicationDbContext.cs @@ -41,7 +41,7 @@ namespace Yavsc.Models // Add your customizations after calling base.OnModelCreating(builder); builder.Entity().HasKey(x => new { x.OwnerId, x.UserId }); builder.Entity().Property(x=>x.DeclarationDate).HasDefaultValueSql("LOCALTIMESTAMP"); - builder.Entity().HasKey(x=>new { x.PostId, x.TagId}); + builder.Entity().HasKey(x=>new { x.PostId, x.TagId}); builder.Entity().HasMany( c=>c.Connections ); builder.Entity().Property(u=>u.Avatar).HasDefaultValue(Constants.DefaultAvatar); builder.Entity().Property(u=>u.DiskQuota).HasDefaultValue(Constants.DefaultFSQ); @@ -186,7 +186,7 @@ namespace Yavsc.Models public DbSet Tags { get; set; } - public DbSet TagsDomain { get; set; } + public DbSet TagsDomain { get; set; } public DbSet EstimateTemplates { get; set; } @@ -278,5 +278,7 @@ namespace Yavsc.Models public DbSet Links { get; set; } public DbSet Period { get; set; } + + public DbSet BlogTags { get; set; } } } diff --git a/Yavsc/Models/Relationship/PostTag.cs b/Yavsc/Models/Relationship/BlogTag.cs similarity index 70% rename from Yavsc/Models/Relationship/PostTag.cs rename to Yavsc/Models/Relationship/BlogTag.cs index 56695020..7e4d2343 100644 --- a/Yavsc/Models/Relationship/PostTag.cs +++ b/Yavsc/Models/Relationship/BlogTag.cs @@ -2,11 +2,14 @@ using System.ComponentModel.DataAnnotations.Schema; namespace Yavsc.Models.Relationship { - public partial class PostTag + public partial class BlogTag { [ForeignKey("PostId")] public virtual Blog Post { get; set; } public long PostId { get; set; } + + [ForeignKey("TagId")] + public virtual Tag Tag{ get; set; } public long TagId { get; set; } } }