Merge pull request #14 from Moonlight-Panel/UserSettings

User settings
This commit is contained in:
Daniel Balk
2023-03-27 17:25:05 +02:00
committed by GitHub
3 changed files with 132 additions and 3 deletions

View File

@@ -1,4 +1,5 @@
using Moonlight.App.Models.Misc; using System.ComponentModel.DataAnnotations;
using Moonlight.App.Models.Misc;
namespace Moonlight.App.Database.Entities; namespace Moonlight.App.Database.Entities;
@@ -8,13 +9,43 @@ public class User
// Personal data // Personal data
[Required]
[MinLength(3, ErrorMessage = "Invalid first name")]
[MaxLength(64, ErrorMessage = "Max lenght reached")]
public string FirstName { get; set; } = ""; public string FirstName { get; set; } = "";
[Required]
[MinLength(3, ErrorMessage = "Invalid last name")]
[MaxLength(64, ErrorMessage = "Max lenght reached")]
public string LastName { get; set; } = ""; public string LastName { get; set; } = "";
[Required]
[RegularExpression(@"^((((([a-zA-Z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-zA-Z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)[;]?)+$",
ErrorMessage = "Must be a valid email")]
[MaxLength(128, ErrorMessage = "Max lenght reached")]
public string Email { get; set; } = ""; public string Email { get; set; } = "";
public string Password { get; set; } = ""; public string Password { get; set; } = "";
[Required]
[RegularExpression(@"^(?:[A-Z] \d|[^\W\d_]{2,}\.?)(?:[- '][^\W\d_]+\.?)*\s+[1-9]\d{0,3} ?[a-zA-Z]?(?: ?[/-] ?[1-9]\d{0,3} ?[a-zA-Z]?)?$",
ErrorMessage = "Street and house number required")]
[MaxLength(128, ErrorMessage = "Max lenght reached")]
public string Address { get; set; } = ""; public string Address { get; set; } = "";
[Required]
[MinLength(3, ErrorMessage = "Invalid city")]
[MaxLength(128, ErrorMessage = "Max lenght reached")]
public string City { get; set; } = ""; public string City { get; set; } = "";
[Required]
[MinLength(3, ErrorMessage = "Invalid state")]
[MaxLength(64, ErrorMessage = "Max lenght reached")]
public string State { get; set; } = ""; public string State { get; set; } = "";
[Required]
[MinLength(3, ErrorMessage = "Invalid country")]
[MaxLength(64, ErrorMessage = "Max lenght reached")]
public string Country { get; set; } = ""; public string Country { get; set; } = "";
// States // States

View File

@@ -1,4 +1,94 @@
@page "/profile" @page "/profile"
@using Moonlight.Shared.Components.Navigations
<ProfileNavigation Index="0" /> @using Moonlight.Shared.Components.Navigations
@using Moonlight.App.Services.Sessions
@using Moonlight.App.Database.Entities
@using Moonlight.App.Repositories
@inject IdentityService IdentityService
@inject UserRepository UserRepository
<ProfileNavigation Index="0" />
<LazyLoader Load="Load">
<SmartForm OnValidSubmit="Save" Model="User">
<div class="card mb-5 mb-xl-10">
<div class="card-header">
<div class="card-title">
<h3 class="fw-bold m-0 text-gray-800">Persönliche Daten</h3>
</div>
</div>
<div class="card-body border-top p-9">
<div class="row">
<div class="col-lg-6 fv-row fv-plugins-icon-container">
<div class="mb-3">
<label class="form-label">
<TL>First name</TL>
</label>
<InputText @bind-Value="User.FirstName" class="form-control"></InputText>
</div>
</div>
<div class="col-lg-6 fv-row fv-plugins-icon-container">
<div class="mb-3">
<label class="form-label">
<TL>Last name</TL>
</label>
<InputText @bind-Value="User.LastName" class="form-control"></InputText>
</div>
</div>
</div>
<div class="mb-3">
<label class="form-label">
<TL>Email address</TL>
</label>
<InputText @bind-Value="User.Email" class="form-control"></InputText>
</div>
<div class="mb-3">
<label class="form-label">
<TL>Address</TL>
</label>
<InputText @bind-Value="User.Address" class="form-control"></InputText>
</div>
<div class="mb-3">
<label class="form-label">
<TL>City</TL>
</label>
<InputText @bind-Value="User.City" class="form-control"></InputText>
</div>
<div class="mb-3">
<label class="form-label">
<TL>State</TL>
</label>
<InputText @bind-Value="User.State" class="form-control"></InputText>
</div>
<div class="mb-3">
<label class="form-label">
<TL>Country</TL>
</label>
<InputText @bind-Value="User.Country" class="form-control"></InputText>
</div>
</div>
<div class="card-footer d-flex justify-content-end py-6 px-9">
<button type="submit" class="btn btn-primary">
<TL>Save</TL>
</button>
</div>
</div>
</SmartForm>
</LazyLoader>
@code
{
private User User = new User();
private async Task Load(LazyLoader loader)
{
User = await IdentityService.Get();
}
private void Save()
{
UserRepository.Update(User);
}
}

View File

@@ -394,3 +394,11 @@ Discord id;Discord id
Discord username;Discord username Discord username;Discord username
Discord discriminator;Discord discriminator Discord discriminator;Discord discriminator
The Name field is required.;The Name field is required. The Name field is required.;The Name field is required.
The FirstName field is required.;The FirstName field is required.
The LastName field is required.;The LastName field is required.
The Address field is required.;The Address field is required.
The City field is required.;The City field is required.
The State field is required.;The State field is required.
The Country field is required.;The Country field is required.
Street and house number requered;Street and house number requered
Max lenght reached;Max lenght reached