summaryrefslogtreecommitdiff
path: root/Controllers/FigureController.cs
blob: bad87918839eeea4be8222ad14e1893f7db81b4c (plain)
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
using System.Data;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using MyDarling.Models;

namespace MyDarling.Controllers
{
    [Authorize]
    public class FigureController : Controller
    {
        private DataContext context;
        private IWebHostEnvironment environment;
        public FigureController(DataContext context, IWebHostEnvironment environment)
        {
            this.context = context;
            this.environment = environment;
        }

        public async Task<IActionResult> Details(string id)
        {
            var figure = await context.Figures
                .Where(f => f.Id.Equals(id))
                .FirstOrDefaultAsync();
            if (figure == null)
            {
                return NotFound();
            }
            var product = await context.Products
                .Where(b => b.Figures.Contains(figure))
                .FirstOrDefaultAsync();
            if (product == null)
            {
                return NotFound();
            }
            return View(figure);
        }

        [HttpPost]
        public async Task<IActionResult> Edit(string id)
        {
            if (id == null)
            {
                return NotFound();
            }

            var figure = await context.Figures
                .Where(f => f.Id.Equals(id))
                .FirstOrDefaultAsync();

            if (figure == null)
            {
                return NotFound();
            }

            var product = await context.Products
                .Where(b => b.Figures.Contains(figure))
                .FirstOrDefaultAsync();

            if (await TryUpdateModelAsync<Figure>(
                figure,
                "",
                f => f.Description))
            {
                try
                {
                    await context.SaveChangesAsync();
                    return RedirectToAction("Details", "Products", new { Id = product?.Id });
                }
                catch (SystemException)
                {
                    ModelState.AddModelError("", "Unable to save changes");
                }
            }
            return View(figure);
        }

        [HttpPost]
        public async Task<ActionResult> Delete(string id)
        {
            var figure = await context.Figures.FindAsync(id);
            if (figure == null)
            {
                return NotFound();
            }
            var product = await context.Products
                .Where(b => b.Figures.Contains(figure))
                .FirstAsync();

            try
            {
                string filePath = $"/Content/{product.Id}/{figure.Id}.jpg";
                FileInfo figureFile = new FileInfo(environment.WebRootPath + filePath);
                if (figureFile.Exists)
                {
                    figureFile.Delete();
                }

                context.Figures.Remove(figure);
                await context.SaveChangesAsync();
                return RedirectToAction("Details", "Products", new { Id = product?.Id });
            }
            catch (DbUpdateException)
            {
                return RedirectToAction(nameof(Delete), new { id = id, saveChangesError = true });
            }
        }
    }
}