using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using SeaHaven.Services.DTOs; using SeaHaven.Services.Interfaces; namespace Api.SeaHavenIndustries.Controllers; [Authorize] [ApiController] [Route("api/team-members")] public sealed class TeamMemberController : ControllerBase { private readonly ITeamMemberService _teamMemberService; public TeamMemberController(ITeamMemberService teamMemberService) { _teamMemberService = teamMemberService; } [HttpPost] public async Task Create( CreateTeamMemberRequestDTO request, CancellationToken cancellationToken) { var outcome = await _teamMemberService.CreateAsync(request, User, cancellationToken); if (!outcome.Success) { if (string.Equals(outcome.Error, "Forbidden", StringComparison.Ordinal)) return Forbid(); return BadRequest(new { message = outcome.Error }); } return Ok(outcome.Member); } [HttpGet("{userId}")] public async Task Get(string userId, CancellationToken cancellationToken) { var outcome = await _teamMemberService.GetAsync(userId, User, cancellationToken); return ToActionResult(outcome); } [HttpPut("{userId}")] public async Task Update( string userId, UpdateTeamMemberRequestDTO request, CancellationToken cancellationToken) { var outcome = await _teamMemberService.UpdateAsync(userId, request, User, cancellationToken); return ToActionResult(outcome); } private IActionResult ToActionResult(TeamMemberOperationOutcomeDTO outcome) { if (outcome.Success) return Ok(outcome.Member); if (string.Equals(outcome.Error, "Forbidden", StringComparison.Ordinal)) return Forbid(); if (string.Equals(outcome.Error, "Team member not found.", StringComparison.Ordinal)) return NotFound(new { message = outcome.Error }); return BadRequest(new { message = outcome.Error }); } }