using Asp.Versioning; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using TarninaHub.Application.Abstractions; using TarninaHub.Application.Dtos; using TarninaHub.Application.Security; namespace TarninaHub.Controllers; [ApiController] [ApiVersion("1.0")] [Route("api/partnerships")] [Authorize] public class PartnershipsController : ControllerBase { private readonly IPartnershipService _partnerships; public PartnershipsController(IPartnershipService partnerships) { _partnerships = partnerships; } [HttpGet] public async Task>> List(CancellationToken cancellationToken) { var userId = User.GetUserId(); if (string.IsNullOrWhiteSpace(userId)) { return Unauthorized(); } var partnerships = await _partnerships.ListForUserAsync(userId, IsStaff(), cancellationToken); return Ok(partnerships); } [HttpPost] public async Task> Create( CreatePartnershipRequest request, CancellationToken cancellationToken) { var userId = User.GetUserId(); if (string.IsNullOrWhiteSpace(userId)) { return Unauthorized(); } var created = await _partnerships.CreateAsync(userId, request, cancellationToken); return StatusCode(StatusCodes.Status201Created, created); } private bool IsStaff() => User.IsInRole(RoleNames.Operator) || User.IsInRole(RoleNames.Manager) || User.IsInRole(RoleNames.Admin); }