using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Parking_space_WebAPI.Models;
using Parking_space_WebAPI.Services;
using Parking_space_WebAPI.Authorization;
using WebApi_data_value.Models;
namespace Parking_space_WebAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
[Authorize]
[ApiExplorerSettings(GroupName = "校園大內網")]
public class Yuntech_monthly_rent_numberController : ControllerBase
{
private readonly SqlContext _context;
public Yuntech_monthly_rent_numberController(SqlContext context)
{
_context = context;
}
#region 取出所有月租臨停資料
// GET: api/Yuntech_monthly_rent_number
///
/// 取出所有月租臨停資料(URL 區域 顯示數量)
///
[HttpGet]
public async Task>> GetYuntech_monthly_rent_number()
{
if (_context.yuntech_monthly_rent_number == null)
{
return NotFound();
}
return await _context.yuntech_monthly_rent_number.ToListAsync();
}
#endregion
#region 從類別抓月租臨停資料
// GET: api/Yuntech_monthly_rent_number/parking_space_area-{id}
///
/// 從類別抓月租臨停資料
///
[HttpGet("parking_space_area-{id}")]
public async Task> GetYuntech_monthly_rent_number(string id)
{
var yuntech_monthly_rent_number = await (from c in _context.yuntech_monthly_rent_number
where c.category == id
select new Yuntech_monthly_rent_number
{
category = c.category,
number = c.number,
}).ToArrayAsync();
return yuntech_monthly_rent_number;
}
#endregion
#region 更新月租臨停資料
///
/// 更新月租臨停資料
///
// PUT: api/Yuntech_monthly_rent_number/{id}
[HttpPut("{id}")]
public async Task PutYuntech_monthly_rent_number(string id, Yuntech_monthly_rent_number yuntech_monthly_rent_number)
{
if (id != yuntech_monthly_rent_number.category)
{
return BadRequest();
}
_context.Entry(yuntech_monthly_rent_number).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!Yuntech_monthly_rent_numberExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
#endregion
#region 新增月租臨停資料
///
/// 新增月租臨停資料(URL 區域 顯示數量)
///
// POST: api/Yuntech_monthly_rent_number
[HttpPost]
public async Task> PostYuntech_monthly_rent_number(Yuntech_monthly_rent_number yuntech_monthly_rent_number)
{
if (_context.yuntech_monthly_rent_number == null)
{
return Problem("Entity set 'SqlContext.yuntech_monthly_rent_number' is null.");
}
_context.yuntech_monthly_rent_number.Add(yuntech_monthly_rent_number);
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException)
{
if (Yuntech_monthly_rent_numberExists(yuntech_monthly_rent_number.category))
{
return Conflict();
}
else
{
throw;
}
}
return CreatedAtAction("GetYuntech_monthly_rent_number", new { id = yuntech_monthly_rent_number.category }, yuntech_monthly_rent_number);
}
#endregion
#region 刪除月租臨停資料
///
/// 刪除月租臨停資料
///
// DELETE: api/Yuntech_monthly_rent_number/{id}
[HttpDelete("{id}")]
public async Task DeleteYuntech_monthly_rent_number(string id)
{
if (_context.yuntech_monthly_rent_number == null)
{
return NotFound();
}
var yuntech_monthly_rent_number = await _context.yuntech_monthly_rent_number.FindAsync(id);
if (yuntech_monthly_rent_number == null)
{
return NotFound();
}
_context.yuntech_monthly_rent_number.Remove(yuntech_monthly_rent_number);
await _context.SaveChangesAsync();
return NoContent();
}
#endregion
#region 更新車位數量
///
/// 更新車位數量
///
[HttpPost("update-parking-number")]
public async Task UpdateParkingNumber(string license_plate_number, bool isIncrease)
{
int change = isIncrease ? 1 : -1;
// 更新車位數量
var yuntech_parking = await _context.yuntech_parking.FirstOrDefaultAsync();
if (yuntech_parking != null)
{
string now_num_str = yuntech_parking.now_num;
int now_num_int;
Int32.TryParse(now_num_str, out now_num_int);
now_num_int += change;
now_num_str = now_num_int.ToString();
yuntech_parking.now_num = now_num_str;
// 保存更改
await _context.SaveChangesAsync();
}
// 比對車牌號碼
var in_list_data = await _context.yuntech_parking_user_list
.FirstOrDefaultAsync(user => user.user_license_plate_number == license_plate_number);
if (in_list_data != null)
{
// 車牌號碼相同,更新月租車位數量
var monthly_rent_data = await _context.yuntech_monthly_rent_number
.FirstOrDefaultAsync(rent => rent.category == "月租");
if (monthly_rent_data != null)
{
int now_number;
Int32.TryParse(monthly_rent_data.number, out now_number);
now_number += change;
monthly_rent_data.number = now_number.ToString();
// 保存更改
await _context.SaveChangesAsync();
}
}
else
{
// 車牌號碼不同,更新臨停車位數量
var temp_rent_data = await _context.yuntech_monthly_rent_number
.FirstOrDefaultAsync(rent => rent.category == "臨停");
if (temp_rent_data != null)
{
int now_number;
Int32.TryParse(temp_rent_data.number, out now_number);
now_number += change;
temp_rent_data.number = now_number.ToString();
// 保存更改
await _context.SaveChangesAsync();
}
}
return Ok();
}
#endregion
private bool Yuntech_monthly_rent_numberExists(string id)
{
return (_context.yuntech_monthly_rent_number?.Any(e => e.category == id)).GetValueOrDefault();
}
}
}