Skip to content

Commit 481d791

Browse files
committed
Update album creating methods and change webstyle
1 parent 4fd0e98 commit 481d791

File tree

16 files changed

+11610
-9042
lines changed

16 files changed

+11610
-9042
lines changed

src/CoinyProject.Application/AlbumServices/Interfaces/IAlbumElementService.cs

-18
This file was deleted.

src/CoinyProject.Application/AlbumServices/Interfaces/IAlbumService.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ namespace CoinyProject.Application.AlbumServices.Interfaces
99
{
1010
public interface IAlbumService
1111
{
12-
Task<int> AddAlbum(AlbumCreating album);
12+
Task AddAlbum(AlbumCreating album);
13+
Task AddAlbumElement(AlbumElementCreating albumElement);
14+
Task<(string, string)> CommitAlbumCreation();
1315
}
1416
}

src/CoinyProject.Application/AlbumServices/Services/AlbumElementService.cs

-58
This file was deleted.

src/CoinyProject.Application/AlbumServices/Services/AlbumService.cs

+37-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using CoinyProject.Infrastructure.Data;
55
using CoinyProject.Infrastructure.Data.Migrations;
66
using CoinyProject.Infrastructure.Data.Repositories;
7+
using Microsoft.AspNetCore.Mvc;
78
using Microsoft.EntityFrameworkCore;
89
using System;
910
using System.Collections.Generic;
@@ -18,12 +19,12 @@ public class AlbumService : IAlbumService
1819
{
1920
private readonly UnitOfWork _unitOfWork;
2021

21-
public AlbumService(UnitOfWork unitOfWork)
22+
public AlbumService(ApplicationDBContext dBContext)
2223
{
23-
_unitOfWork = unitOfWork;
24+
_unitOfWork = new UnitOfWork(dBContext);
2425
}
2526

26-
public async Task<int> AddAlbum(AlbumCreating album)
27+
public async Task AddAlbum(AlbumCreating album)
2728
{
2829
Album _album = new Album();
2930

@@ -32,10 +33,41 @@ public async Task<int> AddAlbum(AlbumCreating album)
3233
_album.Description = album.Description;
3334

3435
await _unitOfWork.AlbumRepository.Add(_album);
35-
await _unitOfWork.Commit();
36-
return _album.Id;
36+
_unitOfWork.Commit();
3737
}
38+
public Task AddAlbumElement(AlbumElementCreating element)
39+
{
40+
var album = _unitOfWork.AlbumRepository.Include(x => x.Elements)
41+
.Where(x => x.Elements.Count == 0)
42+
.OrderByDescending(x => x.Id)
43+
.FirstOrDefault();
44+
45+
if (album != null)
46+
{
47+
AlbumElement _albumElement = new AlbumElement()
48+
{
49+
Name = album.Name,
50+
Description = album.Description,
51+
};
3852

53+
album.Elements.Add(_albumElement);
54+
_unitOfWork.Commit();
55+
}
56+
57+
return Task.CompletedTask;
58+
}
3959

60+
public Task<(string,string)> CommitAlbumCreation()
61+
{
62+
var album = _unitOfWork.AlbumRepository.Include(x => x.Elements)
63+
.Where(x => !x.Elements.Any())
64+
.AsNoTracking()
65+
.FirstOrDefault();
66+
67+
if (album != null)
68+
return Task.FromResult(("error", "At least one element must be provided"));
69+
else
70+
return Task.FromResult(("success", "Album successfule created"));
71+
}
4072
}
4173
}

src/CoinyProject.Core.Domain/Interfaces/IBaseRepository.cs

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4+
using System.Linq.Expressions;
45
using System.Text;
56
using System.Threading.Tasks;
67

@@ -13,6 +14,7 @@ public interface IBaseRepository<TEntity> where TEntity : class
1314
Task Add(TEntity entity);
1415
Task Remove(TEntity entity);
1516
Task Update(TEntity entity);
17+
IQueryable<TEntity> Include(Expression<Func<TEntity, object>> navigationProperty);
1618

1719
}
1820
}

src/CoinyProject.Infrastructure.Data/Repositories/AlbumRepository.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ public AlbumRepository(ApplicationDBContext dBContext) : base(dBContext)
1313
{
1414
}
1515

16-
/* public ApplicationDBContext ApplicationDBContex
16+
public ApplicationDBContext ApplicationDBContex
1717
{
1818
get
1919
{
2020
return _dbContext as ApplicationDBContext;
2121
}
22-
}*/
22+
}
2323
}
2424
}

src/CoinyProject.Infrastructure.Data/Repositories/BaseRepository.cs

+7-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System;
44
using System.Collections.Generic;
55
using System.Linq;
6+
using System.Linq.Expressions;
67
using System.Text;
78
using System.Threading.Tasks;
89

@@ -17,7 +18,7 @@ public BaseRepository(ApplicationDBContext dBContext)
1718
}
1819
public Task Add(TEntity entity)
1920
{
20-
_dbContext.Add(entity);
21+
_dbContext.AddAsync(entity);
2122
return Task.CompletedTask;
2223
}
2324

@@ -31,6 +32,11 @@ public async Task<TEntity> GetById(int id)
3132
return await _dbContext.Set<TEntity>().FindAsync(id);
3233
}
3334

35+
public IQueryable<TEntity> Include(Expression<Func<TEntity, object>> navigationProperty)
36+
{
37+
return _dbContext.Set<TEntity>().Include(navigationProperty);
38+
}
39+
3440
public Task Remove(TEntity entity)
3541
{
3642
_dbContext.Remove(entity);

src/CoinyProject.Infrastructure.Data/Repositories/UnitOfWork.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public UnitOfWork(ApplicationDBContext dbContext)
1818
AlbumElementRepository = new AlbumElementRepository(dbContext);
1919
AlbumRepository = new AlbumRepository(dbContext);
2020
}
21-
public Task Commit() => _dbContext.SaveChangesAsync();
21+
public void Commit() => _dbContext.SaveChanges();
2222

2323
public void Dispose() => _dbContext.Dispose();
2424
}

src/CoinyProject.WebUI/Controllers/AlbumController.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ public class AlbumController : Controller
1414
{
1515
private readonly IAlbumService _albumService;
1616

17-
public AlbumController(ApplicationDBContext db)
17+
public AlbumController(IAlbumService albumService)
1818
{
19-
_albumService = new AlbumService(new UnitOfWork(db));
19+
_albumService = albumService;
2020
}
2121

2222
public ActionResult Index()
@@ -32,8 +32,8 @@ public ActionResult Create()
3232
[HttpPost]
3333
public async Task<ActionResult> Create(AlbumCreating album)
3434
{
35-
int albumId = await _albumService.AddAlbum(album);
36-
return RedirectToAction("Create","AlbumElement", new { albumId });
35+
_albumService.AddAlbum(album);
36+
return RedirectToAction("Create","AlbumElement");
3737
}
3838

3939
}

src/CoinyProject.WebUI/Controllers/AlbumElementController.cs

+14-10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using CoinyProject.Application.AlbumServices.Services;
1+
using CoinyProject.Application.AlbumServices.Interfaces;
2+
using CoinyProject.Application.AlbumServices.Services;
23
using CoinyProject.Application.DTO;
34
using CoinyProject.Core.Domain.Entities;
45
using CoinyProject.Infrastructure.Data;
@@ -11,30 +12,33 @@ namespace CoinyProject.WebUI.Controllers
1112
{
1213
public class AlbumElementController : Controller
1314
{
14-
private readonly AlbumElementService _albumElementService;
15+
private readonly IAlbumService _albumService;
1516

16-
public AlbumElementController(ApplicationDBContext db)
17+
public AlbumElementController(IAlbumService albumService)
1718
{
18-
_albumElementService = new AlbumElementService(new UnitOfWork(db));
19+
_albumService = albumService;
1920
}
2021

21-
[HttpGet]
22-
public async Task<IActionResult> Create(int albumId)
22+
public IActionResult Create()
2323
{
24-
await _albumElementService.SetAlbumId(albumId);
2524
return View();
2625
}
2726

2827
[HttpPost]
2928
public async Task<IActionResult> Create(AlbumElementCreating element)
3029
{
31-
await _albumElementService.AddAlbumElement(element);
30+
await _albumService.AddAlbumElement(element);
3231
return RedirectToAction("Create");
3332
}
3433
public async Task<IActionResult> Commit()
3534
{
36-
await _albumElementService.CommitAlbumElementList();
37-
return RedirectToAction("Index","Album");
35+
var (status, message) = await _albumService.CommitAlbumCreation();
36+
TempData[status] = message;
37+
38+
if (status == "success")
39+
return RedirectToAction("Index","Album");
40+
else
41+
return RedirectToAction("Create");
3842
}
3943

4044
}

src/CoinyProject.WebUI/Program.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
using System.Configuration;
66
using CoinyProject.Core.Domain.Entities;
77
using CoinyProject.WebUI.Areas.Identity;
8+
using CoinyProject.Application.AlbumServices.Interfaces;
9+
using CoinyProject.Application.AlbumServices.Services;
810

911
var builder = WebApplication.CreateBuilder(args);
1012

@@ -20,10 +22,11 @@
2022
builder.Services.AddDBConnection(builder.Configuration);
2123
builder.Services.ConfigurateIdentityOptions();
2224
builder.Services.AddIdentityUser();
25+
builder.Services.AddScoped<IAlbumService, AlbumService>();
2326

2427
var app = builder.Build();
2528

26-
/*app.DBEnsureCreated();*/
29+
app.DBEnsureCreated();
2730

2831
// Configure the HTTP request pipeline.
2932
if (!app.Environment.IsDevelopment())

src/CoinyProject.WebUI/Views/Album/Index.cshtml

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
@using CoinyProject.Core.Domain.Entities
22
@model IEnumerable<Album>
3+
34
<div class="container">
45
<div class="row pt-4 pb-3">
56
<div class="col-6">

src/CoinyProject.WebUI/Views/AlbumElement/Create.cshtml

+4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
<label asp-for="Description" class="p-0"></label>
1616
<input asp-for="Description" class="form-control" />
1717
</div>
18+
<div class="mb-3 row p-1">
19+
<label asp-for="Image" class="p-0"></label>
20+
<input asp-for="Image" type="file" class="form-control" />
21+
</div>
1822
<div class="row">
1923
<div class="col-6 col-md-3">
2024
<button type="submit" class="btn btn-primary form-control">Add Album Element</button>

src/CoinyProject.WebUI/Views/Shared/_Layout.cshtml

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
<meta charset="utf-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
66
<title>@ViewData["Title"] - CoinyProject.WebUI</title>
7-
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
7+
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
88
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
99
<link rel="stylesheet" href="~/CoinyProject.WebUI.styles.css" asp-append-version="true" />
10+
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css" />
1011
</head>
1112
<body>
1213
<header>
14+
1315
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
1416
<div class="container">
1517
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">CoinyProject.WebUI</a>
@@ -34,6 +36,7 @@
3436
</header>
3537
<div class="container">
3638
<main role="main" class="pb-3">
39+
<partial name="_Notification.cshtml" />
3740
@RenderBody()
3841
</main>
3942
</div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
@if(TempData["success"] != null)
2+
{
3+
<script src="~/lib/jquery/dist/jquery.min.js"></script>
4+
<script src="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"></script>
5+
<script type="text/javascript">
6+
toastr.success('@TempData["success"]')
7+
</script>
8+
}
9+
@if (TempData["error"] != null)
10+
{
11+
<script src="~/lib/jquery/dist/jquery.min.js"></script>
12+
<script src="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"></script>
13+
<script type="text/javascript">
14+
toastr.error('@TempData["error"]')
15+
</script>
16+
}

0 commit comments

Comments
 (0)