using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using PetWash.Api.Data; using PetWash.Api.Models; namespace PetWash.Api.Controllers; [ApiController] [Route("api/[controller]")] public class PackagesController : ControllerBase { private readonly PetWashDbContext _context; public PackagesController(PetWashDbContext context) { _context = context; } [HttpGet] public async Task GetPackages() { var packages = await _context.Packages .OrderBy(x => x.Id) .ToListAsync(); return Ok(packages); } [HttpGet("{id}")] public async Task GetPackage(int id) { var package = await _context.Packages.FindAsync(id); if (package == null) return NotFound(); return Ok(package); } [HttpPut("{id}")] public async Task UpdatePackage(int id, [FromBody] UpdatePackageRequest request) { var package = await _context.Packages.FindAsync(id); if (package == null) { return NotFound(); } if (request.Price <= 0) { return BadRequest("套餐金额必须大于 0。"); } if (request.FirstSprayWaterTime <= 0 || request.AfterShampoo1SprayTime <= 0 || request.AfterShampoo2SprayTime <= 0 || request.AfterShampoo3SprayTime <= 0 || request.SprayShampoo1Time <= 0 || request.SprayShampoo2Time <= 0 || request.SprayShampoo3Time <= 0 || request.HotAirTime <= 0 || request.ColdAirTime <= 0 || request.UvSterilizationTime <= 0) { return BadRequest("套餐流程时间必须全部大于 0。"); } package.Price = request.Price; package.FirstSprayWaterTime = request.FirstSprayWaterTime; package.AfterShampoo1SprayTime = request.AfterShampoo1SprayTime; package.AfterShampoo2SprayTime = request.AfterShampoo2SprayTime; package.AfterShampoo3SprayTime = request.AfterShampoo3SprayTime; package.SprayShampoo1Time = request.SprayShampoo1Time; package.SprayShampoo2Time = request.SprayShampoo2Time; package.SprayShampoo3Time = request.SprayShampoo3Time; package.HotAirTime = request.HotAirTime; package.ColdAirTime = request.ColdAirTime; package.UvSterilizationTime = request.UvSterilizationTime; package.DurationMinutes = request.FirstSprayWaterTime + request.AfterShampoo1SprayTime + request.AfterShampoo2SprayTime + request.AfterShampoo3SprayTime + request.SprayShampoo1Time + request.SprayShampoo2Time + request.SprayShampoo3Time + request.HotAirTime + request.ColdAirTime + request.UvSterilizationTime; await _context.SaveChangesAsync(); return Ok(package); } } public record UpdatePackageRequest( decimal Price, int FirstSprayWaterTime, int AfterShampoo1SprayTime, int AfterShampoo2SprayTime, int AfterShampoo3SprayTime, int SprayShampoo1Time, int SprayShampoo2Time, int SprayShampoo3Time, int HotAirTime, int ColdAirTime, int UvSterilizationTime);