ENEI2019-Public/api/Controllers/TeamsController.cs

318 lines
9.2 KiB
C#
Executable File

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
using api.Data;
using api.Dtos;
using api.Models;
using AutoMapper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace api.Controllers
{
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class TeamsController : ControllerBase
{
private readonly DataContext context;
private readonly ITeamsRepository _repo;
private readonly IMapper _mapper;
private readonly RoleManager<Role> _roleManager;
private readonly UserManager<User> _userManager;
public TeamsController(DataContext context, ITeamsRepository repo, IMapper mapper, RoleManager<Role> roleManager, UserManager<User> UserManager)
{
this.context = context;
_mapper = mapper;
_roleManager = roleManager;
_userManager = UserManager;
_repo = repo;
}
// GET api/teams
// GET all teams
[HttpGet]
public async Task<List<TeamToReturn>> GetTeams()
{
List<Team> allTeams = await context.Teams.ToListAsync();
List<TeamToReturn> rTeams = new List<TeamToReturn>();
for (var i = 0; i < allTeams.Count; i++)
{
TeamToReturn tR = new TeamToReturn();
_mapper.Map(allTeams[i], tR);
var usr = await context.Users.FirstOrDefaultAsync(a => a.QRcode == allTeams[i].CapQR);
UserForListDto uT = new UserForListDto();
_mapper.Map(usr, uT);
tR.Cap = uT;
rTeams.Add(tR);
}
return rTeams;
}
// GET api/teams/e/[id]
// GET all teams for event id
[HttpGet("e/{id}")]
public async Task<List<TeamToReturn>> GetTeamsEvent(int id)
{
List<Team> allTeams = await context.Teams.ToListAsync();
List<TeamToReturn> rTeam = new List<TeamToReturn>();
TeamToReturn tR = new TeamToReturn();
for (var i = 0; i < allTeams.Count; i++)
{
if (allTeams[i].EventId == id)
{
_mapper.Map(allTeams[i], tR);
var usr = await context.Users.FirstOrDefaultAsync(a => a.QRcode == allTeams[i].CapQR);
UserForListDto uT = new UserForListDto();
_mapper.Map(usr, uT);
tR.Cap = uT;
rTeam.Add(tR);
}
}
return rTeam;
}
// GET api/teams/u/[id]
// GET all teams for user id
[HttpGet("u/{QR}")]
public async Task<IActionResult> GetTeamsUser(String QR)
{
var rUsr = await context.Users.Include(b => b.team).FirstOrDefaultAsync(a => a.QRcode == QR);
if (rUsr == null)
{
return NotFound("O utilizador não possui equipa");
}
List<Team> allTeams = await context.Teams.ToListAsync();
TeamToReturn rTeam = new TeamToReturn();
for (var i = 0; i < allTeams.Count; i++)
{
if (allTeams[i].Id == rUsr.team.Id)
{
rTeam.ativa = allTeams[i].pagamento;
_mapper.Map(allTeams[i], rTeam);
var usr = await context.Users.FirstOrDefaultAsync(a => a.QRcode == allTeams[i].CapQR);
var users = await context.Users.ToListAsync();
List<UserForListDto> usersToReturn = new List<UserForListDto>();
for (var t = 0; t < users.Count; t++)
{
if (users[t].team != null && users[t].team.Id == allTeams[i].Id)
{
UserForListDto u = new UserForListDto();
_mapper.Map(users[t], u);
usersToReturn.Add(u);
}
}
UserForListDto uT = new UserForListDto();
_mapper.Map(usr, uT);
rTeam.Membros = usersToReturn;
rTeam.Cap = uT;
}
}
if(rTeam.Id==0 && rTeam.NMembros==0){
return NotFound();
}
return Ok(rTeam);
}
// POST api/teams/add
// create team
[HttpPost("add")]
public async Task<IActionResult> CreateTeam(TeamForAdd TeamAddDetails)
{
User tCap = await context.Users.Include(a => a.team).FirstOrDefaultAsync(u => u.QRcode == TeamAddDetails.capQR);
if (tCap.team == null)
{
Team tAdd = new Team { EventId = TeamAddDetails.EventId, Nome = TeamAddDetails.Nome, CapQR = tCap.QRcode, NMembros = 1, Pontos = 0 };
tCap.team = tAdd;
await context.Teams.AddAsync(tAdd);
context.Users.Update(tCap);
var result = context.SaveChanges();
if (result >= 1)
{
return StatusCode(201);
}
return BadRequest();
}
else
{
return BadRequest();
}
}
// POST api/teams/add/member
// create team
[HttpPost("add/member")]
public async Task<IActionResult> AddTeamMember(TeamAddMember MemberToAdd)
{
User newMember = await context.Users.FirstOrDefaultAsync(u => u.QRcode == MemberToAdd.newQR);
Team tEdit = await context.Teams.FirstOrDefaultAsync(t => t.Id == MemberToAdd.id);
if (newMember.team == null && tEdit.NMembros<6)
{
tEdit.NMembros++;
newMember.team = tEdit;
context.Teams.Update(tEdit);
context.Users.Update(newMember);
var result = context.SaveChanges();
return StatusCode(201);
}
else
{
return StatusCode(403);
}
}
// POST api/teams/ChangeName
// create team
[HttpPost("changename")]
public async Task<IActionResult> ChangeName(TeamChangeName NameChange)
{
Team tEdit = await context.Teams.FirstOrDefaultAsync(t => t.Id == NameChange.TeamID);
User cap = await context.Users.FirstOrDefaultAsync(u => u.QRcode == NameChange.UserQR);
Team findTeam = await context.Teams.FirstOrDefaultAsync(n=>n.Nome == NameChange.nome);
if(findTeam!= null){
return Unauthorized();
}
if (cap.QRcode == tEdit.CapQR)
{
tEdit.Nome = NameChange.nome;
}
context.Teams.Update(tEdit);
var result = context.SaveChanges();
return StatusCode(201);
}
// POST api/teams/delete
// create team
[HttpPost("delete")]
public async Task<IActionResult> DeleteTeam(TeamDelete DeleteData)
{
Team tEdit = await context.Teams.FirstOrDefaultAsync(t => t.Id == DeleteData.TeamID);
User cap = await context.Users.FirstOrDefaultAsync(u => u.QRcode == DeleteData.UserQR);
if (tEdit != null && cap.QRcode == tEdit.CapQR)
{
context.Teams.Remove(tEdit);
cap.team = null;
context.Users.Update(cap);
var result = context.SaveChanges();
return StatusCode(201);
}
else
{
return StatusCode(403);
}
}
// POST api/teams/remove/member
// remove member
[HttpPost("remove/member")]
public async Task<IActionResult> RemoveTeamMember(TeamRemoveMEmber MemberToRemove)
{
Console.WriteLine(MemberToRemove.TeamID);
//obtem o user para remover
try
{
User rmMember = await context.Users.FirstOrDefaultAsync(u => u.QRcode == MemberToRemove.UserToRemoveQR);
Console.WriteLine(rmMember.QRcode);
//encontra a equipa de onde quer remover o user
Team tEdit = await context.Teams.FirstOrDefaultAsync(t => t.Id == MemberToRemove.TeamID);
Console.WriteLine(tEdit.Nome);
var id = 0;
if (rmMember.QRcode == tEdit.CapQR)
{
return StatusCode(403);
}
if (rmMember.team == tEdit)
{
tEdit.NMembros--;
rmMember.team = null;
context.Teams.Update(tEdit);
context.Users.Update(rmMember);
var result = context.SaveChanges();
return StatusCode(201);
}
else
{
return StatusCode(403);
}
}
catch (Exception e)
{
return StatusCode(403);
}
}
}
}