blob: 9bd7e934f1baf90376b729262fd988f9d8f5c529 (
plain) (
blame)
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
|
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using IOL.Helpers;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Localization;
using VSH.Data;
using VSH.Data.Database;
using VSH.Data.Enums;
using VSH.Data.Results;
using VSH.Data.Static;
using VSH.Utilities;
namespace VSH.Controllers;
[Authorize]
public class ProductsController : MainControllerBase
{
private readonly MainDbContext _context;
private readonly IStringLocalizer<SharedControllerResources> _localizer;
public ProductsController(
MainDbContext context,
IStringLocalizer<SharedControllerResources> localizer
) {
_context = context;
_localizer = localizer;
}
[HttpGet]
[AllowAnonymous]
public ActionResult GetAllProducts() {
return Ok(_context.Products.Include(c => c.Category));
}
[HttpGet("{id}")]
[AllowAnonymous]
public Product GetProduct(Guid id) {
return _context.Products
.Include(c => c.Category)
.SingleOrDefault(c => c.Id == id);
}
[HttpPost("upload-images")]
public ActionResult UploadImages() {
if (Request.Form.Files.Count == 0)
return BadRequest();
var filePaths = new List<FileInfo>();
var fileNames = new List<string>();
foreach (var file in Request.Form.Files) {
var fileName = RandomString.Generate(8, true) + file.FileName.ExtractExtension();
var filePath = Path.Combine(AppPaths.ProductImages.HostPath, fileName);
using var writeStream = new FileStream(filePath, FileMode.CreateNew);
file.CopyTo(writeStream);
filePaths.Add(new FileInfo(filePath));
fileNames.Add(fileName);
}
foreach (var filePath in filePaths) {
ImageFunctions.CreateProductImageCollection(filePath);
}
return Ok(fileNames);
}
[HttpPost("create")]
public ActionResult CreateProductAsync(Product payload) {
payload.SetBaseValues();
var category = _context.Categories.SingleOrDefault(p => p.Id == payload.Category.Id);
if (category == default)
return BadRequest(new ErrorResult(_localizer["Kunne ikke finne kategorien"]));
payload.Category = category;
payload.Slug = payload.Name.Slugified();
_context.Products.Add(payload);
_context.SaveChanges();
return Ok();
}
[HttpPost("{id}/update")]
public ActionResult UpdateProductAsync([FromRoute] Guid id, [FromBody] Product payload) {
var product = _context.Products.SingleOrDefault(p => p.Id == id);
if (product == default)
return NotFound(new ErrorResult(_localizer["Kunne ikke finne produktet"]));
var category = _context.Categories.AsNoTracking().SingleOrDefault(c => c.Id == payload.Category.Id);
if (category == default)
return NotFound(new ErrorResult(_localizer["Kunne ikke finne kategorien"]));
var newImages = payload.Images.Select(c => new ProductImage(c.FileName, c.Order)).ToList();
product.Images = newImages;
product.Category = category;
product.Name = payload.Name;
product.Slug = product.Name.Slugified();
product.Description = payload.Description;
product.Price = payload.Price;
product.Count = payload.Count;
product.PriceSuffix = payload.PriceSuffix;
product.ShowOnFrontpage = payload.ShowOnFrontpage;
product.Updated = DateTime.UtcNow;
_context.SaveChanges();
return Ok();
}
[HttpDelete("{id}/delete")]
public ActionResult DeleteProductAsync(Guid id) {
var product = _context.Products.SingleOrDefault(p => p.Id == id);
if (product == default)
return NotFound(new ErrorResult(_localizer["Kunne ikke finne produktet"]));
product.VisibilityState = ProductVisibility.DELETED;
product.Updated = DateTime.UtcNow;
_context.SaveChanges();
return Ok();
}
}
|