Implement graceful errors, fixes #22

This commit is contained in:
Laura Hausmann 2023-02-11 02:57:15 +01:00
parent 0b7d1aff78
commit abf5b4b661
Signed by: zotan
GPG key ID: D044E84C5BE01605
4 changed files with 26 additions and 9 deletions

View file

@ -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."));
}
}

View file

@ -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!;

View 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>

View file

@ -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}");