243 lines
8.7 KiB
C#
Raw Normal View History

2024-11-17 13:37:37 +08:00
using Microsoft.AspNetCore.Authorization;
2024-08-03 20:40:34 +08:00
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
2024-11-06 22:51:29 +08:00
using System.Reflection.Metadata;
2024-08-03 20:40:34 +08:00
using System.Security.Claims;
using static asg_form.Controllers.excel;
namespace asg_form.Controllers
{
2025-01-27 20:32:23 +08:00
2025-02-09 19:17:34 +08:00
2024-08-11 00:16:14 +08:00
public class Events : ControllerBase
2024-08-03 20:40:34 +08:00
{
private readonly RoleManager<Role> roleManager;
private readonly UserManager<User> userManager;
public Events(
RoleManager<Role> roleManager, UserManager<User> userManager)
{
this.roleManager = roleManager;
this.userManager = userManager;
}
/// <summary>
/// 获取所有赛事
/// </summary>
/// <returns></returns>
// [Authorize]
2024-08-11 00:16:14 +08:00
2024-08-03 20:40:34 +08:00
[Route("api/v1/Events")]
[HttpGet]
2024-08-11 00:16:14 +08:00
// [ResponseCache(Duration = 260)]
public async Task<ActionResult<object>> Getallevent(bool get_poem = false)
2024-08-03 20:40:34 +08:00
{
TestDbContext testDbContext = new TestDbContext();
2024-08-11 00:16:14 +08:00
object Event = new object();
if (get_poem)
{
2025-01-22 22:57:50 +08:00
Event = testDbContext.events.Select(a => new { a.Id, a.is_over, a.opentime, a.name, a.promChart ,a.status,a.config}).ToList();
2024-08-11 00:16:14 +08:00
}
else
{
2025-01-22 22:57:50 +08:00
Event = testDbContext.events.Select(a => new { a.Id, a.is_over, a.opentime, a.name,a.status,a.config}).ToList();
2024-08-11 00:16:14 +08:00
}
return Event;
2024-08-03 20:40:34 +08:00
}
/// <summary>
/// 发布新赛事
/// </summary>
/// <returns></returns>
[Authorize]
[Route("api/v1/admin/Events")]
[HttpPost]
2024-08-11 00:16:14 +08:00
public async Task<ActionResult<List<T_events>>> Postevent([FromBody] events_get events)
2024-08-03 20:40:34 +08:00
{
TestDbContext testDbContext = new TestDbContext();
2025-01-22 22:57:50 +08:00
await testDbContext.events.AddAsync(new T_events { name = events.name, is_over = events.is_over, opentime = events.opentime, events_rule_uri = new Uri($"https://124.223.35.239/doc/rule/{events.name}.md"),status =events.status,config = events.config });
2024-08-03 20:40:34 +08:00
System.IO.Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + $"loge/{events.name}");
2024-08-11 00:16:14 +08:00
System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + $"doc/rule/{events.name}.md", events.rule_markdown);
2024-08-03 20:40:34 +08:00
await testDbContext.SaveChangesAsync();
2024-08-11 00:16:14 +08:00
2024-08-03 20:40:34 +08:00
return Ok("添加成功!");
2024-08-11 00:16:14 +08:00
2024-08-03 20:40:34 +08:00
}
/// <summary>
/// 修改赛事
/// </summary>
/// <returns></returns>
[Authorize]
[Route("api/v1/admin/Events")]
[HttpPut]
2025-02-09 20:59:28 +08:00
public async Task<ActionResult<List<T_events>>> putevent(int eventId, string isRuleChange, [FromBody] T_events_debug events)
2024-08-03 20:40:34 +08:00
{
if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin"))
2024-08-11 00:16:14 +08:00
{
TestDbContext testDb = new TestDbContext();
2024-11-06 22:51:29 +08:00
var eve = testDb.events.FirstOrDefault(a => a.Id == eventId);
2025-02-09 20:59:04 +08:00
if (eve == null) return BadRequest(new error_mb { code = 404, message = "没有找到对应信息" });
2024-08-11 00:16:14 +08:00
eve.name = events.name;
eve.opentime = events.opentime;
eve.is_over = events.is_over;
2024-09-25 12:34:03 +08:00
eve.events_rule_uri = events.events_rule_uri;
2024-11-06 22:51:29 +08:00
eve.status = events.status;
2025-01-22 22:57:50 +08:00
eve.config = events.config;
2024-11-06 22:51:29 +08:00
2025-02-09 20:59:04 +08:00
if (isRuleChange == "1")
2024-11-06 22:51:29 +08:00
{
2025-02-09 20:59:04 +08:00
if (!string.IsNullOrEmpty(events.rule_markdown))
2024-11-06 22:51:29 +08:00
{
2025-02-09 20:59:04 +08:00
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "doc", "rule", $"{eve.name}.md");
// 如果文件存在,删除旧文件
if (System.IO.File.Exists(filePath))
{
System.IO.File.Delete(filePath);
}
// 创建目录(如果不存在的话)
var directoryPath = Path.GetDirectoryName(filePath);
if (!Directory.Exists(directoryPath))
{
Directory.CreateDirectory(directoryPath);
}
// 写入新的规则内容
try
{
await System.IO.File.WriteAllTextAsync(filePath, events.rule_markdown);
}
catch (Exception ex)
{
return StatusCode(500, new error_mb { code = 500, message = "文件操作失败: " + ex.Message });
}
2024-11-06 22:51:29 +08:00
}
2025-02-09 20:59:04 +08:00
await testDb.SaveChangesAsync();
return Ok(eve);
2024-11-06 22:51:29 +08:00
}
2024-08-03 20:40:34 +08:00
}
2024-11-07 14:33:50 +08:00
return Ok(new error_mb { code = 401, message = "无权访问" });
2024-08-11 00:16:14 +08:00
}
2024-08-03 20:40:34 +08:00
2024-08-11 00:16:14 +08:00
/// <summary>
/// 删除新赛事
/// </summary>
/// <returns></returns>
[Authorize]
2024-08-03 20:40:34 +08:00
[Route("api/v1/admin/Events")]
[HttpDelete]
2024-11-06 22:51:29 +08:00
public async Task<ActionResult<List<T_events>>> Delevent(int eventId)
2024-08-03 20:40:34 +08:00
{
if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin"))
{
2024-08-11 00:16:14 +08:00
TestDbContext test = new TestDbContext();
2024-11-06 22:51:29 +08:00
var evernt = test.events.FirstOrDefault(a => a.Id == eventId);
2024-08-03 20:40:34 +08:00
test.Remove(evernt);
2024-08-11 00:16:14 +08:00
await test.SaveChangesAsync();
2024-11-07 14:33:50 +08:00
return Ok(new error_mb { code = 200, message = "删除成功" });
2024-08-03 20:40:34 +08:00
}
else
{
2024-11-07 14:33:50 +08:00
return Ok(new error_mb { code = 400, message = "不是管理员" });
2024-08-03 20:40:34 +08:00
}
2024-08-11 00:16:14 +08:00
}
2024-08-03 20:40:34 +08:00
/// <summary>
/// 修改赛事
/// </summary>
/// <returns></returns>
[Authorize]
[Route("api/v1/admin/Events_rule")]
[HttpDelete]
2024-11-06 22:51:29 +08:00
public async Task<ActionResult<List<T_events>>> event_rule(int eventId, [FromBody] string rule_markdown)
2024-08-03 20:40:34 +08:00
{
if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin"))
{
TestDbContext test = new TestDbContext();
2024-11-06 22:51:29 +08:00
var evernt = test.events.FirstOrDefault(a => a.Id == eventId);
System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + $"doc/rule/{eventId}.md", rule_markdown);
2024-08-03 20:40:34 +08:00
2024-11-06 22:51:29 +08:00
return Ok("修改成功");
2024-08-03 20:40:34 +08:00
}
else
{
2024-11-06 22:51:29 +08:00
return BadRequest(new error_mb { code = 401, message = "无权访问" });
2024-08-03 20:40:34 +08:00
}
}
2024-08-11 00:16:14 +08:00
/// <summary>
/// 修改赛程图
/// </summary>
/// <returns></returns>
[Authorize]
[Route("api/v1/admin/poem")]
[HttpPost]
2024-11-06 22:51:29 +08:00
public async Task<ActionResult<List<T_events>>> event_poem(int eventId, [FromBody] string poem_json)
2024-08-11 00:16:14 +08:00
{
if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin"))
{
TestDbContext test = new TestDbContext();
2024-11-06 22:51:29 +08:00
var evernt = test.events.FirstOrDefault(a => a.Id == eventId);
if (evernt == null) return BadRequest(new error_mb { code = 404, message = "没有找到对应信息" });
2024-08-11 00:16:14 +08:00
evernt.promChart = poem_json;
await test.SaveChangesAsync();
2024-11-06 22:51:29 +08:00
return Ok(new error_mb { code = 200, message = "修改成功" });
2024-08-11 00:16:14 +08:00
}
else
{
2024-11-06 22:51:29 +08:00
return BadRequest(new error_mb { code = 401, message = "无权访问" });
2024-08-11 00:16:14 +08:00
}
}
2024-08-03 20:40:34 +08:00
2024-08-25 00:21:41 +08:00
2024-08-11 00:16:14 +08:00
public class events_get
{
public int Id { get; set; }
public string? name { get; set; }
public bool? is_over { get; set; }
public DateTime? opentime { get; set; }
public string rule_markdown { get; set; }
2024-11-06 22:51:29 +08:00
public string status { get; set; }
2025-01-22 22:57:50 +08:00
public string? config { get; set; }
2024-08-11 00:16:14 +08:00
}
}
2024-08-25 00:21:41 +08:00
public class T_events
{
public int Id { get; set; }
public string? name { get; set; }
public bool? is_over { get; set; }
public DateTime? opentime { get; set; }
2024-11-17 13:37:37 +08:00
2024-08-25 00:21:41 +08:00
public List<form>? forms { get; set; }
public Uri? events_rule_uri { get; set; }
public string? promChart { get; set; }
2024-11-06 22:51:29 +08:00
public string status { get; set; } = "0";
2025-01-22 22:57:50 +08:00
public string? config { get; set; }
2024-08-25 00:21:41 +08:00
}
2024-10-04 16:16:48 +08:00
public class T_events_debug
{
public string? name { get; set; }
public bool? is_over { get; set; }
public DateTime? opentime { get; set; }
2024-11-17 13:37:37 +08:00
2024-10-04 16:16:48 +08:00
public List<form>? forms { get; set; }
public Uri? events_rule_uri { get; set; }
public string? promChart { get; set; }
2024-11-06 22:51:29 +08:00
public string status { get; set; }
public string rule_markdown { get; set; }
2025-01-22 22:57:50 +08:00
public string? config { get; set; }
2024-10-04 16:16:48 +08:00
}
2024-08-03 20:40:34 +08:00
}