using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using System.Reflection.Metadata; using System.Security.Claims; using static asg_form.Controllers.excel; namespace asg_form.Controllers { [ApiController] public class Events : ControllerBase { private readonly RoleManager roleManager; private readonly UserManager userManager; public Events( RoleManager roleManager, UserManager userManager) { this.roleManager = roleManager; this.userManager = userManager; } /// /// 获取所有赛事 /// /// // [Authorize] [Route("api/v1/Events")] [HttpGet] // [ResponseCache(Duration = 260)] public async Task> Getallevent(bool get_poem = false) { TestDbContext testDbContext = new TestDbContext(); object Event = new object(); if (get_poem) { Event = testDbContext.events.Select(a => new { a.Id, a.is_over, a.opentime, a.name, a.promChart ,a.status,a.config}).ToList(); } else { Event = testDbContext.events.Select(a => new { a.Id, a.is_over, a.opentime, a.name,a.status,a.config}).ToList(); } return Event; } /// /// 发布新赛事 /// /// [Authorize] [Route("api/v1/admin/Events")] [HttpPost] public async Task>> Postevent([FromBody] events_get events) { TestDbContext testDbContext = new TestDbContext(); 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 }); System.IO.Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + $"loge/{events.name}"); System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + $"doc/rule/{events.name}.md", events.rule_markdown); await testDbContext.SaveChangesAsync(); return Ok("添加成功!"); } /// /// 修改赛事 /// /// [Authorize] [Route("api/v1/admin/Events")] [HttpPut] public async Task>> putevent(int eventId, [FromBody] T_events_debug events) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { TestDbContext testDb = new TestDbContext(); var eve = testDb.events.FirstOrDefault(a => a.Id == eventId); if(eve==null) return BadRequest(new error_mb { code = 404, message = "没有找到对应信息" }); eve.name = events.name; eve.opentime = events.opentime; eve.is_over = events.is_over; eve.events_rule_uri = events.events_rule_uri; eve.status = events.status; eve.config = events.config; if (!string.IsNullOrEmpty(events.rule_markdown)) { 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 }); } } await testDb.SaveChangesAsync(); return Ok(eve); } return Ok(new error_mb { code = 401, message = "无权访问" }); } /// /// 删除新赛事 /// /// [Authorize] [Route("api/v1/admin/Events")] [HttpDelete] public async Task>> Delevent(int eventId) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { TestDbContext test = new TestDbContext(); var evernt = test.events.FirstOrDefault(a => a.Id == eventId); test.Remove(evernt); await test.SaveChangesAsync(); return Ok(new error_mb { code = 200, message = "删除成功" }); } else { return Ok(new error_mb { code = 400, message = "不是管理员" }); } } /// /// 修改赛事 /// /// [Authorize] [Route("api/v1/admin/Events_rule")] [HttpDelete] public async Task>> event_rule(int eventId, [FromBody] string rule_markdown) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { TestDbContext test = new TestDbContext(); var evernt = test.events.FirstOrDefault(a => a.Id == eventId); System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + $"doc/rule/{eventId}.md", rule_markdown); return Ok("修改成功"); } else { return BadRequest(new error_mb { code = 401, message = "无权访问" }); } } /// /// 修改赛程图 /// /// [Authorize] [Route("api/v1/admin/poem")] [HttpPost] public async Task>> event_poem(int eventId, [FromBody] string poem_json) { if (this.User.FindAll(ClaimTypes.Role).Any(a => a.Value == "admin")) { TestDbContext test = new TestDbContext(); var evernt = test.events.FirstOrDefault(a => a.Id == eventId); if (evernt == null) return BadRequest(new error_mb { code = 404, message = "没有找到对应信息" }); evernt.promChart = poem_json; await test.SaveChangesAsync(); return Ok(new error_mb { code = 200, message = "修改成功" }); } else { return BadRequest(new error_mb { code = 401, message = "无权访问" }); } } 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; } public string status { get; set; } public string? config { get; set; } } } 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; } public List
? forms { get; set; } public Uri? events_rule_uri { get; set; } public string? promChart { get; set; } public string status { get; set; } = "0"; public string? config { get; set; } } public class T_events_debug { public string? name { get; set; } public bool? is_over { get; set; } public DateTime? opentime { get; set; } public List? forms { get; set; } public Uri? events_rule_uri { get; set; } public string? promChart { get; set; } public string status { get; set; } public string rule_markdown { get; set; } public string? config { get; set; } } }