using backend.Data; using backend.DTOs; using backend.Entities; using Microsoft.EntityFrameworkCore; namespace backend.Services { public interface IReservationService { public Task CreateReservation(CreateReservationRequest req); public Task ChangeReservationStatus(int resId, ReservationStatus status); public Task> GetReservatins(DateTime from, DateTime to); public Task> GetNewReservations(); public Task AssignTable(int tableId, int reservationId); } public class ReservationService : IReservationService { private readonly DataContext _context = null; private readonly ISmsService _smsService = null; public ReservationService(DataContext context, ISmsService smsService) { _context = context; _smsService = smsService; } public async Task AssignTable(int tableId, int reservationId) { var reservation = await _context.Reservations.FindAsync(reservationId); reservation.Table = tableId; _context.Update(reservation); await _context.SaveChangesAsync(); } public async Task ChangeReservationStatus(int resId, ReservationStatus status) { var reservation = await _context.Reservations.FindAsync(resId); reservation.ReservationStatus = status; _context.Update(reservation); await _context.SaveChangesAsync(); _smsService.ReservationStatusUpdate(reservation.ContactName, reservation.ContactNumber, reservation.ReservationStatus); } public async Task CreateReservation(CreateReservationRequest req) { Restaurant res = await _context.Restoraunts.Include(x => x.Reservations).FirstOrDefaultAsync(); Reservation reservation = new Reservation() { ContactName = req.ContactName, ContactNumber = req.ContactNumber, ReservationPlace = req.ReservationPlace, ReservationType = req.ReservationType, StartDate = req.StartDate, Persons = req.Persons, ReservationStatus = ReservationStatus.New }; res.Reservations.Add(reservation); _context.Restoraunts.Update(res); await _context.SaveChangesAsync(); } public async Task> GetNewReservations() { Restaurant res = await _context.Restoraunts .Include(x => x.Reservations .Where(x => x.ReservationStatus == ReservationStatus.New)) .FirstOrDefaultAsync(); var reservations = res.Reservations.Select(t => new ReservationResponse() { ContactName = t.ContactName, ContactNumber = t.ContactNumber, Persons = t.Persons, StartDate = t.StartDate, ReservationStatus = t.ReservationStatus, Table = t.Table, Id = t.Id, ReservationPlace = t.ReservationPlace, ReservationType = t.ReservationType }).OrderByDescending(x => x.ReservationStatus == ReservationStatus.New).ToList(); return reservations; } public async Task> GetReservatins(DateTime from, DateTime to) { Restaurant res = await _context.Restoraunts .Include(x => x.Reservations .Where(x => x.StartDate.CompareTo(from)>0 && x.StartDate.CompareTo(to)<=0)) .FirstOrDefaultAsync(); var reservations = res.Reservations.Select(t => new ReservationResponse() { ContactName = t.ContactName, ContactNumber = t.ContactNumber, Persons = t.Persons, StartDate = t.StartDate, ReservationStatus = t.ReservationStatus, Table = t.Table, Id = t.Id, ReservationPlace = t.ReservationPlace, ReservationType = t.ReservationType }).OrderByDescending(x => x.ReservationStatus == ReservationStatus.New).ToList(); return reservations; } } }