2022 jphd-3dprint
continuous-integration/drone/push Build is failing

This commit is contained in:
2022-02-23 17:19:19 +08:00
parent e0115e0e07
commit 772525a9b6
18 changed files with 712 additions and 228 deletions
+128 -42
View File
@@ -7,20 +7,52 @@ using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using System.Security.Cryptography;
namespace _2021_backend.Controllers
{
[Route("api/submit")]
[Route("api")]
public class SubmissionController : Controller
{
public BackendContext Context;
public BackendContext context;
public SubmissionController(BackendContext context)
{
Context = context;
this.context = context;
}
[HttpPost]
public async Task<IActionResult> Post([FromForm] string dto)
[HttpPost("checkCaptcha")]
public async Task<IActionResult> CheckCaptcha([FromQuery] string stuid, [FromQuery] string captcha)
{
var stu = context.Students.FirstOrDefault(e => e.Stuid == stuid);
if (stu == null) return Ok(ApiResponse.Error("INVALID_STUID"));
else if (captcha == stu.LastCaptcha)
{
if (DateTime.Now - stu.LastCaptchaTime > TimeSpan.FromMinutes(15)) return Ok(ApiResponse.Error("CAPTCHA_TIMEOUT"));
return Ok(ApiResponse.Success("success"));
}
else return Ok(ApiResponse.Error("INVALID_CAPTCHA"));
}
[HttpPost("getCaptcha")]
public async Task<IActionResult> GetCaptcha([FromQuery] string stuid)
{
var stu = context.Students.FirstOrDefault(e => e.Stuid == stuid);
if (stu == null) return Ok(ApiResponse.Error("INVALID_STUID"));
else if (DateTime.Now - stu.LastCaptchaTime < TimeSpan.FromMinutes(1)) return Ok(ApiResponse.Error("ALREADY_SENT"));
var result = await TencentSMS.Send(context, SMSType.Captcha, stu, "smsbot");
if (!result) return Ok(ApiResponse.Error("SEND_ERROR"));
return Ok(ApiResponse.Success("success"));
}
[HttpPost("submit")]
public async Task<IActionResult> PostSubmit([FromForm] string dto)
{
var aDto = JsonSerializer.Deserialize<SubmissionDto>(dto);
string ip = Request.Headers["X-Real-IP"].FirstOrDefault();
@@ -29,48 +61,47 @@ namespace _2021_backend.Controllers
if (aDto.Check() == false)
return StatusCode(400, ApiResponse.Error("TICKET_NOT_LEGEAL"));
Submission sub = new Submission(aDto, ip);
foreach (var tm in Context.Sessions)
foreach (var tm in context.Sessions)
{
if(aDto.Timelist != null)if (aDto.Timelist.Any(it => it.Day.Day == tm.Day.Day && it.BeginTime.TimeOfDay == tm.BeginTime.TimeOfDay))
{
sub.Timelist.Add(tm.Id);
}
}
var q = Context.Students.Where(stu => (stu.Name == aDto.Name || stu.Stuid == aDto.Stuid));
var q = context.Students.Where(stu => (stu.Name == aDto.Name || stu.Stuid == aDto.Stuid));
Student stu;
if (q.Count() == 0)
{
stu = Student.create(sub);
stu.Status = status.刚报名;
Context.Students.Add(stu);
context.Students.Add(stu);
context.SaveChanges();
sub.Host = stu.Id;
context.Submissions.Add(sub);
context.SaveChanges();
stu.Submissions.Add(sub.Id);
context.SaveChanges();
}
else
{
stu = q.FirstOrDefault();
sub.Host = stu.Id;
context.Submissions.Add(sub);
context.SaveChanges();
stu.Update(sub);
context.SaveChanges();
}
sub.Host = stu.Id;
Context.Submissions.Add(sub);
Context.SaveChanges();
await TencentSMS.Send(Context, SMSType.Signed, stu, _2021_backend.Models.User.Bot.stuID);
await TencentSMS.Send(context, SMSType.Signed, stu, _2021_backend.Models.User.Bot.stuID);
return Ok(ApiResponse.Success("success"));
}
}
[ApiController]
[Route("api/sessionlist")]
public class SessionlistContoller : Controller
{
private readonly BackendContext _context;
public SessionlistContoller(BackendContext context)
{
_context = context;
}
[HttpGet]
[HttpGet("sessionlist")]
public IActionResult GetSessions()
{
var query = _context.Sessions.OrderBy(r => r.Day).ThenBy(r => r.BeginTime).ThenBy(r => r.Place).Where(e => e.Capacity > e.Students.Count).Select(r => new SessionDto
var query = context.Sessions.OrderBy(r => r.Day).ThenBy(r => r.BeginTime).ThenBy(r => r.Place).Where(e => e.Capacity > e.Students.Count).Select(r => new SessionDto
{
BeginTime = r.BeginTime,
Day = r.Day,
@@ -78,22 +109,76 @@ namespace _2021_backend.Controllers
return Ok(ApiResponse.Success(query.ToList().FindAll(it => it.Day.Add(it.BeginTime.TimeOfDay).CompareTo(DateTime.Now) > 0).Distinct(new SessionDtoComparer()).ToList()));
//return Ok(ApiResponse.Success("报名结束了"));
}
}
[ApiController]
[Route("api/postsession")]
public class PostsessionController : Controller
{
private readonly BackendContext Context;
public PostsessionController(BackendContext context)
[HttpGet("fileinfo")]
public async Task<IActionResult> GetInfo([FromQuery] string? stuid)
{
Context = context;
}
[HttpPost]
if (stuid == null || (!context.Students.Any(e => e.Stuid == stuid)))
{
return Ok(ApiResponse.Error("INVALID_STUID"));
}
else
{
var student = context.Students.FirstOrDefault(e => e.Stuid == stuid.ToString());
if (student.Uploads == null)
{
student.Uploads = new List<int> { };
context.SaveChangesAsync();
return Ok(ApiResponse.Error("NO_FILES"));
}
var fileIdx = student.Uploads.Last();
var file = context.FileDesc.Find(fileIdx);
var oldNameSplit = file.Name.Split(".");
var oldName = "";
var oldNameExtension = oldNameSplit.LastOrDefault();
for (int i = 0; i < oldNameSplit.Count() - 1; i++)
{
oldName += oldNameSplit[i];
}
file.Path = "***.***.****";
if (oldName.Count() >= 2)
{
file.Name = $"{oldName[0]}***{oldName}.{oldNameExtension}";
}
else
{
file.Name = $"**.{oldNameExtension}";
}
return Ok(ApiResponse.Success(file));
}
}
[HttpPost("upload")]
public async Task<IActionResult> UploadFile([FromQuery] string? stuid,[FromQuery]string filename, [FromQuery] string filepath, [FromQuery] float fileSizeInKB)
{
var filedesc = new FileDesc { Name = filename, Path = $"jphd-3dprint-2022.oss-cn-hangzhou.aliyuncs.com/uploads/{stuid}/{filename}", Size = Convert.ToInt32(fileSizeInKB), UploadTime = DateTime.Now };
if (!context.Students.Any(e => e.Stuid == stuid)) return Ok(ApiResponse.Error("INVALID_STUID"));
else
{
var s = context.Students.First(e => e.Stuid == stuid);
filedesc.OwnerId = s.Id;
if (s.Uploads == null) s.Uploads = new List<int> { };
context.FileDesc.Add(filedesc);
await context.SaveChangesAsync();
s.Uploads.Add(filedesc.Id);
s.Status = status.已提交;
await context.SaveChangesAsync();
return Ok(ApiResponse.Success("success"));
}
}
[HttpPost("postsession")]
public async Task<IActionResult> Post([FromQuery] string stuid, [FromQuery] string selection)
{
Student stu = Context.Students.FirstOrDefault(r => r.Stuid == stuid);
Student stu = context.Students.FirstOrDefault(r => r.Stuid == stuid);
if (stu == null)
{
return StatusCode(400, ApiResponse.Error("INVALID_STUDENT_int"));
@@ -110,31 +195,32 @@ namespace _2021_backend.Controllers
};
//get the selected session ints;
int targetSession = 0;
var sessions = Context.Sessions.ToList();
var sessions = context.Sessions.ToList();
var s = sessions.Find((Session s) =>
{
return time.Day == s.Day && time.BeginTime == s.BeginTime;
});
var overwritten = false;
if (s.Students.Count >= s.Capacity) return Ok(ApiResponse.Error("OUT_OF_CAPACITY"));
if (Context.Sessions.Find(stu.InterviewTime) != null)
if (context.Sessions.Find(stu.InterviewTime) != null)
{
var olds = Context.Sessions.Find(stu.InterviewTime);
var olds = context.Sessions.Find(stu.InterviewTime);
olds.Students.Remove(stu.Id);
Context.SaveChanges();
context.SaveChanges();
overwritten = true;
}
targetSession = s.Id;
s.Students.Add(stu.Id);
stu.Timelist = new List<int> { targetSession};
stu.Timelist = new List<int> { targetSession };
stu.Status = status.已选时间;
stu.InterviewTime = s.Id;
await TencentSMS.Send(Context, SMSType.TimeSet, stu, "smsbot");
Context.SaveChanges();
await TencentSMS.Send(context, SMSType.TimeSet, stu, "smsbot");
context.SaveChanges();
if (overwritten) return Ok(ApiResponse.Success("overwritten"));
return Ok(ApiResponse.Success("success"));
//return Ok(ApiResponse.Success("报名结束了"));
}
}
}