using AutoMapper; using Microsoft.EntityFrameworkCore; using OrdersManagementDataModel.Dtos; using OrdersManagementDataModel.Queries; using TaskScheduler = OrdersManagementDataModel.Entities.TaskScheduler; namespace OrdersManagementDataModel.Services; public class TaskSchedulerService(OrdersManagementDbContext context, IMapper mapper) : ITaskSchedulerService { public async Task> GetTaskSchedulers() { List taskSchedulers = await context.TaskSchedulers.Select(x => mapper.Map(x)).ToListAsync(); return taskSchedulers; } public async Task GetTaskSchedulerById(Guid id) { TaskSchedulerDto? taskScheduler = await context.TaskSchedulers.Where(x => x.RowPointer == id) .Select(x => mapper.Map(x)).FirstOrDefaultAsync(); return taskScheduler; } public async Task GetTaskSchedulerByTaskName(string taskName) { TaskSchedulerDto? taskScheduler = await context.TaskSchedulers.Where(x => x.Name == taskName) .Select(x => mapper.Map(x)).FirstOrDefaultAsync(); return taskScheduler; } public async Task AddTaskScheduler(TaskSchedulerDto taskSchedulerDto) { TaskScheduler taskScheduler = new TaskScheduler { Name = taskSchedulerDto.Name, Path = taskSchedulerDto.Path, RowPointer = Guid.NewGuid(), CronOptions = taskSchedulerDto.CronOptions, CreateDate = DateTime.Now, ActiveFrom = DateTime.Now }; context.TaskSchedulers.Add(taskScheduler); return await context.SaveChangesAsync(); } public async Task UpdateTaskScheduler(TaskSchedulerDto taskSchedulerDto) { TaskScheduler taskScheduler = mapper.Map(taskSchedulerDto); context.TaskSchedulers.Update(taskScheduler); return await context.SaveChangesAsync(); } public async Task DeleteTaskScheduler(Guid id) { TaskScheduler? taskScheduler = await context.TaskSchedulers.Where(x => x.RowPointer == id).FirstOrDefaultAsync() ?? null; if (taskScheduler == null) return 0; context.TaskSchedulers.Remove(taskScheduler); return await context.SaveChangesAsync(); } public async Task> GetTaskSchedulerDetails(Guid taskSchedulerId) { List taskSchedulerDetails = await context.TaskSchedulers .Where(x => x.RowPointer == taskSchedulerId) .SelectMany(x => x.TaskSchedulerDetails) .Select(x => mapper.Map(x)) .ToListAsync(); return taskSchedulerDetails; } }