using JobsJobsJobs.Server.Data; using JobsJobsJobs.Shared; using JobsJobsJobs.Shared.Api; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using NodaTime; using System.Security.Claims; using System.Threading.Tasks; namespace JobsJobsJobs.Server.Areas.Api.Controllers { /// /// API controller for success stories /// [Route("api/[controller]")] [Authorize] [ApiController] public class SuccessController : Controller { /// /// The data context /// private readonly JobsDbContext _db; /// /// The NodaTime clock instance /// private readonly IClock _clock; /// /// Constructor /// /// The data context to use for this request /// The clock instance to use for this request public SuccessController(JobsDbContext db, IClock clock) { _db = db; _clock = clock; } /// /// The current citizen ID /// private CitizenId CurrentCitizenId => CitizenId.Parse(User.FindFirst(ClaimTypes.NameIdentifier)!.Value); [HttpGet("{id}")] public async Task Retrieve(string id) => Ok(await _db.FindSuccessById(SuccessId.Parse(id))); [HttpPost("save")] public async Task Save([FromBody] StoryForm form) { if (form.Id == "new") { var story = new Success(await SuccessId.Create(), CurrentCitizenId, _clock.GetCurrentInstant(), form.FromHere, string.IsNullOrWhiteSpace(form.Story) ? null : new MarkdownString(form.Story)); await _db.AddAsync(story); } else { var story = await _db.FindSuccessById(SuccessId.Parse(form.Id)); if (story == null) return NotFound(); var updated = story with { FromHere = form.FromHere, Story = string.IsNullOrWhiteSpace(form.Story) ? null : new MarkdownString(form.Story) }; _db.Update(updated); } await _db.SaveChangesAsync(); return Ok(); } [HttpGet("list")] public async Task List() => Ok(await _db.AllStories()); } }