#nullable enable using LBPUnion.ProjectLighthouse.Helpers; using LBPUnion.ProjectLighthouse.Logging; using LBPUnion.ProjectLighthouse.PlayerData.Profiles; using LBPUnion.ProjectLighthouse.Types; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace LBPUnion.ProjectLighthouse.Servers.Website.Controllers; [ApiController] [Route("user/{id:int}")] public class UserPageController : ControllerBase { private readonly Database database; public UserPageController(Database database) { this.database = database; } [HttpGet("rateComment")] public async Task RateComment([FromRoute] int id, [FromQuery] int? commentId, [FromQuery] int? rating) { User? user = this.database.UserFromWebRequest(this.Request); if (user == null) return this.Redirect("~/login"); await this.database.RateComment(user, commentId.GetValueOrDefault(), rating.GetValueOrDefault()); return this.Redirect($"~/user/{id}#{commentId}"); } [HttpPost("postComment")] public async Task PostComment([FromRoute] int id, [FromForm] string? msg) { User? user = this.database.UserFromWebRequest(this.Request); if (user == null) return this.Redirect("~/login"); if (msg == null) { Logger.LogError($"Refusing to post comment from {user.UserId} on user {id}, {nameof(msg)} is null", LogArea.Comments); return this.Redirect("~/user/" + id); } msg = SanitizationHelper.SanitizeString(msg); await this.database.PostComment(user, id, CommentType.Profile, msg); Logger.LogSuccess($"Posted comment from {user.UserId}: \"{msg}\" on user {id}", LogArea.Comments); return this.Redirect("~/user/" + id); } [HttpGet("heart")] public async Task HeartUser([FromRoute] int id) { User? user = this.database.UserFromWebRequest(this.Request); if (user == null) return this.Redirect("~/login"); User? heartedUser = await this.database.Users.FirstOrDefaultAsync(u => u.UserId == id); if (heartedUser == null) return this.NotFound(); await this.database.HeartUser(user, heartedUser); return this.Redirect("~/user/" + id); } [HttpGet("unheart")] public async Task UnheartUser([FromRoute] int id) { User? user = this.database.UserFromWebRequest(this.Request); if (user == null) return this.Redirect("~/login"); User? heartedUser = await this.database.Users.FirstOrDefaultAsync(u => u.UserId == id); if (heartedUser == null) return this.NotFound(); await this.database.UnheartUser(user, heartedUser); return this.Redirect("~/user/" + id); } }