241 lines
7.6 KiB
C#
Raw Normal View History

2024-08-03 20:40:34 +08:00
using Manganese.Text;
2025-04-10 16:08:31 +08:00
using Masuit.Tools;
2024-08-03 20:40:34 +08:00
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
2025-04-10 16:08:31 +08:00
using SharpCompress.Archives;
2025-04-09 23:04:55 +08:00
using System.Data;
2024-08-03 20:40:34 +08:00
using System.Security.Claims;
using static asg_form.blog;
2025-04-10 16:08:31 +08:00
using static asg_form.Controllers.user_form;
using static System.Runtime.InteropServices.JavaScript.JSType;
2024-08-03 20:40:34 +08:00
namespace asg_form.Controllers
{
2025-01-27 20:32:23 +08:00
2025-02-09 19:17:34 +08:00
2024-08-03 20:40:34 +08:00
public class user_form : ControllerBase
{
private readonly RoleManager<Role> roleManager;
private readonly UserManager<User> userManager;
public user_form(
RoleManager<Role> roleManager, UserManager<User> userManager)
{
this.roleManager = roleManager;
this.userManager = userManager;
}
/// <summary>
/// 绑定表单
/// </summary>
/// <param name="formname">表单名称</param>
/// <param name="formpassword">表单密码</param>
/// <returns></returns>
[Authorize]
[Route("api/v1/user/uploadvideo")]
[HttpPost]
public async Task<ActionResult<string>> Upvideo([FromForm]IFormFile file)
{
string id = this.User.FindFirst(ClaimTypes.NameIdentifier)!.Value;
var ouser = userManager.Users.Include(a => a.haveform.role).Include(a => a.haveform.events).FirstOrDefault(a => a.Id == id.ToInt64());
if (ouser.haveform == null)
{
return BadRequest(new error_mb { code = 400, message = "你没有绑定表单" });
}
if (file == null || file.Length == 0)
return Content("file not selected");
var path = Path.Combine(
Directory.GetCurrentDirectory(),
file.FileName);
using (var stream = new FileStream(path, FileMode.Create))
{
await file.CopyToAsync(stream);
}
return RedirectToAction("Index");
}
/// <summary>
/// 绑定表单
/// </summary>
/// <param name="formname">表单名称</param>
/// <param name="formpassword">表单密码</param>
/// <returns></returns>
[Authorize]
[Route("api/v1/user/form")]
[HttpPost]
public async Task<ActionResult<string>> Addform(string formname,string eventname, string formpassword)
{
string id = this.User.FindFirst(ClaimTypes.NameIdentifier)!.Value;
var ouser = userManager.FindByIdAsync(id).Result;
TestDbContext db = new TestDbContext();
form formok;
try {
formok = await db.Forms.Include(a=>a.events).FirstAsync(a => a.team_name == formname&&a.events.name==eventname);
}
catch
{
return NotFound(new error_mb { code = 404, message = "表单不存在" });
}
if (ouser.haveform != null)
{
return BadRequest(new error_mb { code = 400, message = "无法多次绑定表单" });
}
if(formok.team_password==formpassword)
{
ouser.haveform = await db.Forms.Include(a => a.events).FirstAsync(a => a.team_name == formname && a.events.name == eventname);
await userManager.UpdateAsync(ouser);
return "绑定成功";
}
else
{
return BadRequest(new error_mb { code = 400, message = "表单密码错误" });
}
}
/// <summary>
/// 获取我的表单
/// </summary>
/// <returns></returns>
[Authorize]
[Route("api/v1/user/form")]
[HttpGet]
2024-09-08 09:58:04 +08:00
public async Task<ActionResult<object>> getmyform()
2024-08-03 20:40:34 +08:00
{
2024-09-16 14:06:46 +08:00
try {
string id = this.User.FindFirst(ClaimTypes.NameIdentifier)!.Value;
2024-12-07 23:57:41 +08:00
var ouser = userManager.Users.Include(a=>a.haveform.events).Include(a => a.haveform.role).FirstOrDefault(a => a.Id == id.ToInt64());
2024-11-17 13:37:37 +08:00
foreach (var role in ouser.haveform.role)
2024-09-16 14:06:46 +08:00
{
2024-11-17 13:37:37 +08:00
role.form = null;
2024-09-16 14:06:46 +08:00
}
2024-12-07 23:57:41 +08:00
ouser.haveform.events.forms=null;
2024-11-17 13:37:37 +08:00
return Ok(ouser.haveform);
2024-08-03 20:40:34 +08:00
2024-09-16 14:06:46 +08:00
}
catch
2024-08-03 20:40:34 +08:00
{
2024-09-16 14:06:46 +08:00
2024-08-03 20:40:34 +08:00
return BadRequest(new error_mb { code = 400, message = "你没有绑定表单" });
2024-09-16 14:06:46 +08:00
2024-08-03 20:40:34 +08:00
}
2024-09-16 14:06:46 +08:00
2024-08-03 20:40:34 +08:00
}
/// <summary>
/// 修改我的表单
/// </summary>
/// <returns></returns>
[Authorize]
[Route("api/v1/user/form")]
[HttpPut]
public async Task<ActionResult<form>> putmyform([FromBody]form_get form)
{
string id = this.User.FindFirst(ClaimTypes.NameIdentifier)!.Value;
var ouser = userManager.Users.Include(a => a.haveform.role).FirstOrDefault(a => a.Id == id.ToInt64());
if (ouser.haveform != null)
{
TestDbContext db = new TestDbContext();
var forme = ouser.haveform;
if (forme == null)
{
return BadRequest(new error_mb { code = 400, message = "表单不存在" });
}
else
{
//只能修改表单role
ouser.haveform.role.Clear();
foreach (role_get a in form.role_get)
{
ouser.haveform.role.Add(new role { role_id = a.role_id, role_lin = a.role_lin, role_name = a.role_name,Common_Roles=a.Common_Roles,Game_Name=a.Game_Name,Id_Card=a.Id_Card,Id_Card_Name=a.Id_Card_Name,Phone_Number=a.Phone_Number,Historical_Ranks=a.Historical_Ranks });
}
await userManager.UpdateAsync(ouser);
return Ok("修改完成");
}
}
else
{
return BadRequest(new error_mb { code = 400, message = "你没有绑定表单" });
}
}
2025-04-09 23:04:55 +08:00
public class timeSet
{
public string joinTime { get; set; }
}
2025-04-10 16:08:31 +08:00
public class userRanking
{
public long userId { get; set; }
public string username { get; set; }
public string joinTime { get; set; }
}
2024-08-03 20:40:34 +08:00
2025-04-09 23:04:55 +08:00
/// <summary>
2025-04-10 16:08:31 +08:00
/// 解说排行榜
2025-04-09 23:04:55 +08:00
/// </summary>
/// <returns></returns>
2025-04-10 16:08:31 +08:00
[Route("api/v1/user/ranking")]
[HttpGet]
public async Task<ActionResult<object>> rankingList(short page = 1, short limit = 10)
2025-04-09 23:04:55 +08:00
{
2025-04-10 16:08:31 +08:00
try
{
DateTime currentTime = DateTime.Now;
var rankings = userManager.Users
.Where(u => u.joinTime != null && u.officium == "Commentator")
.OrderByDescending(u => (currentTime - u.joinTime.ToDateTime()).TotalSeconds)
.Skip((page - 1) * limit)
.Take(limit)
.Select(u => new userRanking
{
userId = u.Id,
username = u.chinaname,
joinTime = u.joinTime,
})
.ToList();
2024-08-03 20:40:34 +08:00
2025-04-10 16:08:31 +08:00
return Ok(new { code = 200, message = "", rankings });
}
catch (Exception ex)
2025-04-09 23:04:55 +08:00
{
2025-04-10 16:08:31 +08:00
return StatusCode(500, new { code = 500, message = "获取排行榜失败", error = ex.Message });
2025-04-09 23:04:55 +08:00
}
2025-04-10 16:08:31 +08:00
2024-08-03 20:40:34 +08:00
}
2025-04-09 23:04:55 +08:00
}
2024-08-03 20:40:34 +08:00
}