Skip to content

Commit 48b4d7e

Browse files
committed
Assets controller api
1 parent f97c9b3 commit 48b4d7e

3 files changed

Lines changed: 114 additions & 175 deletions

File tree

src/App/Controllers/AdminController.cs

Lines changed: 2 additions & 160 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
1-
using Core;
2-
using Core.Data;
3-
using Core.Helpers;
4-
using Core.Services;
1+
using Core.Services;
52
using Microsoft.AspNetCore.Authorization;
63
using Microsoft.AspNetCore.Http;
7-
using Microsoft.AspNetCore.Identity;
84
using Microsoft.AspNetCore.Mvc;
9-
using System;
105
using System.Collections.Generic;
11-
using System.Linq;
126
using System.Threading.Tasks;
137

148
namespace App.Controllers
@@ -17,171 +11,19 @@ namespace App.Controllers
1711
public class AdminController : Controller
1812
{
1913
IDataService _db;
20-
IStorageService _ss;
21-
UserManager<AppUser> _um;
2214
IImportService _feed;
2315

24-
public AdminController(IDataService db, IImportService feed, IStorageService ss, UserManager<AppUser> um)
16+
public AdminController(IDataService db, IImportService feed)
2517
{
2618
_db = db;
2719
_feed = feed;
28-
_um = um;
29-
_ss = ss;
3020
}
3121

3222
public IActionResult Index()
3323
{
3424
return Redirect("~/admin/posts");
3525
}
3626

37-
[HttpDelete]
38-
public async Task RemovePost(int id)
39-
{
40-
41-
var post = _db.BlogPosts.Single(p => p.Id == id);
42-
var author = _db.Authors.Single(a => a.Id == post.AuthorId);
43-
var user = _db.Authors.Single(a => a.AppUserName == User.Identity.Name);
44-
45-
//prevents users from removing other users posts or admin posts --manuta 9-16-2018
46-
if (user.IsAdmin || author.AppUserName == User.Identity.Name)
47-
{
48-
_db.BlogPosts.Remove(post);
49-
_db.Complete();
50-
}
51-
await Task.CompletedTask;
52-
}
53-
54-
[HttpPut]
55-
public async Task PublishPost(int id, string flag)
56-
{
57-
var post = _db.BlogPosts.Single(p => p.Id == id);
58-
var author = _db.Authors.Single(a => a.Id == post.AuthorId);
59-
var user = _db.Authors.Single(a => a.AppUserName == User.Identity.Name);
60-
if (!string.IsNullOrEmpty(flag) && (user.IsAdmin || author.AppUserName == User.Identity.Name))
61-
{
62-
if (flag == "P") post.Published = DateTime.UtcNow;
63-
if (flag == "U") post.Published = DateTime.MinValue;
64-
_db.Complete();
65-
}
66-
await Task.CompletedTask;
67-
}
68-
69-
[HttpPut]
70-
public async Task FeaturePost(int id, string flag)
71-
{
72-
var post = _db.BlogPosts.Single(p => p.Id == id);
73-
var author = _db.Authors.Single(a => a.Id == post.AuthorId);
74-
var user = _db.Authors.Single(a => a.AppUserName == User.Identity.Name);
75-
if (!string.IsNullOrEmpty(flag) && (user.IsAdmin || author.AppUserName == User.Identity.Name))
76-
{
77-
if (flag == "F") post.IsFeatured = true;
78-
if (flag == "U") post.IsFeatured = false;
79-
_db.Complete();
80-
}
81-
await Task.CompletedTask;
82-
}
83-
84-
[Route("assets")]
85-
public async Task<AssetsModel> GetAssetList(int page = 1, string filter = "", string search = "")
86-
{
87-
var pager = new Pager(page);
88-
var user = _um.Users.Single(u => u.UserName == User.Identity.Name);
89-
IEnumerable<AssetItem> items;
90-
91-
if (string.IsNullOrEmpty(search))
92-
{
93-
if (filter == "filterImages")
94-
{
95-
items = await _ss.Find(a => a.AssetType == AssetType.Image, pager);
96-
}
97-
else if (filter == "filterAttachments")
98-
{
99-
items = await _ss.Find(a => a.AssetType == AssetType.Attachment, pager);
100-
}
101-
else
102-
{
103-
items = await _ss.Find(null, pager);
104-
}
105-
}
106-
else
107-
{
108-
items = await _ss.Find(a => a.Title.Contains(search), pager);
109-
}
110-
111-
if (page < 1 || page > pager.LastPage)
112-
return null;
113-
114-
return new AssetsModel
115-
{
116-
Assets = items,
117-
Pager = pager
118-
};
119-
}
120-
121-
[Route("assets/pick")]
122-
public async Task<AssetItem> Pick(string type, string asset, string post)
123-
{
124-
if (type == "postCover")
125-
{
126-
await _db.BlogPosts.SaveCover(int.Parse(post), asset);
127-
}
128-
else if (type == "appCover")
129-
{
130-
var cover = _db.CustomFields.Single(f => f.AuthorId == 0 && f.Name == Constants.BlogCover);
131-
if (cover == null)
132-
_db.CustomFields.Add(new CustomField { AuthorId = 0, Name = Constants.BlogCover, Content = asset });
133-
else
134-
cover.Content = asset;
135-
_db.Complete();
136-
}
137-
else if (type == "appLogo")
138-
{
139-
var logo = _db.CustomFields.Single(f => f.AuthorId == 0 && f.Name == Constants.BlogLogo);
140-
if (logo == null)
141-
_db.CustomFields.Add(new CustomField { AuthorId = 0, Name = Constants.BlogLogo, Content = asset });
142-
else
143-
logo.Content = asset;
144-
_db.Complete();
145-
}
146-
else if (type == "avatar")
147-
{
148-
var user = _db.Authors.Single(a => a.AppUserName == User.Identity.Name);
149-
user.Avatar = asset;
150-
_db.Complete();
151-
}
152-
153-
var item = await _ss.Find(a => a.Url == asset, new Pager(1));
154-
return item.FirstOrDefault();
155-
}
156-
157-
[HttpDelete, Route("assets/remove")]
158-
public IActionResult Remove(string url)
159-
{
160-
_ss.DeleteFile(url);
161-
162-
return Ok("Deleted");
163-
}
164-
165-
[HttpPost, Route("assets/upload")]
166-
public async Task<IActionResult> Upload(ICollection<IFormFile> files)
167-
{
168-
foreach (var file in files)
169-
{
170-
await SaveFile(file);
171-
}
172-
return Ok("Created");
173-
}
174-
175-
async Task SaveFile(IFormFile file)
176-
{
177-
var user = _um.Users.Where(u => u.UserName == User.Identity.Name)
178-
.FirstOrDefault();
179-
180-
var path = string.Format("{0}/{1}", DateTime.Now.Year, DateTime.Now.Month);
181-
182-
var asset = await _ss.UploadFormFile(file, Url.Content("~/"), path);
183-
}
184-
18527
[HttpPost, Route("[controller]/importfeed")]
18628
public async Task<IEnumerable<ImportMessage>> ImportFeed(IFormFile file)
18729
{

src/App/wwwroot/admin/js/app/fileManagerController.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,16 @@
3434
}
3535
var url = 'assets/' + id;
3636
if (callBack.name === 'updatePostCoverCallback') {
37-
url = 'assets/pick?type=postCover&asset=' + id + '&post=' + $('#Post_Id').val();
37+
url = 'api/assets/pick?type=postCover&asset=' + id + '&post=' + $('#Post_Id').val();
3838
}
3939
else if (callBack.name === 'updateAppCoverCallback') {
40-
url = 'assets/pick?type=appCover&asset=' + id;
40+
url = 'api/assets/pick?type=appCover&asset=' + id;
4141
}
4242
else if (callBack.name === 'updateAppLogoCallback') {
43-
url = 'assets/pick?type=appLogo&asset=' + id;
43+
url = 'api/assets/pick?type=appLogo&asset=' + id;
4444
}
4545
else if(callBack.name === 'updateAvatarCallback'){
46-
url = 'assets/pick?type=avatar&asset=' + id;
46+
url = 'api/assets/pick?type=avatar&asset=' + id;
4747
}
4848
dataService.get(url, callBack, fail);
4949
}
@@ -57,7 +57,7 @@
5757
function uploadSubmit() {
5858
var data = new FormData($('#frmUpload')[0]);
5959

60-
dataService.upload('assets/upload', data, submitCallback, fail);
60+
dataService.upload('api/assets/upload', data, submitCallback, fail);
6161
}
6262
function submitCallback() {
6363
load(1);
@@ -68,10 +68,10 @@
6868
var items = $('#fileManagerList input:checked');
6969
for (i = 0; i < items.length; i++) {
7070
if (i + 1 < items.length) {
71-
dataService.remove('assets/remove?url=' + items[i].id, emptyCallback, fail);
71+
dataService.remove('api/assets/remove?url=' + items[i].id, emptyCallback, fail);
7272
}
7373
else {
74-
dataService.remove('assets/remove?url=' + items[i].id, removeCallback, fail);
74+
dataService.remove('api/assets/remove?url=' + items[i].id, removeCallback, fail);
7575
}
7676
}
7777
}
@@ -89,10 +89,10 @@
8989
}
9090
var search = $('#asset-search').val();
9191
if (search && search.length > 0) {
92-
dataService.get('assets?page=' + page + '&filter=' + filter + '&search=' + search, loadCallback, fail);
92+
dataService.get('api/assets?page=' + page + '&filter=' + filter + '&search=' + search, loadCallback, fail);
9393
}
9494
else {
95-
dataService.get('assets?page=' + page + '&filter=' + filter, loadCallback, fail);
95+
dataService.get('api/assets?page=' + page + '&filter=' + filter, loadCallback, fail);
9696
}
9797
return false;
9898
}

src/Core/Api/AssetsController.cs

Lines changed: 103 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
using Core.Services;
1+
using Core.Data;
2+
using Core.Helpers;
3+
using Core.Services;
24
using Microsoft.AspNetCore.Http;
35
using Microsoft.AspNetCore.Mvc;
46
using System;
57
using System.Collections.Generic;
68
using System.Threading.Tasks;
9+
using System.Linq;
710

811
namespace Core.Api
912
{
@@ -20,19 +23,113 @@ public AssetsController(IDataService data, IStorageService store)
2023
_store = store;
2124
}
2225

23-
public async Task<ActionResult<IList<string>>> Get(string path = "", int page = 1)
26+
[HttpGet]
27+
public async Task<AssetsModel> Get(int page = 1, string filter = "", string search = "")
28+
{
29+
var pager = new Pager(page);
30+
IEnumerable<AssetItem> items;
31+
32+
if (string.IsNullOrEmpty(search))
33+
{
34+
if (filter == "filterImages")
35+
{
36+
items = await _store.Find(a => a.AssetType == AssetType.Image, pager);
37+
}
38+
else if (filter == "filterAttachments")
39+
{
40+
items = await _store.Find(a => a.AssetType == AssetType.Attachment, pager);
41+
}
42+
else
43+
{
44+
items = await _store.Find(null, pager);
45+
}
46+
}
47+
else
48+
{
49+
items = await _store.Find(a => a.Title.Contains(search), pager);
50+
}
51+
52+
if (page < 1 || page > pager.LastPage)
53+
return null;
54+
55+
return new AssetsModel
56+
{
57+
Assets = items,
58+
Pager = pager
59+
};
60+
}
61+
62+
[HttpGet("pick")]
63+
public async Task<AssetItem> Pick(string type, string asset, string post)
64+
{
65+
if (type == "postCover")
66+
{
67+
await _data.BlogPosts.SaveCover(int.Parse(post), asset);
68+
}
69+
else if (type == "appCover")
70+
{
71+
var cover = _data.CustomFields.Single(f => f.AuthorId == 0 && f.Name == Constants.BlogCover);
72+
if (cover == null)
73+
_data.CustomFields.Add(new CustomField { AuthorId = 0, Name = Constants.BlogCover, Content = asset });
74+
else
75+
cover.Content = asset;
76+
_data.Complete();
77+
}
78+
else if (type == "appLogo")
79+
{
80+
var logo = _data.CustomFields.Single(f => f.AuthorId == 0 && f.Name == Constants.BlogLogo);
81+
if (logo == null)
82+
_data.CustomFields.Add(new CustomField { AuthorId = 0, Name = Constants.BlogLogo, Content = asset });
83+
else
84+
logo.Content = asset;
85+
_data.Complete();
86+
}
87+
else if (type == "avatar")
88+
{
89+
var user = _data.Authors.Single(a => a.AppUserName == User.Identity.Name);
90+
user.Avatar = asset;
91+
_data.Complete();
92+
}
93+
94+
var item = await _store.Find(a => a.Url == asset, new Pager(1));
95+
return item.FirstOrDefault();
96+
}
97+
98+
[HttpPost("upload")]
99+
public async Task<IActionResult> Upload(ICollection<IFormFile> files)
24100
{
25101
try
26102
{
27-
var results = _store.GetAssets(path);
103+
foreach (var file in files)
104+
{
105+
await SaveFile(file);
106+
}
107+
return Ok("Created");
108+
}
109+
catch (Exception)
110+
{
111+
return StatusCode(StatusCodes.Status500InternalServerError, "File upload error");
112+
}
113+
}
28114

29-
return results == null || results.Count > 0 ?
30-
Ok(await Task.FromResult(results)) : StatusCode(StatusCodes.Status404NotFound, "Not found");
115+
[HttpDelete("remove")]
116+
public IActionResult Remove(string url)
117+
{
118+
try
119+
{
120+
_store.DeleteFile(url);
121+
return Ok("Deleted");
31122
}
32123
catch (Exception)
33124
{
34-
return StatusCode(StatusCodes.Status500InternalServerError, "Database Failure");
125+
return StatusCode(StatusCodes.Status500InternalServerError, "File delete error");
35126
}
36127
}
128+
129+
async Task<AssetItem> SaveFile(IFormFile file)
130+
{
131+
var path = string.Format("{0}/{1}", DateTime.Now.Year, DateTime.Now.Month);
132+
return await _store.UploadFormFile(file, Url.Content("~/"), path);
133+
}
37134
}
38135
}

0 commit comments

Comments
 (0)