@ -1,6 +1,7 @@
using System.ComponentModel.DataAnnotations ;
using API.Context ;
using API.Validation ;
using AppContext.Entities ;
using Microsoft.AspNetCore.Authorization ;
using Microsoft.AspNetCore.Mvc ;
using Model ;
@ -10,7 +11,7 @@ namespace API.Controllers;
[ApiController]
[Authorize]
public class TeamsController ( ITeamService service , I ContextAccessor accessor ) : ControllerBase
public class TeamsController ( ITeamService service , I TacticService tactics , I ContextAccessor accessor ) : ControllerBase
{
public record CreateTeamRequest (
[Name] string Name ,
@ -134,4 +135,51 @@ public class TeamsController(ITeamService service, IContextAccessor accessor) :
return Problem ( ) ;
}
}
public record ShareTacticToTeamRequest (
int TacticId ,
int TeamId
) ;
[HttpPost("/team/share-tactic")]
public async Task < IActionResult > ShareTactic ( [ FromBody ] ShareTacticToTeamRequest sharedTactic )
{
var userId = accessor . CurrentUserId ( HttpContext ) ;
var success = await tactics . ShareTactic ( sharedTactic . TacticId , null , sharedTactic . TeamId ) ;
return success ? Ok ( ) : BadRequest ( ) ;
}
[HttpDelete("/tactics/shared/{tacticId:int}/team/{teamId:int}")]
public async Task < IActionResult > UnshareTactic ( int tacticId , int teamId )
{
var currentUserId = accessor . CurrentUserId ( HttpContext ) ;
var tactic = await tactics . GetTactic ( tacticId ) ;
if ( tactic = = null )
{
return NotFound ( ) ;
}
if ( currentUserId ! = tactic . OwnerId )
{
return Unauthorized ( ) ;
}
var success = await tactics . UnshareTactic ( tacticId , null , teamId ) ;
return success ? Ok ( ) : NotFound ( ) ;
}
[HttpGet("/tactics/shared/team/{teamId:int}")]
public async Task < IActionResult > GetSharedTacticsToTeam ( int teamId )
{
var currentUserId = accessor . CurrentUserId ( HttpContext ) ;
if ( ! await service . IsUserInTeam ( currentUserId , teamId ) )
{
return Unauthorized ( ) ;
}
var sharedTactics = await service . GetSharedTacticsToTeam ( teamId ) ;
return sharedTactics ! = null ? Ok ( sharedTactics ) : NotFound ( ) ;
}
}