using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using QuestionsApi.Models; using QuestionsApi.Services; using System.Security.Claims; namespace QuestionsApi.Controllers; [ApiController, Route("api/notes"), Authorize(Roles = "USER,SUPER")] public sealed class NotesController(UserNotepadStore notes) : ControllerBase { [HttpGet] public async Task> Get() { var note = await notes.GetAsync(UserId()); return Ok(note is null ? UserNotepadResponse.Empty() : UserNotepadResponse.FromModel(note)); } [HttpPut] public async Task> Update(UpdateUserNotepadRequest request) { if (UserNotepadValidator.Validate(request) is { } error) return BadRequest(error); var result = await notes.UpdateAsync(UserId(), request.Content ?? "", request.ExpectedRevision); if (result.Succeeded) return Ok(UserNotepadResponse.FromModel(result.Note!)); var current = result.Current is null ? UserNotepadResponse.Empty() : UserNotepadResponse.FromModel(result.Current); return Conflict(current); } private string UserId() => User.FindFirstValue(ClaimTypes.NameIdentifier) ?? User.FindFirstValue(ClaimTypes.Name) ?? User.Identity?.Name ?? ""; }