-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Expand file tree
/
Copy pathPageApiController.cs
More file actions
136 lines (121 loc) · 4.36 KB
/
PageApiController.cs
File metadata and controls
136 lines (121 loc) · 4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using SimplCommerce.Infrastructure.Data;
using SimplCommerce.Module.Cms.Areas.Cms.ViewModels;
using SimplCommerce.Module.Cms.Models;
using SimplCommerce.Module.Cms.Services;
using SimplCommerce.Module.Core.Extensions;
namespace SimplCommerce.Module.Cms.Areas.Cms.Controllers
{
[Area("Cms")]
[Authorize(Roles = "admin")]
[Route("api/pages")]
public class PageApiController : Controller
{
private readonly IRepository<Page> _pageRepository;
private readonly IPageService _pageService;
private readonly IWorkContext _workContext;
public PageApiController(IRepository<Page> pageRepository, IPageService pageService, IWorkContext workContext)
{
_pageRepository = pageRepository;
_pageService = pageService;
_workContext = workContext;
}
[HttpGet]
public async Task<IActionResult> Get()
{
var pageList = await _pageRepository.Query()
.Where(x => !x.IsDeleted)
.Select(x => new
{
x.Id,
x.Name,
x.Slug,
x.CreatedOn,
x.IsPublished
})
.ToListAsync();
return Json(pageList);
}
[HttpGet("{id}")]
public async Task<IActionResult> Get(long id)
{
var page = await _pageRepository.Query().FirstOrDefaultAsync(x => x.Id == id);
var model = new PageForm
{
Id = page.Id,
Name = page.Name,
Slug = page.Slug,
MetaTitle = page.MetaTitle,
MetaKeywords = page.MetaKeywords,
MetaDescription = page.MetaDescription,
Body = page.Body,
IsPublished = page.IsPublished
};
return Json(model);
}
[HttpPost]
public async Task<IActionResult> Post([FromBody] PageForm model)
{
if (ModelState.IsValid)
{
var currentUser = await _workContext.GetCurrentUser();
var page = new Page
{
Name = model.Name,
Slug = model.Slug,
MetaTitle = model.MetaTitle,
MetaKeywords = model.MetaKeywords,
MetaDescription = model.MetaDescription,
Body = model.Body,
IsPublished = model.IsPublished,
CreatedBy = currentUser,
LatestUpdatedBy = currentUser
};
await _pageService.Create(page);
return CreatedAtAction(nameof(Get), new { id = page.Id }, null);
}
return BadRequest(ModelState);
}
[HttpPut("{id}")]
public async Task<IActionResult> Put(long id, [FromBody] PageForm model)
{
if (ModelState.IsValid)
{
var page = await _pageRepository.Query().FirstOrDefaultAsync(x => x.Id == id);
if(page == null)
{
return NotFound();
}
var currentUser = await _workContext.GetCurrentUser();
page.Name = model.Name;
page.Slug = model.Slug;
page.MetaTitle = model.MetaTitle;
page.MetaKeywords = model.MetaKeywords;
page.MetaDescription = model.MetaDescription;
page.Body = model.Body;
page.IsPublished = model.IsPublished;
page.LatestUpdatedOn = DateTimeOffset.UtcNow;
page.LatestUpdatedBy = currentUser;
await _pageService.Update(page);
return Accepted();
}
return BadRequest(ModelState);
}
[HttpDelete("{id}")]
public async Task<IActionResult> Delete(long id)
{
var page = await _pageRepository.Query().FirstOrDefaultAsync(x => x.Id == id);
if (page == null)
{
return NotFound();
}
await _pageService.Delete(page);
return NoContent();
}
}
}