From bda86d018ab75544e22dfc30f4cc84f92c1a6ec5 Mon Sep 17 00:00:00 2001 From: daniel-c-harvey Date: Sat, 30 Aug 2025 21:54:32 -0400 Subject: [PATCH] Track Service (Main business logic, Exception handling layer) - Uses repo to provide full CRUD --- .../DeepDrftWeb/Services/TrackService.cs | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 DeepDrftWeb/DeepDrftWeb/Services/TrackService.cs diff --git a/DeepDrftWeb/DeepDrftWeb/Services/TrackService.cs b/DeepDrftWeb/DeepDrftWeb/Services/TrackService.cs new file mode 100644 index 0000000..134dcf7 --- /dev/null +++ b/DeepDrftWeb/DeepDrftWeb/Services/TrackService.cs @@ -0,0 +1,127 @@ +using DeepDrftModels.Entities; +using DeepDrftModels.Models; +using DeepDrftWeb.Data; +using DeepDrftWeb.Data.Repositories; +using NetBlocks.Models; + +namespace DeepDrftWeb.Services; + +public class TrackService +{ + private readonly string _sortLastAscending = Enumerable.Repeat(char.MaxValue, 64).Aggregate(string.Empty, (a, b) => a + b); + private readonly string _sortLastDescending = Enumerable.Repeat(char.MinValue.ToString(), 64).Aggregate(string.Empty, (a, b) => a + b); + private readonly TrackRepository _repository; + + public TrackService(TrackRepository repository) + { + _repository = repository; + } + + public async Task> GetById(long id) + { + try + { + var track = await _repository.GetById(id); + return ResultContainer.CreatePassResult(track); + } + catch (Exception e) + { + return ResultContainer.CreateFailResult(e.Message); + } + } + + public async Task>> GetAll() + { + try + { + var tracks = await _repository.GetAll(); + return ResultContainer>.CreatePassResult(tracks); + } + catch (Exception e) + { + return ResultContainer>.CreateFailResult(e.Message); + } + } + + public async Task>> GetPaged(int pageNumber, int pageSize, string? sortColumn, bool sortDescending) + { + try + { + var parameters = new PagingParameters() + { + Page = pageNumber, + PageSize = pageSize, + IsDescending = sortDescending + }; + + if (sortColumn != null) + { + switch (sortColumn) + { + case "TrackName": + parameters.OrderBy = entity => entity.TrackName; + break; + case "Artist": + parameters.OrderBy = entity => entity.Artist; + break; + case "Album": + parameters.OrderBy = entity => entity.Album ?? _sortLastAscending; + break; + case "ReleaseDate": + parameters.OrderBy = entity => entity.ReleaseDate ?? DateOnly.MaxValue; + break; + case "Genre": + parameters.OrderBy = entity => entity.Genre ?? _sortLastAscending; + break; + + } + } + + var page = await _repository.GetPage(parameters); + return ResultContainer>.CreatePassResult(page); + } + catch (Exception e) + { + return ResultContainer>.CreateFailResult(e.Message); + } + } + + public async Task> Create(TrackEntity newTrack) + { + try + { + var track = await _repository.Create(newTrack); + return ResultContainer.CreatePassResult(track); + } + catch (Exception e) + { + return ResultContainer.CreateFailResult(e.Message); + } + } + + public async Task> Update(TrackEntity track) + { + try + { + var updatedTrack = await _repository.Update(track); + return ResultContainer.CreatePassResult(updatedTrack); + } + catch (Exception e) + { + return ResultContainer.CreateFailResult(e.Message); + } + } + + public async Task Delete(long id) + { + try + { + await _repository.Delete(id); + return Result.CreatePassResult(); + } + catch (Exception e) + { + return Result.CreateFailResult(e.Message); + } + } +} \ No newline at end of file