From afaed51e6d96ba7fb1bb59d941b7af54dca6f383 Mon Sep 17 00:00:00 2001 From: ZMiguel Alves Date: Wed, 6 Mar 2019 23:25:33 +0000 Subject: [PATCH] almost there --- api/Controllers/EventLocsVisitedController.cs | 9 + api/Controllers/TeamsController.cs | 56 +++ api/Data/EventLocsVisitedRepository.cs | 21 +- api/Data/IEventLocsVisitedRepository.cs | 3 +- api/Data/ITeamsRepository.cs | 4 +- api/Data/TeamsReposiroty.cs | 27 +- api/Dtos/TeamAddMember.cs | 16 + api/Dtos/TeamForAdd.cs | 19 + .../20190306210633_team_fix.Designer.cs | 450 ++++++++++++++++++ api/Migrations/20190306210633_team_fix.cs | 22 + api/Migrations/DataContextModelSnapshot.cs | 2 - api/Models/Team.cs | 2 +- 12 files changed, 617 insertions(+), 14 deletions(-) create mode 100644 api/Dtos/TeamAddMember.cs create mode 100644 api/Dtos/TeamForAdd.cs create mode 100644 api/Migrations/20190306210633_team_fix.Designer.cs create mode 100644 api/Migrations/20190306210633_team_fix.cs diff --git a/api/Controllers/EventLocsVisitedController.cs b/api/Controllers/EventLocsVisitedController.cs index 4ddff028..5c20c04a 100644 --- a/api/Controllers/EventLocsVisitedController.cs +++ b/api/Controllers/EventLocsVisitedController.cs @@ -51,5 +51,14 @@ namespace api.Controllers return Ok(Locs); } + // GET api/EventLocsVisited/e/[id] + //All locs visited by event id + [HttpGet("e/{id}")] + public async Task GetEventLocsVisitedEvent(int id) + { + var Locs = await _repo.GetEventLocsVisitedEvent(id); + return Ok(Locs); + } + } } diff --git a/api/Controllers/TeamsController.cs b/api/Controllers/TeamsController.cs index 9a59f3aa..2f85886d 100644 --- a/api/Controllers/TeamsController.cs +++ b/api/Controllers/TeamsController.cs @@ -50,5 +50,61 @@ namespace api.Controllers var Teams = await _repo.GetEventTeam(id); return Ok(Teams); } + + // GET api/teams/e/[id] + // GET all teams for event id + [HttpGet("u/{QR}")] + public async Task GetTeamsUser(String QR) + { + var Teams = await _repo.GetUserTeam(QR); + return Ok(Teams); + } + + // POST api/teams/add + // create team + [HttpPost("add")] + public async Task CreateTeam(TeamForAdd TeamAddDetails) + { + + User tCap = await context.Users.FirstOrDefaultAsync(u=>u.QRcode == TeamAddDetails.capQR); + + List memb = new List(); + + memb.Add(tCap); + + Team tAdd = new Team{EventId = TeamAddDetails.EventId, Nome = TeamAddDetails.Nome, Cap = tCap, Membros = memb, NMembros = 1, Pontos = 0}; + + await context.Teams.AddAsync(tAdd); + + var result = context.SaveChanges(); + + if (result == 1) + { + return StatusCode(201); + } + return BadRequest(); + + } + + // POST api/teams/add/member + // create team + [HttpPost("add/member")] + public async Task AddTeamMember(TeamAddMember MemberToAdd) + { + + User newMember = await context.Users.FirstOrDefaultAsync(u=>u.QRcode == MemberToAdd.newQR); + + Team tEdit = await context.Teams.Include(t=>t.Membros).FirstOrDefaultAsync(t=>t.Id == MemberToAdd.id); + + tEdit.NMembros++; + tEdit.Membros.Add(newMember); + + context.Update(tEdit); + + var result = context.SaveChanges(); + + return StatusCode(201); + + } } } diff --git a/api/Data/EventLocsVisitedRepository.cs b/api/Data/EventLocsVisitedRepository.cs index 29fe0198..4b326980 100644 --- a/api/Data/EventLocsVisitedRepository.cs +++ b/api/Data/EventLocsVisitedRepository.cs @@ -18,23 +18,32 @@ namespace api.Data public async Task> GetEventLocsVisited() { - var rEventLocsVisitedList = await _context.EventLocsVisited.ToListAsync(); + var rEventLocsVisitedList = await _context.EventLocsVisited.Include(e=>e.Team).Include(e=>e.Location).ToListAsync(); return rEventLocsVisitedList; } - public Task> GetEventLocsVisitedTeam(int id) + public async Task> GetEventLocsVisitedTeam(int id) { - List allLocs = _context.EventLocsVisited.ToList(); - allLocs.ForEach(i=>Console.Write("{0}\t", i)); - Console.WriteLine("teste"); + List allLocs = await _context.EventLocsVisited.Include(e=>e.Team).Include(e=>e.Location).ToListAsync(); List rList = new List(); for(var i=0;i> GetEventLocsVisitedEvent(int id) + { + List allLocs = await _context.EventLocsVisited.Include(e=>e.Team).Include(e=>e.Location).ToListAsync(); + List rList = new List(); + for(var i=0;i> GetEventLocsVisited(); - Task> GetEventLocsVisitedTeam(int id); + Task> GetEventLocsVisitedTeam(int id); + Task> GetEventLocsVisitedEvent(int id); } diff --git a/api/Data/ITeamsRepository.cs b/api/Data/ITeamsRepository.cs index 9a9c03fd..12ba68ec 100644 --- a/api/Data/ITeamsRepository.cs +++ b/api/Data/ITeamsRepository.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Threading.Tasks; using api.Models; @@ -8,7 +9,8 @@ namespace api.Data { Task> GetTeams(); - Task GetEventTeam(int id); + Task> GetEventTeam(int id); + Task> GetUserTeam(String QR); } diff --git a/api/Data/TeamsReposiroty.cs b/api/Data/TeamsReposiroty.cs index d42d91b5..5ed69b06 100644 --- a/api/Data/TeamsReposiroty.cs +++ b/api/Data/TeamsReposiroty.cs @@ -16,16 +16,37 @@ namespace api.Data public DataContext _context { get; } - public async Task GetEventTeam(int id) + public async Task> GetEventTeam(int id) { - var rTeam = await _context.Teams.FirstOrDefaultAsync(e=>e.EventId == id); + List allTeams = await _context.Teams.Include(a=>a.Cap).Include(a=>a.Membros).ToListAsync(); + List rTeam = new List(); + allTeams.ForEach(delegate(Team t){ + if(t.EventId == id){ + rTeam.Add(t); + } + }); + + return rTeam; + } + + public async Task> GetUserTeam(String QR) + { + List allTeams = await _context.Teams.Include(a=>a.Cap).Include(a=>a.Membros).ToListAsync(); + List rTeam = new List(); + allTeams.ForEach(delegate(Team t){ + foreach (User u in t.Membros){ + if(u.QRcode == QR){ + rTeam.Add(t); + } + } + }); return rTeam; } public async Task> GetTeams() { - var rTeams = await _context.Teams.ToListAsync(); + var rTeams = await _context.Teams.Include(a=>a.Cap).Include(a=>a.Membros).ToListAsync(); return rTeams; } diff --git a/api/Dtos/TeamAddMember.cs b/api/Dtos/TeamAddMember.cs new file mode 100644 index 00000000..7637c55e --- /dev/null +++ b/api/Dtos/TeamAddMember.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using api.Models; + +namespace api.Dtos +{ + public class TeamAddMember + { + [Required] + public int id{get;set;} //equipa id + + [Required] + public string newQR{get;set;} //novo membro + } +} \ No newline at end of file diff --git a/api/Dtos/TeamForAdd.cs b/api/Dtos/TeamForAdd.cs new file mode 100644 index 00000000..57f97841 --- /dev/null +++ b/api/Dtos/TeamForAdd.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using api.Models; + +namespace api.Dtos +{ + public class TeamForAdd + { + [Required] + public int EventId{get;set;} //equipa para o evento ID + + [Required] + public string Nome{get;set;} //Nome da equipa + + [Required] + public string capQR{get;set;} //Capitao da equipa + } +} \ No newline at end of file diff --git a/api/Migrations/20190306210633_team_fix.Designer.cs b/api/Migrations/20190306210633_team_fix.Designer.cs new file mode 100644 index 00000000..ad4dd097 --- /dev/null +++ b/api/Migrations/20190306210633_team_fix.Designer.cs @@ -0,0 +1,450 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using api.Data; + +namespace api.Migrations +{ + [DbContext(typeof(DataContext))] + [Migration("20190306210633_team_fix")] + partial class team_fix + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.0-rtm-35687") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("RoleId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("UserId"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider"); + + b.Property("ProviderKey"); + + b.Property("ProviderDisplayName"); + + b.Property("UserId"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId"); + + b.Property("LoginProvider"); + + b.Property("Name"); + + b.Property("Value"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity("api.Models.Event", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Desc"); + + b.Property("Nome"); + + b.HasKey("Id"); + + b.ToTable("Events"); + }); + + modelBuilder.Entity("api.Models.EventLoc", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Desc"); + + b.Property("EventId"); + + b.Property("ImgId"); + + b.Property("Lat"); + + b.Property("Long"); + + b.Property("Nome"); + + b.HasKey("Id"); + + b.HasIndex("ImgId"); + + b.ToTable("EventLocs"); + }); + + modelBuilder.Entity("api.Models.EventLocVisited", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("LocationId"); + + b.Property("TeamId"); + + b.Property("timestamp"); + + b.HasKey("Id"); + + b.HasIndex("LocationId"); + + b.HasIndex("TeamId"); + + b.ToTable("EventLocsVisited"); + }); + + modelBuilder.Entity("api.Models.Log", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("UserId"); + + b.Property("UserId1"); + + b.Property("amount"); + + b.Property("available"); + + b.Property("logType"); + + b.Property("productId"); + + b.Property("transactionId"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.HasIndex("UserId1"); + + b.HasIndex("productId"); + + b.ToTable("Logs"); + }); + + modelBuilder.Entity("api.Models.Photo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("DateAdded"); + + b.Property("Description"); + + b.Property("IsMain"); + + b.Property("Url"); + + b.Property("UserId"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Photos"); + }); + + modelBuilder.Entity("api.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("basePrice"); + + b.Property("name"); + + b.Property("revenue"); + + b.Property("sold"); + + b.HasKey("Id"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("api.Models.Role", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Name") + .HasMaxLength(256); + + b.Property("NormalizedName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasName("RoleNameIndex"); + + b.ToTable("AspNetRoles"); + }); + + modelBuilder.Entity("api.Models.Team", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("CapId"); + + b.Property("EventId"); + + b.Property("NMembros"); + + b.Property("Nome"); + + b.Property("Pontos"); + + b.HasKey("Id"); + + b.HasIndex("CapId"); + + b.ToTable("Teams"); + }); + + modelBuilder.Entity("api.Models.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Email") + .HasMaxLength(256); + + b.Property("EmailConfirmed"); + + b.Property("LockoutEnabled"); + + b.Property("LockoutEnd"); + + b.Property("NormalizedEmail") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .HasMaxLength(256); + + b.Property("PasswordHash"); + + b.Property("PhoneNumber"); + + b.Property("PhoneNumberConfirmed"); + + b.Property("QRcode"); + + b.Property("SecurityStamp"); + + b.Property("TeamId"); + + b.Property("TwoFactorEnabled"); + + b.Property("UserName") + .HasMaxLength(256); + + b.Property("drinks"); + + b.Property("food"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasName("UserNameIndex"); + + b.HasIndex("TeamId"); + + b.ToTable("AspNetUsers"); + }); + + modelBuilder.Entity("api.Models.UserRole", b => + { + b.Property("UserId"); + + b.Property("RoleId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + }); + + modelBuilder.Entity("api.Models.Value", b => + { + b.Property("id") + .ValueGeneratedOnAdd(); + + b.Property("Name"); + + b.HasKey("id"); + + b.ToTable("Values"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("api.Models.Role") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("api.Models.User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("api.Models.User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("api.Models.User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("api.Models.EventLoc", b => + { + b.HasOne("api.Models.Photo", "Img") + .WithMany() + .HasForeignKey("ImgId"); + }); + + modelBuilder.Entity("api.Models.EventLocVisited", b => + { + b.HasOne("api.Models.EventLoc", "Location") + .WithMany() + .HasForeignKey("LocationId"); + + b.HasOne("api.Models.Team", "Team") + .WithMany() + .HasForeignKey("TeamId"); + }); + + modelBuilder.Entity("api.Models.Log", b => + { + b.HasOne("api.Models.User") + .WithMany("logsFebrada") + .HasForeignKey("UserId"); + + b.HasOne("api.Models.User") + .WithMany("logsFestarola") + .HasForeignKey("UserId1"); + + b.HasOne("api.Models.Product", "product") + .WithMany() + .HasForeignKey("productId"); + }); + + modelBuilder.Entity("api.Models.Photo", b => + { + b.HasOne("api.Models.User", "User") + .WithMany("Photos") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("api.Models.Team", b => + { + b.HasOne("api.Models.User", "Cap") + .WithMany() + .HasForeignKey("CapId"); + }); + + modelBuilder.Entity("api.Models.User", b => + { + b.HasOne("api.Models.Team") + .WithMany("Membros") + .HasForeignKey("TeamId"); + }); + + modelBuilder.Entity("api.Models.UserRole", b => + { + b.HasOne("api.Models.Role", "Role") + .WithMany("UserRoles") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("api.Models.User", "User") + .WithMany("UserRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/api/Migrations/20190306210633_team_fix.cs b/api/Migrations/20190306210633_team_fix.cs new file mode 100644 index 00000000..f20f449a --- /dev/null +++ b/api/Migrations/20190306210633_team_fix.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace api.Migrations +{ + public partial class team_fix : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "QRcode", + table: "Teams"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "QRcode", + table: "Teams", + nullable: true); + } + } +} diff --git a/api/Migrations/DataContextModelSnapshot.cs b/api/Migrations/DataContextModelSnapshot.cs index 524187e6..b9c18848 100644 --- a/api/Migrations/DataContextModelSnapshot.cs +++ b/api/Migrations/DataContextModelSnapshot.cs @@ -251,8 +251,6 @@ namespace api.Migrations b.Property("Pontos"); - b.Property("QRcode"); - b.HasKey("Id"); b.HasIndex("CapId"); diff --git a/api/Models/Team.cs b/api/Models/Team.cs index 6136b98f..44f28f7d 100755 --- a/api/Models/Team.cs +++ b/api/Models/Team.cs @@ -10,7 +10,7 @@ namespace api.Models public int EventId{get;set;} //equipa para o evento ID public string Nome{get;set;} //Nome da equipa public User Cap{get;set;} //Capitao da equipa - public ICollection Membros {get;set;} //Membros da equipa + public List Membros {get;set;} //Membros da equipa public int NMembros {get;set;} //Numero de Membros na equipa public int Pontos {get;set;} //Postos da equipa }