Implement graceful errors, fixes #22
This commit is contained in:
parent
0b7d1aff78
commit
abf5b4b661
|
@ -1,4 +1,5 @@
|
|||
using System.Data;
|
||||
using System.Net;
|
||||
using AfRApay.Web.Backend;
|
||||
using AfRApay.Web.Backend.Tables;
|
||||
using LinqToDB;
|
||||
|
@ -10,19 +11,20 @@ public class AddUserModel : PageModel {
|
|||
public void OnGet() { }
|
||||
|
||||
public void OnPost() {
|
||||
using var db = new Database.DbConn();
|
||||
using var db = new Database.DbConn();
|
||||
if (Request.Form.ContainsKey("nickname") && !string.IsNullOrWhiteSpace(Request.Form["nickname"])) {
|
||||
var nick = Request.Form["nickname"];
|
||||
if (db.Users.Any(p => p.Nickname == nick)) {
|
||||
throw new DuplicateNameException("User with nick already exists.");
|
||||
Response.Redirect("/ErrorRedirect?redir=/AddUser&message=" + WebUtility.UrlEncode("User with nick already exists."));
|
||||
return;
|
||||
}
|
||||
|
||||
var user = new User { Nickname = nick!, Balance = 0};
|
||||
var user = new User { Nickname = nick!, Balance = 0 };
|
||||
db.InsertWithIdentity(user);
|
||||
Response.Redirect($"/#{user.Nickname}");
|
||||
return;
|
||||
}
|
||||
|
||||
throw new ConstraintException("Nickname must not be empty.");
|
||||
Response.Redirect("/ErrorRedirect?redir=/AddUser&message=" + WebUtility.UrlEncode("Nickname must not be empty."));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using System.Data;
|
||||
using System.Net;
|
||||
using AfRApay.Web.Backend;
|
||||
using AfRApay.Web.Backend.Tables;
|
||||
using LinqToDB;
|
||||
|
@ -61,7 +62,8 @@ public class EditUserModel : PageModel {
|
|||
if (Request.Form["action"] == "save" && Request.Form.ContainsKey("nickname") && !string.IsNullOrWhiteSpace(Request.Form["nickname"])) {
|
||||
var nick = Request.Form["nickname"];
|
||||
if (db.Users.Any(p => p.Nickname == nick && p.Id != userId)) {
|
||||
throw new DuplicateNameException("User with nick already exists.");
|
||||
Response.Redirect($"/ErrorRedirect?redir=/EditUser/{userId}&message=" + WebUtility.UrlEncode("User with nick already exists."));
|
||||
return;
|
||||
}
|
||||
|
||||
user.Nickname = nick!;
|
||||
|
|
7
AfRApay.Web/Pages/ErrorRedirect.cshtml
Normal file
7
AfRApay.Web/Pages/ErrorRedirect.cshtml
Normal file
|
@ -0,0 +1,7 @@
|
|||
@page
|
||||
@section Header {
|
||||
<meta http-equiv="refresh" content="5;@(Request.Query.ContainsKey("redir") ? Request.Query["redir"] : "/")"/>
|
||||
}
|
||||
<div class="alert alert-warning" role="alert">
|
||||
@Request.Query["message"]
|
||||
</div>
|
|
@ -1,4 +1,5 @@
|
|||
using System.Data;
|
||||
using System.Net;
|
||||
using AfRApay.Web.Backend;
|
||||
using LinqToDB;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
@ -9,16 +10,21 @@ public class IndexModel : PageModel {
|
|||
public void OnGet() { }
|
||||
|
||||
public void OnPost() {
|
||||
using var db = new Database.DbConn();
|
||||
using var db = new Database.DbConn();
|
||||
if (Request.Form["action"] == "transaction" && Request.Form.ContainsKey("userId") && Request.Form.ContainsKey("amount")) {
|
||||
var userId = int.Parse(Request.Form["userId"].ToString());
|
||||
var amount = int.Parse(Request.Form["amount"].ToString());
|
||||
var user = db.Users.First(p => p.Id == userId);
|
||||
switch (user.Balance + amount) {
|
||||
case < -9999: throw new ConstraintException("Balance too low!");
|
||||
case > 99999: throw new ConstraintException("Balance too high!");
|
||||
case < -9999:
|
||||
Response.Redirect("/ErrorRedirect?message=" + WebUtility.UrlEncode("Balance too low!"));
|
||||
return;
|
||||
case > 99999:
|
||||
Response.Redirect("/ErrorRedirect?message=" + WebUtility.UrlEncode("Balance too high!"));
|
||||
return;
|
||||
}
|
||||
user.Balance += amount;
|
||||
|
||||
user.Balance += amount;
|
||||
db.Update(user);
|
||||
|
||||
Response.Redirect($"/#{user.Nickname}");
|
||||
|
|
Loading…
Reference in a new issue